playmaker-cli 0.12.0__tar.gz → 0.13.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 (56) hide show
  1. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/CHANGELOG.md +63 -0
  2. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/PKG-INFO +21 -9
  3. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/README.md +18 -6
  4. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/pyproject.toml +4 -2
  5. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/skills/playmaker-coach/SKILL.md +6 -5
  6. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/skills/playmaker-coach/references/agent-gotchas.md +17 -0
  7. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/skills/playmaker-coach/references/lanes.md +10 -6
  8. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/skills/playmaker-coach/references/quotas.md +4 -2
  9. playmaker_cli-0.13.0/src/playmaker/agents/muse.py +376 -0
  10. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/cli.py +13 -1
  11. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/quotas.py +163 -28
  12. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/registry.py +2 -0
  13. playmaker_cli-0.13.0/tests/fixtures/muse_exec.jsonl +4 -0
  14. playmaker_cli-0.13.0/tests/fixtures/muse_session.jsonl +13 -0
  15. playmaker_cli-0.13.0/tests/test_muse.py +182 -0
  16. playmaker_cli-0.13.0/tests/test_quotas_antigravity.py +489 -0
  17. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_quotas_kimi.py +21 -0
  18. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_registry.py +2 -2
  19. playmaker_cli-0.12.0/tests/test_quotas_antigravity.py +0 -209
  20. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/.gitignore +0 -0
  21. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/LICENSE +0 -0
  22. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/skills/playmaker-coach/references/commands.md +0 -0
  23. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/skills/playmaker-coach/references/prompt-templates.md +0 -0
  24. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/skills/playmaker-coach/references/review-board.md +0 -0
  25. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/skills/playmaker-coach/scripts/review-board.sh +0 -0
  26. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/__init__.py +0 -0
  27. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/__main__.py +0 -0
  28. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/agents/__init__.py +0 -0
  29. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/agents/agy.py +0 -0
  30. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/agents/base.py +0 -0
  31. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/agents/claude.py +0 -0
  32. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/agents/codex.py +0 -0
  33. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/agents/gemini.py +0 -0
  34. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/agents/kimi.py +0 -0
  35. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/agents/opencode.py +0 -0
  36. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/config.py +0 -0
  37. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/notify.py +0 -0
  38. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/state.py +0 -0
  39. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/src/playmaker/watcher.py +0 -0
  40. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/__init__.py +0 -0
  41. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/fixtures/kimi_wire.jsonl +0 -0
  42. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_agy.py +0 -0
  43. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_batch.py +0 -0
  44. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_binary.py +0 -0
  45. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_claude.py +0 -0
  46. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_codex.py +0 -0
  47. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_kimi.py +0 -0
  48. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_no_changes.py +0 -0
  49. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_opencode.py +0 -0
  50. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_permissions.py +0 -0
  51. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_quotas_claude.py +0 -0
  52. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_quotas_codex.py +0 -0
  53. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_quotas_freshness.py +0 -0
  54. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_quotas_zai.py +0 -0
  55. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_skill.py +0 -0
  56. {playmaker_cli-0.12.0 → playmaker_cli-0.13.0}/tests/test_state.py +0 -0
