@arthai/agents 1.0.5 → 1.0.7

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 (130) hide show
  1. package/README.md +33 -3
  2. package/VERSION +1 -1
  3. package/agents/troubleshooter.md +132 -0
  4. package/bin/cli.js +296 -0
  5. package/bundles/canvas.json +1 -1
  6. package/bundles/compass.json +1 -1
  7. package/bundles/counsel.json +1 -0
  8. package/bundles/cruise.json +1 -1
  9. package/bundles/forge.json +12 -1
  10. package/bundles/prism.json +1 -0
  11. package/bundles/scalpel.json +5 -2
  12. package/bundles/sentinel.json +8 -2
  13. package/bundles/shield.json +1 -0
  14. package/bundles/spark.json +1 -0
  15. package/compiler.sh +14 -0
  16. package/dist/plugins/canvas/.claude-plugin/plugin.json +1 -1
  17. package/dist/plugins/canvas/VERSION +1 -0
  18. package/dist/plugins/canvas/commands/planning.md +100 -11
  19. package/dist/plugins/canvas/hooks/hooks.json +16 -0
  20. package/dist/plugins/canvas/hooks/project-setup.sh +109 -0
  21. package/dist/plugins/canvas/templates/CLAUDE.md.managed-block +123 -0
  22. package/dist/plugins/canvas/templates/CLAUDE.md.template +111 -0
  23. package/dist/plugins/compass/.claude-plugin/plugin.json +1 -1
  24. package/dist/plugins/compass/VERSION +1 -0
  25. package/dist/plugins/compass/commands/planning.md +100 -11
  26. package/dist/plugins/compass/hooks/hooks.json +16 -0
  27. package/dist/plugins/compass/hooks/project-setup.sh +109 -0
  28. package/dist/plugins/compass/templates/CLAUDE.md.managed-block +123 -0
  29. package/dist/plugins/compass/templates/CLAUDE.md.template +111 -0
  30. package/dist/plugins/counsel/.claude-plugin/plugin.json +1 -1
  31. package/dist/plugins/counsel/VERSION +1 -0
  32. package/dist/plugins/counsel/hooks/hooks.json +10 -0
  33. package/dist/plugins/counsel/hooks/project-setup.sh +109 -0
  34. package/dist/plugins/counsel/templates/CLAUDE.md.managed-block +123 -0
  35. package/dist/plugins/counsel/templates/CLAUDE.md.template +111 -0
  36. package/dist/plugins/cruise/.claude-plugin/plugin.json +1 -1
  37. package/dist/plugins/cruise/VERSION +1 -0
  38. package/dist/plugins/cruise/hooks/hooks.json +16 -0
  39. package/dist/plugins/cruise/hooks/project-setup.sh +109 -0
  40. package/dist/plugins/cruise/templates/CLAUDE.md.managed-block +123 -0
  41. package/dist/plugins/cruise/templates/CLAUDE.md.template +111 -0
  42. package/dist/plugins/forge/.claude-plugin/plugin.json +1 -1
  43. package/dist/plugins/forge/VERSION +1 -0
  44. package/dist/plugins/forge/agents/troubleshooter.md +132 -0
  45. package/dist/plugins/forge/commands/implement.md +99 -1
  46. package/dist/plugins/forge/commands/planning.md +100 -11
  47. package/dist/plugins/forge/hooks/escalation-guard.sh +177 -0
  48. package/dist/plugins/forge/hooks/hooks.json +22 -0
  49. package/dist/plugins/forge/hooks/project-setup.sh +109 -0
  50. package/dist/plugins/forge/templates/CLAUDE.md.managed-block +123 -0
  51. package/dist/plugins/forge/templates/CLAUDE.md.template +111 -0
  52. package/dist/plugins/prime/.claude-plugin/plugin.json +1 -1
  53. package/dist/plugins/prime/VERSION +1 -0
  54. package/dist/plugins/prime/agents/troubleshooter.md +132 -0
  55. package/dist/plugins/prime/commands/calibrate.md +20 -0
  56. package/dist/plugins/prime/commands/ci-fix.md +36 -0
  57. package/dist/plugins/prime/commands/fix.md +23 -0
  58. package/dist/plugins/prime/commands/implement.md +99 -1
  59. package/dist/plugins/prime/commands/planning.md +100 -11
  60. package/dist/plugins/prime/commands/qa-incident.md +54 -0
  61. package/dist/plugins/prime/commands/restart.md +186 -30
  62. package/dist/plugins/prime/hooks/escalation-guard.sh +177 -0
  63. package/dist/plugins/prime/hooks/hooks.json +60 -0
  64. package/dist/plugins/prime/hooks/post-config-change-restart-reminder.sh +86 -0
  65. package/dist/plugins/prime/hooks/post-server-crash-watch.sh +120 -0
  66. package/dist/plugins/prime/hooks/pre-server-port-guard.sh +110 -0
  67. package/dist/plugins/prime/hooks/project-setup.sh +109 -0
  68. package/dist/plugins/prime/hooks/sync-agents.sh +99 -12
  69. package/dist/plugins/prime/templates/CLAUDE.md.managed-block +123 -0
  70. package/dist/plugins/prime/templates/CLAUDE.md.template +111 -0
  71. package/dist/plugins/prism/.claude-plugin/plugin.json +1 -1
  72. package/dist/plugins/prism/VERSION +1 -0
  73. package/dist/plugins/prism/commands/qa-incident.md +54 -0
  74. package/dist/plugins/prism/hooks/hooks.json +12 -0
  75. package/dist/plugins/prism/hooks/project-setup.sh +109 -0
  76. package/dist/plugins/prism/templates/CLAUDE.md.managed-block +123 -0
  77. package/dist/plugins/prism/templates/CLAUDE.md.template +111 -0
  78. package/dist/plugins/scalpel/.claude-plugin/plugin.json +1 -1
  79. package/dist/plugins/scalpel/VERSION +1 -0
  80. package/dist/plugins/scalpel/agents/troubleshooter.md +132 -0
  81. package/dist/plugins/scalpel/commands/ci-fix.md +36 -0
  82. package/dist/plugins/scalpel/commands/fix.md +23 -0
  83. package/dist/plugins/scalpel/hooks/escalation-guard.sh +177 -0
  84. package/dist/plugins/scalpel/hooks/hooks.json +24 -0
  85. package/dist/plugins/scalpel/hooks/project-setup.sh +109 -0
  86. package/dist/plugins/scalpel/templates/CLAUDE.md.managed-block +123 -0
  87. package/dist/plugins/scalpel/templates/CLAUDE.md.template +111 -0
  88. package/dist/plugins/sentinel/.claude-plugin/plugin.json +1 -1
  89. package/dist/plugins/sentinel/VERSION +1 -0
  90. package/dist/plugins/sentinel/agents/troubleshooter.md +132 -0
  91. package/dist/plugins/sentinel/commands/restart.md +186 -30
  92. package/dist/plugins/sentinel/hooks/escalation-guard.sh +177 -0
  93. package/dist/plugins/sentinel/hooks/hooks.json +64 -0
  94. package/dist/plugins/sentinel/hooks/post-config-change-restart-reminder.sh +86 -0
  95. package/dist/plugins/sentinel/hooks/post-server-crash-watch.sh +120 -0
  96. package/dist/plugins/sentinel/hooks/pre-server-port-guard.sh +110 -0
  97. package/dist/plugins/sentinel/hooks/project-setup.sh +109 -0
  98. package/dist/plugins/sentinel/templates/CLAUDE.md.managed-block +123 -0
  99. package/dist/plugins/sentinel/templates/CLAUDE.md.template +111 -0
  100. package/dist/plugins/shield/.claude-plugin/plugin.json +1 -1
  101. package/dist/plugins/shield/VERSION +1 -0
  102. package/dist/plugins/shield/hooks/hooks.json +22 -12
  103. package/dist/plugins/shield/hooks/project-setup.sh +109 -0
  104. package/dist/plugins/shield/templates/CLAUDE.md.managed-block +123 -0
  105. package/dist/plugins/shield/templates/CLAUDE.md.template +111 -0
  106. package/dist/plugins/spark/.claude-plugin/plugin.json +1 -1
  107. package/dist/plugins/spark/VERSION +1 -0
  108. package/dist/plugins/spark/commands/calibrate.md +20 -0
  109. package/dist/plugins/spark/hooks/hooks.json +10 -0
  110. package/dist/plugins/spark/hooks/project-setup.sh +109 -0
  111. package/dist/plugins/spark/templates/CLAUDE.md.managed-block +123 -0
  112. package/dist/plugins/spark/templates/CLAUDE.md.template +111 -0
  113. package/hook-defs.json +31 -0
  114. package/hooks/escalation-guard.sh +177 -0
  115. package/hooks/post-config-change-restart-reminder.sh +86 -0
  116. package/hooks/post-server-crash-watch.sh +120 -0
  117. package/hooks/pre-server-port-guard.sh +110 -0
  118. package/hooks/project-setup.sh +109 -0
  119. package/hooks/sync-agents.sh +99 -12
  120. package/install.sh +2 -2
  121. package/package.json +1 -1
  122. package/portable.manifest +7 -1
  123. package/skills/calibrate/SKILL.md +20 -0
  124. package/skills/ci-fix/SKILL.md +36 -0
  125. package/skills/fix/SKILL.md +23 -0
  126. package/skills/implement/SKILL.md +99 -1
  127. package/skills/license/SKILL.md +159 -0
  128. package/skills/planning/SKILL.md +100 -11
  129. package/skills/qa-incident/SKILL.md +54 -0
  130. package/skills/restart/SKILL.md +187 -31
