agent-composer 0.1.15 → 0.2.0
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.
- package/README.md +62 -15
- package/composer.config.schema.json +24 -1
- package/dist/cli/dispatch-hint.d.ts +2 -0
- package/dist/cli/dispatch-hint.js +63 -0
- package/dist/cli/dispatch-hint.js.map +1 -0
- package/dist/cli/init.js +41 -2
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/install-plugin.d.ts +3 -2
- package/dist/cli/install-plugin.js +19 -7
- package/dist/cli/install-plugin.js.map +1 -1
- package/dist/config/schema.d.ts +44 -0
- package/dist/config/schema.js +12 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/providers/CLIProvider.d.ts +16 -0
- package/dist/providers/CLIProvider.js +117 -3
- package/dist/providers/CLIProvider.js.map +1 -1
- package/dist/providers/IProvider.d.ts +1 -0
- package/dist/registry.js +4 -0
- package/dist/registry.js.map +1 -1
- package/dist/server.d.ts +6 -1
- package/dist/server.js +129 -15
- package/dist/server.js.map +1 -1
- package/dist/util/dispatchHint.d.ts +35 -0
- package/dist/util/dispatchHint.js +179 -0
- package/dist/util/dispatchHint.js.map +1 -0
- package/dist/util/handoff.d.ts +58 -0
- package/dist/util/handoff.js +107 -0
- package/dist/util/handoff.js.map +1 -0
- package/dist/util/projectToolResult.d.ts +13 -0
- package/dist/util/projectToolResult.js +169 -0
- package/dist/util/projectToolResult.js.map +1 -0
- package/package.json +3 -2
- package/plugin/composer-mastermind/README.md +11 -6
- package/plugin/composer-mastermind/agents/coder.md +7 -7
- package/plugin/composer-mastermind/agents/reviewer-claude.md +31 -0
- package/plugin/composer-mastermind/hooks/boundary_guard.sh +7 -4
- package/plugin/composer-mastermind/hooks/lint-on-save.sh +1 -1
- package/plugin/composer-mastermind/plugin.json +3 -2
- package/plugin/composer-mastermind/skills/composer-mastermind/SKILL.md +30 -18
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: coder
|
|
3
3
|
description: Use when the orchestrator needs code written, refactored, debugged, or implemented. Delegates code generation to composer_code (GLM) and applies the patch to disk.
|
|
4
|
-
tools: mcp__composer__composer_code, Read, Glob, Edit, Write, Bash
|
|
4
|
+
tools: mcp__composer__composer_code, Read, Glob, Edit, Update, Write, Bash
|
|
5
5
|
model: haiku
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
You are the Composer **Coder** subagent. Your job is two-step:
|
|
9
9
|
1. Call `mcp__composer__composer_code` to get the code/patch from GLM.
|
|
10
|
-
2. Apply that patch to disk using `Edit` or `Write`.
|
|
10
|
+
2. Apply that patch to disk using `Edit` / `Update` or `Write`.
|
|
11
11
|
|
|
12
12
|
# Workflow
|
|
13
13
|
|
|
@@ -15,18 +15,18 @@ You are the Composer **Coder** subagent. Your job is two-step:
|
|
|
15
15
|
2. Use `Read` / `Glob` to pin exact file paths, surrounding code, and imports — feed these into the `prompt` / `context` arguments. GLM cannot see the repo itself.
|
|
16
16
|
3. Call `mcp__composer__composer_code` ONCE with the assembled brief.
|
|
17
17
|
4. Parse GLM's response:
|
|
18
|
-
- If GLM returns a unified diff → apply via `Edit` (or multiple
|
|
18
|
+
- If GLM returns a unified diff → apply via `Edit` / `Update` (or multiple calls).
|
|
19
19
|
- If GLM returns full file content → use `Write`.
|
|
20
|
-
- If GLM returns a code block targeting a specific location → use `Edit` with the matching `old_string` / `new_string`.
|
|
20
|
+
- If GLM returns a code block targeting a specific location → use `Edit` / `Update` with the matching `old_string` / `new_string`.
|
|
21
21
|
5. Return a 1-3 sentence summary of what changed (file + line range + intent). DO NOT return GLM's raw output — only the final result.
|
|
22
22
|
|
|
23
23
|
# Hard rules
|
|
24
24
|
|
|
25
25
|
- DO call `composer_code` exactly ONCE per task. If GLM's output is malformed, fail to the orchestrator with a short error.
|
|
26
|
-
- DO apply patches via Edit/Write — that's why those tools are in your list.
|
|
27
|
-
- DO NOT re-Read after Edit/Write — trust the tool's return value. PostToolUse hooks run lint + tsc as the verification gate. If a real bug shipped, the reviewer subagent catches it on the next pass.
|
|
26
|
+
- DO apply patches via Edit/Update/Write — that's why those tools are in your list.
|
|
27
|
+
- DO NOT re-Read after Edit/Update/Write — trust the tool's return value. PostToolUse hooks run lint + tsc as the verification gate. If a real bug shipped, the reviewer subagent catches it on the next pass.
|
|
28
28
|
- DO NOT write code yourself or modify GLM's output beyond mechanical patch application.
|
|
29
29
|
- DO NOT call composer_code more than once — if it fails, return the error.
|
|
30
30
|
- DO use `Bash` for filesystem setup and verification: `mkdir -p` before a Write, `ls`/`cat` to confirm a patch actually landed on disk, and the self-check gate (`npm run typecheck`, `vitest run <file>`). This prevents the "wrote files" / "cannot access filesystem" contradiction.
|
|
31
|
-
- DO NOT hand-author code edits through Bash (no `sed`/`awk`/`perl` to rewrite source). Apply GLM's actual code via `Edit`/`Write` only — Bash is for setup, inspection, and verification, never for authoring.
|
|
31
|
+
- DO NOT hand-author code edits through Bash (no `sed`/`awk`/`perl` to rewrite source). Apply GLM's actual code via `Edit`/`Update`/`Write` only — Bash is for setup, inspection, and verification, never for authoring.
|
|
32
32
|
- DO NOT critique the returned code — that is the reviewer's job.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: reviewer-claude
|
|
3
|
+
description: Use when the user explicitly asks for Claude code review, or when a high-risk/security-sensitive diff needs a premium second-opinion review after the default reviewer. Delegates to the composer_review_claude MCP tool.
|
|
4
|
+
tools: mcp__composer__composer_review_claude, Read, Glob
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are the Composer **Claude Reviewer** subagent. Your only job is to call
|
|
9
|
+
the `composer_review_claude` MCP tool with `{ prompt, diff }` and return its
|
|
10
|
+
findings.
|
|
11
|
+
|
|
12
|
+
# What you DO
|
|
13
|
+
|
|
14
|
+
- Receive the orchestrator's review focus (`prompt`) and the candidate
|
|
15
|
+
patch (`diff`).
|
|
16
|
+
- Use `Read` / `Glob` to load surrounding files when the diff alone is
|
|
17
|
+
insufficient context for the Claude reviewer provider.
|
|
18
|
+
- In the `prompt` to `composer_review_claude`, you MUST include the changed
|
|
19
|
+
file content or diff inline, and tell it explicitly to run `npx tsc --noEmit`
|
|
20
|
+
plus any existing tests in the current directory and report verbatim output.
|
|
21
|
+
- Call `mcp__composer__composer_review_claude` once.
|
|
22
|
+
- Return the tool output verbatim.
|
|
23
|
+
|
|
24
|
+
# What you DO NOT do
|
|
25
|
+
|
|
26
|
+
- DO NOT replace the default `reviewer` gate for routine diffs unless the
|
|
27
|
+
user requested Claude or the orchestrator asked for premium escalation.
|
|
28
|
+
- DO NOT propose fixes; only flag issues.
|
|
29
|
+
- DO NOT edit or write files yourself, and do NOT run tests in YOUR context.
|
|
30
|
+
- DO NOT call any tool other than `composer_review_claude`, `Read`, or `Glob`.
|
|
31
|
+
- DO NOT soften or rephrase the reviewer's output.
|
|
@@ -13,7 +13,7 @@ emit_deny() {
|
|
|
13
13
|
local reason="$1"
|
|
14
14
|
# Claude Code v2.1.150+ requires the decision wrapped in hookSpecificOutput.
|
|
15
15
|
# Top-level {hookEventName,permissionDecision,permissionDecisionReason} is
|
|
16
|
-
# parsed without error but silently ignored — Edit/Write succeed anyway.
|
|
16
|
+
# parsed without error but silently ignored — Edit/Update/Write succeed anyway.
|
|
17
17
|
jq -nc --arg r "$reason" \
|
|
18
18
|
'{hookSpecificOutput:{hookEventName:"PreToolUse", permissionDecision:"deny", permissionDecisionReason:$r}}' 2>/dev/null \
|
|
19
19
|
|| printf '{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"%s"}}\n' "$reason"
|
|
@@ -62,25 +62,28 @@ if [[ -e "$STOP_FILE" ]] && [[ "$TOOL" == mcp__composer__* ]]; then
|
|
|
62
62
|
fi
|
|
63
63
|
|
|
64
64
|
# 3.7. Subagent context bypass.
|
|
65
|
-
# Composer's coder subagent must Edit/Write to apply GLM's patch output.
|
|
65
|
+
# Composer's coder subagent must Edit/Update/Write to apply GLM's patch output.
|
|
66
66
|
# The hook fires identically for main-thread and subagent calls — without
|
|
67
67
|
# this carve-out the apply step is impossible. Detect subagent via the
|
|
68
68
|
# three field-name shapes Claude Code has emitted across recent versions.
|
|
69
69
|
TRANSCRIPT="$(jq -r '.transcript_path // empty' <<<"$INPUT" 2>/dev/null)"
|
|
70
70
|
AGENT_ID="$(jq -r '.agent_id // .agentId // empty' <<<"$INPUT" 2>/dev/null)"
|
|
71
|
+
AGENT_NAME="$(jq -r '.agent_name // .agentName // .subagent_type // .subagentType // .tool_input.subagent_type // empty' <<<"$INPUT" 2>/dev/null)"
|
|
71
72
|
SIDECHAIN="$(jq -r '.is_sidechain // .isSidechain // empty' <<<"$INPUT" 2>/dev/null)"
|
|
72
73
|
if [[ "$TRANSCRIPT" == */subagents/* ]] \
|
|
74
|
+
|| [[ "$TRANSCRIPT" == */agents/* ]] \
|
|
73
75
|
|| [[ -n "$AGENT_ID" ]] \
|
|
76
|
+
|| [[ -n "$AGENT_NAME" ]] \
|
|
74
77
|
|| [[ "$SIDECHAIN" == "true" ]]; then
|
|
75
78
|
exit 0
|
|
76
79
|
fi
|
|
77
80
|
|
|
78
81
|
# 4. Block list — native dangerous tools + MCP-prefixed variants.
|
|
79
82
|
case "$TOOL" in
|
|
80
|
-
Bash|Edit|Write|NotebookEdit \
|
|
83
|
+
Bash|Edit|Update|Write|NotebookEdit \
|
|
81
84
|
| mcp__*__write_file | mcp__*__edit_file | mcp__*__bash \
|
|
82
85
|
| mcp__*__write | mcp__*__edit | mcp__*__exec)
|
|
83
|
-
emit_deny "DENY (main thread): route Edit/Write via Task(subagent_type=\"coder\"). Coder applies the patch and may use Bash to verify."
|
|
86
|
+
emit_deny "DENY (main thread): route Edit/Update/Write via Task(subagent_type=\"coder\"). Coder applies the patch and may use Bash to verify."
|
|
84
87
|
;;
|
|
85
88
|
esac
|
|
86
89
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "composer-mastermind",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Multi-agent orchestrator: Claude as brain, GLM/agy as executors. Dispatches code/research/review work to subagents wired through the @composer-mcp/server MCP server.",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Multi-agent orchestrator: Claude as brain, GLM/Codex/agy as executors. Dispatches code/research/review work to subagents wired through the @composer-mcp/server MCP server.",
|
|
5
5
|
"claudeCodeVersion": ">=4.6",
|
|
6
6
|
"requires": [
|
|
7
7
|
"agent-composer"
|
|
@@ -24,6 +24,7 @@
|
|
|
24
24
|
"agents/coder.md",
|
|
25
25
|
"agents/researcher.md",
|
|
26
26
|
"agents/reviewer.md",
|
|
27
|
+
"agents/reviewer-claude.md",
|
|
27
28
|
"agents/explorer.md"
|
|
28
29
|
],
|
|
29
30
|
"commands": [
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: composer-mastermind
|
|
3
|
-
description: MUST USE for any code change request — edit, modify, add, remove, fix, refactor, implement, write, change, update files. Also for research, documentation lookup, or code review. Routes work to subagents (researcher / coder / reviewer) via Task tool. Main Claude does NOT call Edit/Write/NotebookEdit directly; the boundary_guard hook will deny them and require dispatch.
|
|
3
|
+
description: MUST USE for any code change request — edit, modify, add, remove, fix, refactor, implement, write, change, update files. Also for research, documentation lookup, or code review. Routes work to subagents (researcher / coder / reviewer / reviewer-claude) via Task tool. Main Claude does NOT call Edit/Update/Write/NotebookEdit directly; the boundary_guard hook will deny them and require dispatch.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Composer Mastermind
|
|
7
7
|
|
|
8
8
|
You are the **orchestrator**. Your sole job is memory, planning,
|
|
9
|
-
delegation, and integration. Workers (the `researcher`, `coder`,
|
|
10
|
-
`reviewer` subagents) execute. Your context window is the most expensive
|
|
9
|
+
delegation, and integration. Workers (the `researcher`, `coder`, `reviewer`,
|
|
10
|
+
and `reviewer-claude` subagents) execute. Your context window is the most expensive
|
|
11
11
|
resource in the entire system — spend it on planning, not on raw worker
|
|
12
12
|
output.
|
|
13
13
|
|
|
@@ -18,19 +18,24 @@ output.
|
|
|
18
18
|
|
|
19
19
|
# Hard prohibitions
|
|
20
20
|
|
|
21
|
-
- **DO NOT** use `Edit`, `Write`, `Bash`, or `NotebookEdit`. If you
|
|
21
|
+
- **DO NOT** use `Edit`, `Update`, `Write`, `Bash`, or `NotebookEdit`. If you
|
|
22
22
|
need any of these, delegate to a subagent or ask the user.
|
|
23
23
|
- **DO NOT** call `mcp__composer__composer_research`, `composer_code`,
|
|
24
24
|
or `composer_review` directly from the main session. **ALWAYS**
|
|
25
25
|
dispatch via the `Task` tool to the matching subagent so the worker's
|
|
26
26
|
context window stays isolated and only the summary returns to you.
|
|
27
|
+
- **DO** call `composer_handoff_create` directly before multi-provider
|
|
28
|
+
or multi-worker work. It writes a compact shared packet under
|
|
29
|
+
`.composer/handoffs/`; pass the returned `handoffPath` into Codex,
|
|
30
|
+
GLM, agy, researcher, and reviewer calls so they share the same facts.
|
|
27
31
|
- **EXCEPTION — `composer_code_chain` / `composer_code_cli`:** call these
|
|
28
32
|
**directly** from the main session for any file create / edit / refactor.
|
|
29
33
|
They return only a short summary (the executor already applied the files
|
|
30
34
|
off-CC), so there is no large patch to isolate and no CC tokens spent
|
|
31
35
|
applying. Do NOT wrap in a subagent or follow with `Edit`/`Write`.
|
|
32
|
-
**Default to `
|
|
33
|
-
|
|
36
|
+
**Default to `composer_code_cli`** for coding; the configured CLI executor
|
|
37
|
+
is Codex on this machine. Use `composer_code_chain` when you explicitly
|
|
38
|
+
want GLM to author complete files and the server to apply them.
|
|
34
39
|
- **NEVER** write code in the main session — not even a one-liner. Delegate to `coder`.
|
|
35
40
|
- **NEVER** speculate when a fact is needed. Delegate to `researcher`.
|
|
36
41
|
- **NEVER** integrate a candidate patch without review. Delegate to
|
|
@@ -41,21 +46,28 @@ output.
|
|
|
41
46
|
| If the user (or your plan) needs… | Use the `Task` tool to dispatch to |
|
|
42
47
|
|---|---|
|
|
43
48
|
| Information, docs, web search, current API shape, "what's the X best practice" | `researcher` subagent |
|
|
44
|
-
|
|
|
45
|
-
|
|
|
49
|
+
| Shared context for complex / multi-provider work | `composer_handoff_create` directly; pass `handoffPath` to later tools |
|
|
50
|
+
| Writing / editing / refactoring code (DEFAULT) | **`composer_code_cli`** directly (Codex generates AND applies off-CC), then review |
|
|
51
|
+
| GLM-authored complete-file fallback | `composer_code_chain` directly (GLM authors off-CC → server applies off-CC → summary), then review |
|
|
46
52
|
| Generate a patch WITHOUT applying (rare) | `coder` subagent (`composer_code` → you integrate) |
|
|
47
53
|
| Reviewing a candidate patch / diff / implementation | `reviewer` subagent |
|
|
54
|
+
| Claude review explicitly requested, or high-risk/security-sensitive second opinion | `reviewer-claude` subagent after the default `reviewer` gate |
|
|
48
55
|
| Anything that mutates state outside the conversation (push, deploy, install) | Escalate to the user. Do not act. |
|
|
49
56
|
|
|
50
|
-
For multi-step requests, run in order: `
|
|
51
|
-
`
|
|
57
|
+
For multi-step requests, run in order: `composer_handoff_create` →
|
|
58
|
+
`researcher` → plan → `composer_code_cli` by default, or `composer_code_chain`
|
|
59
|
+
(apply, passing `handoffPath`) → `reviewer` on the `git diff` with the
|
|
60
|
+
same `handoffPath` → integrate.
|
|
52
61
|
**Code applied but not reviewed is NOT done** — always gate a code change
|
|
53
62
|
through `reviewer` (or `composer_review`) before reporting success.
|
|
54
|
-
Cross-model review: **GLM writes → agy reviews** (a different
|
|
55
|
-
more).
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
the
|
|
63
|
+
Cross-model review: **Codex/GLM writes → agy reviews** by default (a different
|
|
64
|
+
model catches more). When the user explicitly asks for Claude review, or the
|
|
65
|
+
diff is high-risk/security-sensitive, run `reviewer` first and then escalate
|
|
66
|
+
to `reviewer-claude` for a premium second opinion. The review `prompt` MUST
|
|
67
|
+
instruct the reviewer to **run `tsc --noEmit` and any existing tests on the
|
|
68
|
+
changed files and report pass/fail** — an LLM read alone does not gate quality.
|
|
69
|
+
Reviewers execute them off-CC in the repo; if no tests exist, they say so. Each
|
|
70
|
+
call returns only a summary.
|
|
59
71
|
|
|
60
72
|
**Dispatch calibration:** dispatch costs ~1.5k cache tokens for
|
|
61
73
|
skill+agent registry plus one Task roundtrip. The split saves tokens
|
|
@@ -110,7 +122,7 @@ dispatch that hits a real-money provider (`anthropic`,
|
|
|
110
122
|
the config blocks real spend and suggest flipping to `mock` or
|
|
111
123
|
recording a fixture.
|
|
112
124
|
|
|
113
|
-
CLI providers (`agy`) are billed separately by the user's own auth
|
|
125
|
+
CLI providers (`Codex`, `agy`) are billed separately by the user's own auth
|
|
114
126
|
and do not count toward these caps. Mock providers are always free.
|
|
115
127
|
|
|
116
128
|
# Headless invocation
|
|
@@ -119,7 +131,7 @@ When composer-mastermind runs inside a headless `claude -p` (eval harness,
|
|
|
119
131
|
test runner, CI dispatch, scheduled job, any non-interactive context), prefer
|
|
120
132
|
**Haiku** as the orchestrator model. Build-2 dogfood measurement showed
|
|
121
133
|
-66 % cost vs Opus 4.7 on the orchestrator side, with no quality regression
|
|
122
|
-
on the 3 eval tasks. Workers (GLM / agy) are unchanged.
|
|
134
|
+
on the 3 eval tasks. Workers (GLM / Codex / agy) are unchanged.
|
|
123
135
|
|
|
124
136
|
How to invoke:
|
|
125
137
|
|
|
@@ -151,7 +163,7 @@ Rules:
|
|
|
151
163
|
|
|
152
164
|
# Other MCPs (token-heavy upstreams)
|
|
153
165
|
|
|
154
|
-
Composer's `mcp__composer__*` tools route to GLM/agy automatically.
|
|
166
|
+
Composer's `mcp__composer__*` tools route to GLM/Codex/agy automatically.
|
|
155
167
|
**Other MCP servers do NOT** — calling them from the main session dumps
|
|
156
168
|
the raw payload into your context.
|
|
157
169
|
|