chief-clancy 0.2.0 → 0.3.1

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 (141) hide show
  1. package/README.md +13 -24
  2. package/dist/bundle/clancy-afk.js +101 -0
  3. package/dist/bundle/clancy-once.js +13902 -0
  4. package/dist/installer/file-ops/file-ops.d.ts +32 -0
  5. package/dist/installer/file-ops/file-ops.d.ts.map +1 -0
  6. package/dist/installer/file-ops/file-ops.js +58 -0
  7. package/dist/installer/file-ops/file-ops.js.map +1 -0
  8. package/dist/installer/hook-installer/hook-installer.d.ts +29 -0
  9. package/dist/installer/hook-installer/hook-installer.d.ts.map +1 -0
  10. package/dist/installer/hook-installer/hook-installer.js +96 -0
  11. package/dist/installer/hook-installer/hook-installer.js.map +1 -0
  12. package/dist/installer/install.d.ts +3 -0
  13. package/dist/installer/install.d.ts.map +1 -0
  14. package/dist/installer/install.js +248 -0
  15. package/dist/installer/install.js.map +1 -0
  16. package/dist/installer/manifest/manifest.d.ts +41 -0
  17. package/dist/installer/manifest/manifest.d.ts.map +1 -0
  18. package/dist/installer/manifest/manifest.js +97 -0
  19. package/dist/installer/manifest/manifest.js.map +1 -0
  20. package/dist/installer/prompts/prompts.d.ts +33 -0
  21. package/dist/installer/prompts/prompts.d.ts.map +1 -0
  22. package/dist/installer/prompts/prompts.js +55 -0
  23. package/dist/installer/prompts/prompts.js.map +1 -0
  24. package/dist/schemas/env.d.ts +75 -0
  25. package/dist/schemas/env.d.ts.map +1 -0
  26. package/dist/schemas/env.js +40 -0
  27. package/dist/schemas/env.js.map +1 -0
  28. package/dist/schemas/github.d.ts +27 -0
  29. package/dist/schemas/github.d.ts.map +1 -0
  30. package/dist/schemas/github.js +17 -0
  31. package/dist/schemas/github.js.map +1 -0
  32. package/dist/schemas/index.d.ts +9 -0
  33. package/dist/schemas/index.d.ts.map +1 -0
  34. package/dist/schemas/index.js +5 -0
  35. package/dist/schemas/index.js.map +1 -0
  36. package/dist/schemas/jira.d.ts +37 -0
  37. package/dist/schemas/jira.d.ts.map +1 -0
  38. package/dist/schemas/jira.js +37 -0
  39. package/dist/schemas/jira.js.map +1 -0
  40. package/dist/schemas/linear.d.ts +67 -0
  41. package/dist/schemas/linear.d.ts.map +1 -0
  42. package/dist/schemas/linear.js +50 -0
  43. package/dist/schemas/linear.js.map +1 -0
  44. package/dist/scripts/afk/afk.d.ts +21 -0
  45. package/dist/scripts/afk/afk.d.ts.map +1 -0
  46. package/dist/scripts/afk/afk.js +124 -0
  47. package/dist/scripts/afk/afk.js.map +1 -0
  48. package/dist/scripts/board/github/github.d.ts +40 -0
  49. package/dist/scripts/board/github/github.d.ts.map +1 -0
  50. package/dist/scripts/board/github/github.js +121 -0
  51. package/dist/scripts/board/github/github.js.map +1 -0
  52. package/dist/scripts/board/jira/jira.d.ts +90 -0
  53. package/dist/scripts/board/jira/jira.d.ts.map +1 -0
  54. package/dist/scripts/board/jira/jira.js +251 -0
  55. package/dist/scripts/board/jira/jira.js.map +1 -0
  56. package/dist/scripts/board/linear/linear.d.ts +85 -0
  57. package/dist/scripts/board/linear/linear.d.ts.map +1 -0
  58. package/dist/scripts/board/linear/linear.js +209 -0
  59. package/dist/scripts/board/linear/linear.js.map +1 -0
  60. package/dist/scripts/once/once.d.ts +12 -0
  61. package/dist/scripts/once/once.d.ts.map +1 -0
  62. package/dist/scripts/once/once.js +330 -0
  63. package/dist/scripts/once/once.js.map +1 -0
  64. package/dist/scripts/shared/branch/branch.d.ts +50 -0
  65. package/dist/scripts/shared/branch/branch.d.ts.map +1 -0
  66. package/dist/scripts/shared/branch/branch.js +61 -0
  67. package/dist/scripts/shared/branch/branch.js.map +1 -0
  68. package/dist/scripts/shared/claude-cli/claude-cli.d.ts +17 -0
  69. package/dist/scripts/shared/claude-cli/claude-cli.d.ts.map +1 -0
  70. package/dist/scripts/shared/claude-cli/claude-cli.js +35 -0
  71. package/dist/scripts/shared/claude-cli/claude-cli.js.map +1 -0
  72. package/dist/scripts/shared/env-parser/env-parser.d.ts +30 -0
  73. package/dist/scripts/shared/env-parser/env-parser.d.ts.map +1 -0
  74. package/dist/scripts/shared/env-parser/env-parser.js +64 -0
  75. package/dist/scripts/shared/env-parser/env-parser.js.map +1 -0
  76. package/dist/scripts/shared/env-schema/env-schema.d.ts +27 -0
  77. package/dist/scripts/shared/env-schema/env-schema.d.ts.map +1 -0
  78. package/dist/scripts/shared/env-schema/env-schema.js +46 -0
  79. package/dist/scripts/shared/env-schema/env-schema.js.map +1 -0
  80. package/dist/scripts/shared/git-ops/git-ops.d.ts +52 -0
  81. package/dist/scripts/shared/git-ops/git-ops.d.ts.map +1 -0
  82. package/dist/scripts/shared/git-ops/git-ops.js +107 -0
  83. package/dist/scripts/shared/git-ops/git-ops.js.map +1 -0
  84. package/dist/scripts/shared/http/http.d.ts +52 -0
  85. package/dist/scripts/shared/http/http.d.ts.map +1 -0
  86. package/dist/scripts/shared/http/http.js +74 -0
  87. package/dist/scripts/shared/http/http.js.map +1 -0
  88. package/dist/scripts/shared/notify/notify.d.ts +46 -0
  89. package/dist/scripts/shared/notify/notify.d.ts.map +1 -0
  90. package/dist/scripts/shared/notify/notify.js +88 -0
  91. package/dist/scripts/shared/notify/notify.js.map +1 -0
  92. package/dist/scripts/shared/preflight/preflight.d.ts +40 -0
  93. package/dist/scripts/shared/preflight/preflight.d.ts.map +1 -0
  94. package/dist/scripts/shared/preflight/preflight.js +84 -0
  95. package/dist/scripts/shared/preflight/preflight.js.map +1 -0
  96. package/dist/scripts/shared/progress/progress.d.ts +25 -0
  97. package/dist/scripts/shared/progress/progress.d.ts.map +1 -0
  98. package/dist/scripts/shared/progress/progress.js +46 -0
  99. package/dist/scripts/shared/progress/progress.js.map +1 -0
  100. package/dist/scripts/shared/prompt/prompt.d.ts +38 -0
  101. package/dist/scripts/shared/prompt/prompt.d.ts.map +1 -0
  102. package/dist/scripts/shared/prompt/prompt.js +77 -0
  103. package/dist/scripts/shared/prompt/prompt.js.map +1 -0
  104. package/dist/types/board.d.ts +13 -0
  105. package/dist/types/board.d.ts.map +1 -0
  106. package/dist/types/board.js +5 -0
  107. package/dist/types/board.js.map +1 -0
  108. package/dist/types/index.d.ts +3 -0
  109. package/dist/types/index.d.ts.map +1 -0
  110. package/dist/types/index.js +2 -0
  111. package/dist/types/index.js.map +1 -0
  112. package/dist/utils/ansi/ansi.d.ts +55 -0
  113. package/dist/utils/ansi/ansi.d.ts.map +1 -0
  114. package/dist/utils/ansi/ansi.js +55 -0
  115. package/dist/utils/ansi/ansi.js.map +1 -0
  116. package/dist/utils/parse-json/parse-json.d.ts +20 -0
  117. package/dist/utils/parse-json/parse-json.d.ts.map +1 -0
  118. package/dist/utils/parse-json/parse-json.js +27 -0
  119. package/dist/utils/parse-json/parse-json.js.map +1 -0
  120. package/hooks/clancy-check-update.js +2 -2
  121. package/hooks/clancy-credential-guard.js +8 -1
  122. package/package.json +48 -8
  123. package/registry/boards.json +3 -6
  124. package/src/templates/CLAUDE.md +1 -1
  125. package/src/workflows/doctor.md +32 -23
  126. package/src/workflows/init.md +101 -26
  127. package/src/workflows/logs.md +13 -6
  128. package/src/workflows/map-codebase.md +17 -16
  129. package/src/workflows/once.md +22 -12
  130. package/src/workflows/review.md +40 -27
  131. package/src/workflows/run.md +20 -12
  132. package/src/workflows/scaffold.md +5 -1034
  133. package/src/workflows/settings.md +9 -6
  134. package/src/workflows/status.md +17 -8
  135. package/src/workflows/uninstall.md +11 -6
  136. package/src/workflows/update.md +20 -13
  137. package/bin/install.js +0 -362
  138. package/src/templates/scripts/clancy-afk.sh +0 -111
  139. package/src/templates/scripts/clancy-once-github.sh +0 -249
  140. package/src/templates/scripts/clancy-once-linear.sh +0 -320
  141. package/src/templates/scripts/clancy-once.sh +0 -322
