cc-workspace 4.0.4 → 4.1.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 +24 -10
- package/bin/cli.js +108 -6
- package/global-skills/agents/implementer.md +1 -2
- package/global-skills/agents/team-lead.md +14 -5
- package/global-skills/agents/workspace-init.md +1 -2
- package/global-skills/bootstrap-repo/SKILL.md +1 -0
- package/global-skills/cross-service-check/SKILL.md +1 -0
- package/global-skills/cycle-retrospective/SKILL.md +1 -0
- package/global-skills/dispatch-feature/SKILL.md +24 -5
- package/global-skills/dispatch-feature/references/anti-patterns.md +3 -0
- package/global-skills/dispatch-feature/references/spawn-templates.md +47 -7
- package/global-skills/merge-prep/SKILL.md +1 -0
- package/global-skills/plan-review/SKILL.md +1 -0
- package/global-skills/refresh-profiles/SKILL.md +1 -0
- package/global-skills/rules/model-routing.md +1 -13
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Claude Code Multi-Workspace Orchestrator v4.0
|
|
1
|
+
# Claude Code Multi-Workspace Orchestrator v4.1.0
|
|
2
2
|
|
|
3
3
|
A system to pilot multi-service projects from Claude Code.
|
|
4
4
|
The orchestrator (Opus) never codes in repos. It clarifies, plans,
|
|
@@ -66,8 +66,10 @@ claude --agent team-lead
|
|
|
66
66
|
npx cc-workspace update
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
Updates
|
|
70
|
-
|
|
69
|
+
Updates all components if the package version is newer:
|
|
70
|
+
- **Global**: skills, rules, agents in `~/.claude/`
|
|
71
|
+
- **Local** (if orchestrator/ found): hooks, settings.json, CLAUDE.md, templates, _TEMPLATE.md
|
|
72
|
+
- **Never overwritten**: workspace.md, constitution.md, plans/
|
|
71
73
|
|
|
72
74
|
### Diagnostic
|
|
73
75
|
|
|
@@ -164,7 +166,7 @@ detects if the target path is in a repo (presence of `.git/`).
|
|
|
164
166
|
|
|
165
167
|
Protection layers:
|
|
166
168
|
1. `disallowedTools: Bash` in agent frontmatter
|
|
167
|
-
2. `
|
|
169
|
+
2. `tools` whitelist in agent frontmatter (note: `allowed-tools` is the skill equivalent)
|
|
168
170
|
3. `PreToolUse` path-aware hook in agent frontmatter
|
|
169
171
|
4. `block-orchestrator-writes.sh` hook in .claude/hooks/
|
|
170
172
|
|
|
@@ -330,12 +332,24 @@ cc-workspace/
|
|
|
330
332
|
|
|
331
333
|
## Idempotence
|
|
332
334
|
|
|
333
|
-
|
|
334
|
-
-
|
|
335
|
-
- Always
|
|
336
|
-
- Always
|
|
337
|
-
-
|
|
338
|
-
- Global components
|
|
335
|
+
Both `init` and `update` are safe to re-run:
|
|
336
|
+
- **Never overwritten**: `workspace.md`, `constitution.md`, `plans/*.md` (user content)
|
|
337
|
+
- **Always regenerated**: `settings.json`, `block-orchestrator-writes.sh` (security), `CLAUDE.md`, `_TEMPLATE.md`
|
|
338
|
+
- **Always copied**: hooks, templates
|
|
339
|
+
- **Always regenerated on init**: `service-profiles.md` (fresh scan)
|
|
340
|
+
- **Global components**: only updated if the version is newer (or `--force`)
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## Changelog v4.0.5 -> v4.1.0
|
|
345
|
+
|
|
346
|
+
| # | Feature | Detail |
|
|
347
|
+
|---|---------|--------|
|
|
348
|
+
| 1 | **Atomic commits** | Plan template splits tasks into commit-sized units (~300 lines max). Teammates commit as they go, not a single giant commit at the end. |
|
|
349
|
+
| 2 | **Progress tracker** | Plan includes a progress tracker table: commits planned vs done per service, visible at a glance. |
|
|
350
|
+
| 3 | **Commit strategy in spawn templates** | All teammate templates (backend, frontend, infra) include a mandatory commit strategy section with layer-by-layer split guidelines. |
|
|
351
|
+
| 4 | **Commit granularity enforcement** | Team-lead checks commit count vs plan, flags giant commits (>400 lines), requires split before accepting a wave. |
|
|
352
|
+
| 5 | **Teammate commit reporting** | Teammates report commits made (hash + message) alongside files and tests. |
|
|
339
353
|
|
|
340
354
|
---
|
|
341
355
|
|
package/bin/cli.js
CHANGED
|
@@ -324,7 +324,7 @@ You clarify, plan, delegate, track.
|
|
|
324
324
|
|
|
325
325
|
## Security
|
|
326
326
|
- \`disallowedTools: Bash\` — no direct shell
|
|
327
|
-
- \`
|
|
327
|
+
- \`tools\` : Read, Write, Edit, Glob, Grep, Task(implementer, Explore), Teammate, SendMessage
|
|
328
328
|
- Hook \`PreToolUse\` path-aware: allows orchestrator/, blocks sibling repos
|
|
329
329
|
|
|
330
330
|
> settings.json contains env vars + hooks registration.
|
|
@@ -399,7 +399,7 @@ function planTemplateContent() {
|
|
|
399
399
|
## Impacted services
|
|
400
400
|
| Service | Impacted | Branch | Teammate | Status |
|
|
401
401
|
|---------|----------|--------|----------|--------|
|
|
402
|
-
| | yes/no | | | ⏳ |
|
|
402
|
+
| | yes/no | feature/[name] | | ⏳ |
|
|
403
403
|
|
|
404
404
|
## Waves
|
|
405
405
|
- Wave 1: [producers]
|
|
@@ -407,12 +407,33 @@ function planTemplateContent() {
|
|
|
407
407
|
- Wave 3: [infra]
|
|
408
408
|
|
|
409
409
|
## API contract
|
|
410
|
-
[Exact shapes]
|
|
410
|
+
[Exact request/response shapes for each endpoint]
|
|
411
411
|
|
|
412
412
|
## Tasks
|
|
413
413
|
|
|
414
414
|
### [service]
|
|
415
|
+
|
|
416
|
+
#### Commit 1: [data layer — models, migrations, DTOs]
|
|
417
|
+
- ⏳ [task]
|
|
415
418
|
- ⏳ [task]
|
|
419
|
+
> ~N files, ~N lines
|
|
420
|
+
|
|
421
|
+
#### Commit 2: [business logic — use cases, services]
|
|
422
|
+
- ⏳ [task]
|
|
423
|
+
> ~N files, ~N lines
|
|
424
|
+
|
|
425
|
+
#### Commit 3: [API/UI layer — controllers, routes, components]
|
|
426
|
+
- ⏳ [task]
|
|
427
|
+
> ~N files, ~N lines
|
|
428
|
+
|
|
429
|
+
#### Commit 4: [tests]
|
|
430
|
+
- ⏳ [task]
|
|
431
|
+
> ~N files, ~N lines
|
|
432
|
+
|
|
433
|
+
## Progress tracker
|
|
434
|
+
| Service | Commits planned | Commits done | Tests | Status |
|
|
435
|
+
|---------|:-:|:-:|:-:|:-:|
|
|
436
|
+
| | N | 0 | ⏳ | ⏳ |
|
|
416
437
|
|
|
417
438
|
## QA
|
|
418
439
|
- ⏳ Cross-service check
|
|
@@ -424,6 +445,80 @@ function planTemplateContent() {
|
|
|
424
445
|
`;
|
|
425
446
|
}
|
|
426
447
|
|
|
448
|
+
// ─── Update local orchestrator/ components ──────────────────
|
|
449
|
+
// Called by `update` when run from a workspace that contains orchestrator/
|
|
450
|
+
// or from inside orchestrator/ itself.
|
|
451
|
+
function updateLocal() {
|
|
452
|
+
const cwd = process.cwd();
|
|
453
|
+
// Detect if we're inside orchestrator/ or in the parent workspace
|
|
454
|
+
let orchDir;
|
|
455
|
+
if (fs.existsSync(path.join(cwd, "workspace.md"))) {
|
|
456
|
+
orchDir = cwd; // inside orchestrator/
|
|
457
|
+
} else if (fs.existsSync(path.join(cwd, "orchestrator", "workspace.md"))) {
|
|
458
|
+
orchDir = path.join(cwd, "orchestrator");
|
|
459
|
+
} else {
|
|
460
|
+
return false; // no local orchestrator found
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
step(`Updating local: ${c.dim}${orchDir}${c.reset}`);
|
|
464
|
+
let count = 0;
|
|
465
|
+
|
|
466
|
+
// ── Hooks (always overwrite — security critical) ──
|
|
467
|
+
const hooksDir = path.join(orchDir, ".claude", "hooks");
|
|
468
|
+
if (fs.existsSync(hooksDir)) {
|
|
469
|
+
generateBlockHook(hooksDir);
|
|
470
|
+
count++;
|
|
471
|
+
const hooksSrc = path.join(SKILLS_DIR, "hooks");
|
|
472
|
+
if (fs.existsSync(hooksSrc)) {
|
|
473
|
+
for (const f of fs.readdirSync(hooksSrc)) {
|
|
474
|
+
if (!f.endsWith(".sh") || f === "verify-cycle-complete.sh") continue;
|
|
475
|
+
copyFile(path.join(hooksSrc, f), path.join(hooksDir, f));
|
|
476
|
+
fs.chmodSync(path.join(hooksDir, f), 0o755);
|
|
477
|
+
count++;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
ok(`${count} hooks updated`);
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
// ── settings.json (always regenerate — hook registration) ──
|
|
484
|
+
const settingsPath = path.join(orchDir, ".claude", "settings.json");
|
|
485
|
+
if (fs.existsSync(path.join(orchDir, ".claude"))) {
|
|
486
|
+
generateSettings(orchDir);
|
|
487
|
+
ok("settings.json regenerated");
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
// ── Templates (always overwrite — reference docs) ──
|
|
491
|
+
const templatesDir = path.join(SKILLS_DIR, "templates");
|
|
492
|
+
const localTemplates = path.join(orchDir, "templates");
|
|
493
|
+
if (fs.existsSync(templatesDir) && fs.existsSync(localTemplates)) {
|
|
494
|
+
let tplCount = 0;
|
|
495
|
+
for (const f of fs.readdirSync(templatesDir)) {
|
|
496
|
+
if (f.endsWith(".md")) {
|
|
497
|
+
copyFile(path.join(templatesDir, f), path.join(localTemplates, f));
|
|
498
|
+
tplCount++;
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
ok(`${tplCount} templates updated`);
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
// ── CLAUDE.md (always overwrite — generated file, not user content) ──
|
|
505
|
+
const claudeMd = path.join(orchDir, "CLAUDE.md");
|
|
506
|
+
fs.writeFileSync(claudeMd, claudeMdContent());
|
|
507
|
+
ok("CLAUDE.md updated");
|
|
508
|
+
|
|
509
|
+
// ── Plan template (always overwrite — structure only) ──
|
|
510
|
+
const planTpl = path.join(orchDir, "plans", "_TEMPLATE.md");
|
|
511
|
+
if (fs.existsSync(path.join(orchDir, "plans"))) {
|
|
512
|
+
fs.writeFileSync(planTpl, planTemplateContent());
|
|
513
|
+
ok("_TEMPLATE.md updated");
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
// ── NEVER touch: workspace.md, constitution.md, plans/*.md, service-profiles.md ──
|
|
517
|
+
info(`${c.dim}workspace.md, constitution.md, plans/ — preserved${c.reset}`);
|
|
518
|
+
|
|
519
|
+
return true;
|
|
520
|
+
}
|
|
521
|
+
|
|
427
522
|
// ─── Setup workspace ────────────────────────────────────────
|
|
428
523
|
function setupWorkspace(workspacePath, projectName) {
|
|
429
524
|
const wsAbs = path.resolve(workspacePath);
|
|
@@ -685,10 +780,15 @@ switch (command) {
|
|
|
685
780
|
const force = args.includes("--force");
|
|
686
781
|
log(BANNER);
|
|
687
782
|
const updated = installGlobals(force);
|
|
688
|
-
|
|
783
|
+
const localUpdated = (updated || force) ? updateLocal() : false;
|
|
784
|
+
if (!updated && !force) {
|
|
689
785
|
log(`\n ${c.dim}Already up to date. Use --force to reinstall.${c.reset}\n`);
|
|
690
786
|
} else {
|
|
691
|
-
|
|
787
|
+
if (localUpdated) {
|
|
788
|
+
log(`\n ${c.green}${c.bold}Update complete (globals + local orchestrator/).${c.reset}\n`);
|
|
789
|
+
} else {
|
|
790
|
+
log(`\n ${c.green}${c.bold}Update complete (globals only — no local orchestrator/ found).${c.reset}\n`);
|
|
791
|
+
}
|
|
692
792
|
}
|
|
693
793
|
break;
|
|
694
794
|
}
|
|
@@ -721,7 +821,9 @@ switch (command) {
|
|
|
721
821
|
log(` Installs global skills/rules/agents if version is newer.`);
|
|
722
822
|
log("");
|
|
723
823
|
log(` ${c.cyan}npx cc-workspace update${c.reset} ${c.dim}[--force]${c.reset}`);
|
|
724
|
-
log(` Update global components
|
|
824
|
+
log(` Update global components (skills, rules, agents).`);
|
|
825
|
+
log(` Also updates local orchestrator/ if found (hooks, settings, CLAUDE.md, templates).`);
|
|
826
|
+
log(` Never overwrites: workspace.md, constitution.md, plans/.`);
|
|
725
827
|
log("");
|
|
726
828
|
log(` ${c.cyan}npx cc-workspace doctor${c.reset}`);
|
|
727
829
|
log(` Check all components are installed and consistent.`);
|
|
@@ -7,9 +7,8 @@ description: >
|
|
|
7
7
|
(Agent Teams teammates get automatic isolation).
|
|
8
8
|
isolation: worktree
|
|
9
9
|
model: sonnet
|
|
10
|
-
|
|
10
|
+
tools: Read, Write, Edit, MultiEdit, Bash, Glob, Grep
|
|
11
11
|
memory: project
|
|
12
|
-
effort: medium
|
|
13
12
|
maxTurns: 50
|
|
14
13
|
---
|
|
15
14
|
|
|
@@ -6,10 +6,9 @@ description: >
|
|
|
6
6
|
quality. Never codes in repos — can write in orchestrator/.
|
|
7
7
|
Triggered via claude --agent team-lead.
|
|
8
8
|
model: opus
|
|
9
|
-
|
|
9
|
+
tools: Read, Write, Edit, Glob, Grep, Task(implementer, Explore), Teammate, SendMessage
|
|
10
10
|
disallowedTools: Bash
|
|
11
11
|
memory: project
|
|
12
|
-
effort: high
|
|
13
12
|
maxTurns: 200
|
|
14
13
|
hooks:
|
|
15
14
|
PreToolUse:
|
|
@@ -79,11 +78,11 @@ The workflow depends on the chosen mode:
|
|
|
79
78
|
- **Mode D**: phases 1-2 then ONE teammate only, no waves
|
|
80
79
|
|
|
81
80
|
1. CLARIFY — ask the missing questions (max 5, formulated as choices)
|
|
82
|
-
2. PLAN — write the plan in markdown, wait for approval
|
|
81
|
+
2. PLAN — write the plan in markdown with commit-sized task units, wait for approval
|
|
83
82
|
3. DISPATCH — send teammates in waves (API/data first, frontend next)
|
|
84
|
-
4. COLLECT — update the plan with results
|
|
83
|
+
4. COLLECT — update the plan with results, verify commit granularity
|
|
85
84
|
5. VERIFY — cross-service check then QA ruthless
|
|
86
|
-
6. REPORT — present the summary, propose fixes
|
|
85
|
+
6. REPORT — present the summary with commit inventory, propose fixes
|
|
87
86
|
|
|
88
87
|
## Dispatch mechanism — Agent Teams
|
|
89
88
|
|
|
@@ -100,12 +99,22 @@ For lightweight read-only tasks (scans, checks), you can use Task
|
|
|
100
99
|
with Explore subagents (Haiku) — faster and cheaper.
|
|
101
100
|
Explore subagents are read-only, they do NOT need a worktree.
|
|
102
101
|
|
|
102
|
+
## Commit granularity enforcement
|
|
103
|
+
|
|
104
|
+
When collecting teammate reports:
|
|
105
|
+
- **Check commit count vs plan** — the plan defines N commit units, the teammate must have N+ commits
|
|
106
|
+
- **Flag giant commits** — any commit >400 lines gets flagged in the session log
|
|
107
|
+
- **If a teammate made a single commit for all tasks**: ask them to split via SendMessage
|
|
108
|
+
before accepting the wave as complete
|
|
109
|
+
- **Progress tracker** in the plan must be updated after each teammate report
|
|
110
|
+
|
|
103
111
|
## What you NEVER do
|
|
104
112
|
- Write code in sibling repos (that's the teammates' job)
|
|
105
113
|
- Modify a file in a repo (delegate via Agent Teams)
|
|
106
114
|
- Guess when you can ask
|
|
107
115
|
- Forget to include the full constitution in spawn prompts
|
|
108
116
|
- Forget UX standards for frontend teammates
|
|
117
|
+
- Accept a single giant commit covering multiple tasks — enforce atomic commits
|
|
109
118
|
- Let the context grow (compact after each cycle)
|
|
110
119
|
- Launch wave 2 before wave 1 has reported
|
|
111
120
|
|
|
@@ -6,9 +6,8 @@ description: >
|
|
|
6
6
|
Interactively configures workspace.md and constitution.md if [UNCONFIGURED].
|
|
7
7
|
Run once via: claude --agent workspace-init
|
|
8
8
|
model: sonnet
|
|
9
|
-
|
|
9
|
+
tools: Read, Write, Edit, Bash, Glob, Grep, Task(Explore)
|
|
10
10
|
memory: project
|
|
11
|
-
effort: medium
|
|
12
11
|
maxTurns: 80
|
|
13
12
|
---
|
|
14
13
|
|
|
@@ -63,6 +63,23 @@ Create `./plans/{feature-name}.md` using `./plans/_TEMPLATE.md`.
|
|
|
63
63
|
Include: context, clarification answers, services impacted, dependency waves,
|
|
64
64
|
detailed tasks per service, API contract (exact shapes), and autonomous choices if applicable.
|
|
65
65
|
|
|
66
|
+
### Commit planning (mandatory)
|
|
67
|
+
|
|
68
|
+
For EACH service, break tasks into **commit-sized units** (~300 lines max each):
|
|
69
|
+
- **Commit 1**: Data layer — models, migrations, DTOs, repositories
|
|
70
|
+
- **Commit 2**: Business logic — use cases, services, validation
|
|
71
|
+
- **Commit 3**: API/UI layer — controllers, routes, components, pages
|
|
72
|
+
- **Commit 4**: Tests for the above
|
|
73
|
+
|
|
74
|
+
Each commit unit in the plan must:
|
|
75
|
+
- Have a descriptive title (becomes the commit message)
|
|
76
|
+
- List the specific tasks it covers
|
|
77
|
+
- Estimate ~N files, ~N lines
|
|
78
|
+
- Be independently compilable and testable
|
|
79
|
+
|
|
80
|
+
The plan also includes a **progress tracker** table summarizing commits planned
|
|
81
|
+
vs done per service, visible at a glance.
|
|
82
|
+
|
|
66
83
|
### Dependency waves
|
|
67
84
|
|
|
68
85
|
- **Wave 1**: Producers — API backend, data/analytics, auth (define contracts)
|
|
@@ -127,11 +144,13 @@ Never mix: one teammate per repo per wave. No two teammates editing the same rep
|
|
|
127
144
|
## Phase 4: Collect and update
|
|
128
145
|
|
|
129
146
|
On each teammate report:
|
|
130
|
-
1. Update `./plans/{feature-name}.md` — statuses ✅ or ❌
|
|
131
|
-
2.
|
|
132
|
-
3.
|
|
133
|
-
4.
|
|
134
|
-
5. If
|
|
147
|
+
1. Update `./plans/{feature-name}.md` — statuses ✅ or ❌ per commit unit
|
|
148
|
+
2. Update the **progress tracker** table (commits done / planned)
|
|
149
|
+
3. Note dead code found
|
|
150
|
+
4. Verify commit count and sizes — flag if a teammate made a single giant commit
|
|
151
|
+
5. If a teammate failed → analyze, correct plan, re-dispatch
|
|
152
|
+
6. **Session log** entry: `[HH:MM] teammate-[service]: [status], [N] commits, [N] files, tests [pass/fail]`
|
|
153
|
+
7. If current wave done → launch next wave
|
|
135
154
|
|
|
136
155
|
## Phase 5: Post-implementation
|
|
137
156
|
|
|
@@ -28,3 +28,6 @@ Reference file for dispatch-feature. Loaded on-demand when Claude needs reminder
|
|
|
28
28
|
| Plan has vague tasks like "implement feature" | Each task should have a clear input→output | Rewrite plan with specific tasks |
|
|
29
29
|
| API contract has `{}` placeholder | Frontend can't build types | Complete the contract shapes before wave 2 |
|
|
30
30
|
| Two teammates on same repo in same wave | Git conflicts guaranteed | Split into separate waves |
|
|
31
|
+
| Giant commit (500+ lines) | PR unreadable, impossible to review | Split into atomic commits (~300 lines max) per logical unit |
|
|
32
|
+
| Single commit at the end | All-or-nothing, no partial rollback | Commit after each logical unit — data, logic, API, tests |
|
|
33
|
+
| Task without commit boundary | Teammate guesses the split | Plan must define commit units per task |
|
|
@@ -27,10 +27,23 @@ You are teammate-[service]. Read the CLAUDE.md in your repo first.
|
|
|
27
27
|
3. Use the LSP tool for code navigation (go-to-definition, find-references)
|
|
28
28
|
4. Run the existing test suite — report pass/fail
|
|
29
29
|
5. List any dead code created or exposed by your changes
|
|
30
|
-
6.
|
|
30
|
+
6. **Atomic commits** — follow the commit plan below
|
|
31
31
|
7. If you hit an architectural decision NOT covered by the plan: STOP and
|
|
32
32
|
report the dilemma instead of guessing
|
|
33
|
-
8. Report back: files created/modified, tests pass/fail, dead code found,
|
|
33
|
+
8. Report back: files created/modified, tests pass/fail, dead code found,
|
|
34
|
+
commits made (hash + message), blockers
|
|
35
|
+
|
|
36
|
+
## Commit strategy (mandatory)
|
|
37
|
+
- **One commit per logical unit** — each task in "Your tasks" = one commit minimum
|
|
38
|
+
- **Max ~300 lines per commit** — if a task produces more, split it:
|
|
39
|
+
1. Data layer first (models, migrations, DTOs, repositories)
|
|
40
|
+
2. Business logic (use cases, services, validation)
|
|
41
|
+
3. API layer (controllers, routes, requests)
|
|
42
|
+
4. Tests for the above
|
|
43
|
+
- **Commit message format**: `feat(domain): description` or `fix(domain): description`
|
|
44
|
+
- **Each commit must compile and pass tests** — no broken intermediate states
|
|
45
|
+
- **Commit as you go** — do NOT accumulate all changes for a single final commit
|
|
46
|
+
- Branch: `feature/[name]` — create it on your first commit
|
|
34
47
|
```
|
|
35
48
|
|
|
36
49
|
## Frontend teammate spawn template
|
|
@@ -57,9 +70,23 @@ You are teammate-[service]. Read the CLAUDE.md in your repo first.
|
|
|
57
70
|
4. Every new component MUST handle 4 states: skeleton loader, empty+CTA, error+retry, success
|
|
58
71
|
5. Run the existing test suite — report pass/fail
|
|
59
72
|
6. List any dead code (unused components, composables, store actions, CSS)
|
|
60
|
-
7.
|
|
73
|
+
7. **Atomic commits** — follow the commit plan below
|
|
61
74
|
8. If you hit an architectural decision NOT covered by the plan: STOP and escalate
|
|
62
|
-
9. Report back: files created/modified, tests pass/fail, dead code found,
|
|
75
|
+
9. Report back: files created/modified, tests pass/fail, dead code found,
|
|
76
|
+
UX compliance, commits made (hash + message), blockers
|
|
77
|
+
|
|
78
|
+
## Commit strategy (mandatory)
|
|
79
|
+
- **One commit per logical unit** — each task = one commit minimum
|
|
80
|
+
- **Max ~300 lines per commit** — if a task produces more, split it:
|
|
81
|
+
1. Types/interfaces and API service layer
|
|
82
|
+
2. Store/composables (state management)
|
|
83
|
+
3. Components (one commit per complex component)
|
|
84
|
+
4. Page integration + routing
|
|
85
|
+
5. Tests for the above
|
|
86
|
+
- **Commit message format**: `feat(domain): description` or `fix(domain): description`
|
|
87
|
+
- **Each commit must compile and pass tests** — no broken intermediate states
|
|
88
|
+
- **Commit as you go** — do NOT accumulate all changes for a single final commit
|
|
89
|
+
- Branch: `feature/[name]` — create it on your first commit
|
|
63
90
|
```
|
|
64
91
|
|
|
65
92
|
## Infra/Config teammate spawn template
|
|
@@ -78,13 +105,18 @@ You are teammate-[service]. Read the CLAUDE.md in your repo first.
|
|
|
78
105
|
2. Implement the configuration changes following the full constitution
|
|
79
106
|
3. Verify consistency with other services (env vars, routes, schemas)
|
|
80
107
|
4. No code changes — only configuration
|
|
81
|
-
5.
|
|
82
|
-
6.
|
|
83
|
-
7.
|
|
108
|
+
5. **Atomic commits** — one commit per logical config change
|
|
109
|
+
6. Commit message format: `chore(service): description`
|
|
110
|
+
7. If you hit an architectural decision NOT covered by the plan: STOP and escalate
|
|
111
|
+
8. Report back: files modified, consistency check results,
|
|
112
|
+
commits made (hash + message), blockers
|
|
113
|
+
- Branch: `feature/[name]`
|
|
84
114
|
```
|
|
85
115
|
|
|
86
116
|
## Explore/Haiku subagent template (read-only)
|
|
87
117
|
|
|
118
|
+
Use `Task` with `subagent_type: Explore` and `model: haiku` for lightweight scans.
|
|
119
|
+
|
|
88
120
|
```
|
|
89
121
|
You are an explorer scanning [target]. Read-only — do NOT modify any files.
|
|
90
122
|
|
|
@@ -94,3 +126,11 @@ You are an explorer scanning [target]. Read-only — do NOT modify any files.
|
|
|
94
126
|
## Report format
|
|
95
127
|
[what to extract and how to format the findings]
|
|
96
128
|
```
|
|
129
|
+
|
|
130
|
+
## Failure handling
|
|
131
|
+
|
|
132
|
+
When a teammate reports back:
|
|
133
|
+
- **Test regression or missing file** (recoverable): fix plan, re-dispatch ONCE
|
|
134
|
+
- **Architectural decision not in plan** (blocking): STOP the wave, escalate to user
|
|
135
|
+
- **No report after extended time**: send a status request via SendMessage
|
|
136
|
+
- **Max re-dispatches per teammate per wave**: 2. After that, escalate to user.
|
|
@@ -5,6 +5,7 @@ description: >
|
|
|
5
5
|
listed in workspace.md. Use when conventions changed, or user says
|
|
6
6
|
"refresh profiles", "update profiles", "re-read CLAUDE.md files".
|
|
7
7
|
context: fork
|
|
8
|
+
agent: Explore
|
|
8
9
|
disable-model-invocation: true
|
|
9
10
|
model: haiku
|
|
10
11
|
allowed-tools: Read, Write, Glob, Grep
|
|
@@ -12,7 +12,7 @@ If you write code for a repo (not a markdown plan), you have failed — delegate
|
|
|
12
12
|
|
|
13
13
|
## Security layers (3 layers in agent frontmatter — no settings.json pollution)
|
|
14
14
|
1. **Agent frontmatter**: `disallowedTools` — refused at model level
|
|
15
|
-
2. **Agent frontmatter**: `
|
|
15
|
+
2. **Agent frontmatter**: `tools` — whitelist of permitted tools (note: `allowed-tools` is for skills only)
|
|
16
16
|
3. **Agent hook**: `PreToolUse` in frontmatter — structured deny response
|
|
17
17
|
|
|
18
18
|
## Routing table
|
|
@@ -24,18 +24,6 @@ If you write code for a repo (not a markdown plan), you have failed — delegate
|
|
|
24
24
|
| Explorers / cross-checks | **Haiku** | `model: haiku` in skill/agent frontmatter |
|
|
25
25
|
| Plan review | **Haiku** | `model: haiku` in skill frontmatter |
|
|
26
26
|
|
|
27
|
-
## Effort levels
|
|
28
|
-
| Role | Effort | Rationale |
|
|
29
|
-
|------|--------|-----------|
|
|
30
|
-
| Orchestrator (team-lead) | **high** | Complex planning, multi-step reasoning |
|
|
31
|
-
| Implementation teammates | **medium** | Focused implementation, clear scope |
|
|
32
|
-
| QA investigators | **medium** | Thorough but bounded analysis |
|
|
33
|
-
| Explorers / cross-checks (Haiku) | **low** | Fast scans, read-only |
|
|
34
|
-
| Plan review (Haiku) | **low** | Structural checks, no deep reasoning |
|
|
35
|
-
|
|
36
|
-
Effort levels are set in agent frontmatter (`effort: high|medium|low|max`).
|
|
37
|
-
Use `max` only for critical debugging or complex architectural decisions.
|
|
38
|
-
|
|
39
27
|
## Custom agent `implementer`
|
|
40
28
|
For Task subagents that need to write code in an isolated worktree,
|
|
41
29
|
use `@implementer` (frontmatter with `isolation: worktree`).
|
package/package.json
CHANGED