chief-clancy 0.5.1 → 0.5.3

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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Autonomous, board-driven development for Claude Code.**
4
4
 
5
- [![npm](https://img.shields.io/npm/v/chief-clancy?style=for-the-badge&color=cb3837)](https://www.npmjs.com/package/chief-clancy) [![License: MIT](https://img.shields.io/badge/License-MIT-blue?style=for-the-badge)](./LICENSE) [![Tests](https://img.shields.io/badge/tests-163%20passing-brightgreen?style=for-the-badge)](docs/TESTING.md) [![GitHub Stars](https://img.shields.io/github/stars/Pushedskydiver/clancy?style=for-the-badge)](https://github.com/Pushedskydiver/clancy/stargazers)
5
+ [![npm](https://img.shields.io/npm/v/chief-clancy?style=for-the-badge&color=cb3837)](https://www.npmjs.com/package/chief-clancy) [![License: MIT](https://img.shields.io/badge/License-MIT-blue?style=for-the-badge)](./LICENSE) [![Tests](https://img.shields.io/badge/tests-167%20passing-brightgreen?style=for-the-badge)](docs/TESTING.md) [![GitHub Stars](https://img.shields.io/github/stars/Pushedskydiver/clancy?style=for-the-badge)](https://github.com/Pushedskydiver/clancy/stargazers)
6
6
 
7
7
  > [!WARNING]
8
8
  > Clancy is in early development. Expect bugs, breaking changes, and rough edges. If you hit an issue, please [open a bug report](https://github.com/Pushedskydiver/clancy/issues/new).
@@ -193,6 +193,13 @@ npx chief-clancy@latest --local # or --global
193
193
 
194
194
  You can also toggle roles from within Claude Code using `/clancy:settings`.
195
195
 
196
+ Each role has detailed documentation:
197
+
198
+ - [Implementer](docs/roles/IMPLEMENTER.md) — picks up tickets, implements, commits, merges (AFK loop support)
199
+ - [Reviewer](docs/roles/REVIEWER.md) — scores ticket readiness, tracks progress
200
+ - [Setup & Maintenance](docs/roles/SETUP.md) — init wizard, settings, diagnostics, codebase mapping
201
+ - [Planner](docs/roles/PLANNER.md) — refines backlog tickets into structured implementation plans
202
+
196
203
  ---
197
204
 
198
205
  ## What gets created
@@ -221,75 +228,11 @@ Clancy also merges a section into your `CLAUDE.md` (or creates one) that tells C
221
228
 
222
229
  ---
223
230
 
224
- ## Optional enhancements
225
-
226
- Set during `/clancy:init` advanced setup, or by editing `.clancy/.env` directly. Use `/clancy:settings` → "Save as defaults" to save non-credential settings to `~/.clancy/defaults.json` — new projects created with `/clancy:init` will inherit them automatically.
231
+ ## Configuration
227
232
 
228
- ### Figma MCP
229
-
230
- ```
231
- FIGMA_API_KEY=your-key
232
- ```
233
+ Clancy supports optional enhancements — Figma design specs, Playwright visual checks, status transitions, and Slack/Teams notifications. All are configured via `.clancy/.env` or `/clancy:settings`.
233
234
 
234
- When a ticket description contains a Figma URL, Clancy fetches design specs automatically:
235
-
236
- 1. Figma MCP: `get_metadata` → `get_design_context` → `get_screenshot` (3 calls)
237
- 2. Figma REST API image export (fallback)
238
- 3. Ticket image attachment (fallback)
239
-
240
- ### Playwright visual checks
241
-
242
- ```
243
- PLAYWRIGHT_ENABLED=true
244
- PLAYWRIGHT_DEV_COMMAND="yarn dev"
245
- PLAYWRIGHT_DEV_PORT=5173
246
- PLAYWRIGHT_STORYBOOK_COMMAND="yarn storybook" # if applicable
247
- PLAYWRIGHT_STORYBOOK_PORT=6006 # if applicable
248
- PLAYWRIGHT_STARTUP_WAIT=15
249
- ```
250
-
251
- After implementing a UI ticket, Clancy starts the dev server or Storybook, screenshots, assesses visually, checks the console, and fixes anything wrong before committing.
252
-
253
- ### Status transitions
254
-
255
- ```
256
- CLANCY_STATUS_IN_PROGRESS="In Progress"
257
- CLANCY_STATUS_DONE="Done"
258
- ```
259
-
260
- Clancy automatically moves tickets through your board when it picks up and completes them. Set these to the exact column name shown in your Jira or Linear board. Best-effort — a failed transition never stops the run. Configurable via `/clancy:settings`.
261
-
262
- ### Notifications
263
-
264
- ```
265
- CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
266
- ```
267
-
268
- Posts to Slack or Teams when a ticket completes or Clancy hits an error. URL is auto-detected.
269
-
270
- ---
271
-
272
- ## How the loop works
273
-
274
- ```
275
- clancy-afk.js
276
- └─ while i < MAX_ITERATIONS:
277
- node clancy-once.js
278
- 1. Preflight checks (credentials, git state, board reachability)
279
- 2. Fetch next ticket from board (maxResults=1)
280
- 3. git checkout $EPIC_BRANCH
281
- 4. git checkout -b feature/{ticket-key}
282
- 5. Read .clancy/docs/* (especially GIT.md)
283
- 6. echo "$PROMPT" | claude --dangerously-skip-permissions
284
- 7. git checkout $EPIC_BRANCH
285
- 8. git merge --squash feature/{ticket-key}
286
- 9. git commit -m "feat(TICKET): summary"
287
- 10. git branch -D feature/{ticket-key}
288
- 11. Append to .clancy/progress.txt
289
- if "No tickets found": break
290
- ```
291
-
292
- Clancy reads `GIT.md` before every run and follows whatever conventions are documented there. The defaults above apply on greenfield projects or when GIT.md is silent.
235
+ See [Configuration guide](docs/guides/CONFIGURATION.md) for full details and all environment variables.
293
236
 
294
237
  ---
295
238
 
@@ -311,80 +254,9 @@ Clancy is what happens when you take that idea seriously for team development. S
311
254
 
312
255
  ## Security
313
256
 
314
- ### Permissions model
315
-
316
- Clancy runs Claude with `--dangerously-skip-permissions`, which suppresses all permission prompts so it can work unattended. This means Claude has full read/write access to your file system and can execute shell commands without asking.
317
-
318
- **Only run Clancy on codebases you own and trust.** Review the scripts in `.clancy/` before your first run if you want to see exactly what executes.
319
-
320
- **Alternative — granular permissions:** if you run Claude Code without `--dangerously-skip-permissions` by default, you can pre-approve only the commands Clancy needs. Add this to `.claude/settings.json` in your project (or `~/.claude/settings.json` globally):
321
-
322
- ```json
323
- {
324
- "permissions": {
325
- "allow": [
326
- "Bash(git:*)",
327
- "Bash(bash:*)",
328
- "Bash(node:*)",
329
- "Bash(npm:*)",
330
- "Bash(mkdir:*)",
331
- "Bash(cat:*)",
332
- "Bash(cp:*)",
333
- "Bash(echo:*)",
334
- "Bash(ls:*)",
335
- "Bash(grep:*)",
336
- "Bash(wc:*)",
337
- "Bash(sort:*)",
338
- "Bash(tr:*)",
339
- "Bash(head:*)",
340
- "Bash(tail:*)",
341
- "Bash(lsof:*)",
342
- "Bash(command:*)"
343
- ]
344
- }
345
- }
346
- ```
347
-
348
- ### Protect your credentials from Claude
349
-
350
- Your board tokens and API keys live in `.clancy/.env`. Although Claude doesn't need to read this file during a run (the JS shim loads it before invoking Claude), adding it to Claude Code's deny list is good defence-in-depth. Add it to `.claude/settings.json` in your project, or `~/.claude/settings.json` globally:
351
-
352
- ```json
353
- {
354
- "permissions": {
355
- "deny": [
356
- "Read(.clancy/.env)",
357
- "Read(.env)",
358
- "Read(.env.*)",
359
- "Read(**/*.pem)",
360
- "Read(**/*.key)"
361
- ]
362
- }
363
- }
364
- ```
365
-
366
- This prevents Claude from reading these files regardless of what commands run. Clancy automatically adds `.clancy/.env` to `.gitignore` during init, but the deny list is an additional layer.
367
-
368
- ### Credential guard
369
-
370
- Clancy installs a `PreToolUse` hook (`clancy-credential-guard.js`) that scans every Write, Edit, and MultiEdit operation for credential patterns — API keys, tokens, passwords, private keys, and connection strings. If a match is found, the operation is blocked with a message telling Claude to move the credential to `.clancy/.env` instead. Files that are expected to contain credentials (`.clancy/.env`, `.env.example`, etc.) are exempt.
371
-
372
- This is best-effort — it won't catch every possible credential format, but it prevents the most common accidental leaks.
257
+ Clancy runs Claude with `--dangerously-skip-permissions` for unattended operation. It includes a credential guard hook, recommended permission deny lists, and token scope guidance.
373
258
 
374
- ### Token scopes
375
-
376
- Use the minimum permissions each integration requires:
377
-
378
- | Integration | Recommended scope |
379
- |---|---|
380
- | GitHub PAT | `repo` — read/write issues and contents for your repo only |
381
- | Jira API token | Standard user — no admin rights needed |
382
- | Linear API key | Personal API key — read/write to your assigned issues |
383
- | Figma API key | Read-only access is sufficient |
384
-
385
- ### Webhook URLs
386
-
387
- If you configure Slack or Teams notifications, treat the webhook URL as a secret — anyone who has it can post to your channel. Keep `.clancy/.env` gitignored (Clancy does this automatically during init) and never share the URL.
259
+ See [Security guide](docs/guides/SECURITY.md) for full details — permissions model, credential protection, token scopes, and webhook security.
388
260
 
389
261
  ---
390
262
 
@@ -392,70 +264,7 @@ If you configure Slack or Teams notifications, treat the webhook URL as a secret
392
264
 
393
265
  **Start here:** run `/clancy:doctor` — it tests every integration and tells you exactly what's broken and how to fix it.
394
266
 
395
- ---
396
-
397
- **Commands not found after install?**
398
-
399
- Restart Claude Code to reload commands, then verify the files exist:
400
-
401
- ```bash
402
- ls ~/.claude/commands/clancy/ # global install
403
- ls .claude/commands/clancy/ # local install
404
- ```
405
-
406
- If missing, re-run `npx chief-clancy`.
407
-
408
- ---
409
-
410
- **Board connection fails?**
411
-
412
- Run `/clancy:doctor` to test your credentials. If it reports a failure, open `.clancy/.env` and check your tokens — they're the most common cause. You can also run `/clancy:settings` → Switch board to re-enter credentials without re-running full init.
413
-
414
- ---
415
-
416
- **No tickets showing up?**
417
-
418
- Run `/clancy:status` to see what Clancy would pick up. If the queue is empty:
419
-
420
- - Check that tickets are assigned to you on the board
421
- - For Jira: verify the status filter in `/clancy:settings` matches your board's status name exactly (e.g. `To Do` vs `TODO`)
422
- - For Linear: Clancy filters by `state.type: unstarted` — ensure your backlog state maps to this type
423
-
424
- ---
425
-
426
- **`.clancy/clancy-once.js` not found?**
427
-
428
- Re-run `/clancy:init` — it will detect the existing setup and offer to re-scaffold without asking for credentials again.
429
-
430
- ---
431
-
432
- **Playwright port already in use?**
433
-
434
- ```bash
435
- lsof -ti:5173 | xargs kill -9 # replace 5173 with your PLAYWRIGHT_DEV_PORT
436
- ```
437
-
438
- ---
439
-
440
- **Updating Clancy?**
441
-
442
- ```bash
443
- /clancy:update
444
- ```
445
-
446
- Or directly: `npx chief-clancy@latest`
447
-
448
- The update workflow shows what's changed (changelog diff) and asks for confirmation before overwriting. If you've customised any command or workflow files, they're automatically backed up to `.claude/clancy/local-patches/` before the update — check there to reapply your changes afterwards.
449
-
450
- ---
451
-
452
- **Uninstalling?**
453
-
454
- ```
455
- /clancy:uninstall
456
- ```
457
-
458
- Removes slash commands from your chosen location. Cleans up the `<!-- clancy:start -->` / `<!-- clancy:end -->` block from `CLAUDE.md` (or deletes it entirely if Clancy created it) and removes the `.clancy/.env` entry from `.gitignore`. Optionally removes `.clancy/` (credentials and docs).
267
+ See [Troubleshooting guide](docs/guides/TROUBLESHOOTING.md) for common issues and solutions.
459
268
 
460
269
  ---
461
270