## Summary
- Return initial `availableCommands` in ACP v2 `session/new`,
`session/resume` (omitted/null/full replay), and `session/fork`
responses instead of sending an initial commands notification.
- Reuse the existing command builder and a shared v2 input converter.
Preserve AIR command-action and skill-path metadata, and leave v1
behavior unchanged.
- List skills once per setup using that session's cwd and additional
directories, including forks. Seed change detection from the response;
subsequent command changes still use replacement notifications.
- Keep initial discovery best-effort: setup succeeds without
`availableCommands` if discovery fails. Preserve newer command snapshots
when overlapping reads finish out of order, and reject stale setup when
the session closes or is replaced during discovery.
- Document the v2 client contract and update lifecycle
snapshots/fixtures.
System prompts and standard subagent support remain separate work
packages; the current AIR subagent contract is untouched.
## Validation
- `npm run typecheck` — passed, including examples.
- `npm test` — 1,821 passed, 36 skipped.
- `npm run build` — passed.
- `npm run test:integration` — 5 passed against real Codex app-server
with a local mock model. V2 coverage verifies initial commands on new,
all resume modes, and fork, with no redundant initial command
notifications.
- Focused wire tests cover AIR/non-AIR metadata, fork-specific skill
discovery, unchanged and changed command lists, discovery
failure/recovery, overlapping reads, and closure during discovery.
- Live-model smoke test via `npm run codex-test` — passed.
- `git diff --check` — passed.
The full live-model E2E suite was not run.
Specification checked at
`agent-client-protocol@4034a8cbc99bc48fd4579f70a3407b07907e0eb6`,
notably `docs/protocol/v2/slash-commands.mdx` and the unstable v2 setup
response schemas.