@sugar-crash-studios/vibe-forge 0.4.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/.claude/commands/clear-attention.md +63 -0
- package/.claude/commands/compact-context.md +52 -0
- package/.claude/commands/configure-vcs.md +102 -0
- package/.claude/commands/forge.md +171 -0
- package/.claude/commands/need-help.md +77 -0
- package/.claude/commands/update-status.md +64 -0
- package/.claude/commands/worker-loop.md +106 -0
- package/.claude/hooks/worker-loop.js +198 -0
- package/.claude/scripts/setup-worker-loop.sh +45 -0
- package/.claude/settings.local.json +46 -0
- package/LICENSE +21 -0
- package/README.md +238 -0
- package/agents/aegis/personality.md +294 -0
- package/agents/anvil/personality.md +276 -0
- package/agents/architect/personality.md +258 -0
- package/agents/crucible/personality.md +360 -0
- package/agents/ember/personality.md +291 -0
- package/agents/forge-master/capabilities.md +144 -0
- package/agents/forge-master/context-template.md +128 -0
- package/agents/forge-master/personality.md +138 -0
- package/agents/furnace/personality.md +340 -0
- package/agents/herald/personality.md +247 -0
- package/agents/loki/personality.md +108 -0
- package/agents/oracle/personality.md +283 -0
- package/agents/pixel/personality.md +113 -0
- package/agents/planning-hub/personality.md +320 -0
- package/agents/scribe/personality.md +251 -0
- package/agents/temper/personality.md +218 -0
- package/bin/cli.js +375 -0
- package/bin/dashboard/api/agents.js +333 -0
- package/bin/dashboard/api/dispatch.js +483 -0
- package/bin/dashboard/api/tasks.js +416 -0
- package/bin/dashboard/frontend/index.html +13 -0
- package/bin/dashboard/frontend/package.json +16 -0
- package/bin/dashboard/frontend/src/App.svelte +222 -0
- package/bin/dashboard/frontend/src/app.css +1777 -0
- package/bin/dashboard/frontend/src/lib/components/AgentCard.svelte +60 -0
- package/bin/dashboard/frontend/src/lib/components/AgentsPanel.svelte +57 -0
- package/bin/dashboard/frontend/src/lib/components/DispatchModal.svelte +180 -0
- package/bin/dashboard/frontend/src/lib/components/Footer.svelte +33 -0
- package/bin/dashboard/frontend/src/lib/components/Header.svelte +84 -0
- package/bin/dashboard/frontend/src/lib/components/IssueCard.svelte +33 -0
- package/bin/dashboard/frontend/src/lib/components/IssuesPanel.svelte +73 -0
- package/bin/dashboard/frontend/src/lib/components/KeyboardShortcutsModal.svelte +108 -0
- package/bin/dashboard/frontend/src/lib/components/MobileTabs.svelte +52 -0
- package/bin/dashboard/frontend/src/lib/components/NotificationCard.svelte +60 -0
- package/bin/dashboard/frontend/src/lib/components/NotificationsPanel.svelte +44 -0
- package/bin/dashboard/frontend/src/lib/components/TaskCard.svelte +63 -0
- package/bin/dashboard/frontend/src/lib/components/TasksPanel.svelte +82 -0
- package/bin/dashboard/frontend/src/lib/components/Toast.svelte +45 -0
- package/bin/dashboard/frontend/src/lib/stores/agents.js +34 -0
- package/bin/dashboard/frontend/src/lib/stores/issues.js +54 -0
- package/bin/dashboard/frontend/src/lib/stores/notifications.js +48 -0
- package/bin/dashboard/frontend/src/lib/stores/tasks.js +63 -0
- package/bin/dashboard/frontend/src/lib/stores/theme.js +33 -0
- package/bin/dashboard/frontend/src/lib/stores/toast.js +35 -0
- package/bin/dashboard/frontend/src/lib/stores/ui.js +25 -0
- package/bin/dashboard/frontend/src/lib/stores/voice.js +275 -0
- package/bin/dashboard/frontend/src/lib/stores/websocket.js +295 -0
- package/bin/dashboard/frontend/src/lib/utils/api.js +101 -0
- package/bin/dashboard/frontend/src/lib/utils/formatters.js +54 -0
- package/bin/dashboard/frontend/src/main.js +9 -0
- package/bin/dashboard/frontend/svelte.config.js +5 -0
- package/bin/dashboard/frontend/vite.config.js +20 -0
- package/bin/dashboard/public/assets/index-DnfVj9Ce.css +1 -0
- package/bin/dashboard/public/assets/index-Ze5h0kXQ.js +2 -0
- package/bin/dashboard/public/index.html +14 -0
- package/bin/dashboard/server.js +566 -0
- package/bin/forge-daemon.sh +463 -0
- package/bin/forge-setup.sh +645 -0
- package/bin/forge-spawn.sh +164 -0
- package/bin/forge.cmd +83 -0
- package/bin/forge.sh +533 -0
- package/bin/lib/agents.sh +177 -0
- package/bin/lib/colors.sh +44 -0
- package/bin/lib/config.sh +347 -0
- package/bin/lib/constants.sh +241 -0
- package/bin/lib/daemon/display.sh +128 -0
- package/bin/lib/daemon/notifications.sh +263 -0
- package/bin/lib/daemon/routing.sh +77 -0
- package/bin/lib/daemon/state.sh +115 -0
- package/bin/lib/daemon/sync.sh +95 -0
- package/bin/lib/database.sh +310 -0
- package/bin/lib/heimdall-setup.js +113 -0
- package/bin/lib/heimdall.js +265 -0
- package/bin/lib/json.sh +264 -0
- package/bin/lib/terminal.js +451 -0
- package/bin/lib/util.sh +126 -0
- package/bin/lib/vcs.js +349 -0
- package/config/agent-manifest.yaml +203 -0
- package/config/agents.json +168 -0
- package/config/task-template.md +159 -0
- package/config/task-types.yaml +106 -0
- package/context/agent-status/aegis.json +7 -0
- package/context/agent-status/anvil.json +7 -0
- package/context/agent-status/architect.json +7 -0
- package/context/agent-status/crucible.json +7 -0
- package/context/agent-status/ember.json +7 -0
- package/context/agent-status/furnace.json +7 -0
- package/context/agent-status/loki.json +7 -0
- package/context/agent-status/oracle.json +7 -0
- package/context/agent-status/pixel.json +7 -0
- package/context/agent-status/planning-hub.json +7 -0
- package/context/agent-status/scribe.json +7 -0
- package/context/agent-status/temper.json +7 -0
- package/context/feature-brainstorm.md +426 -0
- package/context/forge-state.yaml +19 -0
- package/context/modern-conventions.md +129 -0
- package/context/project-context-template.md +122 -0
- package/context/project-context.md +122 -0
- package/docs/TODO.md +150 -0
- package/docs/agents.md +409 -0
- package/docs/architecture/decisions/ADR-001-daemon-modularization.md +122 -0
- package/docs/architecture/vibe-lab-integration.md +684 -0
- package/docs/architecture.md +194 -0
- package/docs/bmad-gap-analysis-2026-03-31.md +444 -0
- package/docs/cleanup-workflow.md +329 -0
- package/docs/commands.md +451 -0
- package/docs/dashboard-mockup.html +989 -0
- package/docs/getting-started.md +261 -0
- package/docs/integration/forge-ownership-policy.md +112 -0
- package/docs/npm-publishing.md +132 -0
- package/docs/roadmap-2026.md +519 -0
- package/docs/security.md +144 -0
- package/docs/wireframes/dashboard-mvp.md +1164 -0
- package/docs/workflows/README.md +32 -0
- package/docs/workflows/azure-devops.md +108 -0
- package/docs/workflows/bitbucket.md +104 -0
- package/docs/workflows/git-only.md +130 -0
- package/docs/workflows/gitea.md +168 -0
- package/docs/workflows/github.md +103 -0
- package/docs/workflows/gitlab.md +105 -0
- package/docs/workflows.md +454 -0
- package/package.json +73 -0
- package/tasks/completed/ARCH-001-duplicate-agent-config.md +121 -0
- package/tasks/completed/ARCH-002-mixed-bash-node-implementation.md +88 -0
- package/tasks/completed/ARCH-003-worker-loop-hook-duplication.md +77 -0
- package/tasks/completed/ARCH-009-test-organization.md +78 -0
- package/tasks/completed/ARCH-011-jq-vs-nodejs-json.md +94 -0
- package/tasks/completed/ARCH-012-tmp-files-in-root.md +71 -0
- package/tasks/completed/ARCH-013-exit-code-constants.md +65 -0
- package/tasks/completed/ARCH-014-sed-incompatibility.md +96 -0
- package/tasks/completed/ARCH-015-docs-todo-tracking.md +83 -0
- package/tasks/completed/BUG-dash-001-tasks-filter-error.md +31 -0
- package/tasks/completed/BUG-dash-002-agents-unknown.md +41 -0
- package/tasks/completed/CLEAN-001.md +38 -0
- package/tasks/completed/CLEAN-002.md +43 -0
- package/tasks/completed/CLEAN-003.md +47 -0
- package/tasks/completed/CLEAN-004.md +56 -0
- package/tasks/completed/CLEAN-005.md +75 -0
- package/tasks/completed/CLEAN-006.md +47 -0
- package/tasks/completed/CLEAN-007.md +34 -0
- package/tasks/completed/CLEAN-008.md +49 -0
- package/tasks/completed/CLEAN-012.md +58 -0
- package/tasks/completed/CLEAN-013.md +45 -0
- package/tasks/completed/FEATURE-001a-dashboard-wireframes.md +162 -0
- package/tasks/completed/IMPL-007a-daemon-notifications-module.md +82 -0
- package/tasks/completed/IMPL-007b-daemon-sync-module.md +71 -0
- package/tasks/completed/IMPL-007c-daemon-state-module.md +80 -0
- package/tasks/completed/IMPL-007d-daemon-routing-module.md +77 -0
- package/tasks/completed/IMPL-007e-daemon-display-module.md +77 -0
- package/tasks/completed/IMPL-007f-daemon-integration.md +124 -0
- package/tasks/completed/PLAT-1-heimdall.md +420 -0
- package/tasks/completed/SEC-001-sql-injection-fix.md +58 -0
- package/tasks/completed/SEC-002-notification-injection-fix.md +45 -0
- package/tasks/completed/SEC-003-eval-injection-fix.md +54 -0
- package/tasks/completed/SEC-004-pid-race-condition-fix.md +49 -0
- package/tasks/completed/SEC-005-worker-loop-path-fix.md +51 -0
- package/tasks/completed/SEC-006-eval-agent-names.md +55 -0
- package/tasks/completed/SEC-007-spawn-escaping.md +67 -0
- package/tasks/completed/TASK-DASH-001-server-infrastructure.md +185 -0
- package/tasks/completed/TASK-anvil-001-dashboard-frontend.md +133 -0
- package/tasks/completed/review-bmad-aegis.md +89 -0
- package/tasks/completed/review-bmad-anvil.md +80 -0
- package/tasks/completed/review-bmad-crucible.md +81 -0
- package/tasks/completed/review-bmad-ember.md +90 -0
- package/tasks/completed/review-bmad-furnace.md +79 -0
- package/tasks/completed/review-bmad-pixel.md +82 -0
- package/tasks/completed/review-bmad-scribe.md +92 -0
- package/tasks/completed/review-bmad-sentinel.md +83 -0
- package/tasks/pending/ARCH-004-git-bash-detection-duplication.md +72 -0
- package/tasks/pending/ARCH-005-missing-src-directory.md +95 -0
- package/tasks/pending/ARCH-006-task-template-location.md +64 -0
- package/tasks/pending/ARCH-008-forge-master-vs-hub.md +81 -0
- package/tasks/pending/ARCH-010-missing-index-files.md +84 -0
- package/tasks/pending/CLEAN-009.md +31 -0
- package/tasks/pending/CLEAN-010.md +30 -0
- package/tasks/pending/CLEAN-011.md +30 -0
- package/tasks/pending/CLEAN-014.md +32 -0
- package/tasks/pending/DESIGN-dash-001-layout-review.md +45 -0
- package/tasks/pending/FEATURE-001-dashboard-mvp.md +268 -0
- package/tasks/review/ARCH-007-daemon-monolith.md +162 -0
- package/tasks/review/bmad-review-aegis.md +349 -0
- package/tasks/review/bmad-review-anvil.md +259 -0
- package/tasks/review/bmad-review-crucible.md +277 -0
- package/tasks/review/bmad-review-ember.md +307 -0
- package/tasks/review/bmad-review-furnace.md +285 -0
- package/tasks/review/bmad-review-pixel.md +329 -0
- package/tasks/review/bmad-review-scribe.md +361 -0
- package/tasks/review/bmad-review-sentinel.md +242 -0
- package/tasks/review/task-001.md +78 -0
|
@@ -0,0 +1,519 @@
|
|
|
1
|
+
# Vibe Forge Integration Roadmap — 2026
|
|
2
|
+
|
|
3
|
+
**Generated:** 2026-03-31
|
|
4
|
+
**Based on:** BMAD gap analysis (9 agent reports), Claude Code source patterns, vibe-lab exploration
|
|
5
|
+
**Current version:** Vibe Forge 0.4.0
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## How to Read This
|
|
10
|
+
|
|
11
|
+
Work is organized into **parallel workstreams** — groups of tasks that have no dependencies on each other and can run simultaneously — and **sequential chains** where earlier items unlock later ones.
|
|
12
|
+
|
|
13
|
+
**Priority tiers:**
|
|
14
|
+
- **Tier 0:** Security fixes — do these before any other work
|
|
15
|
+
- **Tier 1:** High-value, low-risk improvements — do these next sprint
|
|
16
|
+
- **Tier 2:** Framework maturity — do these over the following 2-3 sprints
|
|
17
|
+
- **Tier 3:** Strategic expansion — larger initiatives, plan carefully
|
|
18
|
+
|
|
19
|
+
**Effort legend:** `XS` (<2h) | `S` (half-day) | `M` (1-2 days) | `L` (3-5 days) | `XL` (1+ week)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Tier 0: Security (Do First, Can Parallelize)
|
|
24
|
+
|
|
25
|
+
These are independent of each other and should all be done before any feature work. A compromised CI pipeline or RCE vector outweighs any feature benefit.
|
|
26
|
+
|
|
27
|
+
### T0-1: Fix `design` Alias Collision `[XS]`
|
|
28
|
+
**Source:** CRIT-3
|
|
29
|
+
**Location:** `config/agents.json`
|
|
30
|
+
Both `architect` and `pixel` claim `"design"`. Pixel silently wins. `forge spawn design` spawns the wrong agent.
|
|
31
|
+
|
|
32
|
+
**Fix:** Remove `"design"` from `architect.aliases`. Architect has `"arch"` already.
|
|
33
|
+
|
|
34
|
+
**Parallel with:** T0-2, T0-3
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
### T0-2: Eliminate `eval` of Node-Generated Shell Code `[M]`
|
|
39
|
+
**Source:** CRIT-2 (Sentinel, Aegis)
|
|
40
|
+
**Location:** `bin/lib/config.sh:142`
|
|
41
|
+
|
|
42
|
+
`load_agents_from_json()` runs Node.js, captures its stdout (shell assignments), then `eval`s it. Any bug in `escapeForShell()` or a compromised `agents.json` is RCE.
|
|
43
|
+
|
|
44
|
+
**Fix:** During `forge init` (or on first config load), write a static `agents.env` file with validated variable assignments. Source that file instead of eval-ing dynamically. Node.js only runs to rebuild the file when `agents.json` changes (compare mtime).
|
|
45
|
+
|
|
46
|
+
**Parallel with:** T0-1, T0-3
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
### T0-3: Add Pre-commit Hook Infrastructure `[S]`
|
|
51
|
+
**Source:** CRIT-4 (Crucible)
|
|
52
|
+
**Why now:** Prevents any code from entering main without basic gates. Low effort, high protection.
|
|
53
|
+
|
|
54
|
+
**Fix:** Add a minimal `.husky/pre-commit` that runs:
|
|
55
|
+
1. `node --check bin/cli.js` (syntax only — already in CI)
|
|
56
|
+
2. `npm test` if tests exist and pass in <30s
|
|
57
|
+
3. `shellcheck bin/*.sh` for any modified shell files
|
|
58
|
+
|
|
59
|
+
**Parallel with:** T0-1, T0-2
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## Tier 1: High-Value Quick Wins
|
|
64
|
+
|
|
65
|
+
These are largely independent. All can be worked in parallel once Tier 0 is done.
|
|
66
|
+
|
|
67
|
+
### Workstream A: Quality Enforcement
|
|
68
|
+
|
|
69
|
+
#### T1-A1: Numbered Acceptance Criteria Enforcement `[S]`
|
|
70
|
+
**Source:** Crucible, task-template.md rewrite (done)
|
|
71
|
+
The task template now has numbered ACs. Next: Sentinel's review checklist should explicitly verify each numbered AC passes before approving.
|
|
72
|
+
|
|
73
|
+
Add to Sentinel's personality: "When reviewing, enumerate each AC 1..N and confirm YES/NO/PARTIAL with evidence. A PR cannot be approved unless all ACs are YES."
|
|
74
|
+
|
|
75
|
+
#### T1-A2: Definition of Done Gate in Task Flow `[M]`
|
|
76
|
+
**Source:** CRIT-4 (Crucible)
|
|
77
|
+
Tasks move to `review/` with the DoD checklist in the template. Sentinel should be instructed to reject PRs where `ready_for_review: false` in the completion YAML or where DoD checkboxes are unchecked.
|
|
78
|
+
|
|
79
|
+
Update Sentinel personality + add forge-daemon verification step: scan task file for `ready_for_review: false` before notifying review queue.
|
|
80
|
+
|
|
81
|
+
#### T1-A3: HALT Conditions in All Agent Personalities `[M]`
|
|
82
|
+
**Source:** Furnace, Sentinel
|
|
83
|
+
Agents must know when to stop and escalate rather than improvise or self-approve.
|
|
84
|
+
|
|
85
|
+
Add to every worker agent personality (Anvil, Furnace, Crucible, Ember, Aegis, Pixel, Scribe):
|
|
86
|
+
```
|
|
87
|
+
**When to STOP and write to tasks/attention/:**
|
|
88
|
+
- Required package not in project (get approval before adding)
|
|
89
|
+
- 3 consecutive test failures on the same test
|
|
90
|
+
- Acceptance criteria are ambiguous or contradictory
|
|
91
|
+
- Schema or migration would affect live data
|
|
92
|
+
- Security concern (escalate to Aegis)
|
|
93
|
+
- Your confidence is low — stopping is correct
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### Workstream B: Developer Experience
|
|
99
|
+
|
|
100
|
+
#### T1-B1: Fix README — Remove Non-Existent Agents `[XS]`
|
|
101
|
+
**Source:** Pixel (HIGH-9)
|
|
102
|
+
README references Sage, Oracle, and Quartermaster which do not exist in `agents.json`. Creates confusion for new users trying to spawn these agents.
|
|
103
|
+
|
|
104
|
+
**Fix:** Audit README against `agents.json` canonical names. Remove all references to agents that don't exist. Update examples to use real aliases.
|
|
105
|
+
|
|
106
|
+
#### T1-B2: Alias Collision Detection in CI `[S]`
|
|
107
|
+
**Source:** forge doctor (done)
|
|
108
|
+
`forge doctor` now detects alias collisions at runtime. Next: add the same check to CI so it catches regressions.
|
|
109
|
+
|
|
110
|
+
Add a `node -e "..."` step to `.github/workflows/ci.yml` that reads `agents.json` and exits 1 if any alias maps to two different canonical agents.
|
|
111
|
+
|
|
112
|
+
#### T1-B3: `forge init` Validates `agents.json` on Setup `[XS]`
|
|
113
|
+
**Source:** Ember
|
|
114
|
+
`forge init` should run the alias collision check before completing setup. If collisions exist, warn loudly and offer to fix them.
|
|
115
|
+
|
|
116
|
+
#### T1-B4: Session Anti-Pattern Guards in Hub Personality `[S]`
|
|
117
|
+
**Source:** Sentinel
|
|
118
|
+
Planning Hub must not lie about task completion or stop sessions prematurely. Add explicit prohibitions to Hub personality:
|
|
119
|
+
|
|
120
|
+
- "Never mark a task complete without reading the completion YAML in the task file."
|
|
121
|
+
- "Never end your session without checking for pending tasks."
|
|
122
|
+
- "If a task is in `in-progress/` with no recent activity, flag it to the user."
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
### Workstream C: Task System Improvements
|
|
127
|
+
|
|
128
|
+
#### T1-C1: Epic/Story Hierarchy Directory Structure `[M]`
|
|
129
|
+
**Source:** HIGH-1, BMAD comparison
|
|
130
|
+
BMAD's epic → story → task tree is its most powerful planning tool. Vibe Forge has tasks but no hierarchy above them.
|
|
131
|
+
|
|
132
|
+
**Fix:** Create `specs/epics/` directory with an epic template. Update task-template to reference parent epic via `specs/epics/{EPIC_ID}.md`. Hub should create epics first, then decompose them into tasks. No need to replicate all of BMAD's planning phases — just the hierarchy.
|
|
133
|
+
|
|
134
|
+
Epic template fields: `id`, `title`, `goal`, `success_metrics`, `stories[]`, `status`.
|
|
135
|
+
|
|
136
|
+
#### T1-C2: `forge-state.yaml` Sprint Summary `[M]`
|
|
137
|
+
**Source:** HIGH-4 (missing sprint-status.yaml equivalent)
|
|
138
|
+
BMAD's `sprint-status.yaml` gives a single-file answer to "what is the team working on right now?" Vibe Forge's `forge-state.yaml` exists but is often empty.
|
|
139
|
+
|
|
140
|
+
**Fix:** Hub should update `context/forge-state.yaml` on startup and after completing each task batch:
|
|
141
|
+
```yaml
|
|
142
|
+
sprint: null
|
|
143
|
+
last_updated: 2026-03-31T12:00:00Z
|
|
144
|
+
active_tasks:
|
|
145
|
+
- id: task-042
|
|
146
|
+
title: "Add login form"
|
|
147
|
+
assigned_to: anvil
|
|
148
|
+
status: in-progress
|
|
149
|
+
pending_count: 7
|
|
150
|
+
completed_today: 3
|
|
151
|
+
blocked: []
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
#### T1-C3: `tasks/attention/` Escalation Routing `[S]`
|
|
155
|
+
**Source:** Furnace
|
|
156
|
+
The `attention/` directory exists in the task template but there are no instructions for what happens to files placed there. Hub should monitor it and surface items to the user on startup.
|
|
157
|
+
|
|
158
|
+
Add to Hub's startup behavior: check `tasks/attention/` and display any files with a summary. These are agent escalations that require human input.
|
|
159
|
+
|
|
160
|
+
---
|
|
161
|
+
|
|
162
|
+
### Workstream D: Daemon & Infrastructure
|
|
163
|
+
|
|
164
|
+
#### T1-D1: Fix Daemon Cross-Platform Date Parsing `[S]`
|
|
165
|
+
**Source:** Ember (BUG-daemon-001)
|
|
166
|
+
Daemon uses `date -d` which is GNU/Linux only. macOS uses `date -j -f`. This silently breaks all time-based features on macOS.
|
|
167
|
+
|
|
168
|
+
**Fix:** Use Node.js `new Date(str)` for all date operations in daemon scripts instead of shell `date` command. Or add a platform detection branch.
|
|
169
|
+
|
|
170
|
+
#### T1-D2: Fix `stat` Portability in Daemon `[XS]`
|
|
171
|
+
**Source:** Ember (BUG-daemon-002)
|
|
172
|
+
Daemon uses `stat -c '%Y'` (Linux) vs `stat -f '%m'` (macOS) for file modification times.
|
|
173
|
+
|
|
174
|
+
**Fix:** Same as above — move file mtime operations to Node.js `fs.statSync(f).mtimeMs`.
|
|
175
|
+
|
|
176
|
+
#### T1-D3: Wire Up `db_record_status_history()` `[S]`
|
|
177
|
+
**Source:** Ember
|
|
178
|
+
`db_record_status_history()` exists in the daemon but is never called. The `status_history` table is always empty. This means the dashboard's history features show no data.
|
|
179
|
+
|
|
180
|
+
**Fix:** Call `db_record_status_history()` whenever a task moves between directories. The daemon's file watcher should be the trigger point.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Tier 2: Framework Maturity
|
|
185
|
+
|
|
186
|
+
These are larger features. Some have dependencies. Do in the order shown within each workstream.
|
|
187
|
+
|
|
188
|
+
### Workstream E: Planning & Requirements Phase
|
|
189
|
+
|
|
190
|
+
These items are sequential — each builds on the last.
|
|
191
|
+
|
|
192
|
+
#### T2-E1: Context Directory Bootstrap `[S]`
|
|
193
|
+
**Dependency:** None (prerequisite for E2, E3)
|
|
194
|
+
Ensure `context/` directory exists with documented files:
|
|
195
|
+
- `project-context.md` — what this project is, who the users are, tech stack
|
|
196
|
+
- `architecture.md` — key decisions, patterns, guardrails
|
|
197
|
+
- `agent-overrides/` — per-agent customization files (see T2-E3)
|
|
198
|
+
|
|
199
|
+
`forge init` should create these with prompts for key fields.
|
|
200
|
+
|
|
201
|
+
#### T2-E2: Hub Planning Mode `[L]`
|
|
202
|
+
**Dependency:** T1-C1 (epic hierarchy)
|
|
203
|
+
**Source:** HIGH-1, BMAD Phase 1-3
|
|
204
|
+
|
|
205
|
+
Hub currently jumps straight to task assignment. Add a "planning mode" that Hub enters at project start (or when `specs/epics/` is empty):
|
|
206
|
+
|
|
207
|
+
1. **Discovery:** Ask the user to describe the goal in plain language
|
|
208
|
+
2. **Decomposition:** Break into epics, each with a clear success metric
|
|
209
|
+
3. **Tasking:** Decompose each epic into tasks, assign types and agent targets
|
|
210
|
+
4. **Commit:** Write epic files and task files, then hand off to workers
|
|
211
|
+
|
|
212
|
+
This is the single biggest gap vs BMAD. Hub is a great executor — it needs to also be a planner.
|
|
213
|
+
|
|
214
|
+
#### T2-E3: Per-Project Agent Customization `[M]`
|
|
215
|
+
**Dependency:** T2-E1
|
|
216
|
+
**Source:** HIGH-7, BMAD `.customize.yaml`
|
|
217
|
+
|
|
218
|
+
BMAD agents read a `.customize.yaml` that overrides their behavior for the specific project (tech stack, conventions, forbidden patterns). Vibe Forge agents receive only their personality file — no per-project tuning.
|
|
219
|
+
|
|
220
|
+
**Fix:** Hub reads `context/agent-overrides/<agent>.md` and appends it to the agent's system prompt when spawning. Each override file is a short markdown of project-specific rules.
|
|
221
|
+
|
|
222
|
+
---
|
|
223
|
+
|
|
224
|
+
### Workstream F: Token & Session Management
|
|
225
|
+
|
|
226
|
+
#### T2-F1: Token Budget Warnings `[M]`
|
|
227
|
+
**Source:** HIGH-3 (Sentinel)
|
|
228
|
+
No agent knows how much context it has consumed or when it's approaching its limit. This leads to silent context truncation and degraded quality near session end.
|
|
229
|
+
|
|
230
|
+
**Fix:** Add to daemon: when an agent's session log shows >100k tokens (estimate from task file sizes and conversation length), emit a notification to `tasks/attention/` with a suggestion to `/compact` or start a new session.
|
|
231
|
+
|
|
232
|
+
Longer term: workers should self-monitor. Add to worker personality: "If you notice your responses becoming repetitive or forgetting earlier decisions, immediately use /compact-context before continuing."
|
|
233
|
+
|
|
234
|
+
#### T2-F2: Session Handoff Protocol `[M]`
|
|
235
|
+
**Dependency:** T2-F1
|
|
236
|
+
**Source:** HIGH-3
|
|
237
|
+
|
|
238
|
+
When a worker hits context limits mid-task, it should write a handoff file before ending:
|
|
239
|
+
```yaml
|
|
240
|
+
# tasks/handoffs/task-042-handoff.md
|
|
241
|
+
task_id: task-042
|
|
242
|
+
agent: anvil
|
|
243
|
+
handoff_reason: context_limit
|
|
244
|
+
completed_subtasks: [1.1, 1.2]
|
|
245
|
+
remaining_subtasks: [1.3, 2.1]
|
|
246
|
+
last_state: "login form markup done, need to wire submit handler"
|
|
247
|
+
context_dump: |
|
|
248
|
+
Key files touched: src/components/Login.tsx
|
|
249
|
+
Pattern used: React Hook Form with Zod validation
|
|
250
|
+
Next: add onSubmit handler calling POST /api/auth/login
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Next agent picks up the handoff instead of starting from scratch.
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
### Workstream G: Dashboard & Observability
|
|
258
|
+
|
|
259
|
+
#### T2-G1: Fix Dashboard Bugs `[M]`
|
|
260
|
+
**Source:** Pixel (BUG-dash-001, BUG-dash-002)
|
|
261
|
+
|
|
262
|
+
Known bugs in the Svelte dashboard:
|
|
263
|
+
- BUG-dash-001: Task counts don't update in real time — WebSocket events not triggering reactive updates
|
|
264
|
+
- BUG-dash-002: "Completed" column shows all-time tasks, not just current session
|
|
265
|
+
|
|
266
|
+
Fix both before adding any new dashboard features.
|
|
267
|
+
|
|
268
|
+
#### T2-G2: Agent Activity Feed `[M]`
|
|
269
|
+
**Dependency:** T1-D3 (status history wired up)
|
|
270
|
+
**Source:** Pixel
|
|
271
|
+
|
|
272
|
+
Add a live activity feed to the dashboard: a chronological stream of agent events (task started, task completed, escalation filed, error). Sourced from `status_history` table (once T1-D3 is fixed).
|
|
273
|
+
|
|
274
|
+
This replaces the need to `tail` log files to understand what the forge is doing.
|
|
275
|
+
|
|
276
|
+
#### T2-G3: In-Session Agent Menu `[M]`
|
|
277
|
+
**Source:** HIGH-5 (Sentinel)
|
|
278
|
+
Hub has no way to show "which agents are currently active" during a session. Add a `/agents` command to Hub that lists all agents with their current task assignment and status (idle, working, blocked).
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
### Workstream H: Architecture Cleanup
|
|
283
|
+
|
|
284
|
+
#### T2-H1: Consolidate forge-master / planning-hub `[M]`
|
|
285
|
+
**Source:** Sentinel
|
|
286
|
+
There are references to both "forge-master" and "planning-hub" in personality files and docs. They are the same role. Standardize on one name throughout. Recommended: keep "planning-hub" since it's the canonical agent name in `agents.json`.
|
|
287
|
+
|
|
288
|
+
#### T2-H2: Daemon Dependency Resolution `[L]`
|
|
289
|
+
**Source:** Furnace (HIGH-2)
|
|
290
|
+
The daemon routes tasks to agents based on `type` field only. Tasks with `blocked_by: [task-041]` are not checked for blockers before assignment — a blocked task can be dispatched before its dependency completes.
|
|
291
|
+
|
|
292
|
+
**Fix:** When selecting a task from `tasks/pending/`, daemon should:
|
|
293
|
+
1. Check `blocked_by` list in frontmatter
|
|
294
|
+
2. Verify each blocking task is in `tasks/completed/` or `tasks/merged/`
|
|
295
|
+
3. Only dispatch if all blockers are resolved
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Tier 3: Strategic Expansion
|
|
300
|
+
|
|
301
|
+
Large initiatives. Plan before building. Some depend on Tier 2 completion.
|
|
302
|
+
|
|
303
|
+
### T3-1: Vibe Lab Integration `[XL]`
|
|
304
|
+
**Dependency:** T2-F2 (session handoff protocol), T2-G2 (activity feed)
|
|
305
|
+
|
|
306
|
+
This is the highest-leverage strategic opportunity. Vibe Lab is a mature Python pipeline (Sentinel service, 9 specialized agents, SQLite pipeline.db, dashboard, MCP server) that handles the CI/CD and release pipeline. Vibe Forge is the development session layer. They are complementary.
|
|
307
|
+
|
|
308
|
+
**Integration opportunities:**
|
|
309
|
+
|
|
310
|
+
**A. Planning Hub as Vibe Lab Story Creator**
|
|
311
|
+
Hub's planning mode (T2-E2) should be able to write stories directly to vibe-lab's sprint-status.yaml via MCP. Instead of creating local task files, Hub creates vibe-lab stories that the Sentinel service picks up and dispatches automatically.
|
|
312
|
+
|
|
313
|
+
```
|
|
314
|
+
Hub: "Okay, I've decomposed this epic into 5 stories. Creating them in vibe-lab now."
|
|
315
|
+
Hub: mcp__vibe-lab__create_story(project_path="...", id="STORY-042", ...)
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**B. Forge Daemon Reads vibe-lab Pipeline State**
|
|
319
|
+
Forge daemon currently only knows about local `tasks/` directories. When vibe-lab is present, it should also expose vibe-lab story status in the dashboard — showing the full pipeline from "story in backlog" through "released."
|
|
320
|
+
|
|
321
|
+
**C. Vibe-lab Agents Spawned via Forge**
|
|
322
|
+
Vibe Lab uses `claude -p` subprocesses for its agents. Forge's `spawn` command (which handles terminal, tab color, personality) could become the launcher for vibe-lab agents, giving them the same session management and visual identity that forge agents have.
|
|
323
|
+
|
|
324
|
+
**D. Shared Observer**
|
|
325
|
+
A single observer MCP server that both systems publish events to, enabling cross-system dashboarding. Vibe Lab already has its MCP server (`mcp__vibe-lab__*`). Forge adds its events to the same sink.
|
|
326
|
+
|
|
327
|
+
**Recommended starting point:** Integration A (Hub as story creator) is highest impact, lowest risk. Start there. Read vibe-lab's `_vibe-chain/templates/` to understand the story format, then add MCP calls to Hub.
|
|
328
|
+
|
|
329
|
+
---
|
|
330
|
+
|
|
331
|
+
### T3-2: BMAD Planning Phase Port `[XL]`
|
|
332
|
+
**Dependency:** T2-E2 (Hub planning mode)
|
|
333
|
+
|
|
334
|
+
Once Hub has a planning mode (T2-E2), extend it to implement the full BMAD analysis phase:
|
|
335
|
+
- Analyst agent: extract requirements from user input
|
|
336
|
+
- Product Manager agent: write PRDs with acceptance criteria
|
|
337
|
+
- Architect agent: produce architecture decision records
|
|
338
|
+
|
|
339
|
+
This would close the largest single gap vs BMAD. It's a significant undertaking — treat it as a separate project with its own epic.
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
### T3-3: Adversarial Review Agent `[L]`
|
|
344
|
+
**Source:** Crucible (BMAD's "adversarial" CodeRabbit pattern)
|
|
345
|
+
|
|
346
|
+
Add a review agent configured to find problems, not rubber-stamp work. Unlike Sentinel (which checks compliance), this agent actively attempts to break the implementation:
|
|
347
|
+
- Write tests designed to fail
|
|
348
|
+
- Look for edge cases the agent missed
|
|
349
|
+
- Check for security anti-patterns beyond the DoD checklist
|
|
350
|
+
- Report findings even if all ACs technically pass
|
|
351
|
+
|
|
352
|
+
This is the pattern behind BMAD's high code quality reputation.
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
### T3-4: Multi-Developer Support `[XL]`
|
|
357
|
+
**Source:** HIGH-6 (Sentinel)
|
|
358
|
+
|
|
359
|
+
Currently, Vibe Forge assumes a single developer running a single forge. Multiple developers sharing a project would have:
|
|
360
|
+
- Racing task assignments (two agents pick the same task)
|
|
361
|
+
- No coordination on which developer's instance is authoritative
|
|
362
|
+
- Dashboard only shows one developer's daemon state
|
|
363
|
+
|
|
364
|
+
This requires distributed locking (file-based or SQLite WAL), developer identity in task frontmatter, and daemon discovery across machines.
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## Parallel vs Sequential Summary
|
|
369
|
+
|
|
370
|
+
```
|
|
371
|
+
Tier 0 (all parallel):
|
|
372
|
+
T0-1: alias collision fix
|
|
373
|
+
T0-2: eliminate eval
|
|
374
|
+
T0-3: pre-commit hooks
|
|
375
|
+
|
|
376
|
+
Tier 1 (parallel workstreams, sequential within):
|
|
377
|
+
Workstream A (quality): T1-A1 → T1-A2 → T1-A3
|
|
378
|
+
Workstream B (DX): T1-B1, T1-B2, T1-B3, T1-B4 (all parallel)
|
|
379
|
+
Workstream C (tasks): T1-C1 → T1-C3, T1-C2 (independent)
|
|
380
|
+
Workstream D (daemon): T1-D1, T1-D2 (parallel), then T1-D3
|
|
381
|
+
|
|
382
|
+
Tier 2 (parallel workstreams, sequential within):
|
|
383
|
+
Workstream E (planning): T2-E1 → T2-E2 → T2-E3
|
|
384
|
+
Workstream F (tokens): T2-F1 → T2-F2
|
|
385
|
+
Workstream G (dashboard): T2-G1 → T2-G2, T2-G3 (independent)
|
|
386
|
+
Workstream H (arch): T2-H1 (independent), T2-H2 (independent)
|
|
387
|
+
|
|
388
|
+
Tier 3 (after Tier 2 gates):
|
|
389
|
+
T3-1: vibe-lab integration (start after T2-F2)
|
|
390
|
+
T3-2: BMAD planning phase (start after T2-E2)
|
|
391
|
+
T3-3: adversarial review (independent)
|
|
392
|
+
T3-4: multi-dev support (independent, large)
|
|
393
|
+
```
|
|
394
|
+
|
|
395
|
+
---
|
|
396
|
+
|
|
397
|
+
## Priority Matrix
|
|
398
|
+
|
|
399
|
+
| ID | Title | Tier | Effort | Parallel With |
|
|
400
|
+
|----|-------|------|--------|---------------|
|
|
401
|
+
| T0-1 | Fix design alias collision | 0 | XS | T0-2, T0-3 |
|
|
402
|
+
| T0-2 | Eliminate eval in config.sh | 0 | M | T0-1, T0-3 |
|
|
403
|
+
| T0-3 | Add pre-commit hooks | 0 | S | T0-1, T0-2 |
|
|
404
|
+
| T1-B1 | Fix README (remove phantom agents) | 1 | XS | All T1 |
|
|
405
|
+
| T1-B2 | Alias collision check in CI | 1 | S | All T1 |
|
|
406
|
+
| T1-B3 | forge init validates agents.json | 1 | XS | All T1 |
|
|
407
|
+
| T1-D1 | Fix daemon date parsing (macOS) | 1 | S | T1-D2 |
|
|
408
|
+
| T1-D2 | Fix stat portability in daemon | 1 | XS | T1-D1 |
|
|
409
|
+
| T1-A1 | Numbered AC enforcement in Sentinel | 1 | S | T1-B*, T1-D* |
|
|
410
|
+
| T1-C3 | attention/ escalation routing | 1 | S | All T1 |
|
|
411
|
+
| T1-B4 | Session anti-pattern guards (Hub) | 1 | S | All T1 |
|
|
412
|
+
| T1-A2 | DoD gate in task flow | 1 | M | After T1-A1 |
|
|
413
|
+
| T1-A3 | HALT conditions in all personalities | 1 | M | All T1 |
|
|
414
|
+
| T1-C1 | Epic/story hierarchy | 1 | M | T1-C2 |
|
|
415
|
+
| T1-C2 | forge-state.yaml sprint summary | 1 | M | T1-C1 |
|
|
416
|
+
| T1-D3 | Wire db_record_status_history | 1 | S | After T1-D1, T1-D2 |
|
|
417
|
+
| T2-G1 | Fix dashboard bugs | 2 | M | T2-H1, T2-F1 |
|
|
418
|
+
| T2-H1 | Consolidate forge-master/hub naming | 2 | S | T2-G1 |
|
|
419
|
+
| T2-F1 | Token budget warnings | 2 | M | T2-G1, T2-H1 |
|
|
420
|
+
| T2-E1 | Context directory bootstrap | 2 | S | T2-F1, T2-G1 |
|
|
421
|
+
| T2-F2 | Session handoff protocol | 2 | M | After T2-F1 |
|
|
422
|
+
| T2-G2 | Agent activity feed | 2 | M | After T1-D3, T2-G1 |
|
|
423
|
+
| T2-E2 | Hub planning mode | 2 | L | After T2-E1 |
|
|
424
|
+
| T2-E3 | Per-project agent customization | 2 | M | After T2-E1 |
|
|
425
|
+
| T2-G3 | In-session agent menu | 2 | M | T2-G2 |
|
|
426
|
+
| T2-H2 | Daemon dependency resolution | 2 | L | T2-E2 |
|
|
427
|
+
| T3-3 | Adversarial review agent | 3 | L | Independent |
|
|
428
|
+
| T3-1 | Vibe Lab integration | 3 | XL | After T2-F2 |
|
|
429
|
+
| T3-2 | BMAD planning phase port | 3 | XL | After T2-E2 |
|
|
430
|
+
| T3-4 | Multi-developer support | 3 | XL | Independent |
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Vibe Lab Integration Detail
|
|
435
|
+
|
|
436
|
+
Vibe Lab (`G:\dev\vibe-lab`) is a production-grade Python pipeline at **v0.20.0**:
|
|
437
|
+
|
|
438
|
+
### What vibe-lab is
|
|
439
|
+
- **Sentinel service** (Python, Windows NSSM service) — event-driven filesystem watcher, spawns Dispatcher, manages subagent processes deterministically in Python (no LLM PID management), logs to SQLite
|
|
440
|
+
- **10 specialized agents**: Story Factory, Dispatcher, Dev, Arch Review, UX Review, Code Review, Code Review Verifier, Test Runner, Release Manager, Docs
|
|
441
|
+
- **SQLite pipeline.db** — agent runs, token costs, cycle time, story metrics (100+ tests, 18 pytest files)
|
|
442
|
+
- **Hub REST API** on accserver (`https://vibe-dash.local.cogg.haus`) — stories, costs, dispatch, events
|
|
443
|
+
- **Svelte dashboard** with Kanban board (7 columns), story drawer, cost panel, agent activity
|
|
444
|
+
- **Two MCP servers**: local Sentinel MCP (`mcp__vibe-lab__*`, Python FastMCP) + remote Hub MCP (`mcp__vibe-hub__*`, Node.js)
|
|
445
|
+
- **18+ handoff types** with strict YAML frontmatter schema, validation, and deduplication
|
|
446
|
+
- **Per-story git worktrees** for true parallel execution without merge conflicts
|
|
447
|
+
|
|
448
|
+
### What vibe-lab has that vibe-forge doesn't
|
|
449
|
+
- Deterministic Python process management (SubagentManager — no LLM tracking PIDs)
|
|
450
|
+
- Token tracking and cost aggregation per agent type and per story
|
|
451
|
+
- Story cycle time metrics and full pipeline observability
|
|
452
|
+
- Per-story git worktrees (parallel execution)
|
|
453
|
+
- Formal handoff validation with schema enforcement and deduplication
|
|
454
|
+
- Severity-ranked code review with a dedicated verification pass agent
|
|
455
|
+
- Graceful shutdown, orphan detection, revision-needed back-routing
|
|
456
|
+
- Full CI/CD release pipeline with changelog, semver, and deploy steps
|
|
457
|
+
|
|
458
|
+
### What vibe-forge has that vibe-lab doesn't
|
|
459
|
+
- Agent personalities (character-driven, UX-rich sessions with icons and tab colors)
|
|
460
|
+
- `--dangerously-skip-permissions` managed startup (no repeated prompts)
|
|
461
|
+
- Windows terminal integration (new window/tab spawning with color)
|
|
462
|
+
- Ralph Loop (Stop hook worker loop) for persistent worker sessions
|
|
463
|
+
- `forge doctor` diagnostics
|
|
464
|
+
- Planning Hub as orchestrator persona
|
|
465
|
+
- Task templates with formal DoD checklists
|
|
466
|
+
|
|
467
|
+
### The integration thesis
|
|
468
|
+
Vibe Lab owns the **pipeline** (story lifecycle, review, release, CI/CD). Vibe Forge owns the **sessions** (personality, startup UX, worker loop, human-facing monitoring). They are complementary layers — Forge is where humans and agents interact; vibe-lab is where automated execution runs. Wire them so data flows between them; don't merge them.
|
|
469
|
+
|
|
470
|
+
### Near-term integration (start here): Hub as Story Creator
|
|
471
|
+
When Hub decomposes an epic into stories, it calls `mcp__vibe-lab__create_story` to register them directly in the vibe-lab pipeline:
|
|
472
|
+
|
|
473
|
+
```
|
|
474
|
+
Hub: "Decomposing epic into 3 stories. Registering in vibe-lab..."
|
|
475
|
+
Hub calls: mcp__vibe-lab__create_story(
|
|
476
|
+
project_path="G:/dev/vibe-lab",
|
|
477
|
+
id="STORY-042",
|
|
478
|
+
title="Add OAuth login",
|
|
479
|
+
status="ready-for-dev"
|
|
480
|
+
)
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
Stories created by Hub flow through the full vibe-lab review/release chain automatically. This requires Hub's planning mode (T2-E2) to exist first.
|
|
484
|
+
|
|
485
|
+
### Mid-term integration: Forge Dashboard shows Pipeline State
|
|
486
|
+
Add a panel to the forge Svelte dashboard that reads vibe-lab status via MCP:
|
|
487
|
+
|
|
488
|
+
```javascript
|
|
489
|
+
const stories = await mcp.call('mcp__vibe-lab__list_stories', {
|
|
490
|
+
project_path: 'G:/dev/vibe-lab'
|
|
491
|
+
});
|
|
492
|
+
const sentinel = await mcp.call('mcp__vibe-lab__sentinel_status', {
|
|
493
|
+
project_path: 'G:/dev/vibe-lab'
|
|
494
|
+
});
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
One dashboard showing both "what forge workers are doing" and "where the pipeline is."
|
|
498
|
+
|
|
499
|
+
### Long-term integration: forge spawn targets vibe-lab Agents
|
|
500
|
+
`forge spawn` currently targets agents in `config/agents.json`. Extend to also spawn vibe-lab agents by reading `_vibe-chain/agents/agent-N-*.md` — they'd get the same tab-color and terminal treatment as forge agents.
|
|
501
|
+
|
|
502
|
+
### MCP tools available right now
|
|
503
|
+
Both MCP servers are already registered in vibe-lab's `.mcp.json` and discoverable in any Claude Code session there:
|
|
504
|
+
|
|
505
|
+
**Sentinel MCP (local pipeline.db):**
|
|
506
|
+
- `mcp__vibe-lab__list_stories(project_path)` — all stories with status
|
|
507
|
+
- `mcp__vibe-lab__create_story(project_path, id, title, status)` — create story
|
|
508
|
+
- `mcp__vibe-lab__update_story_status(project_path, story_id, status)` — transition
|
|
509
|
+
- `mcp__vibe-lab__list_pending_handoffs(project_path)` — what's waiting
|
|
510
|
+
- `mcp__vibe-lab__sentinel_status(project_path)` — is sentinel running
|
|
511
|
+
- `mcp__vibe-lab__get_agent_stats(project_path)` — token/cost by agent
|
|
512
|
+
- `mcp__vibe-lab__get_pipeline_events(project_path, limit)` — event timeline
|
|
513
|
+
|
|
514
|
+
**Hub MCP (remote accserver DB):**
|
|
515
|
+
- `mcp__vibe-hub__get_stories(project_id, status)` — filtered story list
|
|
516
|
+
- `mcp__vibe-hub__add_issue(title, description, priority)` — file a bug
|
|
517
|
+
- `mcp__vibe-hub__add_dispatch(instruction, priority)` — trigger work
|
|
518
|
+
- `mcp__vibe-hub__get_costs(project_id)` — token spend breakdown
|
|
519
|
+
- `mcp__vibe-hub__get_active_agents(project_id)` — what's running now
|
package/docs/security.md
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
# Vibe Forge Security Documentation
|
|
2
|
+
|
|
3
|
+
This document explains security considerations and intentional design decisions in Vibe Forge.
|
|
4
|
+
|
|
5
|
+
## The `--dangerously-skip-permissions` Flag
|
|
6
|
+
|
|
7
|
+
### What It Does
|
|
8
|
+
|
|
9
|
+
When starting agents, Vibe Forge uses Claude Code's `--dangerously-skip-permissions` flag:
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
claude --dangerously-skip-permissions --system-prompt "$system_prompt" "startup"
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
This flag disables Claude Code's permission prompts for file operations, command execution, and other actions that would normally require user confirmation.
|
|
16
|
+
|
|
17
|
+
### Why We Use It
|
|
18
|
+
|
|
19
|
+
Vibe Forge is designed for **terminal-native vibe coding** - a workflow where you launch multiple AI agents that work autonomously on your codebase. The typical workflow involves:
|
|
20
|
+
|
|
21
|
+
1. Starting a Planning Hub that coordinates work
|
|
22
|
+
2. Spawning worker agents (frontend, backend, testing, etc.) in separate terminals
|
|
23
|
+
3. Agents working autonomously on assigned tasks
|
|
24
|
+
4. Human review at defined checkpoints
|
|
25
|
+
|
|
26
|
+
With permission prompts enabled, each agent would constantly interrupt for confirmation, breaking the autonomous workflow that makes Vibe Forge effective.
|
|
27
|
+
|
|
28
|
+
### Security Mitigations
|
|
29
|
+
|
|
30
|
+
We implement several security measures to offset the risks:
|
|
31
|
+
|
|
32
|
+
#### 1. Agent Whitelist Validation
|
|
33
|
+
|
|
34
|
+
All agent names go through strict whitelist validation before execution:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# bin/lib/constants.sh
|
|
38
|
+
VALID_AGENTS=("anvil" "furnace" "crucible" ...)
|
|
39
|
+
|
|
40
|
+
# bin/lib/agents.sh
|
|
41
|
+
resolve_agent() {
|
|
42
|
+
local canonical="${AGENT_ALIASES[$normalized]:-}"
|
|
43
|
+
if [[ -n "$canonical" ]]; then
|
|
44
|
+
echo "$canonical"
|
|
45
|
+
return 0
|
|
46
|
+
fi
|
|
47
|
+
return 1 # Reject unknown agents
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
This prevents command injection through agent names.
|
|
52
|
+
|
|
53
|
+
#### 2. Path Traversal Protection
|
|
54
|
+
|
|
55
|
+
Personality file paths are validated to ensure they remain within the expected directory:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
get_agent_personality_path() {
|
|
59
|
+
local real_path=$(cd "$(dirname "$personality_path")" && pwd)/$(basename "$personality_path")
|
|
60
|
+
local agents_dir=$(cd "$forge_root/agents" && pwd)
|
|
61
|
+
|
|
62
|
+
if [[ "$real_path" != "$agents_dir"/* ]]; then
|
|
63
|
+
echo "Security error: Path traversal detected" >&2
|
|
64
|
+
return 1
|
|
65
|
+
fi
|
|
66
|
+
}
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
#### 3. Safe JSON Parsing
|
|
70
|
+
|
|
71
|
+
We use Node.js for JSON parsing instead of `grep`/`cut` which could be vulnerable to injection:
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
json_get_string() {
|
|
75
|
+
node -e "
|
|
76
|
+
const fs = require('fs');
|
|
77
|
+
const data = JSON.parse(fs.readFileSync('$file', 'utf8'));
|
|
78
|
+
if (data['$key'] !== undefined) console.log(String(data['$key']));
|
|
79
|
+
"
|
|
80
|
+
}
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
#### 4. Daemon Security
|
|
84
|
+
|
|
85
|
+
The background daemon includes multiple protections:
|
|
86
|
+
|
|
87
|
+
- **Symlink protection**: Skips symlinks to prevent symlink attacks
|
|
88
|
+
- **Path validation**: Verifies destinations are within FORGE_ROOT
|
|
89
|
+
- **Atomic operations**: Uses temp files + move for safe writes
|
|
90
|
+
- **Lock files**: Prevents multiple daemon instances
|
|
91
|
+
- **Log rotation**: Bounded log growth prevents disk exhaustion
|
|
92
|
+
|
|
93
|
+
### Risks to Be Aware Of
|
|
94
|
+
|
|
95
|
+
Even with mitigations, understand these risks:
|
|
96
|
+
|
|
97
|
+
1. **AI agents can modify any file** in your project without confirmation
|
|
98
|
+
2. **AI agents can execute any command** without confirmation
|
|
99
|
+
3. **Malicious prompts** could potentially be injected if context files are compromised
|
|
100
|
+
4. **Network access** is unrestricted - agents could make API calls
|
|
101
|
+
|
|
102
|
+
### Recommendations
|
|
103
|
+
|
|
104
|
+
1. **Use in development environments only** - Don't run on production systems
|
|
105
|
+
2. **Use with version control** - Git makes it easy to review and revert changes
|
|
106
|
+
3. **Review at checkpoints** - Check agent work during task transitions
|
|
107
|
+
4. **Understand the personality files** - They define agent behavior
|
|
108
|
+
5. **Keep project context secure** - Don't include secrets in context files
|
|
109
|
+
6. **Run in isolated environments** - Consider containers for sensitive projects
|
|
110
|
+
|
|
111
|
+
### Alternative: Manual Approval Mode
|
|
112
|
+
|
|
113
|
+
If you prefer permission prompts, you can modify the agent startup in `bin/forge.sh`:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# Change this:
|
|
117
|
+
claude --dangerously-skip-permissions --system-prompt "$system_prompt" "startup"
|
|
118
|
+
|
|
119
|
+
# To this (removes the flag):
|
|
120
|
+
claude --system-prompt "$system_prompt" "startup"
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Note: This will significantly impact the autonomous workflow.
|
|
124
|
+
|
|
125
|
+
## Reporting Security Issues
|
|
126
|
+
|
|
127
|
+
If you discover a security vulnerability in Vibe Forge:
|
|
128
|
+
|
|
129
|
+
1. **Do not open a public issue**
|
|
130
|
+
2. Email security concerns to the maintainers
|
|
131
|
+
3. Include steps to reproduce
|
|
132
|
+
4. Allow time for a fix before public disclosure
|
|
133
|
+
|
|
134
|
+
## Security Checklist for Contributors
|
|
135
|
+
|
|
136
|
+
When contributing to Vibe Forge:
|
|
137
|
+
|
|
138
|
+
- [ ] Never pass user input directly to shell commands
|
|
139
|
+
- [ ] Always validate agent names against the whitelist
|
|
140
|
+
- [ ] Use safe JSON parsing (Node.js, not grep/cut)
|
|
141
|
+
- [ ] Validate file paths don't traverse outside expected directories
|
|
142
|
+
- [ ] Use atomic file operations where race conditions are possible
|
|
143
|
+
- [ ] Add tests for security-sensitive functions
|
|
144
|
+
- [ ] Document any new security considerations
|