feat(agent): Usage-Limit-Überwachung für Codex und Claude Code #8

Merged
frank merged 1 commit from agent/issue-6-agent-runner-usage-limit-überwachung-fü into main 2026-07-12 10:26:33 +02:00
Owner

Summary

  • Der Agent-Runner (forge agent watch / forge agent run) pausiert bei erschöpften Codex- oder Claude-Usage-Limits und startet keine neuen Agent-Jobs.
  • Codex-Limits werden über codex app-server (account/rateLimits/read) geprüft; Claude über die OAuth-Usage-API, mit Fallback auf Rate-Limit-Muster in der Agent-Ausgabe.
  • Neues Flag --usage-limit-interval (Default 2m) steuert die Wiederholungsprüfung im Bereich 1–5 Minuten.

Test plan

  • go test ./internal/agent/... ./internal/cmd/...
  • forge agent watch --agent codex --label ready --pr --dry-run (Flag sichtbar in --help)
  • Mit aktivem Codex-Login: Limit-Check via codex app-server (manuell oder im Watch-Log)
  • Mit Claude-Credentials: OAuth-Usage-Check
  • Simulierter Rate-Limit-Fehler in Agent-Output → Pause und späterer Retry

Closes #6

## Summary - Der Agent-Runner (`forge agent watch` / `forge agent run`) pausiert bei erschöpften Codex- oder Claude-Usage-Limits und startet keine neuen Agent-Jobs. - Codex-Limits werden über `codex app-server` (`account/rateLimits/read`) geprüft; Claude über die OAuth-Usage-API, mit Fallback auf Rate-Limit-Muster in der Agent-Ausgabe. - Neues Flag `--usage-limit-interval` (Default `2m`) steuert die Wiederholungsprüfung im Bereich 1–5 Minuten. ## Test plan - [x] `go test ./internal/agent/... ./internal/cmd/...` - [ ] `forge agent watch --agent codex --label ready --pr --dry-run` (Flag sichtbar in `--help`) - [ ] Mit aktivem Codex-Login: Limit-Check via `codex app-server` (manuell oder im Watch-Log) - [ ] Mit Claude-Credentials: OAuth-Usage-Check - [ ] Simulierter Rate-Limit-Fehler in Agent-Output → Pause und späterer Retry Closes #6
feat(agent): pause runner when codex or claude usage limits are hit
All checks were successful
CI / race (pull_request) Successful in 10m7s
CI / test (pull_request) Successful in 10m11s
0cdbed39fc
Monitor provider quotas before dispatch and after failed runs, sleeping
on a configurable interval until capacity returns instead of retrying blindly.

Co-authored-by: Cursor <cursoragent@cursor.com>
Author
Owner

🔗 Linked to issue #6. Babysitting CI until green…

🔗 Linked to issue #6. Babysitting CI until green…
Author
Owner

forge agent finished implementation

  • Commit: feat(agent): pause runner when codex or claude usage limits are hit
  • Pull request: #8
  • Next: waiting for CI / babysitting fixes if needed
README.md                         |   2 +
 internal/agent/config.go          |   6 +
 internal/agent/pipeline.go        |  55 +++++-
 internal/agent/status.go          |  29 ++-
 internal/agent/usagelimit.go      | 404 ++++++++++++++++++++++++++++++++++++++
 internal/agent/usagelimit_test.go | 133 +++++++++++++
 internal/agent/watcher.go         |  40 ++--
 internal/cmd/agent.go             |  10 +-
 8 files changed, 655 insertions(+), 24 deletions(-)
