chief-clancy 0.7.4 → 0.8.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.
- package/README.md +5 -2
- package/dist/bundle/clancy-afk.js +6 -6
- package/dist/bundle/clancy-once.js +50 -49
- package/dist/installer/hook-installer/hook-installer.d.ts.map +1 -1
- package/dist/installer/hook-installer/hook-installer.js +6 -0
- package/dist/installer/hook-installer/hook-installer.js.map +1 -1
- package/dist/installer/install.js +5 -94
- package/dist/installer/install.js.map +1 -1
- package/dist/installer/ui/ui.d.ts +9 -0
- package/dist/installer/ui/ui.d.ts.map +1 -0
- package/dist/installer/ui/ui.js +94 -0
- package/dist/installer/ui/ui.js.map +1 -0
- package/hooks/clancy-drift-detector.js +96 -0
- package/hooks/clancy-notification.js +105 -0
- package/package.json +1 -1
- package/src/roles/planner/workflows/approve-plan.md +1 -1
- package/src/roles/planner/workflows/plan.md +8 -0
- package/src/roles/setup/commands/help.md +3 -1
- package/src/roles/setup/commands/update.md +4 -1
- package/src/roles/setup/workflows/init.md +75 -3
- package/src/roles/setup/workflows/scaffold.md +158 -0
- package/src/roles/setup/workflows/settings.md +60 -5
- package/src/roles/setup/workflows/update.md +40 -2
- package/src/roles/strategist/workflows/approve-brief.md +14 -9
- package/src/roles/strategist/workflows/brief.md +5 -1
- package/src/templates/.env.example.github +0 -80
- package/src/templates/.env.example.jira +0 -102
- package/src/templates/.env.example.linear +0 -86
|
@@ -87,11 +87,16 @@ Which Kanban board are you using?
|
|
|
87
87
|
[1] Jira
|
|
88
88
|
[2] GitHub Issues
|
|
89
89
|
[3] Linear
|
|
90
|
-
[4]
|
|
90
|
+
[4] Shortcut
|
|
91
|
+
[5] Notion
|
|
92
|
+
[6] Azure DevOps
|
|
93
|
+
[7] My board isn't listed
|
|
91
94
|
|
|
92
|
-
If
|
|
95
|
+
Auto-detection hint: silently check `.clancy/.env` for existing board env vars (`JIRA_BASE_URL`, `GITHUB_TOKEN`, `LINEAR_API_KEY`, `SHORTCUT_API_TOKEN`, `NOTION_DATABASE_ID`, `AZDO_ORG`). If detected, show: `Detected: {board} from your env vars. Use this? [Y/n]` — if yes, skip to Q2 for that board.
|
|
93
96
|
|
|
94
|
-
|
|
97
|
+
If the user selects [7], output the dead-end message and stop:
|
|
98
|
+
|
|
99
|
+
Clancy currently supports Jira, GitHub Issues, Linear, Shortcut, Notion, and Azure DevOps out of the box.
|
|
95
100
|
|
|
96
101
|
Your board isn't supported yet — but you can add it:
|
|
97
102
|
· Open an issue: github.com/Pushedskydiver/clancy/issues
|
|
@@ -106,6 +111,32 @@ Do not scaffold anything after this message. Stop completely.
|
|
|
106
111
|
|
|
107
112
|
---
|
|
108
113
|
|
|
114
|
+
**Shortcut** — ask in this order:
|
|
115
|
+
|
|
116
|
+
1. `Paste your Shortcut API token: (create one at app.shortcut.com/settings/account/api-tokens)`
|
|
117
|
+
2. `What workflow should Clancy use? (press Enter to auto-detect)` — if blank, auto-detect the first workflow via `GET /api/v3/workflows`
|
|
118
|
+
|
|
119
|
+
Store as `SHORTCUT_API_TOKEN` and optionally `SHORTCUT_WORKFLOW` in `.clancy/.env`.
|
|
120
|
+
|
|
121
|
+
**Notion** — ask in this order:
|
|
122
|
+
|
|
123
|
+
1. `Paste your Notion integration token: (create one at notion.so/my-integrations)`
|
|
124
|
+
2. `What's your Notion database ID? (the 32-character hex string in your database URL)`
|
|
125
|
+
3. `What property name represents the ticket status? [Status]`
|
|
126
|
+
4. `What property name represents the assignee? [Assignee]`
|
|
127
|
+
|
|
128
|
+
Store as `NOTION_TOKEN`, `NOTION_DATABASE_ID`, and optionally `CLANCY_NOTION_STATUS` and `CLANCY_NOTION_ASSIGNEE` in `.clancy/.env`.
|
|
129
|
+
|
|
130
|
+
**Azure DevOps** — ask in this order:
|
|
131
|
+
|
|
132
|
+
1. `What's your Azure DevOps organisation name? (e.g. your-org)`
|
|
133
|
+
2. `What's your Azure DevOps project name?`
|
|
134
|
+
3. `Paste your Azure DevOps personal access token: (needs Work Items Read & Write scope)`
|
|
135
|
+
|
|
136
|
+
Store as `AZDO_ORG`, `AZDO_PROJECT`, and `AZDO_PAT` in `.clancy/.env`.
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
109
140
|
### Q2: Board-specific config
|
|
110
141
|
|
|
111
142
|
Ask each question individually and wait for an answer before moving to the next.
|
|
@@ -497,6 +528,47 @@ If `n` or `N`: store `CLANCY_BRANCH_GUARD=false` in `.clancy/.env`.
|
|
|
497
528
|
|
|
498
529
|
---
|
|
499
530
|
|
|
531
|
+
### Q3i (all boards): Quiet hours
|
|
532
|
+
|
|
533
|
+
Output:
|
|
534
|
+
|
|
535
|
+
```
|
|
536
|
+
Pause AFK runs during specific hours? (e.g. business hours, overnight)
|
|
537
|
+
|
|
538
|
+
[1] Skip — no quiet hours
|
|
539
|
+
[2] Set quiet hours
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
If [1] or enter: skip — no `CLANCY_QUIET_START` or `CLANCY_QUIET_END` written.
|
|
543
|
+
If [2]: ask:
|
|
544
|
+
|
|
545
|
+
```
|
|
546
|
+
Quiet start time (HH:MM, 24h format, e.g. 22:00):
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
Then:
|
|
550
|
+
|
|
551
|
+
```
|
|
552
|
+
Quiet end time (HH:MM, 24h format, e.g. 06:00):
|
|
553
|
+
```
|
|
554
|
+
|
|
555
|
+
Store as `CLANCY_QUIET_START` and `CLANCY_QUIET_END` in `.clancy/.env`.
|
|
556
|
+
|
|
557
|
+
---
|
|
558
|
+
|
|
559
|
+
### Q3j (all boards): Desktop notifications
|
|
560
|
+
|
|
561
|
+
Output:
|
|
562
|
+
|
|
563
|
+
```
|
|
564
|
+
Send desktop notifications when tickets complete or errors occur? [Y/n]
|
|
565
|
+
```
|
|
566
|
+
|
|
567
|
+
If yes or enter: store `CLANCY_DESKTOP_NOTIFY=true` in `.clancy/.env`.
|
|
568
|
+
If no: store `CLANCY_DESKTOP_NOTIFY=false` in `.clancy/.env`.
|
|
569
|
+
|
|
570
|
+
---
|
|
571
|
+
|
|
500
572
|
### Q4: Base branch (auto-detect)
|
|
501
573
|
|
|
502
574
|
Silently detect the base branch — do not ask unless detection fails:
|
|
@@ -456,6 +456,15 @@ MAX_ITERATIONS=5
|
|
|
456
456
|
# Prevent accidental commits to the base branch (default: true)
|
|
457
457
|
# CLANCY_BRANCH_GUARD=true
|
|
458
458
|
|
|
459
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
460
|
+
# Pause AFK runs during these hours (24h format). Handles overnight windows.
|
|
461
|
+
# CLANCY_QUIET_START=22:00
|
|
462
|
+
# CLANCY_QUIET_END=06:00
|
|
463
|
+
|
|
464
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
465
|
+
# Native OS notifications on ticket completion or error (default: true)
|
|
466
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
467
|
+
|
|
459
468
|
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
460
469
|
# Webhook URL for Slack or Teams notifications on ticket completion
|
|
461
470
|
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
@@ -563,6 +572,148 @@ MAX_ITERATIONS=20
|
|
|
563
572
|
|
|
564
573
|
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
565
574
|
# Webhook URL for Slack or Teams notifications on ticket completion
|
|
575
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
576
|
+
# CLANCY_QUIET_START=22:00
|
|
577
|
+
# CLANCY_QUIET_END=06:00
|
|
578
|
+
|
|
579
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
580
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
581
|
+
|
|
582
|
+
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
583
|
+
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
584
|
+
```
|
|
585
|
+
|
|
586
|
+
### Shortcut
|
|
587
|
+
|
|
588
|
+
```
|
|
589
|
+
# Clancy — Shortcut configuration
|
|
590
|
+
# Copy this file to .env and fill in your values.
|
|
591
|
+
# Never commit .env to version control.
|
|
592
|
+
|
|
593
|
+
# ─── Shortcut ────────────────────────────────────────────────────────────────
|
|
594
|
+
SHORTCUT_API_TOKEN=your-api-token
|
|
595
|
+
|
|
596
|
+
# Optional: workflow name (default: auto-detect first workflow)
|
|
597
|
+
# SHORTCUT_WORKFLOW=Engineering
|
|
598
|
+
|
|
599
|
+
# ─── Git ──────────────────────────────────────────────────────────────────────
|
|
600
|
+
CLANCY_BASE_BRANCH=main
|
|
601
|
+
|
|
602
|
+
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
603
|
+
MAX_ITERATIONS=5
|
|
604
|
+
|
|
605
|
+
# ─── Optional: Git host (PR creation) ───────────────────────────────────────
|
|
606
|
+
# GITHUB_TOKEN=ghp_your-token
|
|
607
|
+
# GITLAB_TOKEN=glpat-your-token
|
|
608
|
+
# BITBUCKET_USER=your-username
|
|
609
|
+
# BITBUCKET_TOKEN=your-app-password
|
|
610
|
+
|
|
611
|
+
# ─── Optional: Pipeline labels ────────────────────────────────────────────────
|
|
612
|
+
# CLANCY_LABEL_BRIEF="clancy:brief"
|
|
613
|
+
# CLANCY_LABEL_PLAN="clancy:plan"
|
|
614
|
+
# CLANCY_LABEL_BUILD="clancy:build"
|
|
615
|
+
|
|
616
|
+
# ─── Optional: Status transitions ────────────────────────────────────────────
|
|
617
|
+
# CLANCY_STATUS_IN_PROGRESS="In Progress"
|
|
618
|
+
# CLANCY_STATUS_DONE="Done"
|
|
619
|
+
# CLANCY_STATUS_REVIEW="In Review"
|
|
620
|
+
|
|
621
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
622
|
+
# CLANCY_QUIET_START=22:00
|
|
623
|
+
# CLANCY_QUIET_END=06:00
|
|
624
|
+
|
|
625
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
626
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
627
|
+
|
|
628
|
+
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
629
|
+
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
630
|
+
```
|
|
631
|
+
|
|
632
|
+
### Notion
|
|
633
|
+
|
|
634
|
+
```
|
|
635
|
+
# Clancy — Notion configuration
|
|
636
|
+
# Copy this file to .env and fill in your values.
|
|
637
|
+
# Never commit .env to version control.
|
|
638
|
+
|
|
639
|
+
# ─── Notion ──────────────────────────────────────────────────────────────────
|
|
640
|
+
NOTION_TOKEN=your-integration-token
|
|
641
|
+
NOTION_DATABASE_ID=your-database-id-32-char-hex
|
|
642
|
+
|
|
643
|
+
# Optional: property name overrides (defaults shown)
|
|
644
|
+
# CLANCY_NOTION_STATUS=Status
|
|
645
|
+
# CLANCY_NOTION_ASSIGNEE=Assignee
|
|
646
|
+
|
|
647
|
+
# ─── Git ──────────────────────────────────────────────────────────────────────
|
|
648
|
+
CLANCY_BASE_BRANCH=main
|
|
649
|
+
|
|
650
|
+
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
651
|
+
MAX_ITERATIONS=5
|
|
652
|
+
|
|
653
|
+
# ─── Optional: Git host (PR creation) ───────────────────────────────────────
|
|
654
|
+
# GITHUB_TOKEN=ghp_your-token
|
|
655
|
+
# GITLAB_TOKEN=glpat-your-token
|
|
656
|
+
# BITBUCKET_USER=your-username
|
|
657
|
+
# BITBUCKET_TOKEN=your-app-password
|
|
658
|
+
|
|
659
|
+
# ─── Optional: Pipeline labels ────────────────────────────────────────────────
|
|
660
|
+
# CLANCY_LABEL_BRIEF="clancy:brief"
|
|
661
|
+
# CLANCY_LABEL_PLAN="clancy:plan"
|
|
662
|
+
# CLANCY_LABEL_BUILD="clancy:build"
|
|
663
|
+
|
|
664
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
665
|
+
# CLANCY_QUIET_START=22:00
|
|
666
|
+
# CLANCY_QUIET_END=06:00
|
|
667
|
+
|
|
668
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
669
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
670
|
+
|
|
671
|
+
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
672
|
+
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
### Azure DevOps
|
|
676
|
+
|
|
677
|
+
```
|
|
678
|
+
# Clancy — Azure DevOps configuration
|
|
679
|
+
# Copy this file to .env and fill in your values.
|
|
680
|
+
# Never commit .env to version control.
|
|
681
|
+
|
|
682
|
+
# ─── Azure DevOps ────────────────────────────────────────────────────────────
|
|
683
|
+
AZDO_ORG=your-organisation
|
|
684
|
+
AZDO_PROJECT=your-project
|
|
685
|
+
AZDO_PAT=your-personal-access-token
|
|
686
|
+
|
|
687
|
+
# ─── Git ──────────────────────────────────────────────────────────────────────
|
|
688
|
+
CLANCY_BASE_BRANCH=main
|
|
689
|
+
|
|
690
|
+
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
691
|
+
MAX_ITERATIONS=5
|
|
692
|
+
|
|
693
|
+
# ─── Optional: Git host (PR creation) ───────────────────────────────────────
|
|
694
|
+
# GITHUB_TOKEN=ghp_your-token
|
|
695
|
+
# GITLAB_TOKEN=glpat-your-token
|
|
696
|
+
# BITBUCKET_USER=your-username
|
|
697
|
+
# BITBUCKET_TOKEN=your-app-password
|
|
698
|
+
|
|
699
|
+
# ─── Optional: Pipeline labels ────────────────────────────────────────────────
|
|
700
|
+
# CLANCY_LABEL_BRIEF="clancy:brief"
|
|
701
|
+
# CLANCY_LABEL_PLAN="clancy:plan"
|
|
702
|
+
# CLANCY_LABEL_BUILD="clancy:build"
|
|
703
|
+
|
|
704
|
+
# ─── Optional: Status transitions ────────────────────────────────────────────
|
|
705
|
+
# CLANCY_STATUS_IN_PROGRESS="Active"
|
|
706
|
+
# CLANCY_STATUS_DONE="Closed"
|
|
707
|
+
# CLANCY_STATUS_REVIEW="Resolved"
|
|
708
|
+
|
|
709
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
710
|
+
# CLANCY_QUIET_START=22:00
|
|
711
|
+
# CLANCY_QUIET_END=06:00
|
|
712
|
+
|
|
713
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
714
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
715
|
+
|
|
716
|
+
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
566
717
|
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
567
718
|
```
|
|
568
719
|
|
|
@@ -681,6 +832,13 @@ MAX_ITERATIONS=20
|
|
|
681
832
|
# Set to "false" to disable skip comments
|
|
682
833
|
# CLANCY_SKIP_COMMENTS=true
|
|
683
834
|
|
|
835
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
836
|
+
# CLANCY_QUIET_START=22:00
|
|
837
|
+
# CLANCY_QUIET_END=06:00
|
|
838
|
+
|
|
839
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
840
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
841
|
+
|
|
684
842
|
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
685
843
|
# Webhook URL for Slack or Teams notifications on ticket completion
|
|
686
844
|
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
@@ -35,6 +35,9 @@ Source `.clancy/.env` silently. Detect which board is configured:
|
|
|
35
35
|
- `JIRA_BASE_URL` set → Jira
|
|
36
36
|
- `GITHUB_TOKEN` set → GitHub Issues
|
|
37
37
|
- `LINEAR_API_KEY` set → Linear
|
|
38
|
+
- `SHORTCUT_API_TOKEN` set → Shortcut
|
|
39
|
+
- `NOTION_DATABASE_ID` set → Notion
|
|
40
|
+
- `AZDO_ORG` set → Azure DevOps
|
|
38
41
|
|
|
39
42
|
---
|
|
40
43
|
|
|
@@ -58,6 +61,8 @@ General
|
|
|
58
61
|
[G7] Fix retries {CLANCY_FIX_RETRIES:-2} self-healing attempts after verification failure
|
|
59
62
|
[G8] Time limit {CLANCY_TIME_LIMIT:-30} per-ticket time limit in minutes (0 = disabled)
|
|
60
63
|
[G9] Branch guard {on if CLANCY_BRANCH_GUARD=true or unset, off if false}
|
|
64
|
+
[G10] Quiet hours {CLANCY_QUIET_START–CLANCY_QUIET_END if set, else off}
|
|
65
|
+
[G11] Desktop notify {on if CLANCY_DESKTOP_NOTIFY=true or unset, off if false}
|
|
61
66
|
|
|
62
67
|
{If Jira:}
|
|
63
68
|
Jira
|
|
@@ -113,7 +118,7 @@ Integrations
|
|
|
113
118
|
[I2] Playwright {enabled if PLAYWRIGHT_ENABLED=true, else off}
|
|
114
119
|
[I3] Notifications {configured if CLANCY_NOTIFY_WEBHOOK set, else not set}
|
|
115
120
|
|
|
116
|
-
[S] Switch board currently: {Jira / GitHub Issues / Linear}
|
|
121
|
+
[S] Switch board currently: {Jira / GitHub Issues / Linear / Shortcut / Notion / Azure DevOps}
|
|
117
122
|
[D] Save as defaults save current settings for all future projects
|
|
118
123
|
[X] Exit
|
|
119
124
|
|
|
@@ -278,6 +283,37 @@ If [2]: write `CLANCY_BRANCH_GUARD=false` to `.clancy/.env`.
|
|
|
278
283
|
|
|
279
284
|
---
|
|
280
285
|
|
|
286
|
+
### [G10] Quiet hours
|
|
287
|
+
|
|
288
|
+
```
|
|
289
|
+
Quiet hours — current: {CLANCY_QUIET_START–CLANCY_QUIET_END or "off"}
|
|
290
|
+
Pause AFK runs during these hours. Clancy sleeps until the end of the quiet window.
|
|
291
|
+
|
|
292
|
+
[1] Set quiet hours
|
|
293
|
+
[2] Off (no quiet hours)
|
|
294
|
+
[3] Cancel
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
If [1]: prompt `Quiet start time (HH:MM, 24h format):` then `Quiet end time (HH:MM, 24h format):`. Validate HH:MM format (0-23:00-59). Write `CLANCY_QUIET_START` and `CLANCY_QUIET_END` to `.clancy/.env`.
|
|
298
|
+
If [2]: remove `CLANCY_QUIET_START` and `CLANCY_QUIET_END` from `.clancy/.env`.
|
|
299
|
+
|
|
300
|
+
---
|
|
301
|
+
|
|
302
|
+
### [G11] Desktop notifications
|
|
303
|
+
|
|
304
|
+
```
|
|
305
|
+
Desktop notifications — current: {on/off}
|
|
306
|
+
Native OS notifications when tickets complete or errors occur.
|
|
307
|
+
|
|
308
|
+
[1] Enable (default)
|
|
309
|
+
[2] Disable
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
If [1]: write `CLANCY_DESKTOP_NOTIFY=true` to `.clancy/.env`.
|
|
313
|
+
If [2]: write `CLANCY_DESKTOP_NOTIFY=false` to `.clancy/.env`.
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
281
317
|
### [B1] Jira status filter (Jira only)
|
|
282
318
|
|
|
283
319
|
```
|
|
@@ -739,17 +775,18 @@ If [2]: remove `CLANCY_NOTIFY_WEBHOOK` from `.clancy/.env`.
|
|
|
739
775
|
|
|
740
776
|
### [S] Switch board
|
|
741
777
|
|
|
742
|
-
Show which board is currently active, then offer the
|
|
778
|
+
Show which board is currently active, then offer the others:
|
|
743
779
|
|
|
744
780
|
```
|
|
745
|
-
Switch board — currently: {Jira / GitHub Issues / Linear}
|
|
781
|
+
Switch board — currently: {Jira / GitHub Issues / Linear / Shortcut / Notion / Azure DevOps}
|
|
746
782
|
|
|
747
783
|
[1] {board A}
|
|
748
784
|
[2] {board B}
|
|
749
|
-
|
|
785
|
+
...
|
|
786
|
+
[N] Cancel
|
|
750
787
|
```
|
|
751
788
|
|
|
752
|
-
Only show the
|
|
789
|
+
Only show the boards that are not currently active. If the user picks Cancel, loop back to the menu without changing anything.
|
|
753
790
|
|
|
754
791
|
**Step 1: Collect new credentials**
|
|
755
792
|
|
|
@@ -775,6 +812,21 @@ Linear — ask in this order:
|
|
|
775
812
|
1. `Paste your Linear API key: (create one at linear.app/settings/api)`
|
|
776
813
|
2. `What's your Linear team ID? (find it at linear.app/settings/teams — click your team, copy the ID from the URL)`
|
|
777
814
|
|
|
815
|
+
Shortcut — ask in this order:
|
|
816
|
+
1. `Paste your Shortcut API token: (create one at app.shortcut.com/settings/account/api-tokens)`
|
|
817
|
+
2. `What workflow should Clancy use? (press Enter to auto-detect)`
|
|
818
|
+
|
|
819
|
+
Notion — ask in this order:
|
|
820
|
+
1. `Paste your Notion integration token: (create one at notion.so/my-integrations)`
|
|
821
|
+
2. `What's your Notion database ID? (32-character hex string from your database URL)`
|
|
822
|
+
3. `Status property name? [Status]`
|
|
823
|
+
4. `Assignee property name? [Assignee]`
|
|
824
|
+
|
|
825
|
+
Azure DevOps — ask in this order:
|
|
826
|
+
1. `What's your Azure DevOps organisation name?`
|
|
827
|
+
2. `What's your project name?`
|
|
828
|
+
3. `Paste your Azure DevOps personal access token: (needs Work Items Read & Write scope)`
|
|
829
|
+
|
|
778
830
|
**Step 2: Verify credentials**
|
|
779
831
|
|
|
780
832
|
Verify the new credentials before making any changes — same checks as the init preflight and doctor workflow. Show the result:
|
|
@@ -814,6 +866,9 @@ If no: print `Cancelled. No changes made.` and loop back to the menu.
|
|
|
814
866
|
- Jira: `JIRA_BASE_URL`, `JIRA_USER`, `JIRA_API_TOKEN`, `JIRA_PROJECT_KEY`, `CLANCY_JQL_STATUS`, `CLANCY_JQL_SPRINT`
|
|
815
867
|
- GitHub: `GITHUB_TOKEN`, `GITHUB_REPO`
|
|
816
868
|
- Linear: `LINEAR_API_KEY`, `LINEAR_TEAM_ID`
|
|
869
|
+
- Shortcut: `SHORTCUT_API_TOKEN`, `SHORTCUT_WORKFLOW`
|
|
870
|
+
- Notion: `NOTION_TOKEN`, `NOTION_DATABASE_ID`, `CLANCY_NOTION_STATUS`, `CLANCY_NOTION_ASSIGNEE`, `CLANCY_NOTION_LABELS`, `CLANCY_NOTION_PARENT`
|
|
871
|
+
- Azure DevOps: `AZDO_ORG`, `AZDO_PROJECT`, `AZDO_PAT`
|
|
817
872
|
- Git host (all boards): `GITLAB_TOKEN`, `BITBUCKET_USER`, `BITBUCKET_TOKEN`, `CLANCY_GIT_PLATFORM`, `CLANCY_GIT_API_URL`, `CLANCY_STATUS_REVIEW`
|
|
818
873
|
2. Write the new board credentials to `.clancy/.env`
|
|
819
874
|
3. If switching to Jira: also ask the status filter question (same as init Q3) and write `CLANCY_JQL_STATUS` to `.clancy/.env`
|
|
@@ -127,7 +127,9 @@ Note: `.clancy/clancy-once.js` and `.clancy/clancy-afk.js` **will be replaced**
|
|
|
127
127
|
the latest bundled versions. The rest of `.clancy/` is untouched.
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
|
|
130
|
+
**AFK mode check:** If `--afk` flag is passed OR `CLANCY_MODE=afk` in `.clancy/.env`, **skip the confirmation and proceed automatically.** Do not prompt — auto-approve the update.
|
|
131
|
+
|
|
132
|
+
**Interactive mode:** Ask the user: **"Proceed with update?"** with options:
|
|
131
133
|
- "Yes, update now"
|
|
132
134
|
- "No, cancel"
|
|
133
135
|
|
|
@@ -161,9 +163,45 @@ This touches:
|
|
|
161
163
|
It never modifies:
|
|
162
164
|
- `.clancy/docs/` — codebase documentation
|
|
163
165
|
- `.clancy/progress.txt` — progress log
|
|
164
|
-
- `.clancy/.env` — credentials
|
|
165
166
|
- `CLAUDE.md`
|
|
166
167
|
|
|
168
|
+
It may **append** to:
|
|
169
|
+
- `.clancy/.env` — adds missing env var defaults (see Step 4a)
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Step 4a — Backfill missing env var defaults
|
|
174
|
+
|
|
175
|
+
After the installer finishes, read `.clancy/.env` and check for missing pipeline label variables. These were introduced in v0.7.4 and won't exist in `.env` files from earlier installs.
|
|
176
|
+
|
|
177
|
+
**Check for and append if missing:**
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
# Pipeline labels (added in v0.7.4)
|
|
181
|
+
CLANCY_LABEL_BRIEF=clancy:brief
|
|
182
|
+
CLANCY_LABEL_PLAN=clancy:plan
|
|
183
|
+
CLANCY_LABEL_BUILD=clancy:build
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
For each variable:
|
|
187
|
+
1. Read `.clancy/.env` content
|
|
188
|
+
2. If the variable name does NOT appear anywhere in the file (not even commented out), append it with its default value
|
|
189
|
+
3. If the variable already exists (even with a different value), leave it untouched
|
|
190
|
+
|
|
191
|
+
Add a blank line and a `# Pipeline labels (added in v0.7.4)` comment header before the new variables, but only if at least one variable was added.
|
|
192
|
+
|
|
193
|
+
**Display what was added (if any):**
|
|
194
|
+
```
|
|
195
|
+
📋 Added missing env var defaults to .clancy/.env:
|
|
196
|
+
CLANCY_LABEL_BRIEF=clancy:brief
|
|
197
|
+
CLANCY_LABEL_PLAN=clancy:plan
|
|
198
|
+
CLANCY_LABEL_BUILD=clancy:build
|
|
199
|
+
|
|
200
|
+
Customise these via /clancy:settings → L1/L2/L3
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
If nothing was added, display nothing.
|
|
204
|
+
|
|
167
205
|
---
|
|
168
206
|
|
|
169
207
|
## Step 5 — Check for local patches
|
|
@@ -27,6 +27,10 @@ Approve a reviewed strategic brief by creating child tickets on the board, linki
|
|
|
27
27
|
git fetch origin
|
|
28
28
|
```
|
|
29
29
|
Compare HEAD with `origin/$CLANCY_BASE_BRANCH`. If behind:
|
|
30
|
+
|
|
31
|
+
**AFK mode** (`--afk` flag or `CLANCY_MODE=afk`): auto-pull without prompting.
|
|
32
|
+
|
|
33
|
+
**Interactive mode:**
|
|
30
34
|
```
|
|
31
35
|
Behind by N commits. [1] Pull latest [2] Continue [3] Abort
|
|
32
36
|
```
|
|
@@ -218,10 +222,11 @@ Platform-specific pre-creation lookups.
|
|
|
218
222
|
|
|
219
223
|
### GitHub
|
|
220
224
|
|
|
221
|
-
**Pipeline label for children
|
|
222
|
-
- `--skip-plan` flag → `CLANCY_LABEL_BUILD`
|
|
223
|
-
- Planner role enabled (`CLANCY_ROLES` includes `planner`) → `CLANCY_LABEL_PLAN`
|
|
224
|
-
- Planner role NOT enabled → `CLANCY_LABEL_BUILD`
|
|
225
|
+
**Pipeline label for children — this is mandatory, always apply a pipeline label to every child ticket.** Determine which label to use:
|
|
226
|
+
- `--skip-plan` flag → use `CLANCY_LABEL_BUILD` from `.clancy/.env` if set, otherwise `clancy:build`
|
|
227
|
+
- Planner role enabled (`CLANCY_ROLES` includes `planner`) → use `CLANCY_LABEL_PLAN` from `.clancy/.env` if set, otherwise `clancy:plan`
|
|
228
|
+
- Planner role NOT enabled → use `CLANCY_LABEL_BUILD` from `.clancy/.env` if set, otherwise `clancy:build`
|
|
229
|
+
Ensure the label exists on the board (create it if missing), then add it to each child ticket.
|
|
225
230
|
|
|
226
231
|
**Labels to apply per ticket:**
|
|
227
232
|
- The pipeline label determined above (`CLANCY_LABEL_PLAN` or `CLANCY_LABEL_BUILD`) — replaces `CLANCY_LABEL` on children
|
|
@@ -272,9 +277,9 @@ Set CLANCY_BRIEF_ISSUE_TYPE in .clancy/.env.
|
|
|
272
277
|
```
|
|
273
278
|
Stop.
|
|
274
279
|
|
|
275
|
-
**Pipeline label for children
|
|
280
|
+
**Pipeline label for children — mandatory, same logic as GitHub.** Use `CLANCY_LABEL_PLAN` or `CLANCY_LABEL_BUILD` from `.clancy/.env` (defaults: `clancy:plan` / `clancy:build`). Always apply to every child ticket.
|
|
276
281
|
|
|
277
|
-
**Labels:** Jira auto-creates labels — no pre-creation needed. Apply: the pipeline label
|
|
282
|
+
**Labels:** Jira auto-creates labels — no pre-creation needed. Apply: the pipeline label determined above, `clancy:afk` or `clancy:hitl`. `CLANCY_LABEL` is NOT applied to children when pipeline labels are active.
|
|
278
283
|
|
|
279
284
|
**Components:** If `CLANCY_COMPONENT` is set, it maps to the Jira `components` field.
|
|
280
285
|
|
|
@@ -305,7 +310,7 @@ query {
|
|
|
305
310
|
}
|
|
306
311
|
```
|
|
307
312
|
|
|
308
|
-
**Pipeline label for children
|
|
313
|
+
**Pipeline label for children — mandatory, same logic as GitHub/Jira.** Use `CLANCY_LABEL_PLAN` or `CLANCY_LABEL_BUILD` from `.clancy/.env` (defaults: `clancy:plan` / `clancy:build`). Always apply to every child ticket.
|
|
309
314
|
|
|
310
315
|
For each required label (the pipeline label, `component:{CLANCY_COMPONENT}`, `clancy:afk`, `clancy:hitl`): search by exact name. `CLANCY_LABEL` is NOT applied to children when pipeline labels are active. If not found in team labels, check workspace labels:
|
|
311
316
|
|
|
@@ -643,9 +648,9 @@ Created by Clancy on {YYYY-MM-DD}.
|
|
|
643
648
|
|
|
644
649
|
## Step 11a — Remove brief label from parent
|
|
645
650
|
|
|
646
|
-
Only if a parent ticket exists AND all tickets were created successfully. Remove
|
|
651
|
+
Only if a parent ticket exists AND all tickets were created successfully. Remove the brief label from the parent ticket. Best-effort — warn on failure, never stop.
|
|
647
652
|
|
|
648
|
-
|
|
653
|
+
Use `CLANCY_LABEL_BRIEF` from `.clancy/.env` if set, otherwise `clancy:brief`.
|
|
649
654
|
|
|
650
655
|
### GitHub
|
|
651
656
|
|
|
@@ -23,6 +23,10 @@ Research an idea, interrogate it thoroughly, and generate a structured strategic
|
|
|
23
23
|
Stop.
|
|
24
24
|
|
|
25
25
|
4. Branch freshness check — run `git fetch origin` and compare the current HEAD with `origin/$CLANCY_BASE_BRANCH` (defaults to `main`). If the local branch is behind:
|
|
26
|
+
|
|
27
|
+
**AFK mode** (`--afk` flag or `CLANCY_MODE=afk`): auto-pull without prompting. Run `git pull origin $CLANCY_BASE_BRANCH` and continue.
|
|
28
|
+
|
|
29
|
+
**Interactive mode:**
|
|
26
30
|
```
|
|
27
31
|
⚠️ Your local branch is behind origin/{CLANCY_BASE_BRANCH} by {N} commit(s).
|
|
28
32
|
|
|
@@ -621,7 +625,7 @@ Continue — do not stop. The local file is the source of truth.
|
|
|
621
625
|
|
|
622
626
|
Only for board-sourced briefs (ticket key was provided). Inline text and file briefs skip this step.
|
|
623
627
|
|
|
624
|
-
|
|
628
|
+
**This step is mandatory for board-sourced briefs — always apply the label.** Use `CLANCY_LABEL_BRIEF` from `.clancy/.env` if set. If not set, use `clancy:brief` as the default. Ensure the label exists on the board (create it if missing), then add it to the ticket. Also read `CLANCY_LABEL_PLAN` (default: `clancy:plan`) and `CLANCY_LABEL_BUILD` (default: `clancy:build`) for cleanup during re-briefs.
|
|
625
629
|
|
|
626
630
|
### Re-brief cleanup (`--fresh` flag)
|
|
627
631
|
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
# Clancy — GitHub Issues configuration
|
|
2
|
-
# Copy this file to .env and fill in your values.
|
|
3
|
-
# Never commit .env to version control.
|
|
4
|
-
|
|
5
|
-
# ─── GitHub Issues ────────────────────────────────────────────────────────────
|
|
6
|
-
GITHUB_TOKEN=ghp_your-personal-access-token
|
|
7
|
-
GITHUB_REPO=owner/repo-name
|
|
8
|
-
|
|
9
|
-
# Optional: only pick up issues with this label (in addition to 'clancy').
|
|
10
|
-
# Useful for mixed backlogs where not every issue is suitable for autonomous implementation.
|
|
11
|
-
# Create the label in GitHub first, then add it to any issue you want Clancy to pick up.
|
|
12
|
-
# CLANCY_LABEL=clancy
|
|
13
|
-
|
|
14
|
-
# ─── Git ──────────────────────────────────────────────────────────────────────
|
|
15
|
-
# Base integration branch. Clancy branches from here when an issue has no milestone.
|
|
16
|
-
# When an issue has a milestone, Clancy auto-creates milestone/{slug} from this branch.
|
|
17
|
-
CLANCY_BASE_BRANCH=main
|
|
18
|
-
|
|
19
|
-
# ─── Optional roles ─────────────────────────────────────────────────────────
|
|
20
|
-
# Comma-separated list of optional roles to enable (e.g. planner)
|
|
21
|
-
# Core roles (implementer, reviewer, setup) are always active.
|
|
22
|
-
# CLANCY_ROLES=planner,strategist
|
|
23
|
-
|
|
24
|
-
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
25
|
-
# Max tickets to process per /clancy:run session (default: 20)
|
|
26
|
-
MAX_ITERATIONS=20
|
|
27
|
-
|
|
28
|
-
# ─── Model ────────────────────────────────────────────────────────────────────
|
|
29
|
-
# Claude model used for each ticket session. Leave unset to use the default.
|
|
30
|
-
# Options: claude-opus-4-6 | claude-sonnet-4-6 | claude-haiku-4-5
|
|
31
|
-
# CLANCY_MODEL=claude-sonnet-4-6
|
|
32
|
-
|
|
33
|
-
# ─── Optional: Figma MCP ──────────────────────────────────────────────────────
|
|
34
|
-
# Fetch design specs from Figma when a ticket has a Figma URL in its description
|
|
35
|
-
# FIGMA_API_KEY=your-figma-api-key
|
|
36
|
-
|
|
37
|
-
# ─── Optional: Playwright visual checks ───────────────────────────────────────
|
|
38
|
-
# Run a visual check after implementing UI tickets
|
|
39
|
-
# PLAYWRIGHT_ENABLED=true
|
|
40
|
-
# PLAYWRIGHT_DEV_COMMAND="yarn dev"
|
|
41
|
-
# PLAYWRIGHT_DEV_PORT=5173
|
|
42
|
-
# PLAYWRIGHT_STORYBOOK_COMMAND="yarn storybook"
|
|
43
|
-
# PLAYWRIGHT_STORYBOOK_PORT=6006
|
|
44
|
-
# PLAYWRIGHT_STARTUP_WAIT=15
|
|
45
|
-
|
|
46
|
-
# ─── Optional: Planner queue ─────────────────────────────────────────────────
|
|
47
|
-
# Label for unrefined tickets that /clancy:plan should fetch (default: needs-refinement)
|
|
48
|
-
# CLANCY_PLAN_LABEL=needs-refinement
|
|
49
|
-
|
|
50
|
-
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
51
|
-
# Webhook URL for Slack or Teams notifications on ticket completion
|
|
52
|
-
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
53
|
-
|
|
54
|
-
# ─── Optional: Strategist ──────────────────────────────────────────────────
|
|
55
|
-
# Default parent issue for text/file-sourced briefs
|
|
56
|
-
# CLANCY_BRIEF_EPIC=50
|
|
57
|
-
# Auto-set component label on created tickets
|
|
58
|
-
# CLANCY_COMPONENT=api
|
|
59
|
-
# Grill mode: "interactive" (human grill) or "afk" (AI-grill). Default: interactive
|
|
60
|
-
# CLANCY_MODE=interactive
|
|
61
|
-
|
|
62
|
-
# ─── Optional: Pipeline labels ────────────────────────────────────────────────
|
|
63
|
-
# Labels that control ticket flow through pipeline stages.
|
|
64
|
-
# CLANCY_LABEL_BRIEF marks tickets that have been briefed (awaiting approval).
|
|
65
|
-
# CLANCY_LABEL_PLAN marks tickets that need planning.
|
|
66
|
-
# CLANCY_LABEL_BUILD marks tickets ready for implementation.
|
|
67
|
-
# Deprecated: CLANCY_LABEL (use CLANCY_LABEL_BUILD), CLANCY_PLAN_LABEL (use CLANCY_LABEL_PLAN)
|
|
68
|
-
# CLANCY_LABEL_BRIEF="clancy:brief"
|
|
69
|
-
# CLANCY_LABEL_PLAN="clancy:plan"
|
|
70
|
-
# CLANCY_LABEL_BUILD="clancy:build"
|
|
71
|
-
|
|
72
|
-
# ─── Optional: Reliable autonomous mode ─────────────────────────────────────
|
|
73
|
-
# Max self-healing fix attempts before delivering with warnings (default: 2, 0 to disable)
|
|
74
|
-
# CLANCY_FIX_RETRIES=2
|
|
75
|
-
# Per-ticket time limit in minutes (default: 30, 0 to disable)
|
|
76
|
-
# CLANCY_TIME_LIMIT=30
|
|
77
|
-
# Block force push, protected branch push, destructive resets (default: true)
|
|
78
|
-
# CLANCY_BRANCH_GUARD=true
|
|
79
|
-
# Token estimation rate for cost logging (tokens/min, default: 6600)
|
|
80
|
-
# CLANCY_TOKEN_RATE=6600
|