playmaker-cli 0.5.0__tar.gz → 0.5.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/CHANGELOG.md +15 -0
  2. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/PKG-INFO +5 -5
  3. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/README.md +4 -4
  4. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/pyproject.toml +1 -1
  5. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/skills/playmaker-coach/SKILL.md +20 -14
  6. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/agents/agy.py +7 -4
  7. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/cli.py +5 -4
  8. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/.gitignore +0 -0
  9. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/LICENSE +0 -0
  10. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/__init__.py +0 -0
  11. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/__main__.py +0 -0
  12. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/agents/__init__.py +0 -0
  13. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/agents/base.py +0 -0
  14. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/agents/claude.py +0 -0
  15. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/agents/codex.py +0 -0
  16. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/agents/gemini.py +0 -0
  17. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/config.py +0 -0
  18. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/notify.py +0 -0
  19. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/quotas.py +0 -0
  20. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/registry.py +0 -0
  21. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/state.py +0 -0
  22. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/src/playmaker/watcher.py +0 -0
  23. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/tests/__init__.py +0 -0
  24. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/tests/test_agy.py +0 -0
  25. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/tests/test_claude.py +0 -0
  26. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/tests/test_codex.py +0 -0
  27. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/tests/test_permissions.py +0 -0
  28. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/tests/test_quotas_antigravity.py +0 -0
  29. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/tests/test_registry.py +0 -0
  30. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/tests/test_skill.py +0 -0
  31. {playmaker_cli-0.5.0 → playmaker_cli-0.5.1}/tests/test_state.py +0 -0
@@ -5,6 +5,21 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.5.1] - 2026-07-27
9
+
10
+ ### Fixed
11
+
12
+ - **The bundled coach skill taught agy model names agy no longer accepts.**
13
+ `agy models` switched from quoted display strings (`"Claude Opus 4.6
14
+ (Thinking)"`) to bare slugs (`claude-opus-4-6-thinking`), so every agy
15
+ dispatch the skill proposed failed model validation. The skill now says to
16
+ read the live roster from `agy models` instead of spelling names from
17
+ memory. It also recommended `codex -m gpt-5-codex`, which fails on accounts
18
+ whose plan lacks that model; codex dispatches now default to the account's
19
+ own default model. Both fixes landed on main just after v0.5.0 was tagged —
20
+ this release exists because the skill ships inside the wheel, so doc fixes
21
+ are not live until published.
22
+
8
23
  ## [0.5.0] - 2026-07-27
9
24
 
10
25
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: playmaker-cli
3
- Version: 0.5.0
3
+ Version: 0.5.1
4
4
  Summary: Playing-coach CLI for orchestrating Claude Code, Codex and Antigravity sub-agents in parallel.
5
5
  Project-URL: Homepage, https://github.com/vladsafedev/playmaker
6
6
  Project-URL: Repository, https://github.com/vladsafedev/playmaker
@@ -41,9 +41,9 @@ parses their native session files, and pings you when they land.
41
41
  ```console
42
42
  $ B=dashboard # one label for the whole fan-out
43
43
 
44
- $ playmaker dispatch codex --batch $B --model gpt-5-codex -p "Add PATCH /users/:id …"
44
+ $ playmaker dispatch codex --batch $B -p "Add PATCH /users/:id …"
45
45
  session: 9f2c1a4e-… pid: 48211 (detached)
46
- $ playmaker dispatch agy --batch $B --model "Gemini 3.5 Flash (High)" -p "pytest coverage for …"
46
+ $ playmaker dispatch agy --batch $B --model gemini-3.6-flash-high -p "pytest coverage for …"
47
47
  session: 4b1f9c02-… pid: 48219 (detached)
48
48
  $ playmaker dispatch claude --batch $B --model sonnet -p "Update the API docs for …"
49
49
  session: c07d5511-… pid: 48244 (detached)
@@ -168,8 +168,8 @@ playmaker agents # which agent CLIs are reachable
168
168
  | Agent | Install | Notes |
169
169
  |---|---|---|
170
170
  | **Claude Code** | `npm i -g @anthropic-ai/claude-code` | `--model sonnet` / `opus` / `haiku` |
171
- | **Codex CLI** | `npm i -g @openai/codex` | `--model gpt-5-codex` |
172
- | **Antigravity (`agy`)** | bundled with [Antigravity](https://antigravity.google) | models are display names: `--model "Claude Opus 4.6 (Thinking)"` see `agy models` |
171
+ | **Codex CLI** | `npm i -g @openai/codex` | the model roster depends on your plan; omit `--model` to use the account default |
172
+ | **Antigravity (`agy`)** | bundled with [Antigravity](https://antigravity.google) | `--model claude-opus-4-6-thinking` the roster moves, so read it from `agy models` |
173
173
  | **Gemini CLI** (legacy) | `npm i -g @google/gemini-cli` | still supported, superseded by `agy` |
174
174
 
175
175
  At least one is required; `playmaker agents` tells you which it can see.
@@ -14,9 +14,9 @@ parses their native session files, and pings you when they land.
14
14
  ```console
