beth-copilot 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +0 -0
  2. package/bin/cli.js +222 -7
  3. package/package.json +1 -1
  4. package/templates/.github/agents/beth.agent.md +0 -0
  5. package/templates/.github/agents/developer.agent.md +0 -0
  6. package/templates/.github/agents/product-manager.agent.md +0 -0
  7. package/templates/.github/agents/researcher.agent.md +0 -0
  8. package/templates/.github/agents/security-reviewer.agent.md +0 -0
  9. package/templates/.github/agents/tester.agent.md +0 -0
  10. package/templates/.github/agents/ux-designer.agent.md +0 -0
  11. package/templates/.github/copilot-instructions.md +0 -0
  12. package/templates/.github/skills/framer-components/SKILL.md +0 -0
  13. package/templates/.github/skills/prd/SKILL.md +0 -0
  14. package/templates/.github/skills/security-analysis/SKILL.md +0 -0
  15. package/templates/.github/skills/shadcn-ui/SKILL.md +0 -0
  16. package/templates/.github/skills/vercel-react-best-practices/AGENTS.md +0 -0
  17. package/templates/.github/skills/vercel-react-best-practices/SKILL.md +0 -0
  18. package/templates/.github/skills/vercel-react-best-practices/rules/advanced-event-handler-refs.md +0 -0
  19. package/templates/.github/skills/vercel-react-best-practices/rules/advanced-use-latest.md +0 -0
  20. package/templates/.github/skills/vercel-react-best-practices/rules/async-api-routes.md +0 -0
  21. package/templates/.github/skills/vercel-react-best-practices/rules/async-defer-await.md +0 -0
  22. package/templates/.github/skills/vercel-react-best-practices/rules/async-dependencies.md +0 -0
  23. package/templates/.github/skills/vercel-react-best-practices/rules/async-parallel.md +0 -0
  24. package/templates/.github/skills/vercel-react-best-practices/rules/async-suspense-boundaries.md +0 -0
  25. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-barrel-imports.md +0 -0
  26. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-conditional.md +0 -0
  27. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-defer-third-party.md +0 -0
  28. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-dynamic-imports.md +0 -0
  29. package/templates/.github/skills/vercel-react-best-practices/rules/bundle-preload.md +0 -0
  30. package/templates/.github/skills/vercel-react-best-practices/rules/client-event-listeners.md +0 -0
  31. package/templates/.github/skills/vercel-react-best-practices/rules/client-localstorage-schema.md +0 -0
  32. package/templates/.github/skills/vercel-react-best-practices/rules/client-passive-event-listeners.md +0 -0
  33. package/templates/.github/skills/vercel-react-best-practices/rules/client-swr-dedup.md +0 -0
  34. package/templates/.github/skills/vercel-react-best-practices/rules/js-batch-dom-css.md +0 -0
  35. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-function-results.md +0 -0
  36. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-property-access.md +0 -0
  37. package/templates/.github/skills/vercel-react-best-practices/rules/js-cache-storage.md +0 -0
  38. package/templates/.github/skills/vercel-react-best-practices/rules/js-combine-iterations.md +0 -0
  39. package/templates/.github/skills/vercel-react-best-practices/rules/js-early-exit.md +0 -0
  40. package/templates/.github/skills/vercel-react-best-practices/rules/js-hoist-regexp.md +0 -0
  41. package/templates/.github/skills/vercel-react-best-practices/rules/js-index-maps.md +0 -0
  42. package/templates/.github/skills/vercel-react-best-practices/rules/js-length-check-first.md +0 -0
  43. package/templates/.github/skills/vercel-react-best-practices/rules/js-min-max-loop.md +0 -0
  44. package/templates/.github/skills/vercel-react-best-practices/rules/js-set-map-lookups.md +0 -0
  45. package/templates/.github/skills/vercel-react-best-practices/rules/js-tosorted-immutable.md +0 -0
  46. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-activity.md +0 -0
  47. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-animate-svg-wrapper.md +0 -0
  48. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-conditional-render.md +0 -0
  49. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-content-visibility.md +0 -0
  50. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hoist-jsx.md +0 -0
  51. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-hydration-no-flicker.md +0 -0
  52. package/templates/.github/skills/vercel-react-best-practices/rules/rendering-svg-precision.md +0 -0
  53. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-defer-reads.md +0 -0
  54. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-dependencies.md +0 -0
  55. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-derived-state.md +0 -0
  56. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-functional-setstate.md +0 -0
  57. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-lazy-state-init.md +0 -0
  58. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-memo.md +0 -0
  59. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-simple-expression-in-memo.md +0 -0
  60. package/templates/.github/skills/vercel-react-best-practices/rules/rerender-transitions.md +0 -0
  61. package/templates/.github/skills/vercel-react-best-practices/rules/server-after-nonblocking.md +0 -0
  62. package/templates/.github/skills/vercel-react-best-practices/rules/server-auth-actions.md +0 -0
  63. package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-lru.md +0 -0
  64. package/templates/.github/skills/vercel-react-best-practices/rules/server-cache-react.md +0 -0
  65. package/templates/.github/skills/vercel-react-best-practices/rules/server-dedup-props.md +0 -0
  66. package/templates/.github/skills/vercel-react-best-practices/rules/server-parallel-fetching.md +0 -0
  67. package/templates/.github/skills/vercel-react-best-practices/rules/server-serialization.md +0 -0
  68. package/templates/.github/skills/web-design-guidelines/SKILL.md +0 -0
  69. package/templates/.vscode/settings.json +16 -0
  70. package/templates/AGENTS.md +95 -70
  71. package/templates/Backlog.md +0 -0
  72. package/templates/mcp.json.example +0 -0
