forge-workflow 0.0.8 → 0.0.10

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 (135) hide show
  1. package/.claude/commands/dev.md +2 -2
  2. package/.claude/commands/plan.md +2 -2
  3. package/.claude/commands/premerge.md +2 -2
  4. package/.claude/commands/review.md +5 -2
  5. package/.claude/commands/ship.md +6 -5
  6. package/.claude/commands/status.md +4 -4
  7. package/.claude/rules/greptile-review-process.md +4 -4
  8. package/.cline/workflows/dev.md +2 -2
  9. package/.cline/workflows/plan.md +2 -2
  10. package/.cline/workflows/premerge.md +2 -2
  11. package/.cline/workflows/review.md +5 -2
  12. package/.cline/workflows/ship.md +6 -5
  13. package/.cline/workflows/status.md +4 -4
  14. package/.codex/skills/dev/SKILL.md +2 -2
  15. package/.codex/skills/plan/SKILL.md +2 -2
  16. package/.codex/skills/premerge/SKILL.md +2 -2
  17. package/.codex/skills/review/SKILL.md +5 -2
  18. package/.codex/skills/ship/SKILL.md +6 -5
  19. package/.codex/skills/status/SKILL.md +4 -4
  20. package/.cursor/commands/dev.md +2 -2
  21. package/.cursor/commands/plan.md +2 -2
  22. package/.cursor/commands/premerge.md +2 -2
  23. package/.cursor/commands/review.md +5 -2
  24. package/.cursor/commands/ship.md +6 -5
  25. package/.cursor/commands/status.md +4 -4
  26. package/.github/prompts/dev.prompt.md +2 -2
  27. package/.github/prompts/plan.prompt.md +2 -2
  28. package/.github/prompts/premerge.prompt.md +2 -2
  29. package/.github/prompts/review.prompt.md +5 -2
  30. package/.github/prompts/ship.prompt.md +6 -5
  31. package/.github/prompts/status.prompt.md +4 -4
  32. package/.github/workflows/beads-to-github.yml +44 -11
  33. package/.github/workflows/github-to-beads.yml +11 -8
  34. package/.kilocode/workflows/dev.md +2 -2
  35. package/.kilocode/workflows/plan.md +2 -2
  36. package/.kilocode/workflows/premerge.md +2 -2
  37. package/.kilocode/workflows/review.md +5 -2
  38. package/.kilocode/workflows/ship.md +6 -5
  39. package/.kilocode/workflows/status.md +4 -4
  40. package/.opencode/commands/dev.md +2 -2
  41. package/.opencode/commands/plan.md +2 -2
  42. package/.opencode/commands/premerge.md +2 -2
  43. package/.opencode/commands/review.md +5 -2
  44. package/.opencode/commands/ship.md +6 -5
  45. package/.opencode/commands/status.md +4 -4
  46. package/.roo/commands/dev.md +2 -2
  47. package/.roo/commands/plan.md +2 -2
  48. package/.roo/commands/premerge.md +2 -2
  49. package/.roo/commands/review.md +5 -2
  50. package/.roo/commands/ship.md +6 -5
  51. package/.roo/commands/status.md +4 -4
  52. package/AGENTS.md +10 -9
  53. package/CLAUDE.md +12 -0
  54. package/README.md +12 -6
  55. package/bin/forge.js +24 -8
  56. package/docs/BEADS_GITHUB_SYNC.md +32 -2
  57. package/docs/EXAMPLES.md +22 -22
  58. package/docs/ROADMAP.md +3 -3
  59. package/docs/TOOLCHAIN.md +150 -160
  60. package/lib/agents/codex.plugin.json +3 -0
  61. package/lib/agents-config.js +18 -12
  62. package/lib/beads-bootstrap.js +225 -0
  63. package/lib/beads-health-check.js +55 -10
  64. package/lib/beads-setup.js +104 -28
  65. package/lib/beads-sync-scaffold.js +11 -6
  66. package/lib/codex-skills.js +54 -1
  67. package/lib/commands/_issue.js +11 -1
  68. package/lib/commands/issues.js +49 -0
  69. package/lib/commands/plan.js +5 -2
  70. package/lib/commands/recommend.js +22 -1
  71. package/lib/commands/setup.js +247 -27
  72. package/lib/commands/ship.js +188 -5
  73. package/lib/commands/status.js +187 -19
  74. package/lib/commands/team.js +11 -1
  75. package/lib/commands/test.js +125 -25
  76. package/lib/commands/validate.js +232 -9
  77. package/lib/commands/worktree.js +27 -54
  78. package/lib/dep-guard/keyword-ripple.js +184 -0
  79. package/lib/detect-worktree.js +9 -10
  80. package/lib/forge-issues.js +326 -0
  81. package/lib/issue-sync/authority.js +100 -0
  82. package/lib/issue-sync/github-pull.js +184 -0
  83. package/lib/issue-sync/import-primitives.js +98 -0
  84. package/lib/issue-sync/legacy-link-bridge.js +436 -0
  85. package/lib/issue-sync/link-store.js +292 -0
  86. package/lib/issue-sync/project-github.js +123 -0
  87. package/lib/issue-sync/reconcile.js +195 -0
  88. package/lib/issue-sync/schema.js +126 -0
  89. package/lib/lefthook-check.js +5 -2
  90. package/lib/project-memory.js +564 -0
  91. package/lib/runtime-health.js +100 -12
  92. package/lib/setup-action-log.js +2 -0
  93. package/lib/setup-summary-renderer.js +15 -11
  94. package/lib/smart-status/conflicts.js +205 -0
  95. package/lib/smart-status/scoring.js +177 -0
  96. package/lib/status/beads-snapshot.js +102 -0
  97. package/lib/status/presenter.js +65 -0
  98. package/lib/workflow/enforce-stage.js +14 -8
  99. package/lib/workflow/state-manager.js +349 -0
  100. package/package.json +12 -4
  101. package/scripts/beads-context.sh +124 -5
  102. package/scripts/beads-context.test.js +21 -4
  103. package/scripts/beads-migrate-to-dolt.sh +7 -0
  104. package/scripts/beads-upgrade-smoke.sh +263 -0
  105. package/scripts/behavioral-judge.sh +115 -11
  106. package/scripts/benchmark.js +349 -63
  107. package/scripts/dep-guard-analyze.js +52 -17
  108. package/scripts/dep-guard-keyword-ripple.js +29 -0
  109. package/scripts/dep-guard-render-review.js +86 -0
  110. package/scripts/dep-guard.sh +45 -222
  111. package/scripts/forge-team/lib/hooks.sh +1 -1
  112. package/scripts/forge-team/lib/sync-github.sh +160 -28
  113. package/scripts/forge-team/lib/verify.sh +1 -1
  114. package/scripts/forge-team/lib/workload.sh +56 -27
  115. package/scripts/forge-team/tests/sync-github.test.sh +195 -58
  116. package/scripts/forge-team/tests/workload.test.sh +35 -4
  117. package/scripts/github-beads-sync/index.mjs +122 -98
  118. package/scripts/github-beads-sync/mapping.mjs +54 -0
  119. package/scripts/github-beads-sync/reverse-sync-cli.mjs +2 -2
  120. package/scripts/github-beads-sync/reverse-sync.mjs +31 -7
  121. package/scripts/github-beads-sync/run-bd.mjs +4 -2
  122. package/scripts/lib/beads-migrate-to-dolt.mjs +503 -0
  123. package/scripts/preflight.sh +181 -0
  124. package/scripts/smart-status-score.js +31 -0
  125. package/scripts/smart-status-sessions.js +51 -0
  126. package/scripts/smart-status.sh +84 -330
  127. package/scripts/sync-agentic-workflow.js +48 -0
  128. package/scripts/sync-utils.sh +39 -0
  129. package/scripts/test-ci-shard.js +244 -0
  130. package/scripts/test-dashboard.js +188 -52
  131. package/scripts/test-full-suite.js +186 -0
  132. package/scripts/test-profile.js +278 -0
  133. package/scripts/test.js +335 -38
  134. package/scripts/validate.js +143 -0
  135. package/scripts/validate.sh +18 -1
