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.
Files changed (50) hide show
  1. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/CHANGELOG.md +37 -0
  2. playmaker_cli-0.9.0/README.md → playmaker_cli-0.11.0/PKG-INFO +55 -12
  3. playmaker_cli-0.9.0/PKG-INFO → playmaker_cli-0.11.0/README.md +28 -39
  4. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/pyproject.toml +4 -2
  5. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/agent-gotchas.md +16 -0
  6. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/lanes.md +15 -10
  7. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/quotas.md +6 -4
  8. playmaker_cli-0.11.0/src/playmaker/agents/kimi.py +459 -0
  9. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/cli.py +32 -20
  10. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/quotas.py +82 -11
  11. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/registry.py +2 -0
  12. playmaker_cli-0.11.0/tests/fixtures/kimi_wire.jsonl +5 -0
  13. playmaker_cli-0.11.0/tests/test_kimi.py +333 -0
  14. playmaker_cli-0.11.0/tests/test_quotas_claude.py +197 -0
  15. playmaker_cli-0.11.0/tests/test_quotas_codex.py +175 -0
  16. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/.gitignore +0 -0
  17. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/LICENSE +0 -0
  18. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/SKILL.md +0 -0
  19. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/commands.md +0 -0
  20. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/prompt-templates.md +0 -0
  21. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/references/review-board.md +0 -0
  22. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/skills/playmaker-coach/scripts/review-board.sh +0 -0
  23. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/__init__.py +0 -0
  24. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/__main__.py +0 -0
  25. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/__init__.py +0 -0
  26. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/agy.py +0 -0
  27. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/base.py +0 -0
  28. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/claude.py +0 -0
  29. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/codex.py +0 -0
  30. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/gemini.py +0 -0
  31. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/agents/opencode.py +0 -0
  32. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/config.py +0 -0
  33. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/notify.py +0 -0
  34. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/state.py +0 -0
  35. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/src/playmaker/watcher.py +0 -0
  36. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/__init__.py +0 -0
  37. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_agy.py +0 -0
  38. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_batch.py +0 -0
  39. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_binary.py +0 -0
  40. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_claude.py +0 -0
  41. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_codex.py +0 -0
  42. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_no_changes.py +0 -0
  43. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_opencode.py +0 -0
  44. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_permissions.py +0 -0
  45. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_quotas_antigravity.py +0 -0
  46. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_quotas_freshness.py +0 -0
  47. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_quotas_zai.py +0 -0
  48. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_registry.py +0 -0
  49. {playmaker_cli-0.9.0 → playmaker_cli-0.11.0}/tests/test_skill.py +0 -0
  50. {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
  [![CI](https://github.com/vladsafedev/playmaker/actions/workflows/ci.yml/badge.svg)](https://github.com/vladsafedev/playmaker/actions/workflows/ci.yml)
@@ -5,7 +32,7 @@
5
32
  [![Python](https://img.shields.io/pypi/pyversions/playmaker-cli.svg?cacheSeconds=3600)](https://pypi.org/project/playmaker-cli/)
6
33
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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 are entirely
51
- separate pools from your Anthropic plan. Every slice you hand them is
52
- capacity your main session never spends — and Antigravity's roster includes
53
- Claude Sonnet/Opus, so even Claude-quality work can run on Google's pool.
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 ████████████████░░░░ 80% left resets in 3h 12m
368
- Weekly ███████████░░░░░░░░░ 55% left resets in 4d 6h
369
- Sonnet ███████████████████░ 95% left resets in 4d 6h
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 **separate
388
- buckets**. So is every agy row, and so is the whole Z.ai block. Routing a
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
- - **Codex** ChatGPT `wham/usage` API; token from `~/.codex/auth.json`.
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
  [![CI](https://github.com/vladsafedev/playmaker/actions/workflows/ci.yml/badge.svg)](https://github.com/vladsafedev/playmaker/actions/workflows/ci.yml)
@@ -32,7 +5,7 @@ Description-Content-Type: text/markdown
32
5
  [![Python](https://img.shields.io/pypi/pyversions/playmaker-cli.svg?cacheSeconds=3600)](https://pypi.org/project/playmaker-cli/)
33
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](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 are entirely
78
- separate pools from your Anthropic plan. Every slice you hand them is
79
- capacity your main session never spends — and Antigravity's roster includes
80
- Claude Sonnet/Opus, so even Claude-quality work can run on Google's pool.
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 ████████████████░░░░ 80% left resets in 3h 12m
395
- Weekly ███████████░░░░░░░░░ 55% left resets in 4d 6h
396
- Sonnet ███████████████████░ 95% left resets in 4d 6h
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 **separate
415
- buckets**. So is every agy row, and so is the whole Z.ai block. Routing a
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
- - **Codex** ChatGPT `wham/usage` API; token from `~/.codex/auth.json`.
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.9.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",
@@ -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 plan — the
22
- home for write-heavy parallel implementation that can leave the Anthropic subscription.
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 mid tier. Its Claude runs on *Google's*
25
- pool top-tier Claude judgment that spends none of the Anthropic bucket. Note the internal
26
- split: all Gemini models share one bucket, Claude and GPT-OSS share another.
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 top-tier Claude but the Anthropic bucket is precious | `dispatch agy --model <claude-opus-thinking>` | Claude quality on Google's pool |
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, agy's Claude-Opus
50
- or Gemini-Pro-high, top-tier Codex).
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, agy's Claude-Sonnet / Gemini-Pro-low,
53
- mid-tier Codex). Most delegated implementation lives here.
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 top-tier weekly and the mid-tier weekly are **independent**. The coach and
17
- in-session sub-agents spend the top one; the mid tier usually sits idle. Push mid-tier work there
18
- instead of burning the scarce bucket.
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:** top-tier versus lighter modes, where the account plan carries them.
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