package/README.md CHANGED
File without changes
package/bin/cli.js CHANGED
@@ -4,6 +4,7 @@ import { fileURLToPath } from 'url';
4
4
  import { dirname, join, relative } from 'path';
5
5
  import { existsSync, mkdirSync, readdirSync, statSync, copyFileSync, readFileSync, writeFileSync } from 'fs';
6
6
  import { createRequire } from 'module';
7
+ import { execSync, spawn } from 'child_process';
7
8
 
8
9
  const require = createRequire(import.meta.url);
9
10
  const __filename = fileURLToPath(import.meta.url);
@@ -74,6 +75,131 @@ async function checkForUpdates() {
74
75
  }
75
76
  }
76
77
 
78
+ function isBacklogCliInstalled() {
79
+ try {
80
+ execSync('backlog --version', { stdio: 'ignore' });
81
+ return true;
82
+ } catch {
83
+ return false;
84
+ }
85
+ }
86
+
87
+ function isBeadsInstalled() {
88
+ try {
89
+ execSync('bd --version', { stdio: 'ignore' });
90
+ return true;
91
+ } catch {
92
+ return false;
93
+ }
94
+ }
95
+
96
+ function isBeadsInitialized(cwd) {
97
+ // Check if .beads directory exists in the project
98
+ return existsSync(join(cwd, '.beads'));
99
+ }
100
+
101
+ async function promptYesNo(question) {
102
+ const readline = await import('readline');
103
+ const rl = readline.createInterface({
104
+ input: process.stdin,
105
+ output: process.stdout
106
+ });
107
+
108
+ return new Promise((resolve) => {
109
+ rl.question(`${question} (y/N) `, (answer) => {
110
+ rl.close();
111
+ resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes');
112
+ });
113
+ });
114
+ }
115
+
116
+ async function installBacklogCli() {
117
+ log('\nInstalling backlog.md CLI...', COLORS.cyan);
118
+
119
+ return new Promise((resolve) => {
120
+ const child = spawn('npm', ['install', '-g', 'backlog.md'], {
121
+ stdio: 'inherit',
122
+ shell: true
123
+ });
124
+
125
+ child.on('close', (code) => {
126
+ if (code === 0) {
127
+ logSuccess('backlog.md CLI installed successfully!');
128
+ resolve(true);
129
+ } else {
130
+ logWarning('Failed to install backlog.md CLI. You can install it manually:');
131
+ logInfo('npm i -g backlog.md');
132
+ logInfo(' or');
133
+ logInfo('bun i -g backlog.md');
134
+ resolve(false);
135
+ }
136
+ });
137
+
138
+ child.on('error', () => {
139
+ logWarning('Failed to install backlog.md CLI. You can install it manually:');
140
+ logInfo('npm i -g backlog.md');
141
+ resolve(false);
142
+ });
143
+ });
144
+ }
145
+
146
+ async function installBeads() {
147
+ log('\nInstalling beads CLI...', COLORS.cyan);
148
+ logInfo('curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
149
+
150
+ return new Promise((resolve) => {
151
+ const child = spawn('bash', ['-c', 'curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash'], {
152
+ stdio: 'inherit',
153
+ shell: true
154
+ });
155
+
156
+ child.on('close', (code) => {
157
+ if (code === 0) {
158
+ logSuccess('beads CLI installed successfully!');
159
+ resolve(true);
160
+ } else {
161
+ logError('Failed to install beads CLI.');
162
+ logInfo('Install manually: curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
163
+ logInfo('Learn more: https://github.com/steveyegge/beads');
164
+ resolve(false);
165
+ }
166
+ });
167
+
168
+ child.on('error', () => {
169
+ logError('Failed to install beads CLI.');
170
+ logInfo('Install manually: curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
171
+ resolve(false);
172
+ });
173
+ });
174
+ }
175
+
176
+ async function initializeBeads(cwd) {
177
+ log('\nInitializing beads in project...', COLORS.cyan);
178
+
179
+ return new Promise((resolve) => {
180
+ const child = spawn('bd', ['init'], {
181
+ stdio: 'inherit',
182
+ shell: true,
183
+ cwd
184
+ });
185
+
186
+ child.on('close', (code) => {
187
+ if (code === 0) {
188
+ logSuccess('beads initialized successfully!');
189
+ resolve(true);
190
+ } else {
191
+ logWarning('Failed to initialize beads. Run manually: bd init');
192
+ resolve(false);
193
+ }
194
+ });
195
+
196
+ child.on('error', () => {
197
+ logWarning('Failed to initialize beads. Run manually: bd init');
198
+ resolve(false);
199
+ });
200
+ });
201
+ }
202
+
77
203
  function showHelp() {
78
204
  console.log(`
79
205
  ${COLORS.bright}Beth${COLORS.reset} - AI Orchestrator for GitHub Copilot
@@ -86,6 +212,7 @@ ${COLORS.bright}Options:${COLORS.reset}
86
212
  --force Overwrite existing files
87
213
  --skip-backlog Don't create Backlog.md
88
214
  --skip-mcp Don't create mcp.json.example
215
+ --skip-beads Skip beads check (not recommended)
89
216
 
90
217
  ${COLORS.bright}Examples:${COLORS.reset}
91
218
  npx beth-copilot init Set up Beth in current project
@@ -95,14 +222,15 @@ ${COLORS.bright}What gets installed:${COLORS.reset}
95
222
  .github/agents/ 8 specialized AI agents
96
223
  .github/skills/ 6 domain knowledge modules
97
224
  .github/copilot-instructions.md Copilot configuration
225
+ .vscode/settings.json Recommended VS Code settings
98
226
  AGENTS.md Workflow documentation
99
227
  Backlog.md Task tracking file
100
228
  mcp.json.example Optional MCP server config
101
229
 
102
230
  ${COLORS.bright}After installation:${COLORS.reset}
103
231
  1. Open project in VS Code
104
- 2. Enable Agent mode in Copilot Chat
105
- 3. Type @Beth and tell her what you need
232
+ 2. Open Copilot Chat (Ctrl+Alt+I / Cmd+Alt+I)
233
+ 3. Type @Beth to start working
106
234
 
107
235
  ${COLORS.bright}Documentation:${COLORS.reset}
108
236
  https://github.com/stephschofield/beth
@@ -139,7 +267,7 @@ function copyDirRecursive(src, dest, options = {}) {
139
267
  }
140
268
 
141
269
  async function init(options = {}) {
142
- const { force = false, skipBacklog = false, skipMcp = false } = options;
270
+ const { force = false, skipBacklog = false, skipMcp = false, skipBeads = false } = options;
143
271
  const cwd = process.cwd();
144
272
 
145
273
  // Check for updates
@@ -218,6 +346,28 @@ ${COLORS.cyan}"I don't do excuses. I do results."${COLORS.reset}
218
346
  }
219
347
  }
220
348
 
349
+ // Copy .vscode/settings.json (recommended settings for agent mode)
350
+ const vscodeSrc = join(TEMPLATES_DIR, '.vscode');
351
+ const vscodeDest = join(cwd, '.vscode');
352
+
353
+ if (existsSync(vscodeSrc)) {
354
+ if (!existsSync(vscodeDest)) {
355
+ mkdirSync(vscodeDest, { recursive: true });
356
+ }
357
+
358
+ const settingsSrc = join(vscodeSrc, 'settings.json');
359
+ const settingsDest = join(vscodeDest, 'settings.json');
360
+
361
+ if (existsSync(settingsSrc)) {
362
+ if (existsSync(settingsDest) && !force) {
363
+ logWarning('Skipped (exists): .vscode/settings.json');
364
+ } else {
365
+ copyFileSync(settingsSrc, settingsDest);
366
+ copiedFiles.push('.vscode/settings.json');
367
+ }
368
+ }
369
+ }
370
+
221
371
  // Summary
222
372
  console.log('');
223
373
  if (copiedFiles.length > 0) {
@@ -227,13 +377,77 @@ ${COLORS.cyan}"I don't do excuses. I do results."${COLORS.reset}
227
377
  logWarning('No files were copied. Use --force to overwrite existing files.');
228
378
  }
229
379
 
380
+ // Check for beads CLI (REQUIRED for Beth)
381
+ if (!skipBeads) {
382
+ console.log('');
383
+ log('Checking beads (required for task tracking)...', COLORS.cyan);
384
+
385
+ if (!isBeadsInstalled()) {
386
+ logWarning('beads CLI is not installed.');
387
+ logInfo('Beth requires beads for task tracking. Agents use it to coordinate work.');
388
+ logInfo('Learn more: https://github.com/steveyegge/beads');
389
+ console.log('');
390
+
391
+ const shouldInstallBeads = await promptYesNo('Install beads CLI now? (required)');
392
+ if (shouldInstallBeads) {
393
+ const installed = await installBeads();
394
+ if (!installed) {
395
+ logError('beads installation failed. Beth requires beads to function.');
396
+ logInfo('Install manually and run "beth init" again.');
397
+ process.exit(1);
398
+ }
399
+ } else {
400
+ logError('beads is required for Beth to function.');
401
+ logInfo('Install beads and run "beth init" again:');
402
+ logInfo(' curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash');
403
+ process.exit(1);
404
+ }
405
+ } else {
406
+ logSuccess('beads CLI is installed');
407
+ }
408
+
409
+ // Initialize beads in the project if not already done
410
+ if (!isBeadsInitialized(cwd)) {
411
+ logInfo('beads not initialized in this project.');
412
+ const shouldInitBeads = await promptYesNo('Initialize beads now?');
413
+ if (shouldInitBeads) {
414
+ await initializeBeads(cwd);
415
+ } else {
416
+ logWarning('Remember to run "bd init" before using Beth.');
417
+ }
418
+ } else {
419
+ logSuccess('beads is initialized in this project');
420
+ }
421
+ } else {
422
+ logWarning('Skipped beads check (--skip-beads). Beth may not function correctly.');
423
+ }
424
+
425
+ // Check for backlog.md CLI (optional)
426
+ if (!skipBacklog && !isBacklogCliInstalled()) {
427
+ console.log('');
428
+ logWarning('backlog.md CLI is not installed (optional).');
429
+ logInfo('The CLI provides TUI boards, web UI, and task management commands.');
430
+ logInfo('Learn more: https://github.com/MrLesk/Backlog.md');
431
+ console.log('');
432
+
433
+ const shouldInstall = await promptYesNo('Would you like to install the backlog.md CLI globally?');
434
+ if (shouldInstall) {
435
+ await installBacklogCli();
436
+ } else {
437
+ logInfo('Skipped. You can install it later with: npm i -g backlog.md');
438
+ }
439
+ } else if (!skipBacklog) {
440
+ logSuccess('backlog.md CLI is already installed');
441
+ }
442
+
230
443
  // Next steps
231
444
  console.log(`
232
445
  ${COLORS.bright}Next steps:${COLORS.reset}
233
446
  1. Open this project in VS Code
234
- 2. Ensure GitHub Copilot + Copilot Chat are installed
235
- 3. Switch to ${COLORS.cyan}Agent mode${COLORS.reset} in Copilot Chat
236
- 4. Type ${COLORS.cyan}@Beth${COLORS.reset} and tell her what you need
447
+ 2. Open Copilot Chat (${COLORS.cyan}Ctrl+Alt+I${COLORS.reset} / ${COLORS.cyan}Cmd+Alt+I${COLORS.reset})
448
+ 3. Type ${COLORS.cyan}@Beth${COLORS.reset} to start - she's your orchestrator
449
+
450
+ ${COLORS.bright}Pro tip:${COLORS.reset} Start every session with ${COLORS.cyan}@Beth${COLORS.reset} and let her route work to the right specialists.
237
451
 
238
452
  ${COLORS.bright}Documentation:${COLORS.reset}
239
453
  https://github.com/stephschofield/beth
@@ -244,7 +458,7 @@ ${COLORS.cyan}"They broke my wings and forgot I had claws."${COLORS.reset}
244
458
 
245
459
  // Input validation constants
246
460
  const ALLOWED_COMMANDS = ['init', 'help', '--help', '-h'];
247
- const ALLOWED_FLAGS = ['--force', '--skip-backlog', '--skip-mcp'];
461
+ const ALLOWED_FLAGS = ['--force', '--skip-backlog', '--skip-mcp', '--skip-beads'];
248
462
  const MAX_ARG_LENGTH = 50;
249
463
 
250
464
  // Validate and sanitize input
@@ -273,6 +487,7 @@ const options = {
273
487
  force: args.includes('--force'),
274
488
  skipBacklog: args.includes('--skip-backlog'),
275
489
  skipMcp: args.includes('--skip-mcp'),
490
+ skipBeads: args.includes('--skip-beads'),
276
491
  };
277
492
 
278
493
  // Validate unknown flags
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "beth-copilot",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "Beth - A ruthless, hyper-competent AI orchestrator for GitHub Copilot multi-agent workflows",
5
5
  "keywords": [
6
6
  "github-copilot",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,16 @@
1
+ {
2
+ // Beth Agent System - Recommended Settings
3
+ // These settings enable full agent orchestration capabilities
4
+
5
+ // Required: Allow Beth to delegate work to specialist agents
6
+ "chat.customAgentInSubagent.enabled": true,
7
+
8
+ // Enable agent mode in Copilot Chat
9
+ "chat.agent.enabled": true,
10
+
11
+ // Enable thinking/reasoning for complex tasks
12
+ "github.copilot.chat.agent.thinkingTool": true,
13
+
14
+ // Consistent locale for agent responses
15
+ "github.copilot.chat.localeOverride": "en"
16
+ }
@@ -1,70 +1,95 @@
1
- # Agent Instructions
2
-
3
- This project uses [Backlog.md](https://github.com/MrLesk/Backlog.md) for issue tracking.
4
-
5
- ## Quick Setup
6
-
7
- ```bash
8
- # Install (choose one)
9
- bun i -g backlog.md
10
- npm i -g backlog.md
11
- brew install backlog-md
12
-
13
- # Initialize in your project
14
- backlog init "Project Name"
15
-
16
- # Shell completion (optional)
17
- backlog completion install
18
- ```
19
-
20
- ## Quick Reference
21
-
22
- ```bash
23
- # Create a task
24
- backlog task create "Task title" -d "Description"
25
-
26
- # List tasks
27
- backlog task list --plain
28
-
29
- # View Kanban board (TUI)
30
- backlog board
31
-
32
- # Web UI
33
- backlog browser
34
-
35
- # Configure settings
36
- backlog config
37
- ```
38
-
39
- ## Workflow
40
-
41
- 1. Check available work: `backlog task list`
42
- 2. Claim work: `backlog task edit <id> --status "In Progress"`
43
- 3. Do the work
44
- 4. Complete: `backlog task edit <id> --status "Done"`
45
- 5. Commit and push
46
-
47
- ## Landing the Plane (Session Completion)
48
-
49
- **When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
50
-
51
- **MANDATORY WORKFLOW:**
52
-
53
- 1. **Update Backlog.md** - Move completed tasks, add new items for follow-up work
54
- 2. **Run quality gates** (if code changed) - Tests, linters, builds
55
- 3. **PUSH TO REMOTE** - This is MANDATORY:
56
- ```bash
57
- git add -A
58
- git commit -m "description of work"
59
- git pull --rebase
60
- git push
61
- git status # MUST show "up to date with origin"
62
- ```
63
- 4. **Verify** - All changes committed AND pushed
64
- 5. **Hand off** - Provide context for next session
65
-
66
- **CRITICAL RULES:**
67
- - Work is NOT complete until `git push` succeeds
68
- - NEVER stop before pushing - that leaves work stranded locally
69
- - NEVER say "ready to push when you are" - YOU must push
70
- - If push fails, resolve and retry until it succeeds
1
+ # Agent Instructions
2
+
3
+ This project uses a **dual tracking system**:
4
+
5
+ | Tool | Audience | Purpose |
6
+ |------|----------|---------|
7
+ | [beads](https://github.com/steveyegge/beads) (`bd`) | Agents | Active work, dependencies, blockers, structured memory |
8
+ | [Backlog.md](Backlog.md) | Humans | Completed work archive, decisions, readable changelog |
9
+
10
+ **The rule:** beads is always current. Backlog.md gets updated when work completes.
11
+
12
+ ## Quick Setup
13
+
14
+ ```bash
15
+ # Install beads
16
+ curl -fsSL https://raw.githubusercontent.com/steveyegge/beads/main/scripts/install.sh | bash
17
+
18
+ # Initialize in your project
19
+ bd init
20
+
21
+ # Run doctor to verify setup
22
+ bd doctor
23
+ ```
24
+
25
+ ## Quick Reference
26
+
27
+ ```bash
28
+ # Simple task
29
+ bd create "Issue title" --description="What needs to be done" -l in_progress
30
+
31
+ # Epic for complex work
32
+ bd create "Feature name" --type epic -p 1
33
+
34
+ # Subtask with parent
35
+ bd create "Subtask" --parent <epic-id>
36
+
37
+ # Task with dependency
38
+ bd create "Blocked task" --deps "<blocker-id>"
39
+
40
+ # List issues / see what's ready
41
+ bd list
42
+ bd ready
43
+
44
+ # View dependencies
45
+ bd dep tree <id>
46
+
47
+ # Close an issue
48
+ bd close <id>
49
+ ```
50
+
51
+ ## Workflow
52
+
53
+ ### Simple Tasks
54
+ 1. `bd create "Task" -l in_progress`
55
+ 2. Do the work
56
+ 3. `bd close <id>`
57
+ 4. Update Backlog.md if significant
58
+ 5. Commit and push
59
+
60
+ ### Complex Work (Multi-Agent)
61
+ 1. `bd create "Feature" --type epic -p 1`
62
+ 2. Break into subtasks with `--parent` and `--deps`
63
+ 3. `bd ready` to find unblocked work
64
+ 4. Route to specialists with issue IDs
65
+ 5. Close subtasks as they complete
66
+ 6. `bd epic close-eligible` when all children done
67
+ 7. Update Backlog.md with summary
68
+ 8. Commit and push
69
+
70
+ ## Landing the Plane (Session Completion)
71
+
72
+ **When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
73
+
74
+ **MANDATORY WORKFLOW:**
75
+
76
+ 1. **Close beads issues** - `bd close <id>` for completed work
77
+ 2. **Create follow-up issues** - `bd create` for any remaining work
78
+ 3. **Update Backlog.md** - Add summary to Completed section for significant work
79
+ 4. **Run quality gates** (if code changed) - Tests, linters, builds
80
+ 5. **PUSH TO REMOTE** - This is MANDATORY:
81
+ ```bash
82
+ git add -A
83
+ git commit -m "description of work"
84
+ git pull --rebase
85
+ git push
86
+ git status # MUST show "up to date with origin"
87
+ ```
88
+ 6. **Verify** - All changes committed AND pushed
89
+ 7. **Hand off** - Provide context for next session
90
+
91
+ **CRITICAL RULES:**
92
+ - Work is NOT complete until `git push` succeeds
93
+ - NEVER stop before pushing - that leaves work stranded locally
94
+ - NEVER say "ready to push when you are" - YOU must push
95
+ - If push fails, resolve and retry until it succeeds
File without changes
File without changes