@@ -5,6 +5,69 @@ 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.13.0] - 2026-09-30
9
+
10
+ ### Added
11
+
12
+ - **`muse` lane — Meta's Muse Code CLI as a first-class agent.**
13
+ `playmaker dispatch muse` runs `muse exec --json …`, and the session id
14
+ arrives in the **first** stdout line — unlike kimi, whose id comes last — so
15
+ `playmaker list` shows it at once. Resume re-runs `muse exec` with
16
+ `--session-id` in the same cwd, and `summary` reads
17
+ `${XDG_DATA_HOME:-~/.local/share}/muse/sessions/YYYY/MM/DD/<uuid>/session.jsonl`.
18
+ Permissions default to Muse's sandbox with approval off and the workspace
19
+ trusted (`--disable-approval --trust-workspace` — without trust Muse ignores
20
+ the repo's AGENTS.md), and `[agents.muse]` takes `binary`, `model`,
21
+ `reasoning_effort`, `yolo`, `trust_workspace`, `sandbox_network` and
22
+ `permission_profile`. Muse Spark is a senior-tier peer of codex, GLM and K3,
23
+ on its own `muse login`. No usage/quota API exists, so `playmaker quotas`
24
+ has no Muse block.
25
+
26
+ ### Fixed
27
+
28
+ - **`playmaker quotas` printed `unsupported` for Kimi Code.** By 2026-09-29
29
+ the `/usages` endpoint stopped returning the `user` object — and with it
30
+ `membership.level` — and the probe required it, so a payload whose `usage`
31
+ and `limits[]` buckets were unchanged was rejected as unrecognised. `user`
32
+ is now optional (when present it must still be an object), so the Session
33
+ and Weekly rows render again; the `Kimi Code` header goes without the tier
34
+ the API no longer reports. The new `usages` block (`limit_5h`/`limit_7d`
35
+ with `used_ratio`) is not read: on the live account it said 0 while `usage`
36
+ counted 21 used.
37
+ - **`playmaker quotas` printed an error for Antigravity while agy worked.**
38
+ Two things broke at once. agy 1.2's embedded language server now refuses a
39
+ request without its CSRF token (401 `missing CSRF token`), and an agy someone
40
+ else started keeps that token to itself, so the local path found nothing it
41
+ could read. The remote fallback (`retrieveUserQuota`, ideType ANTIGRAVITY)
42
+ meanwhile began answering 403 "You do not have a valid license of this
43
+ product". The probe now starts a short-lived agy of its own when no running
44
+ one answers — headless (`--input-format stream-json -p=` waits on stdin, so
45
+ no TTY and no request spent), with a token it chose, in an empty scratch
46
+ directory, stopped as a process group once the summary is in (about 1.5 s;
47
+ capped at 12 s) — and reads the full Gemini and Claude/GPT 5h/weekly
48
+ windows off it. Process discovery also matches `agy-real`, the binary
49
+ behind an `agy` wrapper. If both sources still fail and the remote says "no
50
+ valid license", the block reads `unavailable` with a hint and keeps its last
51
+ success instead of `error`; any other remote failure is still an error. A
52
+ remote fallback now says why the daemon was missed.
53
+
54
+ ## [0.12.1] - 2026-09-08
55
+
56
+ ### Fixed
57
+
58
+ - **The bundled coach skill never named the `kimi` lane.** 0.11.0 made Kimi
59
+ Code a first-class agent and `references/lanes.md` listed it, but `SKILL.md`
60
+ — the file the coach reads first, and the description Claude Code matches a
61
+ request against — still said the workers were Claude, Codex, Antigravity and
62
+ opencode; the routing cheat-sheet sent write-heavy work that can leave
63
+ Claude to `codex / agy / opencode` only, and the tier table had no senior
64
+ seat for K3. A coach following the skill to the letter would never route a
65
+ WP to the one subscription nobody else on the machine draws from. The
66
+ description, the lane list, the per-agent-traps pointer, the cheat-sheet
67
+ and the tier table now name `kimi`; CONTRIBUTING's lane and handler lists
68
+ too. As with 0.5.1, this release exists because the skill ships inside the
69
+ wheel — doc fixes are not live until published.
70
+
8
71
  ## [0.12.0] - 2026-09-04
9
72
 
10
73
  ### Added
@@ -1,14 +1,14 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: playmaker-cli
3
- Version: 0.12.0
4
- Summary: Playing-coach CLI for orchestrating Claude Code, Codex, Antigravity, Kimi Code and opencode sub-agents in parallel.
3
+ Version: 0.13.0
4
+ Summary: Playing-coach CLI for orchestrating Claude Code, Codex, Antigravity, Kimi Code, Muse Code and opencode sub-agents in parallel.
5
5
  Project-URL: Homepage, https://github.com/vladsafedev/playmaker
6
6
  Project-URL: Repository, https://github.com/vladsafedev/playmaker
7
7
  Project-URL: Issues, https://github.com/vladsafedev/playmaker/issues
8
8
  Author-email: Vladislav Shulyugin <vladislav.shulyugin@gmail.com>
9
9
  License-Expression: MIT
10
10
  License-File: LICENSE
11
- Keywords: agents,ai,antigravity,claude,claude-code,cli,codex,gemini,glm,kimi,kimi-code,opencode,orchestration,subagents
11
+ Keywords: agents,ai,antigravity,claude,claude-code,cli,codex,gemini,glm,kimi,kimi-code,muse,muse-code,opencode,orchestration,subagents
12
12
  Classifier: Development Status :: 3 - Alpha
13
13
  Classifier: Environment :: Console
14
14
  Classifier: Intended Audience :: Developers
@@ -32,7 +32,7 @@ Description-Content-Type: text/markdown
32
32
  [![Python](https://img.shields.io/pypi/pyversions/playmaker-cli.svg?cacheSeconds=3600)](https://pypi.org/project/playmaker-cli/)
33
33
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
34
34
 
35
- **Run Claude Code, Codex, Antigravity, Kimi Code and opencode as parallel sub-agents from one terminal — and spend separate quotas instead of one.**
35
+ **Run Claude Code, Codex, Antigravity, Kimi Code, Muse Code and opencode as parallel sub-agents from one terminal — and spend separate quotas instead of one.**
36
36
 
37
37
  You stay in your Claude Code session doing the part only you can do. `playmaker`
38
38
  fans the rest out to other agent CLIs as detached processes, tracks them,
@@ -74,11 +74,13 @@ in one serial session:
74
74
  1. **Wall-clock speed.** A task that decomposes into 3–5 independent
75
75
  work-streams (schema, backend, frontend, tests, docs) finishes 2–4× faster
76
76
  when each stream runs as its own parallel agent.
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.
77
+ 2. **Provider arbitrage.** Codex, Antigravity, Kimi Code, Muse Code and
78
+ opencode quotas are entirely separate pools from your Anthropic plan. Every
79
+ slice you hand them is capacity your main session never spends — and
80
+ Antigravity's roster includes Claude Sonnet/Opus, so even Claude-quality
81
+ work can run on Google's pool. Kimi Code brings its own subscription with
82
+ the senior-tier K3; Muse Code adds Meta's senior-tier Muse Spark on its own
83
+ login.
82
84
  `opencode` widens this the most: one CLI fronting ~75 providers, from a z.ai
83
85
  GLM coding plan to models running locally on your own machine.
84
86
  3. **Bucket arbitrage inside one plan.** Headless `claude -p` draws on the same
@@ -151,6 +153,11 @@ The other agents differ, because their CLIs do:
151
153
  `--auto`, `--yolo` and `--plan`, and already runs with auto-approval, so
152
154
  there is no read-only mode below the prompt.
153
155
 
156
+ - **muse** runs sandboxed by default with approval off and the workspace
157
+ trusted (`--disable-approval --trust-workspace`). The sandbox denies writes
158
+ outside the repo, so `uv run`, npm and similar caches fail inside it — set
159
+ `yolo = true` if workers must run such gates.
160
+
154
161
  - **gemini** (legacy) runs with `--yolo`.
155
162
 
156
163
  ## Install
@@ -189,6 +196,7 @@ playmaker agents # which agent CLIs are reachable
189
196
  | **Antigravity (`agy`)** | bundled with [Antigravity](https://antigravity.google) | `--model claude-opus-4-6-thinking` — the roster moves, so read it from `agy models` |
190
197
  | **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
198
  | **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` |
199
+ | **Muse Code CLI** | `curl -fsSL https://dev.meta.ai/install.sh \| sh` | self-updating launcher in `~/.local/bin` (point `[agents.muse] binary` at it if a detached dispatch can't find it); log in once with `muse login` or set `META_API_KEY`; `--model muse-spark-1.3` — omit it and Muse's own default from `~/.config/muse/settings.json` applies |
192
200
  | **Gemini CLI** (legacy) | `npm i -g @google/gemini-cli` | still supported, superseded by `agy` |
193
201
 
194
202
  At least one is required; `playmaker agents` tells you which it can see.
@@ -324,6 +332,7 @@ and locates the session file the tool writes locally. Empirically:
324
332
  | Antigravity | `~/.gemini/antigravity-cli/brain/<conversation-id>/.system_generated/logs/transcript_full.jsonl` |
325
333
  | opencode | SQLite — `~/.local/share/opencode/opencode.db` (`session` / `message` / `part`); playmaker keeps a pointer at `~/.playmaker/opencode/<id>.session` |
326
334
  | kimi | `~/.kimi-code/sessions/wd_<cwd-basename>_<hash>/session_<id>/agents/main/wire.jsonl` (per-cwd; `KIMI_CODE_HOME` overrides the root) |
335
+ | muse | `${XDG_DATA_HOME:-~/.local/share}/muse/sessions/YYYY/MM/DD/<session-uuid>/session.jsonl` (the date directory is the session's creation date; a resume appends to the same file) |
327
336
  | Gemini | `~/.gemini/tmp/<cwd-basename>/chats/session-<ts>-<short_id>.{json,jsonl}` |
328
337
 
329
338
  `thread` and `summary` normalize all of them into the same turn list, so every
@@ -450,6 +459,9 @@ whole Z.ai block. Routing a subtask is choosing which of them to spend.
450
459
  `~/.kimi-code/credentials/kimi-code-env-*.json` (`$KIMI_CODE_HOME` overrides
451
460
  the root). Its 5-hour `Session` and weekly rows are separate percentage
452
461
  buckets; no credential reads as *unsupported* rather than a failed probe.
462
+ - **Muse Code** — no usage or quota API exists (billing is pay-as-you-go or a
463
+ subscription via accountscenter.meta.com), so `playmaker quotas` has no Muse
464
+ block.
453
465
 
454
466
  Reading these at *model* granularity is the point: they are the load-balancing
455
467
  input the coach skill uses to route each subtask.
@@ -5,7 +5,7 @@
5
5
  [![Python](https://img.shields.io/pypi/pyversions/playmaker-cli.svg?cacheSeconds=3600)](https://pypi.org/project/playmaker-cli/)
6
6
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
7
7
 
8
- **Run Claude Code, Codex, Antigravity, Kimi Code and opencode as parallel sub-agents from one terminal — and spend separate quotas instead of one.**
8
+ **Run Claude Code, Codex, Antigravity, Kimi Code, Muse Code and opencode as parallel sub-agents from one terminal — and spend separate quotas instead of one.**
9
9
 
10
10
  You stay in your Claude Code session doing the part only you can do. `playmaker`
11
11
  fans the rest out to other agent CLIs as detached processes, tracks them,
@@ -47,11 +47,13 @@ in one serial session:
47
47
  1. **Wall-clock speed.** A task that decomposes into 3–5 independent
48
48
  work-streams (schema, backend, frontend, tests, docs) finishes 2–4× faster
49
49
  when each stream runs as its own parallel agent.
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.
50
+ 2. **Provider arbitrage.** Codex, Antigravity, Kimi Code, Muse Code and
51
+ opencode quotas are entirely separate pools from your Anthropic plan. Every
52
+ slice you hand them is capacity your main session never spends — and
53
+ Antigravity's roster includes Claude Sonnet/Opus, so even Claude-quality
54
+ work can run on Google's pool. Kimi Code brings its own subscription with
55
+ the senior-tier K3; Muse Code adds Meta's senior-tier Muse Spark on its own
56
+ login.
55
57
  `opencode` widens this the most: one CLI fronting ~75 providers, from a z.ai
56
58
  GLM coding plan to models running locally on your own machine.
57
59
  3. **Bucket arbitrage inside one plan.** Headless `claude -p` draws on the same
@@ -124,6 +126,11 @@ The other agents differ, because their CLIs do:
124
126
  `--auto`, `--yolo` and `--plan`, and already runs with auto-approval, so
125
127
  there is no read-only mode below the prompt.
126
128
 
129
+ - **muse** runs sandboxed by default with approval off and the workspace
130
+ trusted (`--disable-approval --trust-workspace`). The sandbox denies writes
131
+ outside the repo, so `uv run`, npm and similar caches fail inside it — set
132
+ `yolo = true` if workers must run such gates.
133
+
127
134
  - **gemini** (legacy) runs with `--yolo`.
128
135
 
129
136
  ## Install
@@ -162,6 +169,7 @@ playmaker agents # which agent CLIs are reachable
162
169
  | **Antigravity (`agy`)** | bundled with [Antigravity](https://antigravity.google) | `--model claude-opus-4-6-thinking` — the roster moves, so read it from `agy models` |
163
170
  | **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
171
  | **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` |
172
+ | **Muse Code CLI** | `curl -fsSL https://dev.meta.ai/install.sh \| sh` | self-updating launcher in `~/.local/bin` (point `[agents.muse] binary` at it if a detached dispatch can't find it); log in once with `muse login` or set `META_API_KEY`; `--model muse-spark-1.3` — omit it and Muse's own default from `~/.config/muse/settings.json` applies |
165
173
  | **Gemini CLI** (legacy) | `npm i -g @google/gemini-cli` | still supported, superseded by `agy` |
166
174
 
167
175
  At least one is required; `playmaker agents` tells you which it can see.
@@ -297,6 +305,7 @@ and locates the session file the tool writes locally. Empirically:
297
305
  | Antigravity | `~/.gemini/antigravity-cli/brain/<conversation-id>/.system_generated/logs/transcript_full.jsonl` |
298
306
  | opencode | SQLite — `~/.local/share/opencode/opencode.db` (`session` / `message` / `part`); playmaker keeps a pointer at `~/.playmaker/opencode/<id>.session` |
299
307
  | kimi | `~/.kimi-code/sessions/wd_<cwd-basename>_<hash>/session_<id>/agents/main/wire.jsonl` (per-cwd; `KIMI_CODE_HOME` overrides the root) |
308
+ | muse | `${XDG_DATA_HOME:-~/.local/share}/muse/sessions/YYYY/MM/DD/<session-uuid>/session.jsonl` (the date directory is the session's creation date; a resume appends to the same file) |
300
309
  | Gemini | `~/.gemini/tmp/<cwd-basename>/chats/session-<ts>-<short_id>.{json,jsonl}` |
301
310
 
302
311
  `thread` and `summary` normalize all of them into the same turn list, so every
@@ -423,6 +432,9 @@ whole Z.ai block. Routing a subtask is choosing which of them to spend.
423
432
  `~/.kimi-code/credentials/kimi-code-env-*.json` (`$KIMI_CODE_HOME` overrides
424
433
  the root). Its 5-hour `Session` and weekly rows are separate percentage
425
434
  buckets; no credential reads as *unsupported* rather than a failed probe.
435
+ - **Muse Code** — no usage or quota API exists (billing is pay-as-you-go or a
436
+ subscription via accountscenter.meta.com), so `playmaker quotas` has no Muse
437
+ block.
426
438
 
427
439
  Reading these at *model* granularity is the point: they are the load-balancing
428
440
  input the coach skill uses to route each subtask.
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "playmaker-cli"
3
- version = "0.12.0"
4
- description = "Playing-coach CLI for orchestrating Claude Code, Codex, Antigravity, Kimi Code and opencode sub-agents in parallel."
3
+ version = "0.13.0"
4
+ description = "Playing-coach CLI for orchestrating Claude Code, Codex, Antigravity, Kimi Code, Muse Code and opencode sub-agents in parallel."
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
7
7
  license = "MIT"
@@ -21,6 +21,8 @@ keywords = [
21
21
  "gemini",
22
22
  "kimi",
23
23
  "kimi-code",
24
+ "muse",
25
+ "muse-code",
24
26
  "opencode",
25
27
  "glm",
26
28
  "subagents",
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  name: playmaker-coach
3
- description: Team-lead mode for coding work. Decompose the task into work packages, dispatch them to Claude/Codex/Antigravity(agy)/opencode workers through the `playmaker` CLI, then run an automatic multi-agent review board over every diff before it lands, and drive the fix cycles. Use for ANY request that will change code in more than one place, needs an independent review pass, or has two or more parts that can run at once — "implement", "add", "fix", "refactor", "wire up", "сделай", "почини", "добавь", "реализуй", "собери". NOT for answering a question, reading or explaining code, a single-line edit, or a git/ops command.
3
+ description: Team-lead mode for coding work. Decompose the task into work packages, dispatch them to Claude/Codex/Antigravity(agy)/opencode/Kimi Code(kimi)/Muse Code(muse) workers through the `playmaker` CLI, then run an automatic multi-agent review board over every diff before it lands, and drive the fix cycles. Use for ANY request that will change code in more than one place, needs an independent review pass, or has two or more parts that can run at once — "implement", "add", "fix", "refactor", "wire up", "сделай", "почини", "добавь", "реализуй", "собери". NOT for answering a question, reading or explaining code, a single-line edit, or a git/ops command.
4
4
  ---
5
5
 
6
6
  # playmaker-coach — you are the tech lead, not the typist
7
7
 
8
- `playmaker` dispatches sub-tasks to Codex / Antigravity (`agy`) / opencode / a sibling Claude,
9
- tracks them, and returns their threads. This skill is the judgment on top: what to split,
10
- who gets which slice, how to size it so verifying is cheap, and **how the review board runs**.
8
+ `playmaker` dispatches sub-tasks to Codex / Antigravity (`agy`) / opencode / Kimi Code (`kimi`) /
9
+ Muse Code (`muse`) / a sibling Claude, tracks them, and returns their threads. This skill is the
10
+ judgment on top: what to split, who gets which slice, how to size it so verifying is cheap, and
11
+ **how the review board runs**.
11
12
 
12
13
  **The coach produces plans, prompts, verdicts and integration — not feature diffs.** Your context
13
14
  window is the most expensive resource on the table. Every file you read yourself and every line you
@@ -118,7 +119,7 @@ playmaker dispatch <agent> --model <name> --batch "$B" --cwd "$(pwd)" --prompt "
118
119
  Detached by default — that is the point; never `--sync` a whole fan-out. Always pass `--cwd`,
119
120
  `--batch` (one summary ping for the batch), and `--model` unless the profile says otherwise.
120
121
  Prompt shape: `references/prompt-templates.md`. Per-agent traps (agy scratch dir, opencode relative
121
- paths, codex model roster): `references/agent-gotchas.md`.
122
+ paths, codex model roster, kimi's K2.7 default and exit codes, muse's sandbox): `references/agent-gotchas.md`.
122
123
 
123
124
  Parallel WPs that touch the same files go in **git worktrees**, one per WP, or they will collide.
124
125
 
@@ -81,6 +81,23 @@ line from `agy models` / `opencode models` rather than typing it.
81
81
  - Needs **Node ≥ 22.19** — hence the wrapper binary; point `[agents.kimi] binary` at it.
82
82
  - **Always pass `-m kimi-code/k3-256k`** — the CLI default is the weaker K2.7 `kimi-for-coding`.
83
83
 
84
+ ## muse (Muse Code CLI)
85
+
86
+ - The default run keeps Muse's **sandbox**: approval off, workspace trusted, writes inside the
87
+ repo fine — but writes **outside** it are denied, so `uv run pytest` fails initializing
88
+ `~/.cache/uv` (npm/pnpm caches alike). A WP whose gate needs those caches needs
89
+ `[agents.muse] yolo = true`.
90
+ - **Without workspace trust Muse ignores the repo's AGENTS.md.** playmaker passes
91
+ `--trust-workspace` by default; `trust_workspace = false` drops it, and repo rules stop
92
+ applying.
93
+ - Exit codes: **0** turn completed; **1** run failed (bad model, auth) — the reason is in the
94
+ terminal event and stderr's last line; **2** usage error; **130/143** SIGINT/SIGTERM.
95
+ - **Resume only from the same cwd** — a `--session-id` elsewhere would need
96
+ `--allow-workspace-switch`, which playmaker never passes.
97
+ - stderr **always** carries informational lines such as `muse: workspace root: …`, even on
98
+ success — they are not errors.
99
+ - The stream has **no cost fields** — token usage exists only in the session log on disk.
100
+
84
101
  ## Worktrees
85
102
 
86
103
  Parallel WPs that touch the same files collide. Give each its own git worktree and dispatch with
@@ -18,9 +18,9 @@ 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` / `kimi`.** Each on its own subscription or
22
- plan — the home for write-heavy parallel implementation that can leave the Anthropic
23
- subscription.
21
+ 4. **External dispatch — `codex` / `agy` / `opencode` / `kimi` / `muse`.** Each on its own
22
+ subscription or plan — the home for write-heavy parallel implementation that can leave the
23
+ Anthropic subscription.
24
24
  - **`agy` (Antigravity)** carries more than Google models: alongside Gemini Flash and Pro tiers it
25
25
  serves **Claude Sonnet/Opus (Thinking)** and a GPT-OSS tier. Its Claude runs on *Google's*
26
26
  pool and spends none of the Anthropic bucket — but that roster has trailed Anthropic's own
@@ -32,6 +32,8 @@ pays. Four lanes:
32
32
  at all.
33
33
  - **`kimi`** runs the Kimi Code CLI on its own subscription: senior tier (K3), native login, no
34
34
  opencode.
35
+ - **`muse`** runs Meta's Muse Code CLI on its own login: senior tier (Muse Spark), sandboxed
36
+ by default.
35
37
 
36
38
  **Never write an agy or opencode model name from memory** — run `agy models` / `opencode models` and
37
39
  copy a line. Both rosters and their spelling move with releases, and playmaker validates `--model`
@@ -44,15 +46,17 @@ against the live roster, failing the dispatch on a stale name.
44
46
  | writes files, coach integrates the result directly | in-session sub-agent | write-capable, returns into context |
45
47
  | is an independent stream to monitor separately | `dispatch claude --model sonnet` | tracked, detached, spares the top bucket |
46
48
  | is heavy reasoning only the coach can do | coach | top tier, serial |
47
- | is write-heavy and can leave Claude | codex / agy / opencode | their own quotas |
48
- | needs a second strong reviewer without touching the Anthropic bucket | `dispatch agy --model <gemini-pro-high>` | near-senior judgment on an uncontended pool |
49
+ | is write-heavy and can leave Claude | codex / agy / opencode / kimi / muse | their own quotas |
50
+ | needs senior judgment on a pool nobody else on the machine draws from | `dispatch kimi -m kimi-code/k3-256k` / `dispatch muse` | K3 and Muse Spark on their own subscriptions; K3 is slow, so detached only |
51
+ | needs a second strong reviewer without touching the Anthropic bucket | `dispatch agy --model <gemini-pro-high>` / `dispatch muse` | near-senior judgment on an uncontended pool; Muse Spark is senior |
49
52
  | is bulk work with every subscription low | `dispatch opencode --model <plan>/<model>` | a separate plan, untouched by the others |
50
53
  | is mechanical and privacy-sensitive, or all quotas spent | `dispatch opencode --model <local>/<model>` | runs on this machine, costs wall-clock only |
51
54
 
52
55
  ## Tier-matching
53
56
 
54
57
  - **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).
58
+ K3 on `kimi`, Muse Spark on `muse`, Gemini-Pro-high on agy for review and advice rather than
59
+ implementation).
56
60
  - **Pattern-following implementation, scoped CRUD, mechanical refactor, test scaffolding, writing
57
61
  inside an existing convention** → mid tier (Claude Sonnet, Gemini-Pro-low, mid-tier Codex;
58
62
  agy's Claude models only when the roster shows a current version). Most delegated implementation lives here.
@@ -19,8 +19,10 @@ several tiers with independent buckets, and the whole point of pulling quotas is
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
- separate buckets — the cheapest way to buy two independent opinions. Requires agy's local daemon;
23
- if the table says "daemon offline" it fell back to a coarse Gemini-only view.
22
+ separate buckets — the cheapest way to buy two independent opinions. Read off agy's local daemon —
23
+ playmaker starts a short-lived one itself when none answers. "daemon offline" means it fell back
24
+ to a coarse Gemini-only view; `unavailable` means neither source answered — the lane still works,
25
+ so route by the last success and say the numbers are old.
24
26
  - **Codex:** the main block is the primary Codex window; `Codex — Spark` is a separate block with
25
27
  its own `Session` / `Weekly` rows for the Spark model, the junior Codex lane — route Spark work
26
28
  off that block, not off the main one.