@@ -43,12 +43,16 @@ Each agent is defined in `src/agents/`. Pass the agent the full path to the docs
43
43
 
44
44
  Tell the user agents are running:
45
45
  ```
46
- Scanning codebase with 5 parallel agents...
47
- tech → STACK.md, INTEGRATIONS.md
48
- arch → ARCHITECTURE.md
49
- quality → CONVENTIONS.md, TESTING.md, GIT.md, DEFINITION-OF-DONE.md
50
- design → DESIGN-SYSTEM.md, ACCESSIBILITY.md
51
- concernsCONCERNS.md
46
+ 🚨 Clancy Map Codebase
47
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
48
+
49
+ "Sending in the task force..." — 5 agents deployed.
50
+
51
+ 🔍 tech STACK.md, INTEGRATIONS.md
52
+ 🔍 arch → ARCHITECTURE.md
53
+ 🔍 quality → CONVENTIONS.md, TESTING.md, GIT.md, DEFINITION-OF-DONE.md
54
+ 🔍 design → DESIGN-SYSTEM.md, ACCESSIBILITY.md
55
+ 🔍 concerns → CONCERNS.md
52
56
  ```
53
57
 
54
58
  ---
@@ -57,11 +61,11 @@ Scanning codebase with 5 parallel agents...
57
61
 