Agent output (tail)
- Integration in `watcher.go`, `pipeline.go`, `config.go`, `status.go`, `cmd/agent.go`
- README ergänzt
TODO_DONE: Codex  
TODO_DONE: Claude Code (`claude` CLI)  
TODO_DONE: Erkennung, dass das aktuelle Usage-Limit (5h, 5 Tage o. Ä.) erschöpft ist  
TODO_DONE: Agent-Runner wechselt in Sleep/Pause und startet keine neuen Agent-Läufe  
TODO_DONE: Periodische Überprüfung alle **1–5 Minuten**, ob wieder Tokens/Kontingent verfügbar sind  
TODO_DONE: Sobald Kapazität wieder da ist: normaler Betrieb fortsetzen  
PR_TITLE: feat(agent): Usage-Limit-Überwachung für Codex und Claude Code
PR_BODY:
## Summary
- Der Agent-Runner (`forge agent watch` / `forge agent run`) pausiert bei erschöpften Codex- oder Claude-Usage-Limits und startet keine neuen Agent-Jobs.
- Codex-Limits werden über `codex app-server` (`account/rateLimits/read`) geprüft; Claude über die OAuth-Usage-API, mit Fallback auf Rate-Limit-Muster in der Agent-Ausgabe.
- Neues Flag `--usage-limit-interval` (Default `2m`) steuert die Wiederholungsprüfung im Bereich 1–5 Minuten.
## Test plan
- [x] `go test ./internal/agent/... ./internal/cmd/...`
- [ ] `forge agent watch --agent codex --label ready --pr --dry-run` (Flag sichtbar in `--help`)
- [ ] Mit aktivem Codex-Login: Limit-Check via `codex app-server` (manuell oder im Watch-Log)
- [ ] Mit Claude-Credentials: OAuth-Usage-Check
- [ ] Simulierter Rate-Limit-Fehler in Agent-Output → Pause und späterer Retry
✅ **forge agent finished implementation** - Commit: `feat(agent): pause runner when codex or claude usage limits are hit` - Pull request: https://repository.hildebrandt.io/frank/forgecli/pulls/8 - Next: waiting for CI / babysitting fixes if needed ``` README.md | 2 + internal/agent/config.go | 6 + internal/agent/pipeline.go | 55 +++++- internal/agent/status.go | 29 ++- internal/agent/usagelimit.go | 404 ++++++++++++++++++++++++++++++++++++++ internal/agent/usagelimit_test.go | 133 +++++++++++++ internal/agent/watcher.go | 40 ++-- internal/cmd/agent.go | 10 +- 8 files changed, 655 insertions(+), 24 deletions(-) ``` <details><summary>Agent output (tail)</summary> ``` - Integration in `watcher.go`, `pipeline.go`, `config.go`, `status.go`, `cmd/agent.go` - README ergänzt TODO_DONE: Codex TODO_DONE: Claude Code (`claude` CLI) TODO_DONE: Erkennung, dass das aktuelle Usage-Limit (5h, 5 Tage o. Ä.) erschöpft ist TODO_DONE: Agent-Runner wechselt in Sleep/Pause und startet keine neuen Agent-Läufe TODO_DONE: Periodische Überprüfung alle **1–5 Minuten**, ob wieder Tokens/Kontingent verfügbar sind TODO_DONE: Sobald Kapazität wieder da ist: normaler Betrieb fortsetzen PR_TITLE: feat(agent): Usage-Limit-Überwachung für Codex und Claude Code PR_BODY: ## Summary - Der Agent-Runner (`forge agent watch` / `forge agent run`) pausiert bei erschöpften Codex- oder Claude-Usage-Limits und startet keine neuen Agent-Jobs. - Codex-Limits werden über `codex app-server` (`account/rateLimits/read`) geprüft; Claude über die OAuth-Usage-API, mit Fallback auf Rate-Limit-Muster in der Agent-Ausgabe. - Neues Flag `--usage-limit-interval` (Default `2m`) steuert die Wiederholungsprüfung im Bereich 1–5 Minuten. ## Test plan - [x] `go test ./internal/agent/... ./internal/cmd/...` - [ ] `forge agent watch --agent codex --label ready --pr --dry-run` (Flag sichtbar in `--help`) - [ ] Mit aktivem Codex-Login: Limit-Check via `codex app-server` (manuell oder im Watch-Log) - [ ] Mit Claude-Credentials: OAuth-Usage-Check - [ ] Simulierter Rate-Limit-Fehler in Agent-Output → Pause und späterer Retry ``` </details>
Author
Owner

☑️ ToDos checked off

  • Codex
  • Claude Code (claude CLI)
  • Agent-Runner wechselt in Sleep/Pause und startet keine neuen Agent-Läufe
  • Periodische Überprüfung alle 1–5 Minuten, ob wieder Tokens/Kontingent verfügbar sind
  • Sobald Kapazität wieder da ist: normaler Betrieb fortsetzen
☑️ **ToDos checked off** - [x] Codex - [x] Claude Code (`claude` CLI) - [x] Agent-Runner wechselt in Sleep/Pause und startet keine neuen Agent-Läufe - [x] Periodische Überprüfung alle **1–5 Minuten**, ob wieder Tokens/Kontingent verfügbar sind - [x] Sobald Kapazität wieder da ist: normaler Betrieb fortsetzen
frank merged commit 8acf1fcef0 into main 2026-07-12 10:26:33 +02:00
frank deleted branch agent/issue-6-agent-runner-usage-limit-überwachung-fü 2026-07-12 10:26:34 +02:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
frank/forgecli!8
No description provided.