15
15
  $ B=dashboard # one label for the whole fan-out
16
16
 
17
- $ playmaker dispatch codex --batch $B --model gpt-5-codex -p "Add PATCH /users/:id …"
17
+ $ playmaker dispatch codex --batch $B -p "Add PATCH /users/:id …"
18
18
  session: 9f2c1a4e-… pid: 48211 (detached)
19
- $ playmaker dispatch agy --batch $B --model "Gemini 3.5 Flash (High)" -p "pytest coverage for …"
19
+ $ playmaker dispatch agy --batch $B --model gemini-3.6-flash-high -p "pytest coverage for …"
20
20
  session: 4b1f9c02-… pid: 48219 (detached)
21
21
  $ playmaker dispatch claude --batch $B --model sonnet -p "Update the API docs for …"
22
22
  session: c07d5511-… pid: 48244 (detached)
@@ -141,8 +141,8 @@ playmaker agents # which agent CLIs are reachable
141
141
  | Agent | Install | Notes |
142
142
  |---|---|---|
143
143
  | **Claude Code** | `npm i -g @anthropic-ai/claude-code` | `--model sonnet` / `opus` / `haiku` |
144
- | **Codex CLI** | `npm i -g @openai/codex` | `--model gpt-5-codex` |
145
- | **Antigravity (`agy`)** | bundled with [Antigravity](https://antigravity.google) | models are display names: `--model "Claude Opus 4.6 (Thinking)"` see `agy models` |
144
+ | **Codex CLI** | `npm i -g @openai/codex` | the model roster depends on your plan; omit `--model` to use the account default |
145
+ | **Antigravity (`agy`)** | bundled with [Antigravity](https://antigravity.google) | `--model claude-opus-4-6-thinking` the roster moves, so read it from `agy models` |
146
146
  | **Gemini CLI** (legacy) | `npm i -g @google/gemini-cli` | still supported, superseded by `agy` |
147
147
 
148
148
  At least one is required; `playmaker agents` tells you which it can see.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "playmaker-cli"
3
- version = "0.5.0"
3
+ version = "0.5.1"
4
4
  description = "Playing-coach CLI for orchestrating Claude Code, Codex and Antigravity sub-agents in parallel."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
@@ -7,7 +7,9 @@ description: Playing-coach orchestration of Claude/Codex/Antigravity (agy) sub-a
7
7
 
8
8
  Use the `playmaker` CLI as a facade to dispatch sub-tasks to Codex / Antigravity (`agy`) / a sibling Claude, monitor them, read their threads, review their diffs, and feed back. The coach (this thread) does its own portion of the work in parallel.
9
9
 
10
- > **`agy` (Antigravity CLI)** does not only serve Google models: `agy models` exposes **Gemini 3.5 Flash (Low/Medium/High)**, **Gemini 3.1 Pro (Low/High)**, **Claude Sonnet 4.6 (Thinking)**, **Claude Opus 4.6 (Thinking)**, and **GPT-OSS 120B (Medium)**. Opus via agy runs on *Google's* quota pool — top-tier Claude work that does not touch the Anthropic subscription's scarce Opus weekly bucket. Model names are the exact display strings (quote them in bash): `--model "Claude Opus 4.6 (Thinking)"`.
10
+ > **`agy` (Antigravity CLI)** does not only serve Google models: alongside the Gemini Flash and Pro tiers, `agy models` carries **Claude Sonnet and Opus** and a **GPT-OSS** mid-tier. Opus via agy runs on *Google's* quota pool — top-tier Claude work that does not touch the Anthropic subscription's scarce Opus weekly bucket: `--model claude-opus-4-6-thinking`.
11
+ >
12
+ > **Never write an agy model name from memory — run `agy models` and copy a line.** Both the roster *and its spelling* move with Antigravity releases: names used to be quoted display strings like `"Claude Opus 4.6 (Thinking)"` and are now bare slugs. playmaker validates `--model` against the live roster and fails the dispatch on a stale name, so a wrong guess costs you a round-trip.
11
13
 
12
14
  **The point of the coach pattern:** all available models do useful work in parallel under your direction. The coach's job is *orchestration*, not *production*. A coach that does its own implementation, runs its own codebase recon, and reviews everything line by line burns the same budget delegation was meant to save. Treat your own context window as the most expensive resource on the table — every byte you read or generate yourself is a byte that could have come from a cheaper model. Push out as much as you can: implementation, recon, summarization, even drafting the per-subtask prompts when the task is large enough.
13
15
 
@@ -31,7 +33,7 @@ All Claude work — coach, internal sub-agents, external `claude -p` — draws f
31
33
  | is an independent stream you'll monitor / continue separately | **external `dispatch claude --model sonnet`** | tracked & detached; Sonnet's own weekly bucket spares Opus |
32
34
  | is heavy reasoning only the coach can do | **coach** | top-tier Opus, serial |
33
35
  | is write-heavy and can leave Claude | **codex / agy** | their own quotas |
34
- | needs top-tier Claude but the Anthropic Opus weekly is precious | **`dispatch agy --model "Claude Opus 4.6 (Thinking)"`** | Opus quality on Google's pool |
36
+ | needs top-tier Claude but the Anthropic Opus weekly is precious | **`dispatch agy --model claude-opus-4-6-thinking`** | Opus quality on Google's pool |
35
37
 
36
38
  **Sonnet is your cheap parallel Claude worker** — a separate weekly bucket that usually sits idle while Opus depletes. Reach for it (via `dispatch claude --model sonnet`, or by pointing an internal sub-agent at Sonnet) instead of burning Opus on mid-tier work.
37
39
 
@@ -69,7 +71,7 @@ Codebase exploration ("find where the User entity lives, list its existing field
69
71
  Pattern: dispatch a recon subtask with an explicit deliverable.
70
72
 
71
73
  ```bash
72
- playmaker dispatch agy --model "Gemini 3.5 Flash (Low)" --cwd $(pwd) --sync \
74
+ playmaker dispatch agy --model gemini-3.6-flash-low --cwd $(pwd) --sync \
73
75
  --prompt "Recon only — do not edit any files. In apps/backend/, locate: (a) the User entity/schema and the migration tooling used (Prisma vs TypeORM vs other), (b) the auth middleware that resolves the current user, (c) where DTOs are defined for user PATCH endpoints if any. Report under 200 words as a numbered list with file paths and line ranges."
74
76
  ```
75
77
 
@@ -89,9 +91,9 @@ Break the task into 2-5 subtasks (don't go finer-grained than that on first run
89
91
 
90
92
  1. Sort *models* (not agents) by remaining capacity — freshest at the top. A provider with one fresh model and one depleted model is two separate buckets.
91
93
  2. **Tier-match each subtask to the cheapest model that can finish it cleanly:**
92
- - **Architectural / spec judgment / cross-module integration:** top tier (Opus, agy "Claude Opus 4.6 (Thinking)" / "Gemini 3.1 Pro (High)", Codex top-tier). The coach lives here; agy-Opus is the overflow lane when the Anthropic Opus weekly is precious.
93
- - **Pattern-following implementation, well-scoped CRUD, mechanical refactor, test scaffolding, writing inside an existing convention:** mid tier (Claude Sonnet, agy "Claude Sonnet 4.6 (Thinking)" / "Gemini 3.5 Flash (High)" / "Gemini 3.1 Pro (Low)", mid-tier Codex). This is where the bulk of delegated implementation goes.
94
- - **Recon, summarization, mechanical loops over many files, name normalization:** cheap tier (agy "Gemini 3.5 Flash (Low)"/"(Medium)", **Claude Haiku**, Sonnet for recon-with-judgment).
94
+ - **Architectural / spec judgment / cross-module integration:** top tier (Opus, agy `claude-opus-4-6-thinking` / `gemini-3.1-pro-high`, Codex top-tier). The coach lives here; agy-Opus is the overflow lane when the Anthropic Opus weekly is precious.
95
+ - **Pattern-following implementation, well-scoped CRUD, mechanical refactor, test scaffolding, writing inside an existing convention:** mid tier (Claude Sonnet, agy `claude-sonnet-4-6` / `gemini-3.5-flash-high` / `gemini-3.1-pro-low`, mid-tier Codex). This is where the bulk of delegated implementation goes.
96
+ - **Recon, summarization, mechanical loops over many files, name normalization:** cheap tier (agy's lowest Flash tiers, **Claude Haiku**, Sonnet for recon-with-judgment).
95
97
 
96
98
  For Claude specifically, tier is orthogonal to **lane** (see "Execution lanes"): pick the model tier here, then decide *internal sub-agent* (coach integrates the result) vs *external `-p`* (tracked detached stream).
97
99
  3. Pass the model explicitly: `playmaker dispatch <agent> --model <name> ...`. Without `--model`, the agent CLI uses its default — which is usually fine but means the coach gives up control over tier-matching. **For sibling Claude, default to `--model sonnet`** (Haiku for trivial mechanical work); never omit it and let the CLI pick Opus — that burns the scarce shared Opus weekly bucket.
@@ -112,7 +114,7 @@ To make a subtask finishable, every dispatch must carry:
112
114
  2. **Acceptance criteria as a check the agent runs itself.** A green command — `npx prisma validate`, `pnpm test users.spec.ts`, `tsc --noEmit`, an `eslint` pass on a specific file. The agent is told to keep iterating until that command exits 0 and to surface its output in the final answer. This replaces coach-side review for ~80% of the work.
113
115
  3. **Done definition in one sentence**, written so the coach can confirm it in seconds without reading the diff line by line. "Column added, migration generated, prisma validate green." If the coach can't write such a sentence, the subtask isn't sized right yet — split or specify further before dispatching.
114
116
  4. **Context the agent needs but doesn't have.** Spec section excerpts, naming conventions, the one related file it should mirror. Paste these into the prompt; don't make the agent find them by reading half the repo. If your team keeps durable notes (a docs folder, a wiki, a notes vault), pass the *exact* paths worth reading rather than asking the agent to go looking.
115
- 5. **Match to capability.** Codex / agy-Gemini do well on pattern-following, well-scoped CRUD, test scaffolding, mechanical refactors, and writing within an existing convention. They do poorly on architectural decisions across files they haven't been pointed at, novel API design, and judging whether a spec rule applies. Keep those for the coach — or for agy's "Claude Opus 4.6 (Thinking)" when the subtask genuinely needs top-tier judgment but should not burn the Anthropic Opus weekly. If a profile in `.playmaker/agents/<name>.md` exists, trust its guidance over these defaults.
117
+ 5. **Match to capability.** Codex / agy-Gemini do well on pattern-following, well-scoped CRUD, test scaffolding, mechanical refactors, and writing within an existing convention. They do poorly on architectural decisions across files they haven't been pointed at, novel API design, and judging whether a spec rule applies. Keep those for the coach — or for agy's `claude-opus-4-6-thinking` when the subtask genuinely needs top-tier judgment but should not burn the Anthropic Opus weekly. If a profile in `.playmaker/agents/<name>.md` exists, trust its guidance over these defaults.
116
118
 
117
119
  A useful smell test before dispatching: *"If this came back done, would I review by running one command and reading one paragraph — or would I need to read the whole diff and think hard about whether it's right?"* If the latter, re-scope before sending.
118
120
 
@@ -121,7 +123,7 @@ Output the plan as a short proposal:
121
123
  Plan:
122
124
  - Coach (me): schema design + integration glue
123
125
  - Codex: FastAPI handlers in apps/api/
124
- - agy (Gemini 3.5 Flash High): pytest tests + README
126
+ - agy (gemini-3.6-flash-high): pytest tests + README
125
127
 
126
128
  Quotas: Claude session 93% / weekly 80%, Codex 100%,
127
129
  agy Gemini 5h 100% / weekly 96%, Claude/GPT 5h 88% / weekly 71%.
@@ -151,7 +153,11 @@ playmaker dispatch <agent> --model <name> --prompt "<scoped prompt>" --cwd $(pwd
151
153
 
152
154
  Always pass `--cwd $(pwd)` — `playmaker`'s default is the *coach process's* current dir, which is not always what you want.
153
155
 
154
- Always pass `--model` when you've made a tier-matching decision in step 3. Without it, the agent CLI uses its own default (which may be its top-tier model, defeating the load-distribution effort). Model name is what the agent's native CLI accepts: `claude --model sonnet`, `codex exec -m gpt-5-codex`, `agy --model "Gemini 3.5 Flash (High)"` — agy takes the exact display names from `agy models` and they contain spaces, so **always quote them**. Note: agy's own default is a top-tier model, another reason never to omit `--model` on agy dispatches meant to be cheap.
156
+ Always pass `--model` when you've made a tier-matching decision in step 3. Without it, the agent CLI uses its own default (which may be its top-tier model, defeating the load-distribution effort). Model name is what the agent's native CLI accepts: `claude --model sonnet`, `agy --model gemini-3.6-flash-high` — for agy, copy the line from `agy models` rather than typing it.
157
+
158
+ Two exceptions to "always pass `--model`":
159
+ - **codex** — its model roster depends on the account plan, and an unavailable name fails the whole dispatch (`codex turn failed: … not supported when using Codex with a ChatGPT account`). Omitting `--model` uses whatever that account actually has, which is usually what you want.
160
+ - **agy** — its own default is a top-tier model, so omitting `--model` on a dispatch meant to be cheap silently spends the expensive bucket. Always pass it here.
155
161
 
156
162
  **agy prompt discipline:** the agy agent's shell lives in a private scratch directory, not the workspace. playmaker automatically prepends a workspace preamble to every agy dispatch, but reinforce it: word file instructions with paths relative to the workspace root or absolute paths, never "in the current directory".
157
163
 
@@ -163,8 +169,8 @@ Always pass `--model` when you've made a tier-matching decision in step 3. Witho
163
169
 
164
170
  ```bash
165
171
  B=admin-dashboard # any short label shared across this fan-out
166
- playmaker dispatch codex --batch "$B" --model gpt-5-codex --prompt "..." --cwd $(pwd)
167
- playmaker dispatch agy --batch "$B" --model "Gemini 3.5 Flash (High)" --prompt "..." --cwd $(pwd)
172
+ playmaker dispatch codex --batch "$B" --prompt "..." --cwd $(pwd)
173
+ playmaker dispatch agy --batch "$B" --model gemini-3.6-flash-high --prompt "..." --cwd $(pwd)
168
174
  ```
169
175
 
170
176
  `playmaker continue <id> --model <name>` overrides the model for one follow-up turn while keeping the live session; without `--model` it inherits the parent session's model.
@@ -173,7 +179,7 @@ For sequential delegation (e.g. "I'll do schema first, then Codex builds on top"
173
179
 
174
180
  ```bash
175
181
  git commit -am "checkpoint: schema before backend dispatch"
176
- playmaker dispatch codex --model gpt-5-codex --prompt "..." --cwd $(pwd) --sync # blocks, prints output
182
+ playmaker dispatch codex --prompt "..." --cwd $(pwd) --sync # blocks, prints output
177
183
  ```
178
184
 
179
185
  ### 6. Coach's own work
@@ -263,9 +269,9 @@ playmaker watch # Rich live TUI of sessions
263
269
 
264
270
  Every command takes `--json` for machine-readable output.
265
271
 
266
- `--model NAME` is forwarded to the agent's native CLI: `claude --model sonnet`, `codex exec -m gpt-5-codex`, `agy --model "Claude Opus 4.6 (Thinking)"` (display names from `agy models`, always quoted). Without it the agent CLI uses its own default. Model is stored on the session row, so detached re-runs and `continue` inherit it; `continue --model X` overrides for that one turn.
272
+ `--model NAME` is forwarded to the agent's native CLI: `claude --model sonnet`, `agy --model claude-opus-4-6-thinking`, `codex -m <whatever that account has>`. Without it the agent CLI uses its own default. Model is stored on the session row, so detached re-runs and `continue` inherit it; `continue --model X` overrides for that one turn.
267
273
 
268
- agy model roster (from `agy models`): `Gemini 3.5 Flash (Low)` / `(Medium)` / `(High)`, `Gemini 3.1 Pro (Low)` / `(High)`, `Claude Sonnet 4.6 (Thinking)`, `Claude Opus 4.6 (Thinking)`, `GPT-OSS 120B (Medium)`. Re-check the roster with `agy models` when in doubt it changes with Antigravity releases.
274
+ **The agy roster is not documented here on purpose** — it changes with Antigravity releases, and so does the spelling convention. Run `agy models` and copy a line. At the time of writing it returns bare slugs in the shape `gemini-3.6-flash-{low,medium,high}`, `gemini-3.1-pro-{low,high}`, `claude-sonnet-4-6`, `claude-opus-4-6-thinking`, `gpt-oss-120b-medium` but treat that as an example of the *shape*, not a list to copy from.
269
275
 
270
276
  ## Anti-patterns
271
277
 
@@ -1,12 +1,15 @@
1
1
  """Antigravity CLI (`agy`) handler.
2
2
 
3
3
  Empirically (agy 1.1.1):
4
- - oneshot: `agy -p "<prompt>" [--model "<display name>"] [--dangerously-skip-permissions]
4
+ - oneshot: `agy -p "<prompt>" [--model <name>] [--dangerously-skip-permissions]
5
5
  [--print-timeout 60m] [--log-file <path>]`; stdout is the final response as
6
6
  plain text (no JSON envelope).
7
7
  - resume: `agy --conversation <uuid> -p "..."` — keeps the same conversation id.
8
- - models are addressed by *display name* from `agy models`, e.g.
9
- "Claude Opus 4.6 (Thinking)", "Gemini 3.5 Flash (Low)".
8
+ - `--model` takes a name from `agy models` verbatim, e.g.
9
+ "claude-opus-4-6-thinking", "gemini-3.6-flash-high". Both the roster and its
10
+ *spelling* move with Antigravity releases — earlier builds took display names
11
+ like "Claude Opus 4.6 (Thinking)" — which is why _validate_model() reads the
12
+ live list instead of trusting a hardcoded one.
10
13
  - the conversation id is NOT printed to stdout; it is recovered from the CLI
11
14
  debug log (`--log-file`) via the `Created conversation <uuid>` line, which
12
15
  appears a few seconds in — that is our early on_session_started signal.
@@ -53,7 +56,7 @@ class AgyHandler:
53
56
  @staticmethod
54
57
  @functools.lru_cache(maxsize=1)
55
58
  def available_models() -> tuple[str, ...]:
56
- """Exact model display names agy accepts, from `agy models`.
59
+ """Exact model names agy accepts, from `agy models`.
57
60
 
58
61
  agy resolves an unknown `--model` to its default *silently* (no error,
59
62
  wrong model runs), so we validate against this list before dispatch.
@@ -131,8 +131,8 @@ def dispatch(
131
131
  "--model",
132
132
  "-m",
133
133
  help="forwarded to the agent CLI's --model (e.g. claude 'opus'/'sonnet', "
134
- "codex 'gpt-5-codex', agy 'Claude Opus 4.6 (Thinking)' / 'Gemini 3.5 Flash "
135
- "(High)' display names from `agy models`); omitted = agent default",
134
+ "agy 'claude-opus-4-6-thinking' exact names from `agy models`); "
135
+ "omitted = agent default, which is the safe choice for codex",
136
136
  ),
137
137
  sync: bool = typer.Option(
138
138
  False,
@@ -977,8 +977,9 @@ binary = "codex"
977
977
 
978
978
  [agents.agy]
979
979
  binary = "agy"
980
- # Antigravity CLI. Model names are display strings from `agy models`,
981
- # e.g. "Claude Opus 4.6 (Thinking)", "Gemini 3.5 Flash (High)".
980
+ # Antigravity CLI. Model names come from `agy models` verbatim, e.g.
981
+ # "claude-opus-4-6-thinking", "gemini-3.6-flash-high". The roster changes
982
+ # with Antigravity releases, so read it rather than copying from docs.
982
983
  #
983
984
  # agy has no per-mode permission flag — a detached run either auto-approves or
984
985
  # comes back having done nothing — so this defaults to on.
File without changes
File without changes