58
62
  Each agent returns a brief confirmation when done. Display as they complete:
59
63
  ```
60
- tech agent complete
61
- arch agent complete
62
- quality agent complete
63
- design agent complete
64
- concerns agent complete
64
+ tech agent complete
65
+ arch agent complete
66
+ quality agent complete
67
+ design agent complete
68
+ concerns agent complete
65
69
  ```
66
70
 
67
71
  ---
@@ -102,12 +106,9 @@ git commit -m "docs(clancy): map codebase — generate .clancy/docs/"
102
106
  ## Step 7 — Final message
103
107
 
104
108
  ```
105
- Codebase mapped. Clancy is ready.
106
-
107
- Docs written to .clancy/docs/ (10 files)
109
+ Codebase mapped 10 files written to .clancy/docs/
108
110
 
109
- Run /clancy:once to pick up your first ticket.
110
- Run /clancy:run to process the full queue.
111
+ "Case closed. All files accounted for." — Run /clancy:once to pick up your first ticket, or /clancy:run to process the queue.
111
112
  ```
112
113
 
113
114
  ---
@@ -4,7 +4,7 @@ Before doing anything else, check for updates:
4
4
 
5
5
  1. Run: `npm show chief-clancy version`
6
6
  2. Read the installed version from the Clancy `package.json`
7
- 3. If a newer version exists, print: `ℹ Clancy v{current} → v{latest} available. Run /clancy:update to upgrade.` then continue normally.
7
+ 3. If a newer version exists, print: `ℹ️ Clancy v{current} → v{latest} available. Run /clancy:update to upgrade.` then continue normally.
8
8
  4. If already on latest, continue silently.
9
9
  5. If the npm check fails for any reason (offline, network error), continue silently. Never block on this.
10
10
 
