specweave 1.0.340 → 1.0.342

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 (28) hide show
  1. package/bin/specweave.js +11 -0
  2. package/dist/src/cli/commands/init.d.ts.map +1 -1
  3. package/dist/src/cli/commands/init.js +34 -3
  4. package/dist/src/cli/commands/init.js.map +1 -1
  5. package/dist/src/cli/commands/resolve-structure.d.ts +28 -0
  6. package/dist/src/cli/commands/resolve-structure.d.ts.map +1 -0
  7. package/dist/src/cli/commands/resolve-structure.js +85 -0
  8. package/dist/src/cli/commands/resolve-structure.js.map +1 -0
  9. package/dist/src/cli/helpers/init/directory-structure.d.ts +2 -2
  10. package/dist/src/cli/helpers/init/directory-structure.d.ts.map +1 -1
  11. package/dist/src/cli/helpers/init/directory-structure.js +3 -1
  12. package/dist/src/cli/helpers/init/directory-structure.js.map +1 -1
  13. package/dist/src/cli/helpers/init/repository-setup.d.ts +5 -1
  14. package/dist/src/cli/helpers/init/repository-setup.d.ts.map +1 -1
  15. package/dist/src/cli/helpers/init/repository-setup.js +207 -12
  16. package/dist/src/cli/helpers/init/repository-setup.js.map +1 -1
  17. package/dist/src/cli/helpers/init/summary-banner.d.ts +4 -0
  18. package/dist/src/cli/helpers/init/summary-banner.d.ts.map +1 -1
  19. package/dist/src/cli/helpers/init/summary-banner.js +8 -0
  20. package/dist/src/cli/helpers/init/summary-banner.js.map +1 -1
  21. package/dist/src/cli/helpers/init/types.d.ts +5 -0
  22. package/dist/src/cli/helpers/init/types.d.ts.map +1 -1
  23. package/package.json +1 -1
  24. package/plugins/specweave/hooks/hooks.json +9 -0
  25. package/plugins/specweave/hooks/v2/guards/increment-existence-guard.sh +150 -0
  26. package/plugins/specweave/skills/increment/SKILL.md +26 -0
  27. package/plugins/specweave/skills/team-build/SKILL.md +6 -0
  28. package/plugins/specweave/skills/team-lead/SKILL.md +98 -8
@@ -9,6 +9,15 @@
9
9
  "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/dispatchers/pre-tool-use.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
10
10
  }
11
11
  ]
12
+ },
13
+ {
14
+ "matcher": "TeamCreate",
15
+ "hooks": [
16
+ {
17
+ "type": "command",
18
+ "command": "bash -c 'W=\"${CLAUDE_PLUGIN_ROOT}/hooks/universal/fail-fast-wrapper.sh\"; S=\"${CLAUDE_PLUGIN_ROOT}/hooks/v2/guards/increment-existence-guard.sh\"; [[ -x \"$W\" ]] && exec \"$W\" \"$S\" || (cat >/dev/null && printf \"{\\\"decision\\\":\\\"allow\\\"}\")'"
19
+ }
20
+ ]
12
21
  }
13
22
  ],
