# 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:

- `UsageReporter`
- `UsageReport`
- `UsageBucket`
- `UsageWindow`
- `UsageCredits`

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:

- `/usage` dispatch 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/usage` payload
- 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:

```bash
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"
```
