4.2 KiB
Usage Command Implementation Plan
For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
Goal: Add a built-in /usage command with a generic agent usage-reporting interface, and implement the first provider-backed version for Codex using ChatGPT OAuth quota data.
Architecture: The engine gains a new built-in command that depends only on an optional UsageReporter interface. Agents that implement the interface return a generic UsageReport; the engine formats that into text. The Codex agent reads ChatGPT OAuth credentials from ~/.codex/auth.json, calls the wham/usage endpoint, and maps the response into the generic structure.
Tech Stack: Go, built-in command dispatch in core/engine.go, optional agent interfaces in core/interfaces.go, HTTP/JSON via Go standard library, table-driven tests.
Task 1: Add generic usage-reporting types
Files:
- Modify:
core/interfaces.go
Step 1: Add the failing interface usage surface
Define:
UsageReporterUsageReportUsageBucketUsageWindowUsageCredits
The structure should cover provider identity, plan/tier, generic allowed/limit-reached flags, one or more windows, and credits metadata.
Step 2: Run targeted compile check
Run: go test ./core/...
Expected: compile failures in engine/tests until the command layer is wired.
Step 3: Keep the types minimal
Do not add provider-specific fields unless they are broadly useful.
Step 4: Re-run compile check
Run: go test ./core/...
Expected: still failing only because /usage command is not yet fully integrated.
Task 2: Add /usage built-in command and output formatter
Files:
- Modify:
core/engine.go - Modify:
core/i18n.go - Test:
core/engine_test.go
Step 1: Write/extend failing tests
Add tests for:
/usagedispatch to a supporting agent- unsupported-agent message
- successful output formatting with representative report data
Step 2: Run the targeted tests
Run: go test ./core/... -run 'Test.*Usage|TestHandleCommand'
Expected: FAIL because the command is not registered yet.
Step 3: Implement command plumbing
Update:
- built-in command registration
- command dispatch switch
- bot command listing
- help/i18n text
Add a cmdUsage implementation that:
- type-asserts
UsageReporter - fetches usage with timeout
- formats a concise text response
Step 4: Run the targeted tests again
Run: go test ./core/... -run 'Test.*Usage|TestHandleCommand'
Expected: PASS
Task 3: Implement Codex usage retrieval against ChatGPT OAuth
Files:
- Modify:
agent/codex/codex.go - Add or Modify:
agent/codex/usage.go - Test:
agent/codex/usage_test.go
Step 1: Write failing tests for the mapper/fetcher
Cover:
- successful parsing of a representative
wham/usagepayload - missing
auth.json - missing token/account fields
- HTTP error response
Step 2: Run the targeted tests
Run: go test ./agent/codex -run 'Test.*Usage'
Expected: FAIL because the implementation does not exist yet.
Step 3: Implement minimal production code
Add:
- auth file path resolver
- auth JSON loader
- HTTP request builder
- response DTOs
- mapping into
core.UsageReport
Prefer dependency injection for:
- auth file path / reader
- HTTP client / transport
So tests avoid live network and real user files.
Step 4: Run the targeted tests again
Run: go test ./agent/codex -run 'Test.*Usage'
Expected: PASS
Task 4: End-to-end verification and cleanup
Files:
- Modify:
README.md - Modify:
README.zh-CN.md - Modify:
CHANGELOG.md
Step 1: Document the new command
Add /usage to command lists and a short explanation that support depends on the current agent.
Step 2: Run focused test suites
Run: go test ./core/... ./agent/codex
Expected: PASS
Step 3: Run broader verification
Run: go test ./...
Expected: PASS, or identify unrelated pre-existing failures clearly.
Step 4: Commit
Run:
git add core/interfaces.go core/engine.go core/i18n.go core/engine_test.go agent/codex/codex.go agent/codex/usage.go agent/codex/usage_test.go README.md README.zh-CN.md CHANGELOG.md docs/plans/2026-03-12-usage-design.md docs/plans/2026-03-12-usage.md
git commit -m "feat: add usage command for codex oauth"