@@ -32,12 +32,12 @@ Pick up exactly one ticket from the Kanban board, implement it, commit, squash-m
32
32
  ```
33
33
  Stop.
34
34
 
35
- 3. The script to run is always `.clancy/clancy-once.sh` regardless of board.
36
- `/clancy:init` copies the correct board variant as `clancy-once.sh` during setup.
35
+ 3. The script to run is always `.clancy/clancy-once.js` regardless of board.
36
+ `/clancy:init` copies the correct board variant as `clancy-once.js` during setup.
37
37
 
38
- 4. Check `.clancy/clancy-once.sh` exists. If not:
38
+ 4. Check `.clancy/clancy-once.js` exists. If not:
39
39
  ```
40
- .clancy/clancy-once.sh not found. Run /clancy:init to scaffold scripts.
40
+ .clancy/clancy-once.js not found. Run /clancy:init to scaffold scripts.
41
41
  ```
42
42
  Stop.
43
43
 
@@ -51,24 +51,30 @@ Check if the user passed `--dry-run` as an argument to the slash command.
51
51
 
52
52
  Display:
53
53
  ```
54
- Running Clancy for one ticket.
54
+ 🚨 Clancy Once
55
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
56
+
57
+ "I'm on the case." — Running for one ticket.
55
58
  ```
56
59
 
57
60
  Execute:
58
61
  ```bash
59
- bash .clancy/clancy-once.sh
62
+ node .clancy/clancy-once.js
60
63
  ```
61
64
 
62
65
  **With `--dry-run`:**
63
66
 
64
67
  Display:
65
68
  ```
66
- Running Clancy in dry-run mode no changes will be made.
69
+ 🚨 Clancy — Dry Run
70
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
71
+
72
+ "Just a routine patrol." — Running in dry-run mode, no changes will be made.
67
73
  ```
68
74
 
69
75
  Execute:
70
76
  ```bash
71
- bash .clancy/clancy-once.sh --dry-run
77
+ node .clancy/clancy-once.js --dry-run
72
78
  ```
73
79
 
74
80
  Stream output directly — do not buffer or summarise.
@@ -79,13 +85,16 @@ Stream output directly — do not buffer or summarise.
79
85
 
80
86
  On success, echo the result line from the script output:
81
87
  ```
82
- {TICKET-KEY} complete.
88
+ {TICKET-KEY} complete.
89
+
90
+ "That's some fine police work there, Lou."
83
91
  ```
84
92
 
85
93
  On failure:
86
94
  ```
87
- Clancy stopped. See output above for details.
88
- Run /clancy:status to check the board, or /clancy:review to inspect the ticket.
95
+ Clancy stopped. See output above for details.
96
+
97
+ "Looks like we've got ourselves a 23-19." — Run /clancy:status to check the board, or /clancy:review to inspect the ticket.
89
98
  ```
90
99
 
91
100
  ---
@@ -94,3 +103,4 @@ Run /clancy:status to check the board, or /clancy:review to inspect the ticket.
94
103
 
95
104
  - Do not loop. This command runs the script exactly once and stops.
96
105
  - Do not attempt to run scripts from `src/templates/` — only scripts in `.clancy/`.
106
+ - The runtime scripts in `.clancy/` are self-contained bundles — no npm package dependency needed at runtime.
@@ -14,9 +14,9 @@ Same as status workflow. Check `.clancy/`, `.clancy/.env`, and board credentials
14
14
 
15
15
  ## Step 2 — Fetch next ticket
16
16
 
17
- Detect board from `.clancy/.env` and fetch with `maxResults=1`. The query must match `clancy-once.sh` exactly — what review shows is what run would pick up.
17
+ Detect board from `.clancy/.env` and fetch with `maxResults=1`. The query must match the once-runner exactly — what review shows is what run would pick up.
18
18
 
19
- **Jira:** Build JQL using the same clauses as `clancy-once.sh`:
19
+ **Jira:** Build JQL using the same clauses as the once-runner:
20
20
  - Sprint clause: include `AND sprint in openSprints()` if `CLANCY_JQL_SPRINT` is set
21
21
  - Label clause: include `AND labels = "$CLANCY_LABEL"` if `CLANCY_LABEL` is set
22
22
  - `CLANCY_JQL_STATUS` defaults to `To Do` if not set
@@ -43,7 +43,12 @@ Fetch full ticket content: summary, description (full text), acceptance criteria
43
43
 
44
44
  If no tickets found:
45
45
  ```
46
+ 🚨 Clancy — Review
47
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
48
+
46
49
  No tickets in the queue. Nothing to review.
