@chief-clancy/terminal 0.1.0
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/LICENSE +21 -0
- package/README.md +62 -0
- package/dist/hooks/clancy-branch-guard.js +1 -0
- package/dist/hooks/clancy-check-update.js +2 -0
- package/dist/hooks/clancy-context-monitor.js +9 -0
- package/dist/hooks/clancy-credential-guard.js +2 -0
- package/dist/hooks/clancy-drift-detector.js +1 -0
- package/dist/hooks/clancy-notification.js +1 -0
- package/dist/hooks/clancy-post-compact.js +2 -0
- package/dist/hooks/clancy-statusline.js +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/installer/file-ops/file-ops.d.ts +35 -0
- package/dist/installer/file-ops/file-ops.d.ts.map +1 -0
- package/dist/installer/file-ops/file-ops.js +95 -0
- package/dist/installer/file-ops/file-ops.js.map +1 -0
- package/dist/installer/file-ops/index.d.ts +2 -0
- package/dist/installer/file-ops/index.d.ts.map +1 -0
- package/dist/installer/file-ops/index.js +2 -0
- package/dist/installer/file-ops/index.js.map +1 -0
- package/dist/installer/hook-installer/hook-installer.d.ts +22 -0
- package/dist/installer/hook-installer/hook-installer.d.ts.map +1 -0
- package/dist/installer/hook-installer/hook-installer.js +213 -0
- package/dist/installer/hook-installer/hook-installer.js.map +1 -0
- package/dist/installer/hook-installer/index.d.ts +2 -0
- package/dist/installer/hook-installer/index.d.ts.map +1 -0
- package/dist/installer/hook-installer/index.js +2 -0
- package/dist/installer/hook-installer/index.js.map +1 -0
- package/dist/installer/install/index.d.ts +3 -0
- package/dist/installer/install/index.d.ts.map +1 -0
- package/dist/installer/install/index.js +2 -0
- package/dist/installer/install/index.js.map +1 -0
- package/dist/installer/install/install.d.ts +124 -0
- package/dist/installer/install/install.d.ts.map +1 -0
- package/dist/installer/install/install.js +255 -0
- package/dist/installer/install/install.js.map +1 -0
- package/dist/installer/manifest/index.d.ts +2 -0
- package/dist/installer/manifest/index.d.ts.map +1 -0
- package/dist/installer/manifest/index.js +2 -0
- package/dist/installer/manifest/index.js.map +1 -0
- package/dist/installer/manifest/manifest.d.ts +46 -0
- package/dist/installer/manifest/manifest.d.ts.map +1 -0
- package/dist/installer/manifest/manifest.js +180 -0
- package/dist/installer/manifest/manifest.js.map +1 -0
- package/dist/installer/prompts/index.d.ts +2 -0
- package/dist/installer/prompts/index.d.ts.map +1 -0
- package/dist/installer/prompts/index.js +2 -0
- package/dist/installer/prompts/index.js.map +1 -0
- package/dist/installer/prompts/prompts.d.ts +34 -0
- package/dist/installer/prompts/prompts.d.ts.map +1 -0
- package/dist/installer/prompts/prompts.js +28 -0
- package/dist/installer/prompts/prompts.js.map +1 -0
- package/dist/installer/role-filter/index.d.ts +2 -0
- package/dist/installer/role-filter/index.d.ts.map +1 -0
- package/dist/installer/role-filter/index.js +2 -0
- package/dist/installer/role-filter/index.js.map +1 -0
- package/dist/installer/role-filter/role-filter.d.ts +33 -0
- package/dist/installer/role-filter/role-filter.d.ts.map +1 -0
- package/dist/installer/role-filter/role-filter.js +91 -0
- package/dist/installer/role-filter/role-filter.js.map +1 -0
- package/dist/installer/shared/fs-errors/fs-errors.d.ts +3 -0
- package/dist/installer/shared/fs-errors/fs-errors.d.ts.map +1 -0
- package/dist/installer/shared/fs-errors/fs-errors.js +7 -0
- package/dist/installer/shared/fs-errors/fs-errors.js.map +1 -0
- package/dist/installer/shared/fs-errors/index.d.ts +2 -0
- package/dist/installer/shared/fs-errors/index.d.ts.map +1 -0
- package/dist/installer/shared/fs-errors/index.js +2 -0
- package/dist/installer/shared/fs-errors/index.js.map +1 -0
- package/dist/installer/shared/fs-guards/fs-guards.d.ts +3 -0
- package/dist/installer/shared/fs-guards/fs-guards.d.ts.map +1 -0
- package/dist/installer/shared/fs-guards/fs-guards.js +18 -0
- package/dist/installer/shared/fs-guards/fs-guards.js.map +1 -0
- package/dist/installer/shared/fs-guards/index.d.ts +2 -0
- package/dist/installer/shared/fs-guards/index.d.ts.map +1 -0
- package/dist/installer/shared/fs-guards/index.js +2 -0
- package/dist/installer/shared/fs-guards/index.js.map +1 -0
- package/dist/installer/shared/type-guards/index.d.ts +2 -0
- package/dist/installer/shared/type-guards/index.d.ts.map +1 -0
- package/dist/installer/shared/type-guards/index.js +2 -0
- package/dist/installer/shared/type-guards/index.js.map +1 -0
- package/dist/installer/shared/type-guards/type-guards.d.ts +8 -0
- package/dist/installer/shared/type-guards/type-guards.d.ts.map +1 -0
- package/dist/installer/shared/type-guards/type-guards.js +10 -0
- package/dist/installer/shared/type-guards/type-guards.js.map +1 -0
- package/dist/installer/ui/index.d.ts +2 -0
- package/dist/installer/ui/index.d.ts.map +1 -0
- package/dist/installer/ui/index.js +2 -0
- package/dist/installer/ui/index.js.map +1 -0
- package/dist/installer/ui/ui.d.ts +23 -0
- package/dist/installer/ui/ui.d.ts.map +1 -0
- package/dist/installer/ui/ui.js +121 -0
- package/dist/installer/ui/ui.js.map +1 -0
- package/dist/runner/autopilot/autopilot.d.ts +71 -0
- package/dist/runner/autopilot/autopilot.d.ts.map +1 -0
- package/dist/runner/autopilot/autopilot.js +206 -0
- package/dist/runner/autopilot/autopilot.js.map +1 -0
- package/dist/runner/autopilot/index.d.ts +2 -0
- package/dist/runner/autopilot/index.d.ts.map +1 -0
- package/dist/runner/autopilot/index.js +2 -0
- package/dist/runner/autopilot/index.js.map +1 -0
- package/dist/runner/cli-bridge/cli-bridge.d.ts +34 -0
- package/dist/runner/cli-bridge/cli-bridge.d.ts.map +1 -0
- package/dist/runner/cli-bridge/cli-bridge.js +53 -0
- package/dist/runner/cli-bridge/cli-bridge.js.map +1 -0
- package/dist/runner/cli-bridge/index.d.ts +2 -0
- package/dist/runner/cli-bridge/index.d.ts.map +1 -0
- package/dist/runner/cli-bridge/index.js +2 -0
- package/dist/runner/cli-bridge/index.js.map +1 -0
- package/dist/runner/dep-factory/deliver-phase.d.ts +24 -0
- package/dist/runner/dep-factory/deliver-phase.d.ts.map +1 -0
- package/dist/runner/dep-factory/deliver-phase.js +57 -0
- package/dist/runner/dep-factory/deliver-phase.js.map +1 -0
- package/dist/runner/dep-factory/dep-factory.d.ts +38 -0
- package/dist/runner/dep-factory/dep-factory.d.ts.map +1 -0
- package/dist/runner/dep-factory/dep-factory.js +193 -0
- package/dist/runner/dep-factory/dep-factory.js.map +1 -0
- package/dist/runner/dep-factory/index.d.ts +2 -0
- package/dist/runner/dep-factory/index.d.ts.map +1 -0
- package/dist/runner/dep-factory/index.js +2 -0
- package/dist/runner/dep-factory/index.js.map +1 -0
- package/dist/runner/dep-factory/invoke-phase.d.ts +20 -0
- package/dist/runner/dep-factory/invoke-phase.d.ts.map +1 -0
- package/dist/runner/dep-factory/invoke-phase.js +45 -0
- package/dist/runner/dep-factory/invoke-phase.js.map +1 -0
- package/dist/runner/implement/implement.d.ts +38 -0
- package/dist/runner/implement/implement.d.ts.map +1 -0
- package/dist/runner/implement/implement.js +61 -0
- package/dist/runner/implement/implement.js.map +1 -0
- package/dist/runner/implement/index.d.ts +2 -0
- package/dist/runner/implement/index.d.ts.map +1 -0
- package/dist/runner/implement/index.js +2 -0
- package/dist/runner/implement/index.js.map +1 -0
- package/dist/runner/notify/index.d.ts +2 -0
- package/dist/runner/notify/index.d.ts.map +1 -0
- package/dist/runner/notify/index.js +2 -0
- package/dist/runner/notify/index.js.map +1 -0
- package/dist/runner/notify/notify.d.ts +49 -0
- package/dist/runner/notify/notify.d.ts.map +1 -0
- package/dist/runner/notify/notify.js +90 -0
- package/dist/runner/notify/notify.js.map +1 -0
- package/dist/runner/prompt-builder/index.d.ts +2 -0
- package/dist/runner/prompt-builder/index.d.ts.map +1 -0
- package/dist/runner/prompt-builder/index.js +2 -0
- package/dist/runner/prompt-builder/index.js.map +1 -0
- package/dist/runner/prompt-builder/prompt-builder.d.ts +53 -0
- package/dist/runner/prompt-builder/prompt-builder.d.ts.map +1 -0
- package/dist/runner/prompt-builder/prompt-builder.js +122 -0
- package/dist/runner/prompt-builder/prompt-builder.js.map +1 -0
- package/dist/runner/session-report/index.d.ts +2 -0
- package/dist/runner/session-report/index.d.ts.map +1 -0
- package/dist/runner/session-report/index.js +2 -0
- package/dist/runner/session-report/index.js.map +1 -0
- package/dist/runner/session-report/session-report.d.ts +81 -0
- package/dist/runner/session-report/session-report.d.ts.map +1 -0
- package/dist/runner/session-report/session-report.js +227 -0
- package/dist/runner/session-report/session-report.js.map +1 -0
- package/dist/runner/shared/types.d.ts +30 -0
- package/dist/runner/shared/types.d.ts.map +1 -0
- package/dist/runner/shared/types.js +2 -0
- package/dist/runner/shared/types.js.map +1 -0
- package/dist/shared/ansi/ansi.d.ts +59 -0
- package/dist/shared/ansi/ansi.d.ts.map +1 -0
- package/dist/shared/ansi/ansi.js +59 -0
- package/dist/shared/ansi/ansi.js.map +1 -0
- package/dist/shared/ansi/index.d.ts +2 -0
- package/dist/shared/ansi/index.d.ts.map +1 -0
- package/dist/shared/ansi/index.js +2 -0
- package/dist/shared/ansi/index.js.map +1 -0
- package/package.json +52 -0
- package/src/agents/agents.test.ts +57 -0
- package/src/agents/arch-agent.md +80 -0
- package/src/agents/concerns-agent.md +96 -0
- package/src/agents/design-agent.md +146 -0
- package/src/agents/devils-advocate.md +54 -0
- package/src/agents/quality-agent.md +178 -0
- package/src/agents/tech-agent.md +101 -0
- package/src/agents/verification-gate.md +128 -0
- package/src/roles/implementer/commands/autopilot.md +11 -0
- package/src/roles/implementer/commands/dry-run.md +15 -0
- package/src/roles/implementer/commands/implement.md +19 -0
- package/src/roles/implementer/workflows/autopilot.md +136 -0
- package/src/roles/implementer/workflows/implement.md +161 -0
- package/src/roles/planner/commands/approve-plan.md +11 -0
- package/src/roles/planner/commands/plan.md +22 -0
- package/src/roles/planner/workflows/approve-plan.md +970 -0
- package/src/roles/planner/workflows/plan.md +868 -0
- package/src/roles/reviewer/commands/logs.md +7 -0
- package/src/roles/reviewer/commands/review.md +9 -0
- package/src/roles/reviewer/commands/status.md +9 -0
- package/src/roles/reviewer/workflows/logs.md +109 -0
- package/src/roles/reviewer/workflows/review.md +197 -0
- package/src/roles/reviewer/workflows/status.md +142 -0
- package/src/roles/roles.test.ts +87 -0
- package/src/roles/setup/commands/doctor.md +7 -0
- package/src/roles/setup/commands/help.md +80 -0
- package/src/roles/setup/commands/init.md +7 -0
- package/src/roles/setup/commands/map-codebase.md +17 -0
- package/src/roles/setup/commands/settings.md +7 -0
- package/src/roles/setup/commands/uninstall.md +5 -0
- package/src/roles/setup/commands/update-docs.md +9 -0
- package/src/roles/setup/commands/update.md +13 -0
- package/src/roles/setup/workflows/doctor.md +131 -0
- package/src/roles/setup/workflows/init.md +1096 -0
- package/src/roles/setup/workflows/map-codebase.md +130 -0
- package/src/roles/setup/workflows/scaffold.md +872 -0
- package/src/roles/setup/workflows/settings.md +958 -0
- package/src/roles/setup/workflows/uninstall.md +170 -0
- package/src/roles/setup/workflows/update-docs.md +95 -0
- package/src/roles/setup/workflows/update.md +287 -0
- package/src/roles/strategist/commands/approve-brief.md +23 -0
- package/src/roles/strategist/commands/brief.md +29 -0
- package/src/roles/strategist/workflows/approve-brief.md +1540 -0
- package/src/roles/strategist/workflows/brief.md +1330 -0
- package/src/templates/CLAUDE.md +101 -0
- package/src/templates/templates.test.ts +53 -0
|
@@ -0,0 +1,872 @@
|
|
|
1
|
+
# Clancy Scaffold Workflow
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
Shared scaffolding logic used during `/clancy:init`. Not a standalone command.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Doc templates
|
|
10
|
+
|
|
11
|
+
Create these files in `.clancy/docs/` with section headings but no content:
|
|
12
|
+
|
|
13
|
+
### STACK.md
|
|
14
|
+
|
|
15
|
+
```markdown
|
|
16
|
+
# Stack
|
|
17
|
+
|
|
18
|
+
## Runtime
|
|
19
|
+
|
|
20
|
+
## Package Manager
|
|
21
|
+
|
|
22
|
+
## Frameworks
|
|
23
|
+
|
|
24
|
+
## Key Libraries
|
|
25
|
+
|
|
26
|
+
## Build Tools
|
|
27
|
+
|
|
28
|
+
## Dev Servers
|
|
29
|
+
|
|
30
|
+
## Environment
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### INTEGRATIONS.md
|
|
34
|
+
|
|
35
|
+
```markdown
|
|
36
|
+
# Integrations
|
|
37
|
+
|
|
38
|
+
## External APIs
|
|
39
|
+
|
|
40
|
+
## Authentication
|
|
41
|
+
|
|
42
|
+
## Data Storage
|
|
43
|
+
|
|
44
|
+
## Third-party Services
|
|
45
|
+
|
|
46
|
+
## Environment Variables Required
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### ARCHITECTURE.md
|
|
50
|
+
|
|
51
|
+
```markdown
|
|
52
|
+
# Architecture
|
|
53
|
+
|
|
54
|
+
## Overview
|
|
55
|
+
|
|
56
|
+
## Directory Structure
|
|
57
|
+
|
|
58
|
+
## Key Modules
|
|
59
|
+
|
|
60
|
+
## Data Flow
|
|
61
|
+
|
|
62
|
+
## API Design
|
|
63
|
+
|
|
64
|
+
## State Management
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### CONVENTIONS.md
|
|
68
|
+
|
|
69
|
+
```markdown
|
|
70
|
+
# Conventions
|
|
71
|
+
|
|
72
|
+
## Code Style
|
|
73
|
+
|
|
74
|
+
## Naming Conventions
|
|
75
|
+
|
|
76
|
+
## File Organisation
|
|
77
|
+
|
|
78
|
+
## Component Patterns
|
|
79
|
+
|
|
80
|
+
## Error Handling
|
|
81
|
+
|
|
82
|
+
## Logging
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### TESTING.md
|
|
86
|
+
|
|
87
|
+
```markdown
|
|
88
|
+
# Testing
|
|
89
|
+
|
|
90
|
+
## Test Runner
|
|
91
|
+
|
|
92
|
+
## Test Structure
|
|
93
|
+
|
|
94
|
+
## Unit Tests
|
|
95
|
+
|
|
96
|
+
## Integration Tests
|
|
97
|
+
|
|
98
|
+
## E2E Tests
|
|
99
|
+
|
|
100
|
+
## Coverage Expectations
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### GIT.md
|
|
104
|
+
|
|
105
|
+
```markdown
|
|
106
|
+
# Git Conventions
|
|
107
|
+
|
|
108
|
+
## Branch Naming
|
|
109
|
+
|
|
110
|
+
## Commit Format
|
|
111
|
+
|
|
112
|
+
## Merge Strategy
|
|
113
|
+
|
|
114
|
+
## Pull Request Process
|
|
115
|
+
|
|
116
|
+
## Versioning
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### DESIGN-SYSTEM.md
|
|
120
|
+
|
|
121
|
+
```markdown
|
|
122
|
+
# Design System
|
|
123
|
+
|
|
124
|
+
## Token System
|
|
125
|
+
|
|
126
|
+
## Component Library
|
|
127
|
+
|
|
128
|
+
## Theming
|
|
129
|
+
|
|
130
|
+
## Responsive Breakpoints
|
|
131
|
+
|
|
132
|
+
## Icon System
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### ACCESSIBILITY.md
|
|
136
|
+
|
|
137
|
+
```markdown
|
|
138
|
+
# Accessibility
|
|
139
|
+
|
|
140
|
+
## WCAG Level
|
|
141
|
+
|
|
142
|
+
## ARIA Patterns
|
|
143
|
+
|
|
144
|
+
## Keyboard Navigation
|
|
145
|
+
|
|
146
|
+
## Focus Management
|
|
147
|
+
|
|
148
|
+
## Screen Reader Support
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### DEFINITION-OF-DONE.md
|
|
152
|
+
|
|
153
|
+
```markdown
|
|
154
|
+
# Definition of Done
|
|
155
|
+
|
|
156
|
+
## Code Quality
|
|
157
|
+
|
|
158
|
+
## Testing
|
|
159
|
+
|
|
160
|
+
## Documentation
|
|
161
|
+
|
|
162
|
+
## Design
|
|
163
|
+
|
|
164
|
+
## Accessibility
|
|
165
|
+
|
|
166
|
+
## Review
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### CONCERNS.md
|
|
170
|
+
|
|
171
|
+
```markdown
|
|
172
|
+
# Concerns
|
|
173
|
+
|
|
174
|
+
## Known Tech Debt
|
|
175
|
+
|
|
176
|
+
## Security Considerations
|
|
177
|
+
|
|
178
|
+
## Performance Bottlenecks
|
|
179
|
+
|
|
180
|
+
## Areas to Avoid Changing
|
|
181
|
+
|
|
182
|
+
## Deprecated Patterns
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## PLAYWRIGHT.md template
|
|
188
|
+
|
|
189
|
+
Create `.clancy/docs/PLAYWRIGHT.md` when `PLAYWRIGHT_ENABLED=true`:
|
|
190
|
+
|
|
191
|
+
````markdown
|
|
192
|
+
# Playwright Visual Checks
|
|
193
|
+
|
|
194
|
+
Clancy runs visual checks after implementing UI tickets. This file defines
|
|
195
|
+
which server to use and how to start it.
|
|
196
|
+
|
|
197
|
+
## Decision Rule
|
|
198
|
+
|
|
199
|
+
Apply in order:
|
|
200
|
+
|
|
201
|
+
1. If the ticket mentions: route, page, screen, layout, full-page → use **dev server**
|
|
202
|
+
2. If the ticket mentions: component, atom, molecule, organism, variant, story → use **Storybook**
|
|
203
|
+
3. Ambiguous → default to **dev server**
|
|
204
|
+
|
|
205
|
+
## Dev Server
|
|
206
|
+
|
|
207
|
+
| Key | Value |
|
|
208
|
+
| ------------- | ---------------------------------------------------------------- |
|
|
209
|
+
| Start command | `{PLAYWRIGHT_DEV_COMMAND}` |
|
|
210
|
+
| Port | `{PLAYWRIGHT_DEV_PORT}` |
|
|
211
|
+
| Health check | `http://localhost:{PLAYWRIGHT_DEV_PORT}` |
|
|
212
|
+
| Startup wait | {PLAYWRIGHT_STARTUP_WAIT}s (use health check polling, not sleep) |
|
|
213
|
+
|
|
214
|
+
## Storybook
|
|
215
|
+
|
|
216
|
+
<!-- Remove this section if Storybook is not used -->
|
|
217
|
+
|
|
218
|
+
| Key | Value |
|
|
219
|
+
| ----------------- | ---------------------------------------------------------------------------- |
|
|
220
|
+
| Start command | `{PLAYWRIGHT_STORYBOOK_COMMAND}` |
|
|
221
|
+
| Port | `{PLAYWRIGHT_STORYBOOK_PORT}` |
|
|
222
|
+
| Story URL pattern | `http://localhost:{PLAYWRIGHT_STORYBOOK_PORT}/?path=/story/{component-name}` |
|
|
223
|
+
|
|
224
|
+
## Visual Check Process
|
|
225
|
+
|
|
226
|
+
1. Determine which server to use (decision rule above)
|
|
227
|
+
2. Start the server using health check polling — poll every 2s, timeout after {PLAYWRIGHT_STARTUP_WAIT}s
|
|
228
|
+
3. Navigate to the relevant route or story URL
|
|
229
|
+
4. Screenshot the full page
|
|
230
|
+
5. Assess visually — check layout, spacing, colours, responsive behaviour
|
|
231
|
+
6. Check browser console for errors
|
|
232
|
+
7. Fix anything wrong before committing
|
|
233
|
+
8. Kill server by PID, then sweep the port unconditionally
|
|
234
|
+
9. Log result: `YYYY-MM-DD HH:MM | TICKET-KEY | PLAYWRIGHT_PASS|FAIL | dev-server|storybook`
|
|
235
|
+
|
|
236
|
+
## Server Health Check Pattern
|
|
237
|
+
|
|
238
|
+
```bash
|
|
239
|
+
# Start server in background
|
|
240
|
+
{PLAYWRIGHT_DEV_COMMAND} &
|
|
241
|
+
SERVER_PID=$!
|
|
242
|
+
|
|
243
|
+
# Poll until ready
|
|
244
|
+
MAX_WAIT={PLAYWRIGHT_STARTUP_WAIT}
|
|
245
|
+
ELAPSED=0
|
|
246
|
+
until curl -s http://localhost:{PLAYWRIGHT_DEV_PORT} >/dev/null 2>&1; do
|
|
247
|
+
sleep 2
|
|
248
|
+
ELAPSED=$((ELAPSED + 2))
|
|
249
|
+
if [ $ELAPSED -ge $MAX_WAIT ]; then
|
|
250
|
+
echo "Server did not start within ${MAX_WAIT}s"
|
|
251
|
+
kill $SERVER_PID 2>/dev/null
|
|
252
|
+
exit 1
|
|
253
|
+
fi
|
|
254
|
+
done
|
|
255
|
+
|
|
256
|
+
# ... run visual check ...
|
|
257
|
+
|
|
258
|
+
# Cleanup — kill by PID, then sweep port unconditionally
|
|
259
|
+
kill $SERVER_PID 2>/dev/null
|
|
260
|
+
lsof -ti:{PLAYWRIGHT_DEV_PORT} | xargs kill -9 2>/dev/null || true
|
|
261
|
+
```
|
|
262
|
+
````
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## CLAUDE.md merge logic
|
|
267
|
+
|
|
268
|
+
### If CLAUDE.md does not exist
|
|
269
|
+
|
|
270
|
+
Write the full template as `CLAUDE.md` (see `src/templates/CLAUDE.md`).
|
|
271
|
+
|
|
272
|
+
### If CLAUDE.md already exists
|
|
273
|
+
|
|
274
|
+
Check for existing `<!-- clancy:start -->` marker:
|
|
275
|
+
|
|
276
|
+
- Found: Replace everything between `<!-- clancy:start -->` and `<!-- clancy:end -->` with updated content
|
|
277
|
+
- Not found: Append the Clancy section to the end of the file
|
|
278
|
+
|
|
279
|
+
Never overwrite the entire file. Always preserve existing content.
|
|
280
|
+
|
|
281
|
+
---
|
|
282
|
+
|
|
283
|
+
## .gitignore check
|
|
284
|
+
|
|
285
|
+
Read the project's `.gitignore`. If `.clancy/.env` is not present, append:
|
|
286
|
+
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
# Clancy credentials
|
|
290
|
+
|
|
291
|
+
.clancy/.env
|
|
292
|
+
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
If no `.gitignore` exists, create one with:
|
|
296
|
+
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
# Clancy credentials
|
|
300
|
+
|
|
301
|
+
.clancy/.env
|
|
302
|
+
|
|
303
|
+
# Dependencies
|
|
304
|
+
|
|
305
|
+
node_modules/
|
|
306
|
+
|
|
307
|
+
# OS
|
|
308
|
+
|
|
309
|
+
.DS_Store
|
|
310
|
+
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
## .prettierignore check
|
|
316
|
+
|
|
317
|
+
Check whether a `.prettierignore` file exists in the project root.
|
|
318
|
+
|
|
319
|
+
**If it exists:** read it. If it does not already contain `.clancy/`, append:
|
|
320
|
+
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
# Clancy generated files
|
|
324
|
+
|
|
325
|
+
.clancy/
|
|
326
|
+
.claude/commands/clancy/
|
|
327
|
+
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**If it does not exist:** skip — do not create it. Clancy only adds entries to an existing `.prettierignore` so it does not impose Prettier on projects that don't use it.
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## Runtime scripts
|
|
335
|
+
|
|
336
|
+
The installer copies bundled runtime scripts (`clancy-implement.js` and `clancy-autopilot.js`) directly into `.clancy/` during installation. These are self-contained — they have zero runtime dependency on the `chief-clancy` npm package.
|
|
337
|
+
|
|
338
|
+
**Do NOT write or modify these files during init.** They are managed by the installer and updated automatically via `/clancy:update`.
|
|
339
|
+
|
|
340
|
+
If the scripts are missing (e.g. upgrading from an older version), tell the user to run:
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
npx -y chief-clancy@latest
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
---
|
|
347
|
+
|
|
348
|
+
## .env.example files
|
|
349
|
+
|
|
350
|
+
Write the correct `.env.example` for the chosen board to `.clancy/.env.example`.
|
|
351
|
+
|
|
352
|
+
### Jira
|
|
353
|
+
|
|
354
|
+
```
|
|
355
|
+
# Clancy — Jira configuration
|
|
356
|
+
# Copy this file to .env and fill in your values.
|
|
357
|
+
# Never commit .env to version control.
|
|
358
|
+
|
|
359
|
+
# ─── Jira ─────────────────────────────────────────────────────────────────────
|
|
360
|
+
JIRA_BASE_URL=https://your-org.atlassian.net
|
|
361
|
+
JIRA_USER=your-email@example.com
|
|
362
|
+
JIRA_API_TOKEN=your-api-token-from-id.atlassian.com
|
|
363
|
+
JIRA_PROJECT_KEY=PROJ
|
|
364
|
+
|
|
365
|
+
# ─── Implementation Queue ─────────────────────────────────────────────────────
|
|
366
|
+
# Status name for "ready to be picked up" (default: To Do)
|
|
367
|
+
# Must be quoted if the status name contains spaces (e.g. "Selected for Development")
|
|
368
|
+
CLANCY_JQL_STATUS="To Do"
|
|
369
|
+
|
|
370
|
+
# Set to any non-empty value to filter by open sprints (requires Jira Software)
|
|
371
|
+
# Remove or leave empty if your project doesn't use sprints
|
|
372
|
+
# CLANCY_JQL_SPRINT=true
|
|
373
|
+
|
|
374
|
+
# Optional: only pick up tickets with this label. Recommended for mixed backlogs
|
|
375
|
+
# where not every ticket is suitable for autonomous implementation (e.g. non-code tasks).
|
|
376
|
+
# Create the label in Jira first, then add it to any ticket you want Clancy to pick up.
|
|
377
|
+
# CLANCY_LABEL="clancy"
|
|
378
|
+
|
|
379
|
+
# ─── Git ──────────────────────────────────────────────────────────────────────
|
|
380
|
+
# Base integration branch. Clancy branches from here when a ticket has no parent epic.
|
|
381
|
+
# When a ticket has a parent epic, Clancy auto-creates epic/{key} from this branch.
|
|
382
|
+
CLANCY_BASE_BRANCH=main
|
|
383
|
+
|
|
384
|
+
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
385
|
+
# Max tickets to process per /clancy:autopilot session (default: 5)
|
|
386
|
+
MAX_ITERATIONS=5
|
|
387
|
+
|
|
388
|
+
# ─── Model ────────────────────────────────────────────────────────────────────
|
|
389
|
+
# Claude model used for each ticket session. Leave unset to use the default.
|
|
390
|
+
# Options: claude-opus-4-6 | claude-sonnet-4-6 | claude-haiku-4-5
|
|
391
|
+
# CLANCY_MODEL=claude-sonnet-4-6
|
|
392
|
+
|
|
393
|
+
# ─── Optional: Figma MCP ──────────────────────────────────────────────────────
|
|
394
|
+
# Fetch design specs from Figma when a ticket has a Figma URL in its description
|
|
395
|
+
# FIGMA_API_KEY=your-figma-api-key
|
|
396
|
+
|
|
397
|
+
# ─── Optional: Playwright visual checks ───────────────────────────────────────
|
|
398
|
+
# Run a visual check after implementing UI tickets
|
|
399
|
+
# PLAYWRIGHT_ENABLED=true
|
|
400
|
+
# PLAYWRIGHT_DEV_COMMAND="yarn dev"
|
|
401
|
+
# PLAYWRIGHT_DEV_PORT=5173
|
|
402
|
+
# PLAYWRIGHT_STORYBOOK_COMMAND="yarn storybook"
|
|
403
|
+
# PLAYWRIGHT_STORYBOOK_PORT=6006
|
|
404
|
+
# PLAYWRIGHT_STARTUP_WAIT=15
|
|
405
|
+
|
|
406
|
+
# ─── Optional: Status transitions ────────────────────────────────────────────
|
|
407
|
+
# Move tickets automatically when Clancy picks up or completes them.
|
|
408
|
+
# Set to the Jira transition name (the action label, not the column header).
|
|
409
|
+
# In many workflows these match, but check your Jira workflow if transitions fail.
|
|
410
|
+
# "Done" can be any transition to a post-implementation status.
|
|
411
|
+
# CLANCY_STATUS_IN_PROGRESS="In Progress"
|
|
412
|
+
# CLANCY_STATUS_DONE="Done"
|
|
413
|
+
# CLANCY_STATUS_REVIEW="In Review" # used when creating a PR instead of merging locally
|
|
414
|
+
|
|
415
|
+
# ─── Optional: Git host (PR creation) ───────────────────────────────────────
|
|
416
|
+
# When a ticket has no parent epic, Clancy pushes the feature branch and creates
|
|
417
|
+
# a pull request instead of squash-merging locally. Requires a git host token.
|
|
418
|
+
# GitHub Issues users already have GITHUB_TOKEN above — no extra config needed.
|
|
419
|
+
# GITHUB_TOKEN=ghp_your-token # if your git host is GitHub
|
|
420
|
+
# GITLAB_TOKEN=glpat-your-token # if your git host is GitLab
|
|
421
|
+
# BITBUCKET_USER=your-username # if your git host is Bitbucket
|
|
422
|
+
# BITBUCKET_TOKEN=your-app-password # if your git host is Bitbucket
|
|
423
|
+
# CLANCY_GIT_PLATFORM=gitlab # override auto-detection (github/gitlab/bitbucket)
|
|
424
|
+
# CLANCY_GIT_API_URL=https://gitlab.example.com/api/v4 # self-hosted git API base URL
|
|
425
|
+
|
|
426
|
+
# ─── Optional: Pipeline labels ────────────────────────────────────────────────
|
|
427
|
+
# Labels that control ticket flow through pipeline stages.
|
|
428
|
+
# CLANCY_LABEL_BRIEF marks tickets that have been briefed (awaiting approval).
|
|
429
|
+
# CLANCY_LABEL_PLAN marks tickets that need planning.
|
|
430
|
+
# CLANCY_LABEL_BUILD marks tickets ready for implementation.
|
|
431
|
+
# Deprecated: CLANCY_LABEL (use CLANCY_LABEL_BUILD), CLANCY_PLAN_LABEL (use CLANCY_LABEL_PLAN)
|
|
432
|
+
# CLANCY_LABEL_BRIEF="clancy:brief"
|
|
433
|
+
# CLANCY_LABEL_PLAN="clancy:plan"
|
|
434
|
+
# CLANCY_LABEL_BUILD="clancy:build"
|
|
435
|
+
|
|
436
|
+
# ─── Optional: Rework loop ──────────────────────────────────────────────────
|
|
437
|
+
# PR-based rework is automatic — when a reviewer leaves inline comments or
|
|
438
|
+
# a conversation comment prefixed with "Rework:", Clancy picks it up on the
|
|
439
|
+
# next run. No configuration needed.
|
|
440
|
+
# CLANCY_MAX_REWORK=3 # Max rework cycles before human intervention (default: 3)
|
|
441
|
+
|
|
442
|
+
# ─── Optional: Test-Driven Development ──────────────────────────────────────
|
|
443
|
+
# When enabled, Clancy follows red-green-refactor for every behaviour change.
|
|
444
|
+
# CLANCY_TDD=true
|
|
445
|
+
|
|
446
|
+
# ─── Optional: Grill mode ───────────────────────────────────────────────────
|
|
447
|
+
# Controls how /clancy:brief handles clarifying questions before generating a brief.
|
|
448
|
+
# "interactive" (default) — asks the human. "afk" — AI-grill resolves autonomously.
|
|
449
|
+
# Can also be overridden per-invocation with --afk flag.
|
|
450
|
+
# CLANCY_MODE=interactive
|
|
451
|
+
|
|
452
|
+
# ─── Optional: Strategist ───────────────────────────────────────────────────
|
|
453
|
+
# Issue type for tickets created by /clancy:brief (Jira only, default: Task)
|
|
454
|
+
# CLANCY_BRIEF_ISSUE_TYPE="Task"
|
|
455
|
+
|
|
456
|
+
# Default parent epic for briefs created from text or file input
|
|
457
|
+
# CLANCY_BRIEF_EPIC="PROJ-100"
|
|
458
|
+
|
|
459
|
+
# Auto-set on tickets created by /clancy:brief.
|
|
460
|
+
# Only affects ticket creation — does not filter the implementation queue.
|
|
461
|
+
# CLANCY_COMPONENT="frontend"
|
|
462
|
+
|
|
463
|
+
# ─── Optional: Planner queue ─────────────────────────────────────────────────
|
|
464
|
+
# Status for backlog tickets that /clancy:plan fetches from (default: Backlog)
|
|
465
|
+
# Only used if Planner role is enabled via CLANCY_ROLES
|
|
466
|
+
# CLANCY_PLAN_STATUS="Backlog"
|
|
467
|
+
|
|
468
|
+
# After approving a plan, transition the ticket to this status (e.g. "To Do")
|
|
469
|
+
# CLANCY_STATUS_PLANNED="To Do"
|
|
470
|
+
|
|
471
|
+
# ─── Optional: Skip comments ──────────────────────────────────────────────
|
|
472
|
+
# When Clancy skips a ticket (irrelevant/infeasible), post a comment explaining why
|
|
473
|
+
# Set to "false" to disable skip comments
|
|
474
|
+
# CLANCY_SKIP_COMMENTS=true
|
|
475
|
+
|
|
476
|
+
# ─── Optional: Reliable autonomous mode ───────────────────────────────────────
|
|
477
|
+
# Max self-healing attempts after verification failure (default: 2, range 0-5)
|
|
478
|
+
# CLANCY_FIX_RETRIES=2
|
|
479
|
+
|
|
480
|
+
# Per-ticket time limit in minutes (default: 30, 0 to disable)
|
|
481
|
+
# CLANCY_TIME_LIMIT=30
|
|
482
|
+
|
|
483
|
+
# Prevent accidental commits to the base branch (default: true)
|
|
484
|
+
# CLANCY_BRANCH_GUARD=true
|
|
485
|
+
|
|
486
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
487
|
+
# Pause AFK runs during these hours (24h format). Handles overnight windows.
|
|
488
|
+
# CLANCY_QUIET_START=22:00
|
|
489
|
+
# CLANCY_QUIET_END=06:00
|
|
490
|
+
|
|
491
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
492
|
+
# Native OS notifications on ticket completion or error (default: true)
|
|
493
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
494
|
+
|
|
495
|
+
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
496
|
+
# Webhook URL for Slack or Teams notifications on ticket completion
|
|
497
|
+
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### GitHub Issues
|
|
501
|
+
|
|
502
|
+
```
|
|
503
|
+
# Clancy — GitHub Issues configuration
|
|
504
|
+
# Copy this file to .env and fill in your values.
|
|
505
|
+
# Never commit .env to version control.
|
|
506
|
+
|
|
507
|
+
# ─── GitHub Issues ────────────────────────────────────────────────────────────
|
|
508
|
+
GITHUB_TOKEN=ghp_your-personal-access-token
|
|
509
|
+
GITHUB_REPO=owner/repo-name
|
|
510
|
+
|
|
511
|
+
# Recommended: only pick up issues with this label.
|
|
512
|
+
# Without this, Clancy picks up all open issues assigned to you.
|
|
513
|
+
# Create the label in GitHub first, then add it to any issue you want Clancy to pick up.
|
|
514
|
+
# CLANCY_LABEL="clancy"
|
|
515
|
+
|
|
516
|
+
# ─── Planner Queue (optional — requires CLANCY_ROLES to include "planner") ───
|
|
517
|
+
# Label for backlog issues that /clancy:plan fetches from (default: needs-refinement)
|
|
518
|
+
# CLANCY_PLAN_LABEL="needs-refinement"
|
|
519
|
+
|
|
520
|
+
# ─── Git ──────────────────────────────────────────────────────────────────────
|
|
521
|
+
# Base integration branch. Clancy branches from here when an issue has no milestone.
|
|
522
|
+
# When an issue has a milestone, Clancy auto-creates milestone/{slug} from this branch.
|
|
523
|
+
CLANCY_BASE_BRANCH=main
|
|
524
|
+
|
|
525
|
+
# ─── PR creation ─────────────────────────────────────────────────────────────
|
|
526
|
+
# When an issue has no milestone, Clancy pushes the feature branch and creates a
|
|
527
|
+
# PR using your GITHUB_TOKEN above. No extra config needed for GitHub Issues users.
|
|
528
|
+
|
|
529
|
+
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
530
|
+
# Max tickets to process per /clancy:autopilot session (default: 20)
|
|
531
|
+
MAX_ITERATIONS=20
|
|
532
|
+
|
|
533
|
+
# ─── Model ────────────────────────────────────────────────────────────────────
|
|
534
|
+
# Claude model used for each ticket session. Leave unset to use the default.
|
|
535
|
+
# Options: claude-opus-4-6 | claude-sonnet-4-6 | claude-haiku-4-5
|
|
536
|
+
# CLANCY_MODEL=claude-sonnet-4-6
|
|
537
|
+
|
|
538
|
+
# ─── Optional: Figma MCP ──────────────────────────────────────────────────────
|
|
539
|
+
# Fetch design specs from Figma when a ticket has a Figma URL in its description
|
|
540
|
+
# FIGMA_API_KEY=your-figma-api-key
|
|
541
|
+
|
|
542
|
+
# ─── Optional: Playwright visual checks ───────────────────────────────────────
|
|
543
|
+
# Run a visual check after implementing UI tickets
|
|
544
|
+
# PLAYWRIGHT_ENABLED=true
|
|
545
|
+
# PLAYWRIGHT_DEV_COMMAND="yarn dev"
|
|
546
|
+
# PLAYWRIGHT_DEV_PORT=5173
|
|
547
|
+
# PLAYWRIGHT_STORYBOOK_COMMAND="yarn storybook"
|
|
548
|
+
# PLAYWRIGHT_STORYBOOK_PORT=6006
|
|
549
|
+
# PLAYWRIGHT_STARTUP_WAIT=15
|
|
550
|
+
|
|
551
|
+
# ─── Optional: Pipeline labels ────────────────────────────────────────────────
|
|
552
|
+
# Labels that control ticket flow through pipeline stages.
|
|
553
|
+
# CLANCY_LABEL_BRIEF marks tickets that have been briefed (awaiting approval).
|
|
554
|
+
# CLANCY_LABEL_PLAN marks tickets that need planning.
|
|
555
|
+
# CLANCY_LABEL_BUILD marks tickets ready for implementation.
|
|
556
|
+
# Deprecated: CLANCY_LABEL (use CLANCY_LABEL_BUILD), CLANCY_PLAN_LABEL (use CLANCY_LABEL_PLAN)
|
|
557
|
+
# CLANCY_LABEL_BRIEF="clancy:brief"
|
|
558
|
+
# CLANCY_LABEL_PLAN="clancy:plan"
|
|
559
|
+
# CLANCY_LABEL_BUILD="clancy:build"
|
|
560
|
+
|
|
561
|
+
# ─── Optional: Rework loop ──────────────────────────────────────────────────
|
|
562
|
+
# PR-based rework is automatic — when a reviewer leaves inline comments or
|
|
563
|
+
# a conversation comment prefixed with "Rework:", Clancy picks it up on the
|
|
564
|
+
# next run. No configuration needed.
|
|
565
|
+
# CLANCY_MAX_REWORK=3 # Max rework cycles before human intervention (default: 3)
|
|
566
|
+
|
|
567
|
+
# ─── Optional: Test-Driven Development ──────────────────────────────────────
|
|
568
|
+
# When enabled, Clancy follows red-green-refactor for every behaviour change.
|
|
569
|
+
# CLANCY_TDD=true
|
|
570
|
+
|
|
571
|
+
# ─── Optional: Grill mode ───────────────────────────────────────────────────
|
|
572
|
+
# Controls how /clancy:brief handles clarifying questions before generating a brief.
|
|
573
|
+
# "interactive" (default) — asks the human. "afk" — AI-grill resolves autonomously.
|
|
574
|
+
# Can also be overridden per-invocation with --afk flag.
|
|
575
|
+
# CLANCY_MODE=interactive
|
|
576
|
+
|
|
577
|
+
# ─── Optional: Strategist ───────────────────────────────────────────────────
|
|
578
|
+
# Default parent epic/milestone for briefs created from text or file input
|
|
579
|
+
# CLANCY_BRIEF_EPIC="#42"
|
|
580
|
+
|
|
581
|
+
# Auto-set on tickets created by /clancy:brief.
|
|
582
|
+
# Only affects ticket creation — does not filter the implementation queue.
|
|
583
|
+
# CLANCY_COMPONENT="frontend"
|
|
584
|
+
|
|
585
|
+
# ─── Optional: Skip comments ──────────────────────────────────────────────
|
|
586
|
+
# When Clancy skips a ticket (irrelevant/infeasible), post a comment explaining why
|
|
587
|
+
# Set to "false" to disable skip comments
|
|
588
|
+
# CLANCY_SKIP_COMMENTS=true
|
|
589
|
+
|
|
590
|
+
# ─── Optional: Reliable autonomous mode ───────────────────────────────────────
|
|
591
|
+
# Max self-healing attempts after verification failure (default: 2, range 0-5)
|
|
592
|
+
# CLANCY_FIX_RETRIES=2
|
|
593
|
+
|
|
594
|
+
# Per-ticket time limit in minutes (default: 30, 0 to disable)
|
|
595
|
+
# CLANCY_TIME_LIMIT=30
|
|
596
|
+
|
|
597
|
+
# Prevent accidental commits to the base branch (default: true)
|
|
598
|
+
# CLANCY_BRANCH_GUARD=true
|
|
599
|
+
|
|
600
|
+
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
601
|
+
# Webhook URL for Slack or Teams notifications on ticket completion
|
|
602
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
603
|
+
# CLANCY_QUIET_START=22:00
|
|
604
|
+
# CLANCY_QUIET_END=06:00
|
|
605
|
+
|
|
606
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
607
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
608
|
+
|
|
609
|
+
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
610
|
+
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
### Shortcut
|
|
614
|
+
|
|
615
|
+
```
|
|
616
|
+
# Clancy — Shortcut configuration
|
|
617
|
+
# Copy this file to .env and fill in your values.
|
|
618
|
+
# Never commit .env to version control.
|
|
619
|
+
|
|
620
|
+
# ─── Shortcut ────────────────────────────────────────────────────────────────
|
|
621
|
+
SHORTCUT_API_TOKEN=your-api-token
|
|
622
|
+
|
|
623
|
+
# Optional: workflow name (default: auto-detect first workflow)
|
|
624
|
+
# SHORTCUT_WORKFLOW=Engineering
|
|
625
|
+
|
|
626
|
+
# ─── Git ──────────────────────────────────────────────────────────────────────
|
|
627
|
+
CLANCY_BASE_BRANCH=main
|
|
628
|
+
|
|
629
|
+
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
630
|
+
MAX_ITERATIONS=5
|
|
631
|
+
|
|
632
|
+
# ─── Optional: Git host (PR creation) ───────────────────────────────────────
|
|
633
|
+
# GITHUB_TOKEN=ghp_your-token
|
|
634
|
+
# GITLAB_TOKEN=glpat-your-token
|
|
635
|
+
# BITBUCKET_USER=your-username
|
|
636
|
+
# BITBUCKET_TOKEN=your-app-password
|
|
637
|
+
|
|
638
|
+
# ─── Optional: Pipeline labels ────────────────────────────────────────────────
|
|
639
|
+
# CLANCY_LABEL_BRIEF="clancy:brief"
|
|
640
|
+
# CLANCY_LABEL_PLAN="clancy:plan"
|
|
641
|
+
# CLANCY_LABEL_BUILD="clancy:build"
|
|
642
|
+
|
|
643
|
+
# ─── Optional: Status transitions ────────────────────────────────────────────
|
|
644
|
+
# CLANCY_STATUS_IN_PROGRESS="In Progress"
|
|
645
|
+
# CLANCY_STATUS_DONE="Done"
|
|
646
|
+
# CLANCY_STATUS_REVIEW="In Review"
|
|
647
|
+
|
|
648
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
649
|
+
# CLANCY_QUIET_START=22:00
|
|
650
|
+
# CLANCY_QUIET_END=06:00
|
|
651
|
+
|
|
652
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
653
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
654
|
+
|
|
655
|
+
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
656
|
+
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
### Notion
|
|
660
|
+
|
|
661
|
+
```
|
|
662
|
+
# Clancy — Notion configuration
|
|
663
|
+
# Copy this file to .env and fill in your values.
|
|
664
|
+
# Never commit .env to version control.
|
|
665
|
+
|
|
666
|
+
# ─── Notion ──────────────────────────────────────────────────────────────────
|
|
667
|
+
NOTION_TOKEN=your-integration-token
|
|
668
|
+
NOTION_DATABASE_ID=your-database-id-32-char-hex
|
|
669
|
+
|
|
670
|
+
# Optional: property name overrides (defaults shown)
|
|
671
|
+
# CLANCY_NOTION_STATUS=Status
|
|
672
|
+
# CLANCY_NOTION_ASSIGNEE=Assignee
|
|
673
|
+
|
|
674
|
+
# ─── Git ──────────────────────────────────────────────────────────────────────
|
|
675
|
+
CLANCY_BASE_BRANCH=main
|
|
676
|
+
|
|
677
|
+
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
678
|
+
MAX_ITERATIONS=5
|
|
679
|
+
|
|
680
|
+
# ─── Optional: Git host (PR creation) ───────────────────────────────────────
|
|
681
|
+
# GITHUB_TOKEN=ghp_your-token
|
|
682
|
+
# GITLAB_TOKEN=glpat-your-token
|
|
683
|
+
# BITBUCKET_USER=your-username
|
|
684
|
+
# BITBUCKET_TOKEN=your-app-password
|
|
685
|
+
|
|
686
|
+
# ─── Optional: Pipeline labels ────────────────────────────────────────────────
|
|
687
|
+
# CLANCY_LABEL_BRIEF="clancy:brief"
|
|
688
|
+
# CLANCY_LABEL_PLAN="clancy:plan"
|
|
689
|
+
# CLANCY_LABEL_BUILD="clancy:build"
|
|
690
|
+
|
|
691
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
692
|
+
# CLANCY_QUIET_START=22:00
|
|
693
|
+
# CLANCY_QUIET_END=06:00
|
|
694
|
+
|
|
695
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
696
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
697
|
+
|
|
698
|
+
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
699
|
+
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
700
|
+
```
|
|
701
|
+
|
|
702
|
+
### Azure DevOps
|
|
703
|
+
|
|
704
|
+
```
|
|
705
|
+
# Clancy — Azure DevOps configuration
|
|
706
|
+
# Copy this file to .env and fill in your values.
|
|
707
|
+
# Never commit .env to version control.
|
|
708
|
+
|
|
709
|
+
# ─── Azure DevOps ────────────────────────────────────────────────────────────
|
|
710
|
+
AZDO_ORG=your-organisation
|
|
711
|
+
AZDO_PROJECT=your-project
|
|
712
|
+
AZDO_PAT=your-personal-access-token
|
|
713
|
+
|
|
714
|
+
# ─── Git ──────────────────────────────────────────────────────────────────────
|
|
715
|
+
CLANCY_BASE_BRANCH=main
|
|
716
|
+
|
|
717
|
+
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
718
|
+
MAX_ITERATIONS=5
|
|
719
|
+
|
|
720
|
+
# ─── Optional: Git host (PR creation) ───────────────────────────────────────
|
|
721
|
+
# GITHUB_TOKEN=ghp_your-token
|
|
722
|
+
# GITLAB_TOKEN=glpat-your-token
|
|
723
|
+
# BITBUCKET_USER=your-username
|
|
724
|
+
# BITBUCKET_TOKEN=your-app-password
|
|
725
|
+
|
|
726
|
+
# ─── Optional: Pipeline labels ────────────────────────────────────────────────
|
|
727
|
+
# CLANCY_LABEL_BRIEF="clancy:brief"
|
|
728
|
+
# CLANCY_LABEL_PLAN="clancy:plan"
|
|
729
|
+
# CLANCY_LABEL_BUILD="clancy:build"
|
|
730
|
+
|
|
731
|
+
# ─── Optional: Status transitions ────────────────────────────────────────────
|
|
732
|
+
# CLANCY_STATUS_IN_PROGRESS="Active"
|
|
733
|
+
# CLANCY_STATUS_DONE="Closed"
|
|
734
|
+
# CLANCY_STATUS_REVIEW="Resolved"
|
|
735
|
+
|
|
736
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
737
|
+
# CLANCY_QUIET_START=22:00
|
|
738
|
+
# CLANCY_QUIET_END=06:00
|
|
739
|
+
|
|
740
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
741
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
742
|
+
|
|
743
|
+
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
744
|
+
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
745
|
+
```
|
|
746
|
+
|
|
747
|
+
### Linear
|
|
748
|
+
|
|
749
|
+
```
|
|
750
|
+
# Clancy — Linear configuration
|
|
751
|
+
# Copy this file to .env and fill in your values.
|
|
752
|
+
# Never commit .env to version control.
|
|
753
|
+
|
|
754
|
+
# ─── Linear ───────────────────────────────────────────────────────────────────
|
|
755
|
+
LINEAR_API_KEY=lin_api_your-personal-api-key
|
|
756
|
+
LINEAR_TEAM_ID=your-team-uuid
|
|
757
|
+
|
|
758
|
+
# Optional: only pick up issues with this label. Recommended for mixed backlogs
|
|
759
|
+
# where not every issue is suitable for autonomous implementation (e.g. non-code tasks).
|
|
760
|
+
# Create the label in Linear first, then add it to any issue you want Clancy to pick up.
|
|
761
|
+
# CLANCY_LABEL=clancy
|
|
762
|
+
|
|
763
|
+
# ─── Planner Queue (optional — requires CLANCY_ROLES to include "planner") ───
|
|
764
|
+
# State type for issues that /clancy:plan fetches from (default: backlog)
|
|
765
|
+
# Valid values: backlog, unstarted, started, completed, canceled, triage
|
|
766
|
+
# CLANCY_PLAN_STATE_TYPE="backlog"
|
|
767
|
+
|
|
768
|
+
# ─── Git ──────────────────────────────────────────────────────────────────────
|
|
769
|
+
# Base integration branch. Clancy branches from here when an issue has no parent.
|
|
770
|
+
# When an issue has a parent, Clancy auto-creates epic/{key} from this branch.
|
|
771
|
+
CLANCY_BASE_BRANCH=main
|
|
772
|
+
|
|
773
|
+
# ─── Loop ─────────────────────────────────────────────────────────────────────
|
|
774
|
+
# Max tickets to process per /clancy:autopilot session (default: 20)
|
|
775
|
+
MAX_ITERATIONS=20
|
|
776
|
+
|
|
777
|
+
# ─── Model ────────────────────────────────────────────────────────────────────
|
|
778
|
+
# Claude model used for each ticket session. Leave unset to use the default.
|
|
779
|
+
# Options: claude-opus-4-6 | claude-sonnet-4-6 | claude-haiku-4-5
|
|
780
|
+
# CLANCY_MODEL=claude-sonnet-4-6
|
|
781
|
+
|
|
782
|
+
# ─── Optional: Figma MCP ──────────────────────────────────────────────────────
|
|
783
|
+
# Fetch design specs from Figma when a ticket has a Figma URL in its description
|
|
784
|
+
# FIGMA_API_KEY=your-figma-api-key
|
|
785
|
+
|
|
786
|
+
# ─── Optional: Playwright visual checks ───────────────────────────────────────
|
|
787
|
+
# Run a visual check after implementing UI tickets
|
|
788
|
+
# PLAYWRIGHT_ENABLED=true
|
|
789
|
+
# PLAYWRIGHT_DEV_COMMAND="yarn dev"
|
|
790
|
+
# PLAYWRIGHT_DEV_PORT=5173
|
|
791
|
+
# PLAYWRIGHT_STORYBOOK_COMMAND="yarn storybook"
|
|
792
|
+
# PLAYWRIGHT_STORYBOOK_PORT=6006
|
|
793
|
+
# PLAYWRIGHT_STARTUP_WAIT=15
|
|
794
|
+
|
|
795
|
+
# ─── Optional: Status transitions ────────────────────────────────────────────
|
|
796
|
+
# Move issues automatically when Clancy picks up or completes them.
|
|
797
|
+
# Set to the exact workflow state name shown in your Linear team settings.
|
|
798
|
+
# "Done" can be any post-implementation state (e.g. "Ready for Review", "In Review").
|
|
799
|
+
# CLANCY_STATUS_IN_PROGRESS="In Progress"
|
|
800
|
+
# CLANCY_STATUS_DONE="Done"
|
|
801
|
+
# CLANCY_STATUS_REVIEW="In Review" # used when creating a PR instead of merging locally
|
|
802
|
+
|
|
803
|
+
# ─── Optional: Rework loop ──────────────────────────────────────────────────
|
|
804
|
+
# PR-based rework is automatic — when a reviewer leaves inline comments or
|
|
805
|
+
# a conversation comment prefixed with "Rework:", Clancy picks it up on the
|
|
806
|
+
# next run. No configuration needed.
|
|
807
|
+
# CLANCY_MAX_REWORK=3 # Max rework cycles before human intervention (default: 3)
|
|
808
|
+
|
|
809
|
+
# ─── Optional: Test-Driven Development ──────────────────────────────────────
|
|
810
|
+
# When enabled, Clancy follows red-green-refactor for every behaviour change.
|
|
811
|
+
# CLANCY_TDD=true
|
|
812
|
+
|
|
813
|
+
# ─── Optional: Grill mode ───────────────────────────────────────────────────
|
|
814
|
+
# Controls how /clancy:brief handles clarifying questions before generating a brief.
|
|
815
|
+
# "interactive" (default) — asks the human. "afk" — AI-grill resolves autonomously.
|
|
816
|
+
# Can also be overridden per-invocation with --afk flag.
|
|
817
|
+
# CLANCY_MODE=interactive
|
|
818
|
+
|
|
819
|
+
# ─── Optional: Strategist ───────────────────────────────────────────────────
|
|
820
|
+
# Default parent epic for briefs created from text or file input
|
|
821
|
+
# CLANCY_BRIEF_EPIC="ENG-50"
|
|
822
|
+
|
|
823
|
+
# Auto-set on tickets created by /clancy:brief.
|
|
824
|
+
# Only affects ticket creation — does not filter the implementation queue.
|
|
825
|
+
# CLANCY_COMPONENT="frontend"
|
|
826
|
+
|
|
827
|
+
# ─── Optional: Git host (PR creation) ───────────────────────────────────────
|
|
828
|
+
# When an issue has no parent, Clancy pushes the feature branch and creates a
|
|
829
|
+
# pull request instead of squash-merging locally. Requires a git host token.
|
|
830
|
+
# GITHUB_TOKEN=ghp_your-token # if your git host is GitHub
|
|
831
|
+
# GITLAB_TOKEN=glpat-your-token # if your git host is GitLab
|
|
832
|
+
# BITBUCKET_USER=your-username # if your git host is Bitbucket
|
|
833
|
+
# BITBUCKET_TOKEN=your-app-password # if your git host is Bitbucket
|
|
834
|
+
# CLANCY_GIT_PLATFORM=gitlab # override auto-detection (github/gitlab/bitbucket)
|
|
835
|
+
# CLANCY_GIT_API_URL=https://gitlab.example.com/api/v4 # self-hosted git API base URL
|
|
836
|
+
|
|
837
|
+
# ─── Optional: Pipeline labels ────────────────────────────────────────────────
|
|
838
|
+
# Labels that control ticket flow through pipeline stages.
|
|
839
|
+
# CLANCY_LABEL_BRIEF marks tickets that have been briefed (awaiting approval).
|
|
840
|
+
# CLANCY_LABEL_PLAN marks tickets that need planning.
|
|
841
|
+
# CLANCY_LABEL_BUILD marks tickets ready for implementation.
|
|
842
|
+
# Deprecated: CLANCY_LABEL (use CLANCY_LABEL_BUILD), CLANCY_PLAN_LABEL (use CLANCY_LABEL_PLAN)
|
|
843
|
+
# CLANCY_LABEL_BRIEF="clancy:brief"
|
|
844
|
+
# CLANCY_LABEL_PLAN="clancy:plan"
|
|
845
|
+
# CLANCY_LABEL_BUILD="clancy:build"
|
|
846
|
+
|
|
847
|
+
# ─── Optional: Reliable autonomous mode ───────────────────────────────────────
|
|
848
|
+
# Max self-healing attempts after verification failure (default: 2, range 0-5)
|
|
849
|
+
# CLANCY_FIX_RETRIES=2
|
|
850
|
+
|
|
851
|
+
# Per-ticket time limit in minutes (default: 30, 0 to disable)
|
|
852
|
+
# CLANCY_TIME_LIMIT=30
|
|
853
|
+
|
|
854
|
+
# Prevent accidental commits to the base branch (default: true)
|
|
855
|
+
# CLANCY_BRANCH_GUARD=true
|
|
856
|
+
|
|
857
|
+
# ─── Optional: Skip comments ──────────────────────────────────────────────
|
|
858
|
+
# When Clancy skips a ticket (irrelevant/infeasible), post a comment explaining why
|
|
859
|
+
# Set to "false" to disable skip comments
|
|
860
|
+
# CLANCY_SKIP_COMMENTS=true
|
|
861
|
+
|
|
862
|
+
# ─── Optional: Quiet hours ───────────────────────────────────────────────────
|
|
863
|
+
# CLANCY_QUIET_START=22:00
|
|
864
|
+
# CLANCY_QUIET_END=06:00
|
|
865
|
+
|
|
866
|
+
# ─── Optional: Desktop notifications ─────────────────────────────────────────
|
|
867
|
+
# CLANCY_DESKTOP_NOTIFY=true
|
|
868
|
+
|
|
869
|
+
# ─── Optional: Notifications ──────────────────────────────────────────────────
|
|
870
|
+
# Webhook URL for Slack or Teams notifications on ticket completion
|
|
871
|
+
# CLANCY_NOTIFY_WEBHOOK=https://hooks.slack.com/services/your/webhook/url
|
|
872
|
+
```
|