package/compiler.sh CHANGED
@@ -155,6 +155,7 @@ for bundle_file in "${BUNDLE_FILES[@]}"; do
155
155
  mkdir -p "$PLUGIN_DIR/skills"
156
156
  mkdir -p "$PLUGIN_DIR/commands"
157
157
  mkdir -p "$PLUGIN_DIR/hooks"
158
+ mkdir -p "$PLUGIN_DIR/templates"
158
159
 
159
160
  # ── 1. Write plugin.json ──────────────────────────────────────────────────
160
161
  # Use jq --arg to safely encode all string values — prevents JSON injection
@@ -167,6 +168,18 @@ for bundle_file in "${BUNDLE_FILES[@]}"; do
167
168
  '{"name": $name, "description": $description, "version": $version, "author": {"name": "Arth AI"}}' \
168
169
  > "$PLUGIN_DIR/.claude-plugin/plugin.json"
169
170
 
171
+ # ── 1b. Copy templates/ for project-setup hook ───────────────────────────
172
+ # project-setup.sh reads templates from ${CLAUDE_PLUGIN_ROOT}/templates/
173
+ for tmpl in CLAUDE.md.template CLAUDE.md.managed-block; do
174
+ if [ -f "$SCRIPT_DIR/templates/$tmpl" ]; then
175
+ cp "$SCRIPT_DIR/templates/$tmpl" "$PLUGIN_DIR/templates/$tmpl"
176
+ fi
177
+ done
178
+ # Also copy VERSION so project-setup.sh can read it
179
+ if [ -f "$SCRIPT_DIR/VERSION" ]; then
180
+ cp "$SCRIPT_DIR/VERSION" "$PLUGIN_DIR/VERSION"
181
+ fi
182
+
170
183
  # ── 2. Determine agents/skills/hooks lists ────────────────────────────────