package/CLAUDE.md CHANGED
@@ -50,6 +50,17 @@ See [docs/TOOLCHAIN.md](docs/TOOLCHAIN.md) for detailed MCP setup instructions.
50
50
 
51
51
  Setup prompts for Beads during interactive installation. Manual install: see [docs/TOOLCHAIN.md](docs/TOOLCHAIN.md).
52
52
 
53
+ ### Shell Model
54
+
55
+ Forge commands and repo scripts assume the following shell model:
56
+
57
+ | Platform | Shell used by Forge commands and scripts |
58
+ | --- | --- |
59
+ | Windows | Git Bash for helper-backed Forge stage flows |
60
+ | macOS/Linux | Default login shell |
61
+
62
+ On Windows, Forge runtime health enforces Git Bash for helper-backed stage flows. Native PowerShell is still used by some bootstrap paths, and WSL may be useful for adjacent development tasks. See [docs/TOOLCHAIN.md](docs/TOOLCHAIN.md#shell-model) for details.
63
+
53
64
  ---
54
65
 
55
66
  ## Git Workflow
@@ -106,5 +117,6 @@ As you work, when you give the same instruction twice, add it here:
106
117
  - **Pre-push test env**: `test-env/` fixture tests can fail during actual `git push` due to git mid-push state. Fix the root cause — never use `LEFTHOOK=0`.
107
118
  - **Command sync**: After editing `.claude/commands/*.md`, run `node scripts/sync-commands.js` to update all 7 agent directories. Use `--check` in CI to detect drift. Use `--dry-run` to preview.
108
119
  - **Dynamic commands**: Never hardcode example output in command files (`.claude/commands/*.md`) when a script generates that output dynamically. Command files should reference the script and describe what it does — not duplicate its output with fake data that becomes stale.
120
+ - **Review follow-up completion**: After fixing review feedback, always push the changes and resolve the related GitHub review threads via the GraphQL API before considering the work complete.
109
121
 
110
122
  <!-- USER:END -->
package/README.md CHANGED
@@ -402,14 +402,20 @@ gh auth login
402
402
  /premerge <pr> # Complete docs, hand off PR
403
403
  /verify # Post-merge health check
404
404
 
405
- # Beads commands (optional)
406
- bd init # Initialize tracking
407
- bd ready # Find ready work
408
- bd create "title" # Create issue
409
- bd update <id> --status X # Update status
410
- bd sync # Sync with git
405
+ # Issue commands (via Forge)
406
+ bd init # Initialize Beads tracking
407
+ forge ready # Find ready work
408
+ forge create "title" # Create issue
409
+ forge update <id> --status X # Update status
410
+ forge sync # Sync Beads state
411
411
  ```
412
412
 
413
+ For advanced Beads operations that Forge does not wrap yet, use `bd` directly for
414
+ `bd comments`, `bd dep`, and `bd dolt`.
415
+
416
+ Forge is the preferred command surface for routine workflows, but Beads (`bd`)
417
+ remains the underlying source of truth for issue state and IDs.
418
+
413
419
  ---
414
420
 
415
421
  ## License
package/bin/forge.js CHANGED
@@ -64,7 +64,7 @@ const { createSymlinkOrCopy: libCreateSymlinkOrCopy } = require(path.join(packag
64
64
  const beadsSetupLib = require(path.join(packageDir, 'lib', 'beads-setup'));
65
65
  const { beadsHealthCheck } = require(path.join(packageDir, 'lib', 'beads-health-check'));
66
66
  const { setupPAT } = require(path.join(packageDir, 'lib', 'pat-setup'));
67
- const { detectDefaultBranch, detectBeadsVersion, templateWorkflows, scaffoldBeadsSync } = require(path.join(packageDir, 'lib', 'beads-sync-scaffold'));
67
+ const { DEFAULT_BEADS_VERSION, detectDefaultBranch, templateWorkflows, scaffoldBeadsSync } = require(path.join(packageDir, 'lib', 'beads-sync-scaffold'));
68
68
 
69
69
  // Load incremental setup modules
70
70
  const { detectEnvironment } = require('../lib/detect-agent');
@@ -139,7 +139,7 @@ function loadAgentsFromPlugins() {
139
139
  agents[id] = {
140
140
  name: plugin.name,
141
141
  description: plugin.description || '',
142
- dirs: Object.values(plugin.directories || {}),
142
+ dirs: getRepoRelativePluginDirectories(plugin),
143
143
  hasCommands: plugin.capabilities?.commands || plugin.setup?.copyCommands || false,
144
144
  hasSkill: plugin.capabilities?.skills || plugin.setup?.createSkill || false,
145
145
  linkFile: plugin.files?.rootConfig || '',
@@ -153,6 +153,17 @@ function loadAgentsFromPlugins() {
153
153
  return agents;
154
154
  }
155
155
 
156
+ function isRepoRelativePluginPath(candidate) {
157
+ return typeof candidate === 'string'
158
+ && candidate.length > 0
159
+ && !path.isAbsolute(candidate)
160
+ && !/^[~$%]/.test(candidate);
161
+ }
162
+
163
+ function getRepoRelativePluginDirectories(plugin) {
164
+ return Object.values(plugin.directories || {}).filter(isRepoRelativePluginPath);
165
+ }
166
+
156
167
  // Agent definitions - loaded from plugin system
157
168
  const AGENTS = loadAgentsFromPlugins();
158
169
 
@@ -2383,7 +2394,7 @@ function displaySetupSummary(selectedAgents) {
2383
2394
 
2384
2395
  // Beads status
2385
2396
  if (isBeadsInitialized()) {
2386
- console.log(' ✓ Beads initialized - Track work: bd ready');
2397
+ console.log(' ✓ Beads initialized - Track work: forge ready');
2387
2398
  } else if (checkForBeads()) {
2388
2399
  console.log(' ! Beads available - Run: bd init');
2389
2400
  } else {
@@ -2543,7 +2554,7 @@ function parseFlags() {
2543
2554
 
2544
2555
  // Issue passthrough commands delegate all flags to bd.
2545
2556
  // Skip global parsing so flags like --type, -p, --help reach the handler intact.
2546
- const issuePassthroughCommands = ['create', 'update', 'claim', 'close', 'show', 'list', 'ready', 'issue'];
2557
+ const issuePassthroughCommands = ['create', 'update', 'claim', 'close', 'show', 'list', 'ready', 'issue', 'issues'];
2547
2558
  if (issuePassthroughCommands.includes(args[0])) {
2548
2559
  return flags;
2549
2560
  }
@@ -3336,7 +3347,7 @@ async function setupProjectTools(rl, question) {
3336
3347
  console.log('');
3337
3348
  console.log('• Beads - Git-backed issue tracking');
3338
3349
  console.log(' Persists tasks across sessions, tracks dependencies.');
3339
- console.log(' Command: bd ready, bd create, bd close');
3350
+ console.log(' Command: forge ready, forge create, forge close');
3340
3351
  console.log('');
3341
3352
  console.log('• Skills - Universal SKILL.md management');
3342
3353
  console.log(' Manage AI agent skills across all agents.');
@@ -4036,9 +4047,9 @@ async function handleSyncScaffold() {
4036
4047
  console.log(` Skipped: ${f} (already exists)`);
4037
4048
  }
4038
4049
 
4039
- // Detect default branch and Beads version, then template workflows
4050
+ // Detect default branch and pin forge-managed workflows to the repo baseline Beads version.
4040
4051
  const branch = detectDefaultBranch(projectRoot);
4041
- const beadsVersion = detectBeadsVersion();
4052
+ const beadsVersion = DEFAULT_BEADS_VERSION;
4042
4053
  const workflowDir = path.join(projectRoot, '.github', 'workflows');
4043
4054
  templateWorkflows(workflowDir, branch, beadsVersion, result.filesCreated || []);
4044
4055
  console.log(` Branch: ${branch}, Beads version: ${beadsVersion}`);
@@ -4802,4 +4813,9 @@ if (require.main === module) {
4802
4813
  })();
4803
4814
  }
4804
4815
 
4805
- module.exports = { getWorkflowCommands, ensureDirWithNote };
4816
+ module.exports = {
4817
+ ensureDirWithNote,
4818
+ getWorkflowCommands,
4819
+ validateDirectoryPathInput,
4820
+ validateUserInput,
4821
+ };
@@ -3,10 +3,14 @@
3
3
  Automatic synchronization between GitHub Issues and Beads issue tracking.
4
4
 
5
5
  **GitHub Issues** = human/team/public interface.
6
- **Beads** = AI agent engine (`bd ready`, `bd close`).
6
+ **Beads** = issue engine behind Forge (`forge ready`, `forge close`).
7
7
 
8
8
  Neither side needs to know about the other. Contributors file issues on GitHub; AI agents pick up work via Beads. Status changes propagate automatically.
9
9
 
10
+ For human and agent workflows, prefer the Forge wrapper commands (`forge ready`,
11
+ `forge create`, `forge close`, `forge sync`). The workflow automation shown below
12
+ still calls `bd` directly as an internal implementation detail.
13
+
10
14
  ---
11
15
 
12
16
  ## Architecture
@@ -48,7 +52,7 @@ sequenceDiagram
48
52
  participant WF as GitHub Actions
49
53
  participant GH as GitHub Issues
50
54
 
51
- AI->>BD: bd close forge-abc
55
+ AI->>BD: forge close forge-abc
52
56
  BD->>Repo: Update issues.jsonl
53
57
  AI->>Repo: git push
54
58
  Repo->>WF: push trigger (paths: .beads/**)
@@ -65,6 +69,32 @@ Three guards prevent infinite ping-pong:
65
69
  2. **Commit message prefix** -- Phase 2 workflow skips commits starting with `chore(beads):`
66
70
  3. **Opt-out label** -- `skip-beads-sync` label on any issue disables sync entirely
67
71
 
72
+ ### Normalized Core
73
+
74
+ GitHub-owned shared fields are the only fields that steady-state pull and initial import are allowed to overwrite:
75
+
76
+ - `github.number`
77
+ - `github.nodeId`
78
+ - `github.url`
79
+ - `shared.title`
80
+ - `shared.body`
81
+ - `shared.state`
82
+ - `shared.assignees`
83
+ - `shared.labels`
84
+ - `shared.milestone`
85
+ - `sync.remoteUpdatedAt`
86
+
87
+ Forge-owned workflow context stays local in Beads. That includes workflow stage, dependencies, progress notes, decisions, and other issue-engine metadata.
88
+
89
+ Both ongoing pull sync and the `forge-ij1` import bootstrap use the same primitive layer:
90
+
91
+ - `lib/issue-sync/link-store.js` resolves canonical GitHub/Beads links.
92
+ - `lib/issue-sync/github-pull.js` normalizes remote GitHub issues into shared records.
93
+ - `lib/issue-sync/reconcile.js` applies GitHub-owned fields and materializes the local cache row.
94
+ - `lib/issue-sync/import-primitives.js` exposes `listRemoteIssues`, `normalizeRemoteIssue`, `resolveSharedLink`, and `materializeLocalIssue` for import backfill.
95
+
96
+ `forge-ij1` depends on these primitives directly. It does not use a separate import-specific sync contract or an alternate reconciliation path.
97
+
68
98
  ---
69
99
 
70
100
  ## Setup
package/docs/EXAMPLES.md CHANGED
@@ -109,7 +109,7 @@ git commit -m "feat: add health check endpoint"
109
109
  /status
110
110
 
111
111
  # If Beads installed:
112
- bd create "SQL injection in search endpoint" \
112
+ forge create "SQL injection in search endpoint" \
113
113
  --type bug \
114
114
  --priority 0 \
115
115
  --label "security,critical"
@@ -224,7 +224,7 @@ OWASP A03:2021 Injection"
224
224
  # ═══════════════════════════════════════════════════════════
225
225
  /status
226
226
 
227
- bd create "Extract auth logic to service" \
227
+ forge create "Extract auth logic to service" \
228
228
  --type chore \
229
229
  --priority 2
230
230
 
@@ -337,35 +337,35 @@ Team of 3 developers:
337
337
  # PROJECT SETUP (Once per project)
338
338
  # ═══════════════════════════════════════════════════════════
339
339
  bd init --prefix SHOP
340
- bd sync # Commit .beads/ to git
340
+ forge sync # Sync initial Beads state
341
341
 
342
342
  # ═══════════════════════════════════════════════════════════
343
343
  # ALICE: Payment Integration
344
344
  # ═══════════════════════════════════════════════════════════
345
345
 
346
346
  # Morning: Check what's available
347
- bd ready
347
+ forge ready
348
348
  # Output:
349
349
  # SHOP-1: Payment integration (ready)
350
350
  # SHOP-3: Admin dashboard (ready)
351
351
 
352
352
  # Claim work
353
- bd update SHOP-1 --status in_progress
353
+ forge claim SHOP-1
354
354
  /status
355
355
  /plan stripe-payment-integration
356
356
  /dev
357
357
 
358
358
  # Midday: Progress update
359
- bd comments SHOP-1 "Stripe SDK integrated, working on webhooks"
359
+ bd comments add SHOP-1 "Stripe SDK integrated, working on webhooks"
360
360
 
361
361
  # Afternoon: Blocked on API keys
362
- bd update SHOP-1 --status blocked --comment "Need production Stripe API keys"
362
+ forge update SHOP-1 --status blocked --comment "Need production Stripe API keys"
363
363
 
364
364
  # Create dependency
365
- bd create "Get Stripe API keys from DevOps" --type chore --priority 1
365
+ forge create "Get Stripe API keys from DevOps" --type chore --priority 1
366
366
  bd dep add SHOP-1 SHOP-5 # SHOP-1 depends on SHOP-5
367
367
 
368
- bd sync # Push to git
368
+ forge sync # Push Beads state
369
369
 
370
370
  # ═══════════════════════════════════════════════════════════
371
371
  # BOB: Email Notifications (Same Time)
@@ -373,24 +373,24 @@ bd sync # Push to git
373
373
 
374
374
  # Morning: Pull latest, check work
375
375
  git pull
376
- bd sync # Sync with Alice's updates
376
+ forge sync # Sync with Alice's updates
377
377
 
378
- bd ready
378
+ forge ready
379
379
  # Output:
380
380
  # SHOP-3: Admin dashboard (ready)
381
381
  # SHOP-2: Email notifications (ready)
382
382
 
383
383
  # Claim different feature
384
- bd update SHOP-2 --status in_progress
384
+ forge claim SHOP-2
385
385
  /plan email-notifications
386
386
  /dev
387
387
 
388
388
  # No conflicts with Alice (different files)
389
389
 
390
390
  # End of day: Complete
391
- bd close SHOP-2 --reason "Implemented with SendGrid"
391
+ forge close SHOP-2 --reason "Implemented with SendGrid"
392
392
  /ship
393
- bd sync
393
+ forge sync
394
394
 
395
395
  # ═══════════════════════════════════════════════════════════
396
396
  # CHARLIE: Admin Dashboard (Next Day)
@@ -398,17 +398,17 @@ bd sync
398
398
 
399
399
  # Morning: Check dependencies
400
400
  git pull
401
- bd sync
401
+ forge sync
402
402
 
403
- bd show SHOP-3
403
+ forge show SHOP-3
404
404
  # Output:
405
405
  # Status: ready
406
406
  # Depends on: (none)
407
407
 
408
- bd update SHOP-3 --status in_progress
408
+ forge claim SHOP-3
409
409
 
410
410
  # Discovers overlap with Bob's work
411
- bd comments SHOP-3 "Need Bob's email service for user notifications"
411
+ bd comments add SHOP-3 "Need Bob's email service for user notifications"
412
412
  bd dep add SHOP-3 SHOP-2 # SHOP-3 depends on SHOP-2
413
413
 
414
414
  # Bob's work already merged, so can proceed
@@ -428,7 +428,7 @@ bd blocked
428
428
  # SHOP-1: Payment integration (blocked by SHOP-5)
429
429
 
430
430
  # Find work with no blockers:
431
- bd ready
431
+ forge ready
432
432
 
433
433
  # See full project status:
434
434
  bd stats
@@ -440,7 +440,7 @@ bd stats
440
440
  # Done: 4
441
441
 
442
442
  # Always sync at end of session:
443
- bd sync
443
+ forge sync
444
444
  ```
445
445
 
446
446
  **Result**: Team can work in parallel, track dependencies, and avoid conflicts.
@@ -465,8 +465,8 @@ bd sync
465
465
 
466
466
  ### 4. Team Collaboration
467
467
  - Beads tracks dependencies
468
- - `bd ready` finds available work
469
- - `bd sync` at end of every session
468
+ - `forge ready` finds available work
469
+ - `forge sync` at end of every session
470
470
  - Comments keep teammates informed
471
471
 
472
472
  ---
package/docs/ROADMAP.md CHANGED
@@ -291,8 +291,8 @@ All PRs tracked in Beads with proper dependencies:
291
291
  | PR8 | forge-dwm | Blocked | P3 | PR7 |
292
292
  | ~~Skills CLI~~ | ~~forge-mlm~~ | ~~Absorbed into PR5.5 + PR6 + PR8~~ | — | — |
293
293
 
294
- **View all issues**: `bd list`
295
- **View ready work**: `bd ready`
294
+ **View all issues**: `forge list`
295
+ **View ready work**: `forge ready`
296
296
  **View blocked issues**: `bd blocked`
297
297
 
298
298
  ### Git Workflow
@@ -348,7 +348,7 @@ Each PR is self-contained and can be rolled back independently:
348
348
  ## Resources
349
349
 
350
350
  - **Master Plan**: `docs/plans/*.md`
351
- - **Beads Issues**: `bd list` or `bd show <issue-id>`
351
+ - **Beads Issues**: `forge list` or `forge show <issue-id>`
352
352
  - **Workflow Guide**: [AGENTS.md](../AGENTS.md)
353
353
  - **Architecture Docs**: Coming in PR0 - [ARCHITECTURE.md](./ARCHITECTURE.md)
354
354