50
+
51
+ "Quiet. Too quiet." — Check your board or run /clancy:status.
47
52
  ```
48
53
  Stop.
49
54
 
@@ -108,43 +113,51 @@ Bad: "Ensure design specs are provided"
108
113
  ## Step 5 — Display output
109
114
 
110
115
  ```
111
- Reviewing: [{TICKET-KEY}] {Summary}
112
-
113
- Confidence: {score}% — {band label}
116
+ 🚨 Clancy — Review
114
117
  ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
115
118
 
119
+ [{TICKET-KEY}] {Summary}
120
+
121
+ Confidence: {score}% — {badge} {band label}
122
+
116
123
  {for each criterion:}
117
- {criterion name} — {pass reason}
118
- {criterion name} — {warn reason}
119
- → {specific recommendation}
120
- {criterion name} — {fail reason}
121
- → {specific recommendation}
122
-
123
- Verdict: {action based on band}
124
- {next step options}
124
+ {criterion name} — {pass reason}
125
+ ⚠️ {criterion name} — {warn reason}
126
+ → {specific recommendation}
127
+ {criterion name} — {fail reason}
128
+ → {specific recommendation}
129
+
130
+ {verdict line}
131
+
132
+ {sign-off quote}
125
133
  ```
126
134
 
127
135
  ### Confidence bands
128
136
 
129
- | Score | Label | Verdict action |
130
- |---|---|---|
131
- | 85–100% | Ready | "Run with confidence." |
132
- | 65–84% | Good to go with caveats | "Review the warnings above, then run /clancy:once." |
133
- | 40–64% | Needs work | "Address the items in the ticket, then re-run /clancy:review." |
134
- | 0–39% | Not ready | "This ticket needs significant rework before Clancy can implement it reliably." |
137
+ | Score | Badge | Label | Verdict action |
138
+ |---|---|---|---|
139
+ | 85–100% | 🟢 | Ready | "Run with confidence." |
140
+ | 65–84% | 🟡 | Good to go with caveats | "Review the warnings above, then run /clancy:once." |
141
+ | 40–64% | 🟠 | Needs work | "Address the items in the ticket, then re-run /clancy:review." |
142
+ | 0–39% | 🔴 | Not ready | "This ticket needs significant rework before Clancy can implement it reliably." |
135
143
 
136
144
  **Executability override:** If criterion 7 (Clancy executability) scores Fail, ignore the calculated band and show:
137
145
  ```
138
- Verdict: Not ready for Clancy
139
- This ticket requires work outside the codebase — Clancy can only implement code changes.
140
- Update the ticket to focus on the codebase side, or remove it from the queue.
146
+ 🔴 Verdict: Not ready for Clancy
147
+ This ticket requires work outside the codebase — Clancy can only implement code changes.
148
+ Update the ticket to focus on the codebase side, or remove it from the queue.
149
+
150
+ "This is Papa Bear. Put out an APB for a better ticket spec."
141
151
  ```
142
152
 
143
- Next-step line per band (append after the verdict — never suggest bypassing the review on low-confidence tickets):
144
- - **Ready:** `Run /clancy:once to pick it up.`
145
- - **Good to go:** `Fix the warnings if possible, then run /clancy:once.`
146
- - **Needs work:** `Update the ticket to address the ✗ items above, then re-run /clancy:review.`
147
- - **Not ready / executability override:** `Rework the ticket firstdo not run Clancy on it yet.`
153
+ ### Sign-off quotes per band
154
+
155
+ Append a Wiggum-themed quote after the verdict to add personality. Never suggest bypassing the review on low-confidence tickets:
156
+
157
+ - **🟢 Ready:** `"Bake 'em away, toys."Run /clancy:once to pick it up.`
158
+ - **🟡 Good to go:** `"I'd rather let Herman go. I don't think we've got enough to nail him." — Fix the warnings, then run /clancy:once.`
159
+ - **🟠 Needs work:** `"Uh, no. You got the wrong number. This is 9-1... 2." — Update the ticket, then re-run /clancy:review.`
160
+ - **🔴 Not ready:** `"This is Papa Bear. Put out an APB for a better ticket spec." — Rework the ticket first.`
148
161
 
149
162
  ---
150
163
 
@@ -4,7 +4,7 @@ Before doing anything else, check for updates:
4
4
 
5
5
  1. Run: `npm show chief-clancy version`
6
6
  2. Read the installed version from the Clancy `package.json`
7
- 3. If a newer version exists, print: `ℹ Clancy v{current} → v{latest} available. Run /clancy:update to upgrade.` then continue normally.
7
+ 3. If a newer version exists, print: `ℹ️ Clancy v{current} → v{latest} available. Run /clancy:update to upgrade.` then continue normally.
8
8
  4. If already on latest, continue silently.
9
9
  5. If the npm check fails for any reason (offline, network error), continue silently. Never block on this.
10
10
 
@@ -28,14 +28,17 @@ The command may be invoked as `/clancy:run` or `/clancy:run N` where N is a posi
28
28
  If the resolved value of `MAX_ITERATIONS` is **10 or greater**, show a warning before continuing:
29
29
 
30
30
  ```