171
184
 
172
185
  if [ "$INCLUDE_ALL" = "true" ]; then
@@ -350,6 +363,7 @@ for bundle_file in "${BUNDLE_FILES[@]}"; do
350
363
  rmdir "$PLUGIN_DIR/commands" 2>/dev/null || true
351
364
  rmdir "$PLUGIN_DIR/skills" 2>/dev/null || true
352
365
  rmdir "$PLUGIN_DIR/hooks" 2>/dev/null || true
366
+ rmdir "$PLUGIN_DIR/templates" 2>/dev/null || true
353
367
 
354
368
  echo " agents=$AGENT_COUNT commands=$CMD_COUNT skills=$SKILL_COUNT hooks=$HOOK_COUNT"
355
369
  ((COMPILED++)) || true
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "canvas",
3
3
  "description": "Design-driven development — adversarial design critique + frontend",
4
- "version": "1.0.5",
4
+ "version": "1.0.7",
5
5
  "author": {
6
6
  "name": "Arth AI"
7
7
  }
@@ -0,0 +1 @@
1
+ 1.0.7
@@ -58,7 +58,86 @@ Map user choices:
58
58
 
59
59
  Store the resolved mode as `DEBATE_MODE` (values: `lite`, `fast`, `full`).
60
60
 
61
- ### 3. Codebase Scan
61
+ ### 3. Phase 0: Spec Generation (before debate)
62
+
63
+ Before any debate rounds, the PM generates a **spec doc** that becomes the foundation for all subsequent work. This ensures user stories and edge cases are defined BEFORE architecture decisions.
64
+
65
+ **Create the specs directory:**
66
+ ```bash
67
+ mkdir -p .claude/specs
68
+ ```
69
+
70
+ **Spawn PM agent (subagent_type="product-manager", model="sonnet") for spec generation only:**
71
+
72
+ Prompt:
73
+ ```
74
+ You are a Product Manager generating a spec doc for the feature "{feature-name}".
75
+
76
+ Feature brief: {FEATURE_BRIEF}
77
+
78
+ Generate a spec doc with these sections:
79
+
80
+ ## User Stories
81
+ Write 3-7 user stories covering the happy path and key error states.
82
+ Format: "As a [user type], I want [action], so that [outcome]"
83
+ Each story must have:
84
+ - **Story ID**: US-1, US-2, etc.
85
+ - **Priority**: P0 (must-have for launch) or P1 (important but deferrable)
86
+ - **Acceptance**: specific testable condition that proves this story is done
87
+
88
+ Example:
89
+ US-1 [P0]: As a new developer, I want to install the toolkit with one command,
90
+ so that I can start using it without manual configuration.
91
+ Acceptance: `npx @arthai/agents install forge .` succeeds and skills are available.
92
+
93
+ ## User Journey
94
+ Step-by-step flow from the user's first interaction to completion.
95
+ Include:
96
+ - **Happy path**: numbered steps (1. User does X → 2. System responds Y → ...)
97
+ - **Decision points**: where the user makes a choice (mark with ◆)
98
+ - **Error branches**: where things can go wrong (mark with ✗ and show recovery path)
99
+
100
+ Format as a text flowchart:
101
+ ```
102
+ 1. User discovers feature
103
+ 2. User does [action]
104
+ ◆ Decision: [choice A] or [choice B]
105
+ → Choice A: proceed to step 3
106
+ → Choice B: proceed to step 5
107
+ 3. System responds with [result]
108
+ ✗ Error: [what went wrong] → Recovery: [how to fix]
109
+ 4. ...
110
+ ```
111
+
112
+ ## Edge Cases
113
+ Structured list of what can go wrong. For each:
114
+ - **ID**: EC-1, EC-2, etc.
115
+ - **Scenario**: what triggers this edge case
116
+ - **Expected behavior**: what should happen (not crash, not hang)
117
+ - **Severity**: Critical (blocks user) / High (degrades experience) / Medium (inconvenience)
118
+ - **Linked story**: which user story this edge case relates to
119
+
120
+ ## Success Criteria
121
+ Measurable outcomes tied to user stories. These become the acceptance criteria
122
+ that /implement and /qa use to validate the implementation.
123
+ - Each criterion references a story ID
124
+ - Each criterion is binary: pass or fail, no subjective judgment
125
+ ```
126
+
127
+ **Write the output to `.claude/specs/{feature-name}.md`** with this frontmatter:
128
+
129
+ ```markdown
130
+ ---
131
+ feature: {feature-name}
132
+ generated: {ISO date}
133
+ stories: {count}
134
+ edge_cases: {count}
135
+ ---
136
+ ```
137
+
138
+ **Store the spec content as `FEATURE_SPEC`** — this is injected into the shared context block for all debate participants.
139
+
140
+ ### 4. Codebase Scan
62
141
 
63
142
  Spawn an `explore-light` subagent (model: haiku) to scan for relevant files:
64
143
 
@@ -68,7 +147,7 @@ prompt: "For a feature called '{feature-name}', find: (1) related backend routes
68
147
 
69
148
  Store the result as `CODEBASE_CONTEXT`.
70
149
 