14
23
  "SessionStart": [
@@ -0,0 +1,150 @@
1
+ #!/bin/bash
2
+ # increment-existence-guard.sh - Enforces spec-first principle for team creation
3
+ #
4
+ # PURPOSE:
5
+ # Team creation (TeamCreate) MUST NOT proceed until at least one increment
6
+ # exists with a substantive spec.md. This enforces the core SpecWeave principle:
7
+ # /sw:increment → /sw:team-lead (never skip the spec phase)
8
+ #
9
+ # Without a spec, agents have no source of truth for scope, acceptance criteria,
10
+ # or task boundaries. Skipping /sw:increment leads to uncoordinated implementation
11
+ # where agents infer scope from natural language alone.
12
+ #
13
+ # DETECTION:
14
+ # - Fires on TeamCreate tool calls (global via hooks.json + skill-scoped via frontmatter)
15
+ # - Scans .specweave/increments/ and repositories/*/*/.specweave/increments/
16
+ # - Requires spec.md to pass ALL checks:
17
+ # 1. File exists and has >500 bytes of content
18
+ # 2. No template markers (exact strings or {{VAR}} patterns)
19
+ # 3. At least one acceptance criterion (AC- pattern)
20
+ # - BLOCKS if no qualifying increment found
21
+ # - ALLOWS if at least one passes all checks
22
+ #
23
+ # @since 1.0.342
24
+
25
+ set -e
26
+
27
+ INPUT=$(cat)
28
+ TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // .toolName // ""')
29
+
30
+ # Only check TeamCreate
31
+ if [[ "$TOOL_NAME" != "TeamCreate" ]]; then
32
+ echo '{"decision":"allow"}'
33
+ exit 0
34
+ fi
35
+
36
+ # Template markers — spec.md with these is a template, not a real spec
37
+ TEMPLATE_MARKERS=(
38
+ "[Story Title]"
39
+ "[user type]"
40
+ "[goal]"
41
+ "[benefit]"
42
+ "[Specific, testable criterion]"
43
+ "[Component 1]"
44
+ "[High-level description"
45
+ "{{RESOLVED_PROJECT}}"
46
+ "TEMPLATE FILE"
47
+ )
48
+
49
+ check_spec() {
50
+ local spec_path="$1"
51
+ if [[ ! -f "$spec_path" ]]; then
52
+ return 1
53
+ fi
54
+
55
+ # Check 1: Minimum size (500 bytes — a real spec with user stories and ACs)
56
+ local size
57
+ size=$(wc -c < "$spec_path" 2>/dev/null || echo "0")
58
+ size=$(echo "$size" | tr -d '[:space:]')
59
+ if [[ "$size" -le 500 ]]; then
60
+ return 1
61
+ fi
62
+
63
+ # Check 2: Scan FULL file for template markers (not just first 10 lines)
64
+ local content
65
+ content=$(cat "$spec_path" 2>/dev/null || echo "")
66
+
67
+ # Exact template marker strings
68
+ for marker in "${TEMPLATE_MARKERS[@]}"; do
69
+ if [[ "$content" == *"$marker"* ]]; then
70
+ return 1
71
+ fi
72
+ done
73
+
74
+ # Regex: {{UPPERCASE_VAR}} mustache placeholders (e.g., {{FEATURE_NAME}})
75
+ if echo "$content" | grep -qE '\{\{[A-Z_]+\}\}' 2>/dev/null; then
76
+ return 1
77
+ fi
78
+
79
+ # Regex: High count of [Bracket Placeholders] suggests unfilled template
80
+ # (threshold: 4+ to avoid false positives from markdown links [text](url))
81
+ local bracket_count
82
+ bracket_count=$(echo "$content" | grep -cE '\[[A-Z][^]]{2,}\]' 2>/dev/null || true)
83
+ bracket_count=$(echo "$bracket_count" | tail -1 | tr -d '[:space:]')
84
+ if [[ -n "$bracket_count" ]] && [[ "$bracket_count" -ge 4 ]]; then
85
+ return 1
86
+ fi
87
+
88
+ # Check 3: Structural completeness — at least one acceptance criterion
89
+ if ! grep -qE 'AC-US[0-9]+-[0-9]+|AC-[0-9]+' "$spec_path" 2>/dev/null; then
90
+ return 1
91
+ fi
92
+
93
+ return 0
94
+ }
95
+
96
+ # Search for qualifying increments
97
+ FOUND=false
98
+
99
+ # Single-repo increments
100
+ if [[ -d ".specweave/increments" ]]; then
101
+ while IFS= read -r spec; do
102
+ if check_spec "$spec"; then
103
+ FOUND=true
104
+ break
105
+ fi
106
+ done < <(find .specweave/increments -maxdepth 2 -name "spec.md" 2>/dev/null)
107
+ fi
108
+
109
+ # Multi-repo increments
110
+ if [[ "$FOUND" == "false" ]] && [[ -d "repositories" ]]; then
111
+ while IFS= read -r spec; do
112
+ if check_spec "$spec"; then
113
+ FOUND=true
114
+ break
115
+ fi
116
+ done < <(find repositories -path "*/.specweave/increments/*/spec.md" -maxdepth 6 2>/dev/null)
117
+ fi
118
+
119
+ if [[ "$FOUND" == "true" ]]; then
120
+ echo '{"decision":"allow"}'
121
+ exit 0
122
+ fi
123
+
124
+ # BLOCK — no qualifying increment found
125
+ REASON="SPEC-FIRST ENFORCEMENT: Increment Required Before Team Creation
126
+
127
+ TeamCreate CANNOT proceed without an existing increment with a substantive spec.md.
128
+
129
+ No qualifying increment found. A valid spec.md must have:
130
+ - At least 500 bytes of real content (not templates)
131
+ - No unfilled template markers or {{PLACEHOLDER}} patterns
132
+ - At least one acceptance criterion (AC-USx-xx pattern)
133
+
134
+ Searched:
135
+ - .specweave/increments/*/spec.md
136
+ - repositories/*/*/.specweave/increments/*/spec.md
137
+
138
+ REQUIRED ACTION:
139
+ 1. Run: /sw:increment \"your feature description\"
140
+ 2. Review and approve the spec, plan, and tasks
141
+ 3. THEN run: /sw:team-lead to parallelize execution
142
+
143
+ WHY: Without a spec, agents have no source of truth for scope, acceptance criteria,
144
+ or task boundaries. Skipping /sw:increment leads to uncoordinated implementation.
145
+
146
+ Workflow: /sw:increment → /sw:team-lead → /sw:done"
147
+
148
+ REASON_ESCAPED=$(echo "$REASON" | jq -Rs .)
149
+ echo "{\"decision\":\"block\",\"reason\":${REASON_ESCAPED}}"
150
+ exit 0
@@ -56,6 +56,7 @@ Increment planning produces specs, plans, and task breakdowns that require user
56
56
  STEP 0A: Discipline Check (BLOCKING)
57
57
  STEP 0B: WIP Enforcement
58
58
  STEP 0C: Tech Stack Detection
59
+ STEP 0D: Structure Resolution (if deferred from init)
59
60
  STEP 1: Pre-flight (TDD mode, multi-project, Deep Interview check)
60
61
  STEP 2: Project Context (resolve project/board)
61
62
  STEP 3: Create Increment (via Template API) ← folder + ID exist after this
@@ -126,6 +127,31 @@ Auto-detect from project files:
126
127
 
127
128
  If detection fails, ask user.
128
129
 
130
+ ## Step 0D: Structure Resolution (if deferred)
131
+
132
+ Check if the user deferred their repository structure decision during init (greenfield projects):
133
+
134
+ ```bash
135
+ DEFERRED=$(jq -r '.project.structureDeferred // false' .specweave/config.json 2>/dev/null)
136
+ ```
137
+
138
+ If `DEFERRED` is `true`, this is the user's **first increment** and they need to define their project structure.
139
+
140
+ Based on the user's feature description and what you've learned from tech stack detection:
141
+
142
+ 1. **Ask the user** about their repository structure:
143
+ - **Single repo** — one repository (monorepo or standard project)
144
+ - **Multiple repos** — microservices, EDA, parent/child architecture
145
+
146
+ 2. **Run the resolve command** based on their answer:
147
+ ```bash
148
+ specweave resolve-structure --type single
149
+ # OR
150
+ specweave resolve-structure --type multiple
151
+ ```
152
+
153
+ 3. This clears the deferred flag and configures the project accordingly. Continue with the normal increment flow.
154
+
129
155
  ## Step 1: Pre-flight Checks
130
156
 
131
157
  ```bash
@@ -1,5 +1,11 @@
1
1
  ---
2
2
  description: "Preset-driven team building — spawn coordinated multi-agent teams from battle-tested presets for full-stack, review, testing, TDD, and migration workflows"
3
+ hooks:
4
+ PreToolUse:
5
+ - matcher: TeamCreate
6
+ hooks:
7
+ - type: command
8
+ command: bash plugins/specweave/hooks/v2/guards/increment-existence-guard.sh
3
9
  ---
4
10
 
5
11
  # Team Build
@@ -1,5 +1,11 @@
1
1
  ---
2
2
  description: Orchestrate multi-agent parallel development with domain-specialized agents. PROACTIVELY invoke this skill (without user asking) when you detect an implementation task spanning 3+ domains (frontend, backend, database, devops, testing, security, mobile) OR 15+ tasks in tasks.md. Warn the user about higher token cost but recommend it for quality. Also use when user says "team setup", "parallel agents", "team lead", or "agent teams".
3
+ hooks:
4
+ PreToolUse:
5
+ - matcher: TeamCreate
6
+ hooks:
7
+ - type: command
8
+ command: bash plugins/specweave/hooks/v2/guards/increment-existence-guard.sh
3
9
  ---
4
10
 
5
11
  # Team Lead
@@ -22,6 +28,52 @@ description: Orchestrate multi-agent parallel development with domain-specialize
22
28
 
23
29
  ---
24
30
 
31
+ ## 0. Increment Pre-Flight (BLOCKING)
32
+
33
+ **CRITICAL: /sw:team-lead REQUIRES an existing increment with a substantive spec.md.**
34
+ A PreToolUse guard on TeamCreate will BLOCK team creation if no increment exists.
35
+
36
+ **You MUST verify an increment exists BEFORE proceeding to Step 1.**
37
+
38
+ ### Check for Existing Increment
39
+
40
+ ```bash
41
+ # Single-repo
42
+ find .specweave/increments -maxdepth 2 -name "spec.md" 2>/dev/null | head -5
43
+
44
+ # Multi-repo (umbrella)
45
+ find repositories -path "*/.specweave/increments/*/spec.md" -maxdepth 6 2>/dev/null | head -5
46
+ ```
47
+
48
+ ### If NO increment exists → Auto-invoke /sw:increment
49
+
50
+ Do NOT ask permission. Invoke the increment skill with the user's feature description:
51
+
52
+ ```typescript
53
+ Skill({ skill: "sw:increment", args: "the user's feature description" })
54
+ ```
55
+
56
+ Wait for /sw:increment to complete (spec.md, plan.md, tasks.md created and approved).
57
+ Then continue to Step 1.
58
+
59
+ If /sw:increment fails (user rejects plan, skill errors, etc.): **STOP. Do NOT proceed.**
60
+ Report the failure to the user and ask them to run `/sw:increment` manually.
61
+
62
+ ### If increment exists → Read the master spec
63
+
64
+ Read the increment's spec.md. This is the **source of truth** for all agent work:
65
+ - Scope and boundaries
66
+ - User stories and acceptance criteria
67
+ - Task breakdown and dependencies
68
+
69
+ Store the increment path as `MASTER_INCREMENT_PATH` — you will reference it in agent prompts.
70
+
71
+ **WHY THIS MATTERS**: Without a spec, agents infer scope from natural language alone.
72
+ This leads to uncoordinated implementation, scope creep, and missing acceptance criteria.
73
+ The spec-first principle exists because specs are the contract between user intent and agent execution.
74
+
75
+ ---
76
+
25
77
  ## 1. Tool Reference
26
78
 
27
79
  | Action | Tool | Parameters |
@@ -275,6 +327,12 @@ Each agent receives a detailed prompt that includes its skill invocations, file
275
327
  ```
276
328
  You are the FRONTEND agent for increment [INCREMENT_ID].
277
329
 
330
+ MASTER SPEC (SOURCE OF TRUTH):
331
+ The feature is fully specified in [MASTER_INCREMENT_PATH]/spec.md.
332
+ This spec defines scope, user stories, and acceptance criteria.
333
+ Your work MUST satisfy the ACs relevant to your domain.
334
+ Read the master spec BEFORE planning any work.
335
+
278
336
  SKILLS TO INVOKE:
279
337
  Skill({ skill: "frontend:architect" })
280
338
  Skill({ skill: "frontend:nextjs" }) // if Next.js project
@@ -302,7 +360,7 @@ WORKFLOW:
302
360
  1. Set working directory to your assigned repo: cd repositories/{ORG}/{repo-name}
303
361
  2. If .specweave/ doesn't exist in your repo, run: specweave init
304
362
  3. Create YOUR increment in YOUR repo: .specweave/increments/[ID]/
305
- 4. Read the increment spec and tasks
363
+ 4. Read the MASTER SPEC at [MASTER_INCREMENT_PATH]/spec.md for scope and ACs
306
364
  5. Verify services are running and accessible (check dev server, API endpoints)
307
365
  6. Wait for contract artifacts if Phase 1 is active:
308
366
  - Read src/types/ for shared interfaces
@@ -335,6 +393,12 @@ RULES:
335
393
  ```
336
394
  You are the BACKEND agent for increment [INCREMENT_ID].
337
395
 
396
+ MASTER SPEC (SOURCE OF TRUTH):
397
+ The feature is fully specified in [MASTER_INCREMENT_PATH]/spec.md.
398
+ This spec defines scope, user stories, and acceptance criteria.
399
+ Your work MUST satisfy the ACs relevant to your domain.
400
+ Read the master spec BEFORE planning any work.
401
+
338
402
  SKILLS TO INVOKE:
339
403
  Skill({ skill: "sw:architect" })
340
404
  Skill({ skill: "infra:devops" }) // if deployment config needed
@@ -360,7 +424,7 @@ WORKFLOW:
360
424
  1. Set working directory to your assigned repo: cd repositories/{ORG}/{repo-name}
361
425
  2. If .specweave/ doesn't exist in your repo, run: specweave init
362
426
  3. Create YOUR increment in YOUR repo: .specweave/increments/[ID]/
363
- 4. Read the increment spec and tasks
427
+ 4. Read the MASTER SPEC at [MASTER_INCREMENT_PATH]/spec.md for scope and ACs
364
428
  5. Verify services are running and accessible (database, auth provider, external APIs)
365
429
  6. Wait for contract artifacts if Phase 1 is active:
366
430
  - Read prisma/schema.prisma for database schema
@@ -394,6 +458,12 @@ RULES:
394
458
  ```
395
459
  You are the DATABASE agent for increment [INCREMENT_ID].
396
460
 
461
+ MASTER SPEC (SOURCE OF TRUTH):
462
+ The feature is fully specified in [MASTER_INCREMENT_PATH]/spec.md.
463
+ This spec defines scope, user stories, and acceptance criteria.
464
+ Your work MUST satisfy the ACs relevant to your domain.
465
+ Read the master spec BEFORE planning any work.
466
+
397
467
  SKILLS TO INVOKE:
398
468
  Skill({ skill: "sw:architect" })
399
469
 
@@ -411,7 +481,7 @@ WORKFLOW:
411
481
  1. Set working directory to your assigned repo: cd repositories/{ORG}/{repo-name}
412
482
  2. If .specweave/ doesn't exist in your repo, run: specweave init
413
483
  3. Create YOUR increment in YOUR repo: .specweave/increments/[ID]/
414
- 4. Read the increment spec and tasks
484
+ 4. Read the MASTER SPEC at [MASTER_INCREMENT_PATH]/spec.md for scope and ACs
415
485
  5. Design database schema changes
416
486
  6. Create plan files (plan.md, tasks.md) for your increment
417
487
  7. Send plan to team-lead and WAIT for approval:
@@ -444,6 +514,12 @@ RULES:
444
514
  ```
445
515
  You are the TESTING agent for increment [INCREMENT_ID].
446
516
 
517
+ MASTER SPEC (SOURCE OF TRUTH):
518
+ The feature is fully specified in [MASTER_INCREMENT_PATH]/spec.md.
519
+ This spec defines scope, user stories, and acceptance criteria.
520
+ Your tests MUST cover ALL ACs from the master spec.
521
+ Read the master spec BEFORE planning any work.
522
+
447
523
  SKILLS TO INVOKE:
448
524
  Skill({ skill: "testing:qa" })
449
525
  Skill({ skill: "testing:e2e" }) // for E2E test suites
@@ -467,7 +543,7 @@ WORKFLOW:
467
543
  1. Set working directory to your assigned repo: cd repositories/{ORG}/{repo-name}
468
544
  2. If .specweave/ doesn't exist in your repo, run: specweave init
469
545
  3. Create YOUR increment in YOUR repo: .specweave/increments/[ID]/
470
- 4. Read the increment spec and tasks
546
+ 4. Read the MASTER SPEC at [MASTER_INCREMENT_PATH]/spec.md for scope and ACs
471
547
  5. Wait for ALL other agents to produce initial code
472
548
  6. Create plan files (plan.md, tasks.md) for your increment
473
549
  7. Send plan to team-lead and WAIT for approval:
@@ -500,6 +576,12 @@ RULES:
500
576
  ```
501
577
  You are the SECURITY agent for increment [INCREMENT_ID].
502
578
 
579
+ MASTER SPEC (SOURCE OF TRUTH):
580
+ The feature is fully specified in [MASTER_INCREMENT_PATH]/spec.md.
581
+ This spec defines scope, user stories, and acceptance criteria.
582
+ Your security hardening MUST address all ACs from the master spec.
583
+ Read the master spec BEFORE planning any work.
584
+
503
585
  SKILLS TO INVOKE:
504
586
  Skill({ skill: "sw:security" })
505
587
  Skill({ skill: "sw:security-patterns" })
@@ -519,7 +601,7 @@ WORKFLOW:
519
601
  1. Set working directory to your assigned repo: cd repositories/{ORG}/{repo-name}
520
602
  2. If .specweave/ doesn't exist in your repo, run: specweave init
521
603
  3. Create YOUR increment in YOUR repo: .specweave/increments/[ID]/
522
- 4. Read the increment spec and tasks
604
+ 4. Read the MASTER SPEC at [MASTER_INCREMENT_PATH]/spec.md for scope and ACs
523
605
  5. Audit code produced by other agents for security issues
524
606
  6. Create plan files (plan.md, tasks.md) for your increment
525
607
  7. Send plan to team-lead and WAIT for approval:
@@ -739,9 +821,12 @@ Orchestrator Final Check:
739
821
  ```
740
822
  /sw:team-lead "Build checkout flow"
741
823
 
742
- ├── Step 1: Analyze feature -> identify domains -> decide increment split
824
+ ├── Step 0: VERIFY INCREMENT EXISTS (BLOCKING)
825
+ │ ├── Found? → Read master spec.md as source of truth
826
+ │ └── Missing? → Auto-invoke /sw:increment, wait for completion
827
+ ├── Step 1: Analyze feature (from master spec) -> identify domains -> decide increment split
743
828
  ├── Step 2: Create team via TeamCreate
744
- ├── Step 3: Create per-domain increments
829
+ ├── Step 3: Create per-domain increments (derived from master spec)
745
830
  ├── Step 4: Contract-first spawning (all agents with mode: "bypassPermissions")
746
831
  │ ├── Phase 1: Spawn shared + database
747
832
  │ │ └── Receive PLAN_READY, review & approve via SendMessage (Section 3b)
@@ -753,9 +838,13 @@ Orchestrator Final Check:
753
838
  └── Step 7: Merge and close (/sw:team-merge)
754
839
  ```
755
840
 
841
+ **IMPORTANT**: The intended entry point is: `/sw:increment` → `/sw:do` (detects 3+ domains) → `/sw:team-lead`.
842
+ Direct invocation of `/sw:team-lead` without an existing increment will trigger the guard and auto-invoke `/sw:increment`.
843
+
756
844
  ### --dry-run Output
757
845
 
758
- When `--dry-run` is specified, display the proposed plan without executing:
846
+ When `--dry-run` is specified, display the proposed plan without executing.
847
+ **Do NOT call TeamCreate in dry-run mode** — just show the formatted plan text.
759
848
 
760
849
  ```
761
850
  Team Orchestration Plan (DRY RUN)
@@ -780,6 +869,7 @@ To execute, run without --dry-run.
780
869
 
781
870
  | Issue | Cause | Fix |
782
871
  |-------|-------|-----|
872
+ | **TeamCreate blocked by guard** | No increment with spec.md exists | Run `/sw:increment "feature"` first, then retry `/sw:team-lead`. The guard requires a substantive spec.md (>200 bytes, not a template) |
783
873
  | **Agent stuck on trust folder** | Agent spawned without `bypassPermissions` | ALWAYS use `mode: "bypassPermissions"` — NEVER `mode: "plan"`. Trust prompts require interactive input agents cannot provide |
784
874
  | **Agents editing same files** | Overlapping file ownership patterns | Review ownership map; reassign conflicting files to a single owner; use `--dry-run` to validate before launch |
785
875
  | **Token cost too high** | Too many agents or overly large prompts | Reduce `--max-agents`; use `--domains` to limit scope; split feature into smaller increments |