@chief-clancy/brief 0.1.1 → 0.2.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/README.md CHANGED
@@ -26,19 +26,18 @@ The `/clancy:brief` slash command researches your codebase, grills you (or itsel
26
26
  1. **Install:** `npx @chief-clancy/brief` — choose global or local
27
27
  2. **Run:** `/clancy:brief "Add dark mode support"` — inline text
28
28
  3. **Or from a file:** `/clancy:brief --from docs/rfc.md`
29
- 4. **Or from a board ticket:** `/clancy:brief #42` (requires board credentials)
30
29
 
31
30
  Briefs are saved to `.clancy/briefs/` in your project.
32
31
 
33
32
  ## Input modes
34
33
 
35
- | Mode | Example | Board needed? |
36
- | ------------ | --------------------------------------------- | ------------- |
37
- | Inline text | `/clancy:brief "Add dark mode"` | No |
38
- | From file | `/clancy:brief --from docs/rfc.md` | No |
39
- | Board ticket | `/clancy:brief #42`, `/clancy:brief PROJ-123` | Yes |
40
- | Batch | `/clancy:brief 3` | Yes |
41
- | Interactive | `/clancy:brief` | No |
34
+ | Mode | Example | Board needed? |
35
+ | ------------ | --------------------------------------------- | --------------------------- |
36
+ | Inline text | `/clancy:brief "Add dark mode"` | No |
37
+ | From file | `/clancy:brief --from docs/rfc.md` | No |
38
+ | Board ticket | `/clancy:brief #42`, `/clancy:brief PROJ-123` | Yes (`/clancy:board-setup`) |
39
+ | Batch | `/clancy:brief 3` | Yes (`/clancy:board-setup`) |
40
+ | Interactive | `/clancy:brief` | No |
42
41
 
43
42
  ## Flags
44
43
 
@@ -51,9 +50,20 @@ Briefs are saved to `.clancy/briefs/` in your project.
51
50
  | `--epic <KEY>` | Set parent for ticket creation |
52
51
  | `--list` | Show inventory of existing briefs |
53
52
 
54
- ## Standalone vs full pipeline
53
+ ## Board ticket mode (optional)
55
54
 
56
- This package works on its own for inline text and file-based briefs. For board integration, ticket creation, and the full development pipeline, install the complete Clancy package:
55
+ To brief from board tickets and push approved briefs back to the board without installing the full pipeline:
56
+
57
+ 1. Run `/clancy:board-setup` in Claude Code
58
+ 2. Follow the prompts to configure your board credentials
59
+ 3. Run `/clancy:brief #42` (or your board's ticket format) to brief from an existing ticket
60
+ 4. Run `/clancy:approve-brief <slug>` to convert an approved brief into child tickets on your board (creates one ticket per row in the brief's decomposition table, links dependencies, and posts a tracking summary)
61
+
62
+ Credentials are stored in `.clancy/.env` and are per-project (not global).
63
+
64
+ ## Full pipeline
65
+
66
+ `@chief-clancy/brief` covers brief generation and ticket creation from briefs. For planning and the full development pipeline (autopilot, implementation, review), install the complete Clancy package:
57
67
 
58
68
  ```bash
59
69
  npx chief-clancy
package/bin/brief.js CHANGED
@@ -80,6 +80,14 @@ const rl = createInterface({ input: process.stdin, output: process.stdout });
80
80
  /** @param {string} label */
81
81
  const ask = (label) => new Promise((resolve) => rl.question(label, resolve));
82
82
 
83
+ // ---------------------------------------------------------------------------
84
+ // File lists (keep in sync with install.ts)
85
+ // ---------------------------------------------------------------------------
86
+
87
+ const COMMAND_FILES = ['approve-brief.md', 'board-setup.md', 'brief.md'];
88
+ const WORKFLOW_FILES = ['approve-brief.md', 'board-setup.md', 'brief.md'];
89
+ const AGENT_FILES = ['devils-advocate.md'];
90
+
83
91
  // ---------------------------------------------------------------------------
84
92
  // Installer
85
93
  // ---------------------------------------------------------------------------
@@ -102,20 +110,23 @@ function copyChecked(src, dest) {
102
110
  }
103
111
 
104
112
  /** Inline workflow @-references into command files (global mode only). */
105
- function inlineWorkflow(commandsDest, workflowsDest) {
113
+ function inlineWorkflows(commandsDest, workflowsDest) {
106
114
  const WORKFLOW_REF = /^@\.claude\/clancy\/workflows\/([^/\\]+\.md)\r?$/gm;
107
- const cmdPath = join(commandsDest, 'brief.md');
108
- const content = readFileSync(cmdPath, 'utf8');
109
- const resolved = content.replace(WORKFLOW_REF, (match, fileName) => {
110
- const wfPath = join(workflowsDest, fileName);
111
- if (!existsSync(wfPath)) return match;
112
- return readFileSync(wfPath, 'utf8');
113
- });
114
115
 
115
- if (resolved !== content) {
116
- rejectSymlink(cmdPath);
117
- writeFileSync(cmdPath, resolved);
118
- }
116
+ COMMAND_FILES.forEach((file) => {
117
+ const cmdPath = join(commandsDest, file);
118
+ const content = readFileSync(cmdPath, 'utf8');
119
+ const resolved = content.replace(WORKFLOW_REF, (match, fileName) => {
120
+ const wfPath = join(workflowsDest, fileName);
121
+ if (!existsSync(wfPath)) return match;
122
+ return readFileSync(wfPath, 'utf8');
123
+ });
124
+
125
+ if (resolved !== content) {
126
+ rejectSymlink(cmdPath);
127
+ writeFileSync(cmdPath, resolved);
128
+ }
129
+ });
119
130
  }
120
131
 
121
132
  // ---------------------------------------------------------------------------
@@ -178,22 +189,19 @@ async function main() {
178
189
  mkdirSync(agentsDest, { recursive: true });
179
190
 
180
191
  // Copy files
181
- copyChecked(
182
- join(sources.commandsDir, 'brief.md'),
183
- join(commandsDest, 'brief.md'),
192
+ COMMAND_FILES.forEach((f) =>
193
+ copyChecked(join(sources.commandsDir, f), join(commandsDest, f)),
184
194
  );
185
- copyChecked(
186
- join(sources.workflowsDir, 'brief.md'),
187
- join(workflowsDest, 'brief.md'),
195
+ WORKFLOW_FILES.forEach((f) =>
196
+ copyChecked(join(sources.workflowsDir, f), join(workflowsDest, f)),
188
197
  );
189
- copyChecked(
190
- join(sources.agentsDir, 'devils-advocate.md'),
191
- join(agentsDest, 'devils-advocate.md'),
198
+ AGENT_FILES.forEach((f) =>
199
+ copyChecked(join(sources.agentsDir, f), join(agentsDest, f)),
192
200
  );
193
201
 
194
202
  // Inline workflows for global mode
195
203
  if (mode === 'global') {
196
- inlineWorkflow(commandsDest, workflowsDest);
204
+ inlineWorkflows(commandsDest, workflowsDest);
197
205
  }
198
206
 
199
207
  // Write version marker
@@ -205,15 +213,24 @@ async function main() {
205
213
  console.log('');
206
214
  console.log(green(' ✓ Clancy Brief installed successfully.'));
207
215
  console.log('');
208
- console.log(' Command available:');
216
+ console.log(' Commands available:');
217
+ console.log(
218
+ ` ${cyan('/clancy:brief')} ${dim('Generate a strategic brief')}`,
219
+ );
209
220
  console.log(
210
- ` ${cyan('/clancy:brief')} ${dim('Generate a strategic brief for a feature')}`,
221
+ ` ${cyan('/clancy:approve-brief')} ${dim('Approve a brief and create board tickets')}`,
222
+ );
223
+ console.log(
224
+ ` ${cyan('/clancy:board-setup')} ${dim('Configure board credentials (optional)')}`,
211
225
  );
212
226
  console.log('');
213
227
  console.log(' Next steps:');
214
228
  console.log(` 1. Open a project in Claude Code`);
215
229
  console.log(` 2. Run: ${cyan('/clancy:brief "Your feature idea"')}`);
216
230
  console.log('');
231
+ console.log(dim(' Want to brief from board tickets?'));
232
+ console.log(dim(` Run: ${cyan('/clancy:board-setup')}`));
233
+ console.log('');
217
234
  console.log(
218
235
  dim(' For the full pipeline (tickets, planning, implementation):'),
219
236
  );
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/installer/install.ts"],"names":[],"mappings":"AAaA,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElD,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,iDAAiD;AACjD,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAC/C,CAAC;AAEF,2CAA2C;AAC3C,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AAsBF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,SAAS,MAAM,EAAE,KACtB,gBAAgB,GAAG,IAKrB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,GACnC,MAAM,gBAAgB,EACtB,SAAS,MAAM,EACf,KAAK,MAAM,KACV,iBASF,CAAC;AA4EF;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,sBAAsB,KAAG,IA6BjE,CAAC"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/installer/install.ts"],"names":[],"mappings":"AAaA,wEAAwE;AACxE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElD,+DAA+D;AAC/D,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,iDAAiD;AACjD,KAAK,mBAAmB,GAAG;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;;;GAIG;AACH,KAAK,gBAAgB,GAAG;IACtB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5D,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,oEAAoE;IACpE,QAAQ,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CAC/C,CAAC;AAEF,2CAA2C;AAC3C,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;CAC/B,CAAC;AA8BF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,SAAS,MAAM,EAAE,KACtB,gBAAgB,GAAG,IAKrB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,wBAAwB,GACnC,MAAM,gBAAgB,EACtB,SAAS,MAAM,EACf,KAAK,MAAM,KACV,iBASF,CAAC;AA4EF;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,sBAAsB,KAAG,IA6BjE,CAAC"}
@@ -10,9 +10,17 @@ import { join } from 'node:path';
10
10
  // Constants
11
11
  // ---------------------------------------------------------------------------
12
12
  /** Command files shipped with the brief package. */
13
- const COMMAND_FILES = ['brief.md'];
13
+ const COMMAND_FILES = [
14
+ 'approve-brief.md',
15
+ 'board-setup.md',
16
+ 'brief.md',
17
+ ];
14
18
  /** Workflow files shipped with the brief package. */
15
- const WORKFLOW_FILES = ['brief.md'];
19
+ const WORKFLOW_FILES = [
20
+ 'approve-brief.md',
21
+ 'board-setup.md',
22
+ 'brief.md',
23
+ ];
16
24
  /** Agent files shipped with the brief package. */
17
25
  const AGENT_FILES = ['devils-advocate.md'];
18
26
  /** Matches `@.claude/clancy/workflows/<filename>.md` on its own line. */
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/installer/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/installer/install.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@chief-clancy/brief",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Strategic brief generator for Claude Code — grill, decompose, and document feature ideas",
5
5
  "author": "Alex Clapperton",
6
6
  "license": "MIT",
@@ -0,0 +1,23 @@
1
+ # /clancy:approve-brief
2
+
3
+ Convert an approved brief into real tickets on the board. Creates child tickets under the parent, links dependencies, and posts a tracking summary.
4
+
5
+ Accepts optional arguments:
6
+
7
+ - **By slug:** `/clancy:approve-brief auth-rework` — approve a specific brief
8
+ - **By index:** `/clancy:approve-brief 2` — approve the 2nd unapproved brief
9
+ - **By ticket:** `/clancy:approve-brief PROJ-123` — approve brief sourced from this ticket
10
+ - **Set parent:** `--epic PROJ-50` — override or set the parent epic
11
+ - **Preview:** `--dry-run` — show what would be created without making API calls
12
+ - **Skip confirmation:** `--afk` — auto-confirm without prompting (for automation)
13
+
14
+ Examples:
15
+
16
+ - `/clancy:approve-brief` — auto-select (if only 1 unapproved brief)
17
+ - `/clancy:approve-brief auth-rework` — approve by slug
18
+ - `/clancy:approve-brief --dry-run` — preview ticket creation
19
+ - `/clancy:approve-brief --epic PROJ-50` — set parent and approve
20
+
21
+ @.claude/clancy/workflows/approve-brief.md
22
+
23
+ Follow the approve-brief workflow above. Parse the decomposition, create tickets on the board, link dependencies, and post a tracking comment.
@@ -0,0 +1,11 @@
1
+ # /clancy:board-setup
2
+
3
+ Configure board credentials for standalone brief usage. Connects your project to a Kanban board so you can brief from board tickets.
4
+
5
+ Not needed if you have the full Clancy pipeline installed (`npx chief-clancy`) — use `/clancy:settings` instead.
6
+
7
+ Supported boards: Jira, GitHub Issues, Linear, Shortcut, Notion, Azure DevOps.
8
+
9
+ @.claude/clancy/workflows/board-setup.md
10
+
11
+ Follow the board setup workflow above. Collect credentials, verify the connection, and write them to `.clancy/.env`.
@@ -4,7 +4,7 @@ Generate a strategic brief for a feature idea. Researches the codebase, grills y
4
4
 
5
5
  Accepts optional arguments:
6
6
 
7
- - **Board ticket:** `/clancy:brief PROJ-123`, `/clancy:brief #42`, `/clancy:brief ENG-42` — brief from a board ticket
7
+ - **Board ticket:** `/clancy:brief PROJ-123`, `/clancy:brief #42`, `/clancy:brief ENG-42` — brief from a board ticket (requires credentials — run `/clancy:board-setup` or install the full pipeline with `npx chief-clancy`)
8
8
  - **Inline text:** `/clancy:brief "Add dark mode"` — brief from a description
9
9
  - **From file:** `/clancy:brief --from docs/rfc.md` — brief from a local file
10
10
  - **Batch mode:** `/clancy:brief 3` — brief up to 3 tickets from the queue
@@ -11,7 +11,7 @@ import { describe, expect, it } from 'vitest';
11
11
 
12
12
  const COMMANDS_DIR = fileURLToPath(new URL('.', import.meta.url));
13
13
 
14
- const EXPECTED_COMMANDS = ['brief.md'];
14
+ const EXPECTED_COMMANDS = ['approve-brief.md', 'board-setup.md', 'brief.md'];
15
15
 
16
16
  describe('commands directory structure', () => {
17
17
  it('contains exactly the expected command files', () => {
@@ -36,4 +36,13 @@ describe('commands directory structure', () => {
36
36
 
37
37
  expect(issues).toEqual([]);
38
38
  });
39
+
40
+ it('approve-brief command starts with the approve-brief heading', () => {
41
+ const content = readFileSync(
42
+ new URL('approve-brief.md', import.meta.url),
43
+ 'utf8',
44
+ );
45
+
46
+ expect(content.split('\n')[0]?.trim()).toBe('# /clancy:approve-brief');
47
+ });
39
48
  });