71
- ### 4. Create Team + Tasks
150
+ ### 5. Create Team + Tasks
72
151
 
73
152
  Create team: `planning-{feature-name}`
74
153
 
@@ -76,12 +155,13 @@ Create these tasks:
76
155
 
77
156
  | Task | Owner | Subject |
78
157
  |------|-------|---------|
79
- | 1 | product-manager | Define product spec for {feature-name} |
158
+ | 0 | product-manager | Generate spec doc for {feature-name} (Phase 0 — already done above) |
159
+ | 1 | product-manager | Define product scope for {feature-name} (uses spec as input) |
80
160
  | 2 | architect | Design technical plan for {feature-name} |
81
161
  | 3 (if --design) | design-thinker | Create design brief for {feature-name} |
82
162
  | 4 (if not --lite) | devils-advocate | Challenge scope and feasibility for {feature-name} |
83
163
 
84
- ### 5. Build Shared Context Block
164
+ ### 6. Build Shared Context Block
85
165
 
86
166
  Compose this block to inject into every teammate's spawn prompt:
87
167
 
@@ -95,6 +175,11 @@ Auth: {AUTH_APPROACH}
95
175
  ## Feature: {feature-name}
96
176
  {FEATURE_BRIEF}
97
177
 
178
+ ## Spec Doc (from Phase 0)
179
+ {FEATURE_SPEC}
180
+
181
+ (Full spec at: .claude/specs/{feature-name}.md)
182
+
98
183
  ## Relevant Codebase
99
184
  {CODEBASE_CONTEXT}
100
185
 
@@ -114,13 +199,13 @@ This planning session runs in {DEBATE_MODE} mode.
114
199
  - If DA recommends KILL and user overrides, record as USER OVERRIDE in the plan.