31
- You're about to run Clancy for up to {N} tickets.
31
+ 🚨 Clancy Run
32
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
33
+
34
+ ⚠️ You're about to run Clancy for up to {N} tickets.
32
35
 
33
36
  At rough estimates per ticket (Sonnet):
34
37
  Simple tickets ~$0.25–$0.75 each → up to ~${low} total
35
38
  Complex tickets ~$2.00–$5.00 each → up to ~${high} total
36
39
 
37
- Mistakes compound if Claude misreads a ticket, it will do so {N} times before you check.
38
- Consider starting with /clancy:once or a smaller run to validate first.
40
+ "Slow down there, cowboy..." — Mistakes compound. If Claude misreads a ticket, it will do so {N} times.
41
+ Consider /clancy:once or a smaller run to validate first.
39
42
 
40
43
  Continue with {N} tickets? [Y/n]
41
44
  ```
@@ -72,9 +75,9 @@ If the user types `n` or `N`: print `Cancelled.` and stop. Any other input (incl
72
75
  ```
73
76
  Stop.
74
77
 
75
- 4. Check `.clancy/clancy-afk.sh` exists. If not:
78
+ 4. Check `.clancy/clancy-afk.js` exists. If not:
76
79
  ```
77
- .clancy/clancy-afk.sh not found. Run /clancy:init to scaffold scripts.
80
+ .clancy/clancy-afk.js not found. Run /clancy:init to scaffold scripts.
78
81
  ```
79
82
  Stop.
80
83
 
@@ -82,9 +85,12 @@ If the user types `n` or `N`: print `Cancelled.` and stop. Any other input (incl
82
85
 
83
86
  ## Step 3 — Start
84
87
 
85
- Display:
88
+ Display (only if the high-iteration warning was not already shown):
86
89
  ```
87
- Starting Clancy — will process up to {N} ticket(s). Ctrl+C to stop early.
90
+ 🚨 Clancy — Run
91
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
92
+
93
+ "All right, let's do this." — Processing up to {N} ticket(s). Ctrl+C to stop early.
88
94
  ```
89
95
 
90
96
  ---
@@ -93,7 +99,7 @@ Starting Clancy — will process up to {N} ticket(s). Ctrl+C to stop early.
93
99
 
94
100
  Execute:
95
101
  ```bash
96
- MAX_ITERATIONS={N} bash .clancy/clancy-afk.sh
102
+ MAX_ITERATIONS={N} node .clancy/clancy-afk.js
97
103
  ```
98
104
 
99
105
  Stream output directly — do not buffer or summarise.
@@ -104,10 +110,11 @@ Stream output directly — do not buffer or summarise.
104
110
 
105
111
  When the script exits, echo the final summary line from the output.
106
112
 
107
- If `clancy-afk.sh` exits with a non-zero status:
113
+ If `clancy-afk.js` exits with a non-zero status:
108
114
  ```
109
- Clancy stopped with an error. Check the output above.
110
- Run /clancy:once for more detail on the next ticket.
115
+ Clancy stopped with an error. Check the output above.
116
+
117
+ "Looks like we've got ourselves a 23-19." — Run /clancy:once for more detail on the next ticket.
111
118
  ```
112
119
 
113
120
  ---
@@ -117,3 +124,4 @@ Run /clancy:once for more detail on the next ticket.
117
124
  - The `N` argument is session-only. It never modifies `.clancy/.env`.
118
125
  - If the user wants to permanently change their default, they edit `.clancy/.env` directly or re-run `/clancy:init` advanced setup.
119
126
  - Do not attempt to run scripts from `src/templates/` — only run scripts in `.clancy/`.
127
+ - The runtime scripts in `.clancy/` are self-contained bundles — no npm package dependency needed at runtime.