playmaker-cli 0.9.0__tar.gz → 0.11.0__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.
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/CHANGELOG.md +37 -0
- playmaker_cli-0.9.0/README.md → playmaker_cli-0.11.0/PKG-INFO +55 -12
- playmaker_cli-0.9.0/PKG-INFO → playmaker_cli-0.11.0/README.md +28 -39
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/pyproject.toml +4 -2
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/agent-gotchas.md +16 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/lanes.md +15 -10
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/quotas.md +6 -4
- playmaker_cli-0.11.0/src/playmaker/agents/kimi.py +459 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/cli.py +32 -20
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/quotas.py +82 -11
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/registry.py +2 -0
- playmaker_cli-0.11.0/tests/fixtures/kimi_wire.jsonl +5 -0
- playmaker_cli-0.11.0/tests/test_kimi.py +333 -0
- playmaker_cli-0.11.0/tests/test_quotas_claude.py +197 -0
- playmaker_cli-0.11.0/tests/test_quotas_codex.py +175 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/.gitignore +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/LICENSE +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/SKILL.md +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/commands.md +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/prompt-templates.md +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/review-board.md +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/scripts/review-board.sh +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/__init__.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/__main__.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/__init__.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/agy.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/base.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/claude.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/codex.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/gemini.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/opencode.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/config.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/notify.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/state.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/watcher.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/__init__.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_agy.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_batch.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_binary.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_claude.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_codex.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_no_changes.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_opencode.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_permissions.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_quotas_antigravity.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_quotas_freshness.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_quotas_zai.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_registry.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_skill.py +0 -0
- {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_state.py +0 -0
|
@@ -5,6 +5,43 @@ 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.11.0] - 2026-09-04
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **`kimi` lane — the Kimi Code CLI as a first-class agent.**
|
|
13
|
+
`playmaker dispatch kimi -m kimi-code/k3-256k` runs `kimi -p …
|
|
14
|
+
--output-format stream-json`, tracks the session, resumes with `-S`, and
|
|
15
|
+
reads the per-cwd `wire.jsonl` for `summary`. K3 is a senior-tier model on a
|
|
16
|
+
subscription nobody else on the machine draws from, and routing it through
|
|
17
|
+
opencode would have needed a second credential; the native CLI reuses its
|
|
18
|
+
own OAuth login.
|
|
19
|
+
|
|
20
|
+
## [0.10.0] - 2026-09-04
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- **`playmaker quotas` shows the two buckets that actually run out first.**
|
|
25
|
+
Codex's `additional_rate_limits[]` carries a separate GPT-5.3-Codex-Spark
|
|
26
|
+
pool with its own 5h and weekly windows, and Anthropic's `limits[]` carries
|
|
27
|
+
a model-scoped weekly next to the all-models one. Both were in the raw
|
|
28
|
+
responses and dropped by the probe, so a coach could route a junior WP to
|
|
29
|
+
Spark while its weekly sat at 4%, or budget a session on the all-models bar
|
|
30
|
+
while its own model-scoped bucket was the one about to end it. Codex now
|
|
31
|
+
renders a `Codex — Spark` sub-block and Claude a `Weekly · <model>` row;
|
|
32
|
+
probes return an additive `blocks` key that `_render_provider` draws for any
|
|
33
|
+
provider.
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
|
|
37
|
+
- **The coach no longer tiers Antigravity's Claude models by name.**
|
|
38
|
+
`lanes.md` called `agy`'s Claude-Opus "top-tier Claude judgment on Google's
|
|
39
|
+
pool" and offered it as the reviewer to reach for when the Anthropic bucket
|
|
40
|
+
is precious. That roster trails Anthropic's releases by a generation, and
|
|
41
|
+
the name kept pulling real work onto it. The reference now says to tier by
|
|
42
|
+
the version `agy models` shows, and points the second-strong-reviewer row
|
|
43
|
+
at Gemini Pro.
|
|
44
|
+
|
|
8
45
|
## [0.9.0] - 2026-08-24
|
|
9
46
|
|
|
10
47
|
### Added
|
|
@@ -1,3 +1,30 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: playmaker-cli
|
|
3
|
+
Version: 0.11.0
|
|
4
|
+
Summary: Playing-coach CLI for orchestrating Claude Code, Codex, Antigravity, Kimi Code and opencode sub-agents in parallel.
|
|
5
|
+
Project-URL: Homepage, https://github.com/vladsafedev/playmaker
|
|
6
|
+
Project-URL: Repository, https://github.com/vladsafedev/playmaker
|
|
7
|
+
Project-URL: Issues, https://github.com/vladsafedev/playmaker/issues
|
|
8
|
+
Author-email: Vladislav Shulyugin <vladislav.shulyugin@gmail.com>
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Keywords: agents,ai,antigravity,claude,claude-code,cli,codex,gemini,glm,kimi,kimi-code,opencode,orchestration,subagents
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Environment :: Console
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Operating System :: MacOS
|
|
16
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Software Development
|
|
22
|
+
Classifier: Topic :: Utilities
|
|
23
|
+
Requires-Python: >=3.11
|
|
24
|
+
Requires-Dist: rich>=13.7
|
|
25
|
+
Requires-Dist: typer>=0.27.0
|
|
26
|
+
Description-Content-Type: text/markdown
|
|
27
|
+
|
|
1
28
|
# playmaker
|
|
2
29
|
|
|
3
30
|
[](https://github.com/vladsafedev/playmaker/actions/workflows/ci.yml)
|
|
@@ -5,7 +32,7 @@
|
|
|
5
32
|
[](https://pypi.org/project/playmaker-cli/)
|
|
6
33
|
[](LICENSE)
|
|
7
34
|
|
|
8
|
-
**Run Claude Code, Codex, Antigravity and opencode as parallel sub-agents from one terminal — and spend separate quotas instead of one.**
|
|
35
|
+
**Run Claude Code, Codex, Antigravity, Kimi Code and opencode as parallel sub-agents from one terminal — and spend separate quotas instead of one.**
|
|
9
36
|
|
|
10
37
|
You stay in your Claude Code session doing the part only you can do. `playmaker`
|
|
11
38
|
fans the rest out to other agent CLIs as detached processes, tracks them,
|
|
@@ -47,10 +74,11 @@ in one serial session:
|
|
|
47
74
|
1. **Wall-clock speed.** A task that decomposes into 3–5 independent
|
|
48
75
|
work-streams (schema, backend, frontend, tests, docs) finishes 2–4× faster
|
|
49
76
|
when each stream runs as its own parallel agent.
|
|
50
|
-
2. **Provider arbitrage.** Codex, Antigravity and opencode quotas
|
|
51
|
-
separate pools from your Anthropic plan. Every slice you hand
|
|
52
|
-
capacity your main session never spends — and Antigravity's roster
|
|
53
|
-
Claude Sonnet/Opus, so even Claude-quality work can run on Google's
|
|
77
|
+
2. **Provider arbitrage.** Codex, Antigravity, Kimi Code and opencode quotas
|
|
78
|
+
are entirely separate pools from your Anthropic plan. Every slice you hand
|
|
79
|
+
them is capacity your main session never spends — and Antigravity's roster
|
|
80
|
+
includes Claude Sonnet/Opus, so even Claude-quality work can run on Google's
|
|
81
|
+
pool. Kimi Code brings its own subscription with the senior-tier K3.
|
|
54
82
|
`opencode` widens this the most: one CLI fronting ~75 providers, from a z.ai
|
|
55
83
|
GLM coding plan to models running locally on your own machine.
|
|
56
84
|
3. **Bucket arbitrage inside one plan.** Headless `claude -p` draws on the same
|
|
@@ -119,6 +147,10 @@ The other agents differ, because their CLIs do:
|
|
|
119
147
|
{ "permission": { "edit": "allow", "bash": "allow", "webfetch": "deny" } }
|
|
120
148
|
```
|
|
121
149
|
|
|
150
|
+
- **kimi** has no permission flags at all in headless mode — `kimi -p` refuses
|
|
151
|
+
`--auto`, `--yolo` and `--plan`, and already runs with auto-approval, so
|
|
152
|
+
there is no read-only mode below the prompt.
|
|
153
|
+
|
|
122
154
|
- **gemini** (legacy) runs with `--yolo`.
|
|
123
155
|
|
|
124
156
|
## Install
|
|
@@ -156,6 +188,7 @@ playmaker agents # which agent CLIs are reachable
|
|
|
156
188
|
| **Codex CLI** | `npm i -g @openai/codex` | the model roster depends on your plan; omit `--model` to use the account default |
|
|
157
189
|
| **Antigravity (`agy`)** | bundled with [Antigravity](https://antigravity.google) | `--model claude-opus-4-6-thinking` — the roster moves, so read it from `agy models` |
|
|
158
190
|
| **opencode** | `brew install sst/tap/opencode` (or see [opencode.ai](https://opencode.ai)) | `--model provider/model`, e.g. `zai-coding-plan/glm-5.2`; roster from `opencode models`, providers from `opencode auth login` |
|
|
191
|
+
| **Kimi Code CLI** | `npm i -g @moonshot-ai/kimi-code` | needs Node ≥ 22.19 (a wrapper that pins a newer Node is fine — point `[agents.kimi] binary` at it); `--model kimi-code/k3-256k` — 256k window at half the quota cost of `k3`; log in once with `kimi login --region global`; model ids from `~/.kimi-code/config.toml` |
|
|
159
192
|
| **Gemini CLI** (legacy) | `npm i -g @google/gemini-cli` | still supported, superseded by `agy` |
|
|
160
193
|
|
|
161
194
|
At least one is required; `playmaker agents` tells you which it can see.
|
|
@@ -290,6 +323,7 @@ and locates the session file the tool writes locally. Empirically:
|
|
|
290
323
|
| Codex | `~/.codex/sessions/<YYYY>/<MM>/<DD>/rollout-<ts>-<thread_id>.jsonl` |
|
|
291
324
|
| Antigravity | `~/.gemini/antigravity-cli/brain/<conversation-id>/.system_generated/logs/transcript_full.jsonl` |
|
|
292
325
|
| opencode | SQLite — `~/.local/share/opencode/opencode.db` (`session` / `message` / `part`); playmaker keeps a pointer at `~/.playmaker/opencode/<id>.session` |
|
|
326
|
+
| kimi | `~/.kimi-code/sessions/wd_<cwd-basename>_<hash>/session_<id>/agents/main/wire.jsonl` (per-cwd; `KIMI_CODE_HOME` overrides the root) |
|
|
293
327
|
| Gemini | `~/.gemini/tmp/<cwd-basename>/chats/session-<ts>-<short_id>.{json,jsonl}` |
|
|
294
328
|
|
|
295
329
|
`thread` and `summary` normalize all of them into the same turn list, so every
|
|
@@ -364,14 +398,19 @@ stores, no scraping and no browser.
|
|
|
364
398
|
```console
|
|
365
399
|
$ playmaker quotas --refresh
|
|
366
400
|
Claude Max 20x
|
|
367
|
-
Session
|
|
368
|
-
Weekly
|
|
369
|
-
|
|
401
|
+
Session ████████████████░░░░ 80% left resets in 3h 12m
|
|
402
|
+
Weekly ███████████░░░░░░░░░ 55% left resets in 4d 6h
|
|
403
|
+
Weekly · Fable ██████░░░░░░░░░░░░░░ 28% left resets in 4d 6h
|
|
404
|
+
Sonnet ███████████████████░ 95% left resets in 4d 6h
|
|
370
405
|
|
|
371
406
|
Codex Plus
|
|
372
407
|
Session ██████████████████░░ 90% left resets in 1h 40m
|
|
373
408
|
Weekly █████████████░░░░░░░ 65% left resets in 2d 9h
|
|
374
409
|
|
|
410
|
+
Codex — Spark
|
|
411
|
+
Session ████████████████████ 100% left resets in 4h 59m
|
|
412
|
+
Weekly ██░░░░░░░░░░░░░░░░░░ 8% left resets in 5d 22h
|
|
413
|
+
|
|
375
414
|
Antigravity (agy)
|
|
376
415
|
Gemini 5h ████████████████████ 100% left
|
|
377
416
|
Gemini weekly ███████████████████░ 95% left
|
|
@@ -384,12 +423,16 @@ Z.ai (GLM, via opencode) Max
|
|
|
384
423
|
MCP tools ███████████████████░ 99% left resets in 25d 11h
|
|
385
424
|
```
|
|
386
425
|
|
|
387
|
-
The `Weekly` and `Sonnet` rows above are the point: they are
|
|
388
|
-
buckets**. So is every agy row, and
|
|
389
|
-
subtask is choosing which of them to spend.
|
|
426
|
+
The `Weekly`, `Weekly · Fable` and `Sonnet` rows above are the point: they are
|
|
427
|
+
**separate buckets**. So is the `Codex — Spark` block, every agy row, and the
|
|
428
|
+
whole Z.ai block. Routing a subtask is choosing which of them to spend.
|
|
390
429
|
|
|
391
430
|
- **Claude** — OAuth usage API; token from the Claude Code Keychain entry.
|
|
392
|
-
-
|
|
431
|
+
Model-scoped weekly buckets come from the usage API's `limits[]` array and
|
|
432
|
+
print as `Weekly · <model>`.
|
|
433
|
+
- **Codex** — ChatGPT `wham/usage` API; token from `~/.codex/auth.json`. The
|
|
434
|
+
Spark model's own 5-hour and weekly windows come from
|
|
435
|
+
`additional_rate_limits[]` and print as their own `Codex — Spark` block.
|
|
393
436
|
- **Antigravity** — prefers agy's **local daemon**
|
|
394
437
|
(`RetrieveUserQuotaSummary` over its embedded gRPC-web endpoint), which is
|
|
395
438
|
the only source for the full categorized breakdown above. Works whenever any
|
|
@@ -1,30 +1,3 @@
|
|
|
1
|
-
Metadata-Version: 2.5
|
|
2
|
-
Name: playmaker-cli
|
|
3
|
-
Version: 0.9.0
|
|
4
|
-
Summary: Playing-coach CLI for orchestrating Claude Code, Codex, Antigravity and opencode sub-agents in parallel.
|
|
5
|
-
Project-URL: Homepage, https://github.com/vladsafedev/playmaker
|
|
6
|
-
Project-URL: Repository, https://github.com/vladsafedev/playmaker
|
|
7
|
-
Project-URL: Issues, https://github.com/vladsafedev/playmaker/issues
|
|
8
|
-
Author-email: Vladislav Shulyugin <vladislav.shulyugin@gmail.com>
|
|
9
|
-
License-Expression: MIT
|
|
10
|
-
License-File: LICENSE
|
|
11
|
-
Keywords: agents,ai,antigravity,claude,claude-code,cli,codex,gemini,glm,opencode,orchestration,subagents
|
|
12
|
-
Classifier: Development Status :: 3 - Alpha
|
|
13
|
-
Classifier: Environment :: Console
|
|
14
|
-
Classifier: Intended Audience :: Developers
|
|
15
|
-
Classifier: Operating System :: MacOS
|
|
16
|
-
Classifier: Operating System :: POSIX :: Linux
|
|
17
|
-
Classifier: Programming Language :: Python :: 3
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
-
Classifier: Topic :: Software Development
|
|
22
|
-
Classifier: Topic :: Utilities
|
|
23
|
-
Requires-Python: >=3.11
|
|
24
|
-
Requires-Dist: rich>=13.7
|
|
25
|
-
Requires-Dist: typer>=0.27.0
|
|
26
|
-
Description-Content-Type: text/markdown
|
|
27
|
-
|
|
28
1
|
# playmaker
|
|
29
2
|
|
|
30
3
|
[](https://github.com/vladsafedev/playmaker/actions/workflows/ci.yml)
|
|
@@ -32,7 +5,7 @@ Description-Content-Type: text/markdown
|
|
|
32
5
|
[](https://pypi.org/project/playmaker-cli/)
|
|
33
6
|
[](LICENSE)
|
|
34
7
|
|
|
35
|
-
**Run Claude Code, Codex, Antigravity and opencode as parallel sub-agents from one terminal — and spend separate quotas instead of one.**
|
|
8
|
+
**Run Claude Code, Codex, Antigravity, Kimi Code and opencode as parallel sub-agents from one terminal — and spend separate quotas instead of one.**
|
|
36
9
|
|
|
37
10
|
You stay in your Claude Code session doing the part only you can do. `playmaker`
|
|
38
11
|
fans the rest out to other agent CLIs as detached processes, tracks them,
|
|
@@ -74,10 +47,11 @@ in one serial session:
|
|
|
74
47
|
1. **Wall-clock speed.** A task that decomposes into 3–5 independent
|
|
75
48
|
work-streams (schema, backend, frontend, tests, docs) finishes 2–4× faster
|
|
76
49
|
when each stream runs as its own parallel agent.
|
|
77
|
-
2. **Provider arbitrage.** Codex, Antigravity and opencode quotas
|
|
78
|
-
separate pools from your Anthropic plan. Every slice you hand
|
|
79
|
-
capacity your main session never spends — and Antigravity's roster
|
|
80
|
-
Claude Sonnet/Opus, so even Claude-quality work can run on Google's
|
|
50
|
+
2. **Provider arbitrage.** Codex, Antigravity, Kimi Code and opencode quotas
|
|
51
|
+
are entirely separate pools from your Anthropic plan. Every slice you hand
|
|
52
|
+
them is capacity your main session never spends — and Antigravity's roster
|
|
53
|
+
includes Claude Sonnet/Opus, so even Claude-quality work can run on Google's
|
|
54
|
+
pool. Kimi Code brings its own subscription with the senior-tier K3.
|
|
81
55
|
`opencode` widens this the most: one CLI fronting ~75 providers, from a z.ai
|
|
82
56
|
GLM coding plan to models running locally on your own machine.
|
|
83
57
|
3. **Bucket arbitrage inside one plan.** Headless `claude -p` draws on the same
|
|
@@ -146,6 +120,10 @@ The other agents differ, because their CLIs do:
|
|
|
146
120
|
{ "permission": { "edit": "allow", "bash": "allow", "webfetch": "deny" } }
|
|
147
121
|
```
|
|
148
122
|
|
|
123
|
+
- **kimi** has no permission flags at all in headless mode — `kimi -p` refuses
|
|
124
|
+
`--auto`, `--yolo` and `--plan`, and already runs with auto-approval, so
|
|
125
|
+
there is no read-only mode below the prompt.
|
|
126
|
+
|
|
149
127
|
- **gemini** (legacy) runs with `--yolo`.
|
|
150
128
|
|
|
151
129
|
## Install
|
|
@@ -183,6 +161,7 @@ playmaker agents # which agent CLIs are reachable
|
|
|
183
161
|
| **Codex CLI** | `npm i -g @openai/codex` | the model roster depends on your plan; omit `--model` to use the account default |
|
|
184
162
|
| **Antigravity (`agy`)** | bundled with [Antigravity](https://antigravity.google) | `--model claude-opus-4-6-thinking` — the roster moves, so read it from `agy models` |
|
|
185
163
|
| **opencode** | `brew install sst/tap/opencode` (or see [opencode.ai](https://opencode.ai)) | `--model provider/model`, e.g. `zai-coding-plan/glm-5.2`; roster from `opencode models`, providers from `opencode auth login` |
|
|
164
|
+
| **Kimi Code CLI** | `npm i -g @moonshot-ai/kimi-code` | needs Node ≥ 22.19 (a wrapper that pins a newer Node is fine — point `[agents.kimi] binary` at it); `--model kimi-code/k3-256k` — 256k window at half the quota cost of `k3`; log in once with `kimi login --region global`; model ids from `~/.kimi-code/config.toml` |
|
|
186
165
|
| **Gemini CLI** (legacy) | `npm i -g @google/gemini-cli` | still supported, superseded by `agy` |
|
|
187
166
|
|
|
188
167
|
At least one is required; `playmaker agents` tells you which it can see.
|
|
@@ -317,6 +296,7 @@ and locates the session file the tool writes locally. Empirically:
|
|
|
317
296
|
| Codex | `~/.codex/sessions/<YYYY>/<MM>/<DD>/rollout-<ts>-<thread_id>.jsonl` |
|
|
318
297
|
| Antigravity | `~/.gemini/antigravity-cli/brain/<conversation-id>/.system_generated/logs/transcript_full.jsonl` |
|
|
319
298
|
| opencode | SQLite — `~/.local/share/opencode/opencode.db` (`session` / `message` / `part`); playmaker keeps a pointer at `~/.playmaker/opencode/<id>.session` |
|
|
299
|
+
| kimi | `~/.kimi-code/sessions/wd_<cwd-basename>_<hash>/session_<id>/agents/main/wire.jsonl` (per-cwd; `KIMI_CODE_HOME` overrides the root) |
|
|
320
300
|
| Gemini | `~/.gemini/tmp/<cwd-basename>/chats/session-<ts>-<short_id>.{json,jsonl}` |
|
|
321
301
|
|
|
322
302
|
`thread` and `summary` normalize all of them into the same turn list, so every
|
|
@@ -391,14 +371,19 @@ stores, no scraping and no browser.
|
|
|
391
371
|
```console
|
|
392
372
|
$ playmaker quotas --refresh
|
|
393
373
|
Claude Max 20x
|
|
394
|
-
Session
|
|
395
|
-
Weekly
|
|
396
|
-
|
|
374
|
+
Session ████████████████░░░░ 80% left resets in 3h 12m
|
|
375
|
+
Weekly ███████████░░░░░░░░░ 55% left resets in 4d 6h
|
|
376
|
+
Weekly · Fable ██████░░░░░░░░░░░░░░ 28% left resets in 4d 6h
|
|
377
|
+
Sonnet ███████████████████░ 95% left resets in 4d 6h
|
|
397
378
|
|
|
398
379
|
Codex Plus
|
|
399
380
|
Session ██████████████████░░ 90% left resets in 1h 40m
|
|
400
381
|
Weekly █████████████░░░░░░░ 65% left resets in 2d 9h
|
|
401
382
|
|
|
383
|
+
Codex — Spark
|
|
384
|
+
Session ████████████████████ 100% left resets in 4h 59m
|
|
385
|
+
Weekly ██░░░░░░░░░░░░░░░░░░ 8% left resets in 5d 22h
|
|
386
|
+
|
|
402
387
|
Antigravity (agy)
|
|
403
388
|
Gemini 5h ████████████████████ 100% left
|
|
404
389
|
Gemini weekly ███████████████████░ 95% left
|
|
@@ -411,12 +396,16 @@ Z.ai (GLM, via opencode) Max
|
|
|
411
396
|
MCP tools ███████████████████░ 99% left resets in 25d 11h
|
|
412
397
|
```
|
|
413
398
|
|
|
414
|
-
The `Weekly` and `Sonnet` rows above are the point: they are
|
|
415
|
-
buckets**. So is every agy row, and
|
|
416
|
-
subtask is choosing which of them to spend.
|
|
399
|
+
The `Weekly`, `Weekly · Fable` and `Sonnet` rows above are the point: they are
|
|
400
|
+
**separate buckets**. So is the `Codex — Spark` block, every agy row, and the
|
|
401
|
+
whole Z.ai block. Routing a subtask is choosing which of them to spend.
|
|
417
402
|
|
|
418
403
|
- **Claude** — OAuth usage API; token from the Claude Code Keychain entry.
|
|
419
|
-
-
|
|
404
|
+
Model-scoped weekly buckets come from the usage API's `limits[]` array and
|
|
405
|
+
print as `Weekly · <model>`.
|
|
406
|
+
- **Codex** — ChatGPT `wham/usage` API; token from `~/.codex/auth.json`. The
|
|
407
|
+
Spark model's own 5-hour and weekly windows come from
|
|
408
|
+
`additional_rate_limits[]` and print as their own `Codex — Spark` block.
|
|
420
409
|
- **Antigravity** — prefers agy's **local daemon**
|
|
421
410
|
(`RetrieveUserQuotaSummary` over its embedded gRPC-web endpoint), which is
|
|
422
411
|
the only source for the full categorized breakdown above. Works whenever any
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "playmaker-cli"
|
|
3
|
-
version = "0.
|
|
4
|
-
description = "Playing-coach CLI for orchestrating Claude Code, Codex, Antigravity and opencode sub-agents in parallel."
|
|
3
|
+
version = "0.11.0"
|
|
4
|
+
description = "Playing-coach CLI for orchestrating Claude Code, Codex, Antigravity, Kimi Code and opencode sub-agents in parallel."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.11"
|
|
7
7
|
license = "MIT"
|
|
@@ -19,6 +19,8 @@ keywords = [
|
|
|
19
19
|
"codex",
|
|
20
20
|
"antigravity",
|
|
21
21
|
"gemini",
|
|
22
|
+
"kimi",
|
|
23
|
+
"kimi-code",
|
|
22
24
|
"opencode",
|
|
23
25
|
"glm",
|
|
24
26
|
"subagents",
|
{playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/agent-gotchas.md
RENAMED
|
@@ -65,6 +65,22 @@ line from `agy models` / `opencode models` rather than typing it.
|
|
|
65
65
|
- Neither trap applies to **review** dispatches, which write nothing — which makes opencode a
|
|
66
66
|
perfectly good reviewer even where it is a shaky implementer.
|
|
67
67
|
|
|
68
|
+
## kimi (Kimi Code CLI)
|
|
69
|
+
|
|
70
|
+
- There is **no read-only mode below the prompt**: `-p` refuses `--auto`, `--yolo` and `--plan`
|
|
71
|
+
(exit 1) and already runs with auto-approval. Only dispatch work you would run unattended anyway.
|
|
72
|
+
- The session id arrives **only in the trailing `session.resume_hint` line**, so `playmaker list`
|
|
73
|
+
shows the agent session late — do not conclude a dispatch failed just because the id has not
|
|
74
|
+
appeared yet.
|
|
75
|
+
- Sessions are **per-cwd**: `kimi session list` from another directory shows nothing. Track the
|
|
76
|
+
session through playmaker, not through the CLI.
|
|
77
|
+
- The stream carries **no token/cost fields** — there is nothing to budget against mid-run.
|
|
78
|
+
- Exit codes: **exit 1 is non-retryable** (auth, quota, unknown model — "is not configured in
|
|
79
|
+
config.toml"); **exit 75 is retryable**. Fix the cause on 1, re-dispatch on 75.
|
|
80
|
+
- K3 is **slow on real tickets** — never `--sync` a big WP; dispatch detached and poll.
|
|
81
|
+
- Needs **Node ≥ 22.19** — hence the wrapper binary; point `[agents.kimi] binary` at it.
|
|
82
|
+
- **Always pass `-m kimi-code/k3-256k`** — the CLI default is the weaker K2.7 `kimi-for-coding`.
|
|
83
|
+
|
|
68
84
|
## Worktrees
|
|
69
85
|
|
|
70
86
|
Parallel WPs that touch the same files collide. Give each its own git worktree and dispatch with
|
|
@@ -18,15 +18,20 @@ pays. Four lanes:
|
|
|
18
18
|
(`haiku` for trivial mechanical work). playmaker runs it in `acceptEdits`: it writes freely
|
|
19
19
|
inside `--cwd` and is refused outside it, so keep every path in the prompt inside `--cwd`.
|
|
20
20
|
|
|
21
|
-
4. **External dispatch — `codex` / `agy` / `opencode`.** Each on its own subscription or
|
|
22
|
-
home for write-heavy parallel implementation that can leave the Anthropic
|
|
21
|
+
4. **External dispatch — `codex` / `agy` / `opencode` / `kimi`.** Each on its own subscription or
|
|
22
|
+
plan — the home for write-heavy parallel implementation that can leave the Anthropic
|
|
23
|
+
subscription.
|
|
23
24
|
- **`agy` (Antigravity)** carries more than Google models: alongside Gemini Flash and Pro tiers it
|
|
24
|
-
serves **Claude Sonnet/Opus (Thinking)** and a GPT-OSS
|
|
25
|
-
pool
|
|
26
|
-
|
|
25
|
+
serves **Claude Sonnet/Opus (Thinking)** and a GPT-OSS tier. Its Claude runs on *Google's*
|
|
26
|
+
pool and spends none of the Anthropic bucket — but that roster has trailed Anthropic's own
|
|
27
|
+
releases by a generation (Claude 4.6 on agy while Claude 5 ships on Anthropic), so tier it by
|
|
28
|
+
the version `agy models` shows, never by the name. Note the internal split: all Gemini models
|
|
29
|
+
share one bucket, Claude and GPT-OSS share another.
|
|
27
30
|
- **`opencode`** is the widest lane: one CLI over ~75 providers addressed as `provider/model` — a
|
|
28
31
|
GLM coding plan, or a model running locally on this machine, which spends no subscription quota
|
|
29
32
|
at all.
|
|
33
|
+
- **`kimi`** runs the Kimi Code CLI on its own subscription: senior tier (K3), native login, no
|
|
34
|
+
opencode.
|
|
30
35
|
|
|
31
36
|
**Never write an agy or opencode model name from memory** — run `agy models` / `opencode models` and
|
|
32
37
|
copy a line. Both rosters and their spelling move with releases, and playmaker validates `--model`
|
|
@@ -40,17 +45,17 @@ against the live roster, failing the dispatch on a stale name.
|
|
|
40
45
|
| is an independent stream to monitor separately | `dispatch claude --model sonnet` | tracked, detached, spares the top bucket |
|
|
41
46
|
| is heavy reasoning only the coach can do | coach | top tier, serial |
|
|
42
47
|
| is write-heavy and can leave Claude | codex / agy / opencode | their own quotas |
|
|
43
|
-
| needs
|
|
48
|
+
| needs a second strong reviewer without touching the Anthropic bucket | `dispatch agy --model <gemini-pro-high>` | near-senior judgment on an uncontended pool |
|
|
44
49
|
| is bulk work with every subscription low | `dispatch opencode --model <plan>/<model>` | a separate plan, untouched by the others |
|
|
45
50
|
| is mechanical and privacy-sensitive, or all quotas spent | `dispatch opencode --model <local>/<model>` | runs on this machine, costs wall-clock only |
|
|
46
51
|
|
|
47
52
|
## Tier-matching
|
|
48
53
|
|
|
49
|
-
- **Architectural / spec judgment / cross-module integration** → top tier (coach,
|
|
50
|
-
|
|
54
|
+
- **Architectural / spec judgment / cross-module integration** → top tier (coach, top-tier Codex,
|
|
55
|
+
Gemini-Pro-high on agy for review and advice rather than implementation).
|
|
51
56
|
- **Pattern-following implementation, scoped CRUD, mechanical refactor, test scaffolding, writing
|
|
52
|
-
inside an existing convention** → mid tier (Claude Sonnet,
|
|
53
|
-
|
|
57
|
+
inside an existing convention** → mid tier (Claude Sonnet, Gemini-Pro-low, mid-tier Codex;
|
|
58
|
+
agy's Claude models only when the roster shows a current version). Most delegated implementation lives here.
|
|
54
59
|
- **Recon, summarization, mechanical loops over many files, normalization** → cheap tier (Flash
|
|
55
60
|
tiers, Haiku, fast Codex modes).
|
|
56
61
|
|
|
@@ -13,15 +13,17 @@ the plan instead of quoting the numbers.
|
|
|
13
13
|
several tiers with independent buckets, and the whole point of pulling quotas is to push work
|
|
14
14
|
*away from* the depleted bucket and *toward* the fresh one.
|
|
15
15
|
|
|
16
|
-
- **Claude:** the
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
- **Claude:** the block shows the account-wide `Weekly` plus one `Weekly · <model>` row per
|
|
17
|
+
model-scoped bucket (e.g. `Weekly · Fable`). The model-scoped row is the one that empties first
|
|
18
|
+
during a long coach session — read it, not just `Weekly`.
|
|
19
19
|
- **Antigravity (`agy`):** one Google pool split by family — `Gemini 5h` / `Gemini weekly` and
|
|
20
20
|
`Claude/GPT 5h` / `Claude/GPT weekly`. All Gemini models share the first; Claude *and* GPT-OSS
|
|
21
21
|
share the second. So one Gemini reviewer plus one agy-Claude reviewer costs one hit in each of two
|
|
22
22
|
separate buckets — the cheapest way to buy two independent opinions. Requires agy's local daemon;
|
|
23
23
|
if the table says "daemon offline" it fell back to a coarse Gemini-only view.
|
|
24
|
-
- **Codex:**
|
|
24
|
+
- **Codex:** the main block is the primary Codex window; `Codex — Spark` is a separate block with
|
|
25
|
+
its own `Session` / `Weekly` rows for the Spark model, the junior Codex lane — route Spark work
|
|
26
|
+
off that block, not off the main one.
|
|
25
27
|
- **opencode:** the quota belongs to the *plan behind the provider*, not to the CLI — it appears
|
|
26
28
|
under that provider (e.g. a GLM coding plan's session and weekly credit windows) and reads
|
|
27
29
|
unsupported without a credential. A dispatch pointed at a **local** model spends nothing and never
|