115
200
  ```
116
201
 
117
- ### 6. Spawn Teammates (ALL IN ONE MESSAGE — parallel)
202
+ ### 7. Spawn Teammates (ALL IN ONE MESSAGE — parallel)
118
203
 
119
204
  Spawn all teammates in a **single message** with multiple Task tool calls:
120
205
 
121
206
  **Always spawn:**
122
207
  - **product-manager** (subagent_type="product-manager", model="opus")
123
- - Prompt: "{SHARED_CONTEXT}\n\nYou are the PM. Own the 'what' and 'why'.\n\nIn Round 1, you LEAD with your scope claim. Format your must-haves as:\n [M1] requirement — BECAUSE reason\n [M2] ...\nMaximum 5 MUST-HAVEs. Also list NICE-TO-HAVEs with CUT-IF conditions, EXPLICIT EXCLUSIONS, and success metrics.\n\nIn Round 2, you COUNTER the architect's approach: does it deliver user value, is it over-engineered, what is the time-to-value?\n\nIn Round 3 (full mode only), you DEFEND against the devil's advocate's risk case. Accept or reject each risk with evidence."
208
+ - Prompt: "{SHARED_CONTEXT}\n\nYou are the PM. Own the 'what' and 'why'. You generated the spec doc in Phase 0 — your user stories and edge cases are in the shared context above. Use them as the foundation for your scope claim.\n\nIn Round 1, you LEAD with your scope claim. Each must-have should trace to one or more user stories (reference by ID, e.g., 'US-1, US-3'). Format your must-haves as:\n [M1] requirement — BECAUSE reason (traces to US-X)\n [M2] ...\nMaximum 5 MUST-HAVEs. Also list NICE-TO-HAVEs with CUT-IF conditions, EXPLICIT EXCLUSIONS, and success metrics.\n\nIn Round 2, you COUNTER the architect's approach: does it deliver the user journey as specified? Is it over-engineered? What is the time-to-value? Reference edge cases the approach doesn't handle.\n\nIn Round 3 (full mode only), you DEFEND against the devil's advocate's risk case. Accept or reject each risk with evidence. Reference user stories to justify why a must-have cannot be cut."
124
209
 
125
210
  - **architect** (subagent_type="architect", model="opus")
126
211
  - Prompt: "{SHARED_CONTEXT}\n\nYou are the Architect. Own the 'how'.\n\nIn Round 1, you COUNTER the PM's scope from a feasibility lens. Challenge feasibility, flag hidden complexity, identify scope creep vectors, propose a counter-scope.\n\nIn Round 2, you LEAD with your technical approach: API contract, DB changes, architecture decision + WHY, task breakdown with S/M/L/XL estimates, implementation cost, dependencies, risks.\n\nIn Round 3 (full mode only), you DEFEND against the devil's advocate's risk case. Accept or reject each risk with evidence. Keep it simple for early-stage. Push back on scope that doesn't match the development stage."
@@ -140,7 +225,7 @@ Spawn all teammates in a **single message** with multiple Task tool calls:
140
225
  - **gtm-expert** (subagent_type="gtm-expert", model="sonnet")
141
226
  - Prompt: "{SHARED_CONTEXT}\n\nYou are the GTM Expert. Own distribution and launch strategy. Advise on positioning, viral mechanics, and launch sequencing. Challenge the team on how users will discover and adopt this feature. Your output feeds into Round 3 as additional evidence for the devil's advocate."
142
227
 
143
- ### 7. Structured Debate Protocol
228
+ ### 8. Structured Debate Protocol
144
229
 
145
230
  Facilitate the following rounds in sequence. Each phase completes before the next begins.
146
231
 
@@ -279,7 +364,7 @@ Each matched item is flagged as a RISK NOTE in the plan.
279
364
 
280
365
  ---
281
366
 
282
- ### 8. Convergence Logic
367
+ ### 9. Convergence Logic
283
368
 
284
369
  **Plan is APPROVED when ALL of the following are true after all applicable rounds complete:**
285
370
  - Rounds 1 and 2 have zero UNRESOLVED items
@@ -296,7 +381,7 @@ If user overrides a KILL recommendation, record as `USER OVERRIDE` in the plan.
296
381
 
297
382
  In lite and fast modes, skip convergence checks for rounds that were not run. Apply only the checks applicable to completed rounds.
298
383
 
299
- ### 9. Scope Lock
384
+ ### 10. Scope Lock
300
385
 
301
386
  After convergence, compute a `scope_hash`:
302
387
  - Concatenate all locked MUST-HAVE strings from Round 1 in order
@@ -305,7 +390,7 @@ After convergence, compute a `scope_hash`:
305
390
 
306
391
  When `/implement` loads the plan, it can verify the hash against the locked must-haves to detect tampering.
307
392
 
308
- ### 10. Write Plan File + Present to User
393
+ ### 11. Write Plan File + Present to User
309
394
 
310
395
  Synthesize teammate outputs into a structured plan and **write it to `.claude/plans/{feature-name}.md`** using the Write tool. This file is read by `/implement` to auto-configure the implementation team.
311
396
 
@@ -317,6 +402,7 @@ feature: {feature-name}
317
402
  debate_mode: {DEBATE_MODE}
318
403
  scope_hash: {SHA-256 of locked must-haves}
319
404
  da_confidence: {HIGH|MEDIUM|LOW|N/A}
405
+ spec: specs/{feature-name}.md
320
406
  layers:
321
407
  - frontend # include if ANY frontend tasks exist
322
408
  - backend # include if ANY backend tasks exist
@@ -324,6 +410,9 @@ layers:
324
410
 
325
411
  # Planning Summary: {feature-name}
326
412
 
413
+ ## Spec Reference
414
+ See `.claude/specs/{feature-name}.md` for user stories, user journey, edge cases, and success criteria.
415
+
327
416
  ## Problem & User Segment (from PM)
328
417
  ...
329
418
 
@@ -394,7 +483,7 @@ layers:
394
483
 
395
484
  Present the plan to the user for review.
396
485
 
397
- ### 11. Cleanup
486
+ ### 12. Cleanup
398
487
 
399
488
  After user reviews the plan:
400
489
  - Send shutdown_request to all teammates.
@@ -0,0 +1,16 @@
1
+ {
2
+ "hooks": {
3
+ "SessionStart": [
4
+ {
5
+ "matcher": "",
6
+ "hooks": [
7
+ {
8
+ "type": "command",
9
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/project-setup.sh",
10
+ "timeout": 10
11
+ }
12
+ ]
13
+ }
14
+ ]
15
+ }
16
+ }
@@ -0,0 +1,109 @@
1
+ #!/bin/bash
2
+ # hooks/project-setup.sh — SessionStart hook: first-run project setup for marketplace installs.
3
+ #
4
+ # Runs on every SessionStart. Checks for marker file .claude/.toolkit-setup-done.
5
+ # If missing (or version is stale): creates CLAUDE.md from template, injects managed block,
6
+ # updates .gitignore with toolkit markers.
7
+ #
8
+ # Templates are read from ${CLAUDE_PLUGIN_ROOT}/templates/ (bundled with the plugin).
9
+
10
+ set -euo pipefail
11
+
12
+ PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(pwd)}"
13
+ PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-}"
14
+ MARKER_FILE="$PROJECT_DIR/.claude/.toolkit-setup-done"
15
+
16
+ # Exit silently if CLAUDE_PLUGIN_ROOT is not set (not running from a plugin context)
17
+ if [ -z "$PLUGIN_ROOT" ]; then
18
+ exit 0
19
+ fi
20
+
21
+ TEMPLATES_DIR="$PLUGIN_ROOT/templates"
22
+ TEMPLATE_CLAUDE="$TEMPLATES_DIR/CLAUDE.md.template"
23
+ TEMPLATE_BLOCK="$TEMPLATES_DIR/CLAUDE.md.managed-block"
24
+
25
+ # Exit silently if templates are not bundled
26
+ if [ ! -f "$TEMPLATE_CLAUDE" ] || [ ! -f "$TEMPLATE_BLOCK" ]; then
27
+ exit 0
28
+ fi
29
+
30
+ # Read toolkit version from VERSION file (bundled alongside plugin)
31
+ TOOLKIT_VERSION="0.0.0"
32
+ if [ -f "$PLUGIN_ROOT/VERSION" ]; then
33
+ TOOLKIT_VERSION=$(cat "$PLUGIN_ROOT/VERSION" 2>/dev/null | tr -d '[:space:]' || echo "0.0.0")
34
+ fi
35
+
36
+ MANAGED_START="<!-- >>> claude-agents toolkit (DO NOT EDIT THIS BLOCK) >>> -->"
37
+ MANAGED_END="<!-- <<< claude-agents toolkit <<< -->"
38
+ GITIGNORE_START="# >>> claude-agents managed (DO NOT EDIT THIS BLOCK) >>>"
39
+
40
+ # Check marker file — skip if current version is already set up
41
+ if [ -f "$MARKER_FILE" ]; then
42
+ STORED_VERSION=$(cat "$MARKER_FILE" 2>/dev/null | tr -d '[:space:]' || echo "")
43
+ if [ "$STORED_VERSION" = "$TOOLKIT_VERSION" ]; then
44
+ exit 0
45
+ fi
46
+ fi
47
+
48
+ CLAUDE_MD="$PROJECT_DIR/CLAUDE.md"
49
+ GITIGNORE="$PROJECT_DIR/.gitignore"
50
+
51
+ # 1. Create CLAUDE.md from template if it doesn't exist (never overwrite existing)
52
+ if [ ! -f "$CLAUDE_MD" ]; then
53
+ PROJECT_NAME=$(basename "$PROJECT_DIR")
54
+ sed "s/{{PROJECT_NAME}}/$PROJECT_NAME/g" "$TEMPLATE_CLAUDE" > "$CLAUDE_MD"
55
+ fi
56
+
57
+ # 2. Inject managed block into CLAUDE.md if missing, or update if version is stale
58
+ if [ -f "$CLAUDE_MD" ]; then
59
+ BLOCK_CONTENT=$(cat "$TEMPLATE_BLOCK")
60
+ NEW_BLOCK=$(printf '%s\n<!-- version: %s -->\n%s\n%s' \
61
+ "$MANAGED_START" "$TOOLKIT_VERSION" "$BLOCK_CONTENT" "$MANAGED_END")
62
+
63
+ if ! grep -qF "$MANAGED_START" "$CLAUDE_MD"; then
64
+ # Block missing — append it
65
+ printf '\n\n%s\n' "$NEW_BLOCK" >> "$CLAUDE_MD"
66
+ else
67
+ # Block exists — update if version changed
68
+ EXISTING_VERSION=$(grep -o '<!-- version: [^>]* -->' "$CLAUDE_MD" 2>/dev/null | head -1 | sed 's/<!-- version: //;s/ -->//' | tr -d '[:space:]' || echo "")
69
+ if [ "$EXISTING_VERSION" != "$TOOLKIT_VERSION" ]; then
70
+ # Replace block contents between markers
71
+ tmp=$(mktemp)
72
+ in_block=false
73
+ wrote_block=false
74
+ while IFS= read -r line; do
75
+ if echo "$line" | grep -qF "$MANAGED_START"; then
76
+ in_block=true
77
+ printf '%s\n' "$NEW_BLOCK" >> "$tmp"
78
+ wrote_block=true
79
+ continue
80
+ fi
81
+ if echo "$line" | grep -qF "$MANAGED_END"; then
82
+ in_block=false
83
+ continue
84
+ fi
85
+ if ! $in_block; then
86
+ echo "$line" >> "$tmp"
87
+ fi
88
+ done < "$CLAUDE_MD"
89
+ mv "$tmp" "$CLAUDE_MD"
90
+ fi
91
+ fi
92
+ fi
93
+
94
+ # 3. Update .gitignore with toolkit marker block if missing
95
+ if [ ! -f "$GITIGNORE" ] || ! grep -qF "$GITIGNORE_START" "$GITIGNORE" 2>/dev/null; then
96
+ GITIGNORE_BLOCK=$(printf '%s\n.claude/.toolkit-last-seen-sha\n.claude/.toolkit-setup-done\n.claude/.claude-agents.conf\n%s' \
97
+ "$GITIGNORE_START" "# <<< claude-agents managed <<<")
98
+ if [ ! -f "$GITIGNORE" ]; then
99
+ printf '%s\n' "$GITIGNORE_BLOCK" > "$GITIGNORE"
100
+ else
101
+ printf '\n\n%s\n' "$GITIGNORE_BLOCK" >> "$GITIGNORE"
102
+ fi
103
+ fi
104
+
105
+ # 4. Write marker file with current version
106
+ mkdir -p "$PROJECT_DIR/.claude"
107
+ printf '%s\n' "$TOOLKIT_VERSION" > "$MARKER_FILE"
108
+
109
+ exit 0
@@ -0,0 +1,123 @@
1
+ ## Engineering Principles (MANDATORY — applies to ALL work)
2
+
3
+ ### Research Before Fixing
4
+ - **Never guess.** Before changing code, read the relevant source files, docs, and configs.
5
+ - Understand WHY something is broken before attempting a fix.
6
+ - If your first fix doesn't work, STOP. Don't try another guess. Re-read the code.
7
+ - Use explore-light (Haiku, 1x cost) to scan the codebase before expensive agents investigate.
8
+
9
+ ### No Over-Engineering
10
+ - **Do exactly what's needed.** Don't add abstractions, utilities, or frameworks unless the code already uses them.
11
+ - Match existing patterns — run explore-light to find how similar code is structured before writing new code.
12
+ - A bug fix touches the minimum files possible. A feature matches the existing architecture.
13
+ - If you're creating a new class/helper/utility that nothing else in the codebase uses, you're over-engineering.
14
+
15
+ ### Test Before Shipping
16
+ - **Run tests locally before pushing.** Never push untested code.
17
+ - If the project has `/precheck`, run it. If it has `/qa`, run it in commit mode.
18
+ - After fixing a bug, verify the fix AND verify nothing else broke (differential testing).
19
+ - If 3+ consecutive fix attempts fail, STOP. Step back and reassess the root cause from scratch.
20
+
21
+ ### Deployment Safety
22
+ - **Never modify production systems without explicit confirmation.**
23
+ - Don't change deploy targets, CI pipeline structure, or infrastructure config silently.
24
+ - Don't overwrite existing files during deployment without asking.
25
+ - If a deployment breaks something, investigate before attempting to fix. Don't cascade.
26
+
27
+ ## Toolkit Awareness (MANDATORY — READ THIS FIRST)
28
+
29
+ You have a **claude-agents toolkit** installed in this project. It provides specialized
30
+ agents, skills, and hooks that handle domain-specific work better and cheaper.
31
+
32
+ **You are the ORCHESTRATOR.** The triage router fires on every message with a routing
33
+ table and SPEED score. Use it to decide: toolkit or you?
34
+
35
+ ### When to use the toolkit (SPEED score 2+):
36
+ - **Multi-step workflows**: `/pr`, `/deploy`, `/planning`, `/implement`, `/qa`, `/ci-fix`
37
+ encode battle-tested sequences you'd otherwise do manually and forget steps
38
+ - **Domain expertise**: SRE, QA, frontend, backend agents have project context baked in
39
+ - **Cost savings**: Haiku/Sonnet agents handle 80% of tasks at 1/60th the cost of Opus
40
+ - **Parallelism**: Team skills spawn multiple agents working simultaneously
41
+
42
+ ### When to use YOU directly (SPEED score 0-1):
43
+ - **Quick lookups**: Read/Grep/Glob for finding a file, checking a value, reading code
44
+ - **Small targeted edits**: 1-2 file changes where you already know what to do
45
+ - **Complex reasoning**: Architecture decisions, debugging novel problems, nuanced tradeoffs
46
+ - **Conversation flow**: Follow-up questions, clarifications, explaining code
47
+ - **Creative problem-solving**: When the task doesn't fit any existing pattern
48
+ - **Judgment calls**: Security reviews, design decisions, "should we even do this?"
49
+
50
+ ### The balance:
51
+ The toolkit handles **process** (repeatable workflows, domain-specific checks, multi-step
52
+ sequences). You handle **judgment** (reasoning, creativity, novel problems, architecture).
53
+
54
+ A senior engineer doesn't do everything themselves — they delegate routine work and focus
55
+ their expertise where it matters most. That's you. The toolkit is your team.
56
+
57
+ **Don't over-delegate**: If it's faster to just Read a file and answer, do it.
58
+ **Don't under-delegate**: If it's a 5-step workflow the toolkit has a skill for, use it.
59
+
60
+ ### Project Knowledge System
61
+
62
+ If this project has been calibrated (`/calibrate`), deep context is available:
63
+
64
+ - **`.claude/project-profile.md`** — Architecture patterns, coding conventions, domain model,
65
+ testing style. Read this before writing any code to match the project's patterns.
66
+ - **`.claude/knowledge/`** — The toolkit's long-term memory for this project:
67
+ - `shared/conventions.md` — Coding rules learned from corrections. **Read before writing code.**
68
+ - `shared/domain.md` — Business rules beyond what's in the code. **Read before domain decisions.**
69
+ - `shared/vocabulary.md` — What the team calls things. **Use these terms.**
70
+ - `shared/patterns.md` — Architecture patterns. **Follow these when adding new code.**
71
+ - `agents/{your-name}.md` — Your past learning. **Read on session start.**
72
+ - **Write back** when you learn something new — corrections, discoveries, decisions.
73
+ - See `knowledge/README.md` for the full protocol.
74
+ - **`.claude/knowledge/external/sources.md`** — Where team knowledge lives outside code
75
+ (Notion, Linear, Figma, etc.). Check before making decisions that might already be documented.
76
+
77
+ ## Session Start Behavior (MANDATORY)
78
+
79
+ On your FIRST response in every new session, ALWAYS start with a brief status line
80
+ using context from the SessionStart hook. Include:
81
+ - Current branch + uncommitted file count
82
+ - Docker/infra status (if problems detected)
83
+ - Open PRs or assigned issues (if any)
84
+ - Any red flags (pending migrations, expired tokens)
85
+
86
+ Format: 1-3 compact lines before addressing the user's request. Example:
87
+ ```
88
+ 📋 project — main | 5 uncommitted | Docker: postgres ✓ redis ✓ | 2 open PRs
89
+ ```
90
+ Then proceed with the user's actual request.
91
+
92
+ **CRITICAL — Greetings and vague first messages**: If the user's first message is a
93
+ greeting ("hey", "hi", "hello", "yo", "sup") or vague ("help", "what's up",
94
+ "what should I work on") or ANY message under 5 words with no specific task —
95
+ **ALWAYS use the `/onboard` skill**. Never respond to greetings yourself. The
96
+ bootstrap hook status line is a quick snapshot — `/onboard` gives the real briefing
97
+ with open PRs, issues, priorities, and actionable next steps.
98
+
99
+ ## Routing Trace (MANDATORY)
100
+
101
+ On EVERY response, show a compact routing trace so the user understands the decision
102
+ path. Place it at the end of your response in a dimmed block:
103
+
104
+ ```
105
+ 🔀 Routing: [what triage decided] → [agent/skill/tool used] ([cost tier])
106
+ Why: [1-line reason for this routing choice]
107
+ ```
108
+
109
+ Examples:
110
+ ```
111
+ 🔀 Routing: backend bug fix → python-backend agent (Sonnet, 10x)
112
+ Why: touches backend/app/services/, needs CLAUDE.md context, SPEED=4
113
+ ```
114
+ ```
115
+ 🔀 Routing: file lookup → Grep (built-in, 0x)
116
+ Why: single-file search, no project context needed, SPEED=0
117
+ ```
118
+
119
+ Rules:
120
+ - Always show the SPEED score breakdown if score >= 2
121
+ - Show which hook provided the context (triage-router, bootstrap, etc.)
122
+ - If you chose NOT to use the triage router's suggestion, explain why
123
+ - Skip the trace only for simple follow-up messages in an ongoing conversation
@@ -0,0 +1,111 @@
1
+ # CLAUDE.md — {{PROJECT_NAME}}
2
+
3
+ <!-- Generated by claude-agents install.sh --init -->
4
+ <!-- TODO: Replace {{placeholders}} with your project details -->
5
+
6
+ ## Project Overview
7
+
8
+ {{PROJECT_NAME}} is a {{DESCRIPTION}}.
9
+
10
+ ## Tech Stack
11
+
12
+ - **Frontend**: <!-- TODO: e.g., Next.js 14, React 18, TypeScript, Tailwind -->
13
+ - **Backend**: <!-- TODO: e.g., FastAPI, SQLAlchemy, PostgreSQL -->
14
+ - **Auth**: <!-- TODO: e.g., Stytch, Auth0, Clerk -->
15
+ - **Deploy**: <!-- TODO: e.g., Railway, Vercel, AWS -->
16
+
17
+ ## Project Structure
18
+
19
+ ```
20
+ {{PROJECT_NAME}}/
21
+ ├── frontend/ <!-- TODO: Frontend directory -->
22
+ ├── backend/ <!-- TODO: Backend directory -->
23
+ └── ...
24
+ ```
25
+
26
+ ## Key Architecture
27
+
28
+ <!-- TODO: Describe your auth flow, API patterns, database schema, etc. -->
29
+
30
+ ## Local Dev Services
31
+
32
+ <!-- TODO: Auto-populated by /scan or fill manually -->
33
+
34
+ | Service | Port | Directory | Start Command |
35
+ |----------|------|-----------|---------------|
36
+ | Frontend | <!-- TODO --> | frontend/ | <!-- TODO: e.g., npm run dev --> |
37
+ | Backend | <!-- TODO --> | backend/ | <!-- TODO: e.g., uvicorn app.main:app --reload --> |
38
+
39
+ ## Test Commands
40
+
41
+ <!-- TODO: Auto-populated by /scan or fill manually -->
42
+
43
+ | What | Command | Directory |
44
+ |------|---------|-----------|
45
+ | Backend tests | <!-- TODO: e.g., pytest --> | backend/ |
46
+ | Backend lint | <!-- TODO: e.g., ruff check . --> | backend/ |
47
+ | Frontend tests | <!-- TODO: e.g., npm test --> | frontend/ |
48
+ | Frontend lint | <!-- TODO: e.g., npm run lint --> | frontend/ |
49
+ | Type check | <!-- TODO: e.g., npx tsc --noEmit --> | frontend/ |
50
+ | E2E tests | <!-- TODO: e.g., npx playwright test --> | frontend/ |
51
+
52
+ ## Infrastructure
53
+
54
+ <!-- TODO: Auto-populated by /scan or fill manually -->
55
+
56
+ | Platform | Service | Domain |
57
+ |----------|---------|--------|
58
+ | <!-- TODO: e.g., Railway --> | <!-- TODO --> | <!-- TODO --> |
59
+
60
+ Health endpoints: <!-- TODO: e.g., /health, /api/health -->
61
+
62
+ ## Environments
63
+
64
+ <!-- TODO: Auto-populated by /scan environments or /calibrate -->
65
+
66
+ | Name | Type | URL | Health | Deploy | Branch |
67
+ |------|------|-----|--------|--------|--------|
68
+ | local | development | <!-- TODO --> | <!-- TODO: e.g., /health --> | manual | — |
69
+ | <!-- TODO --> | <!-- TODO: staging/production/preview/canary --> | <!-- TODO --> | <!-- TODO --> | <!-- TODO --> | <!-- TODO --> |
70
+
71
+ Access notes: <!-- TODO: e.g., Railway MCP for staging/prod. Env vars: .env.local, .env.staging -->
72
+
73
+ ## Domain
74
+
75
+ <!-- TODO: Auto-populated by /scan or fill manually -->
76
+ <!-- Describe what this app does, its core entities, and business rules. -->
77
+ <!-- Used by qa-domain agent for domain-aware testing. -->
78
+
79
+ ## Running Locally
80
+
81
+ ```bash
82
+ # TODO: Add your local development commands
83
+ # Frontend
84
+ cd frontend && npm run dev
85
+
86
+ # Backend
87
+ cd backend && source .venv/bin/activate && uvicorn app.main:app --reload
88
+ ```
89
+
90
+ ## Critical Rules
91
+
92
+ <!-- TODO: Add project-specific rules, e.g.: -->
93
+ - Never push to main directly — always create a PR
94
+ - Secrets in .env.local only — never committed
95
+
96
+ ## Agent Customization
97
+
98
+ The following agents/skills are managed by `claude-agents` (symlinked):
99
+ - Run `~/.claude-agents/install.sh --status` to see what's linked
100
+ - To override any portable file, replace the symlink with a regular file
101
+ - Your override won't be touched by future syncs
102
+
103
+ ### Project-Specific Agents
104
+
105
+ Add project-specific agents as regular files in `.claude/agents/`:
106
+ - See `~/.claude-agents/examples/agents/` for templates (frontend, backend, ops, sre, qa)
107
+
108
+ ### Project-Specific Skills
109
+
110
+ Add project-specific skills as regular directories in `.claude/skills/`:
111
+ - See `~/.claude-agents/examples/skills/` for templates (ci-fix, qa, restart)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "compass",
3
3
  "description": "Product strategy — PM, GTM, user research, content strategy",
4
- "version": "1.0.5",
4
+ "version": "1.0.7",
5
5
  "author": {
6
6
  "name": "Arth AI"
7
7
  }
@@ -0,0 +1 @@
1
+ 1.0.7