@yemi33/minions 0.1.1
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/CHANGELOG.md +819 -0
- package/LICENSE +21 -0
- package/README.md +598 -0
- package/agents/dallas/charter.md +56 -0
- package/agents/lambert/charter.md +67 -0
- package/agents/ralph/charter.md +45 -0
- package/agents/rebecca/charter.md +57 -0
- package/agents/ripley/charter.md +47 -0
- package/bin/minions.js +467 -0
- package/config.template.json +28 -0
- package/dashboard.html +4822 -0
- package/dashboard.js +2623 -0
- package/docs/auto-discovery.md +416 -0
- package/docs/blog-first-successful-dispatch.md +128 -0
- package/docs/command-center.md +156 -0
- package/docs/demo/01-dashboard-overview.gif +0 -0
- package/docs/demo/02-command-center.gif +0 -0
- package/docs/demo/03-work-items.gif +0 -0
- package/docs/demo/04-plan-docchat.gif +0 -0
- package/docs/demo/05-prd-progress.gif +0 -0
- package/docs/demo/06-inbox-metrics.gif +0 -0
- package/docs/deprecated.json +83 -0
- package/docs/distribution.md +96 -0
- package/docs/engine-restart.md +92 -0
- package/docs/human-vs-automated.md +108 -0
- package/docs/index.html +221 -0
- package/docs/plan-lifecycle.md +140 -0
- package/docs/self-improvement.md +344 -0
- package/engine/ado-mcp-wrapper.js +42 -0
- package/engine/ado.js +383 -0
- package/engine/check-status.js +23 -0
- package/engine/cli.js +754 -0
- package/engine/consolidation.js +417 -0
- package/engine/github.js +331 -0
- package/engine/lifecycle.js +1113 -0
- package/engine/llm.js +116 -0
- package/engine/queries.js +677 -0
- package/engine/shared.js +397 -0
- package/engine/spawn-agent.js +151 -0
- package/engine.js +3227 -0
- package/minions.js +556 -0
- package/package.json +48 -0
- package/playbooks/ask.md +49 -0
- package/playbooks/build-and-test.md +155 -0
- package/playbooks/explore.md +64 -0
- package/playbooks/fix.md +57 -0
- package/playbooks/implement-shared.md +68 -0
- package/playbooks/implement.md +95 -0
- package/playbooks/plan-to-prd.md +104 -0
- package/playbooks/plan.md +99 -0
- package/playbooks/review.md +68 -0
- package/playbooks/test.md +75 -0
- package/playbooks/verify.md +190 -0
- package/playbooks/work-item.md +74 -0
package/docs/index.html
ADDED
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>Minions — Multi-Agent AI Dev Team</title>
|
|
7
|
+
<meta name="description" content="5 autonomous AI agents, one engine, one dashboard. Minions orchestrates Claude-powered agents to plan, implement, review, and ship code autonomously.">
|
|
8
|
+
<style>
|
|
9
|
+
:root { --bg: #0d1117; --surface: #161b22; --border: #30363d; --text: #c9d1d9; --muted: #8b949e; --blue: #58a6ff; --green: #3fb950; --yellow: #d29922; --red: #f85149; --purple: #bc8cff; }
|
|
10
|
+
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
11
|
+
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background: var(--bg); color: var(--text); line-height: 1.6; }
|
|
12
|
+
|
|
13
|
+
/* Hero */
|
|
14
|
+
.hero { text-align: center; padding: 80px 20px 60px; }
|
|
15
|
+
.hero h1 { font-size: 3.5em; color: var(--blue); margin-bottom: 12px; letter-spacing: -1px; }
|
|
16
|
+
.hero h1 span { color: var(--text); }
|
|
17
|
+
.hero .tagline { font-size: 1.3em; color: var(--muted); max-width: 600px; margin: 0 auto 32px; }
|
|
18
|
+
.hero-badges { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; margin-bottom: 32px; }
|
|
19
|
+
.hero-badge { display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; border-radius: 20px; font-size: 13px; font-weight: 600; border: 1px solid var(--border); background: var(--surface); }
|
|
20
|
+
.hero-badge.green { color: var(--green); border-color: rgba(63,185,80,0.3); }
|
|
21
|
+
.hero-badge.blue { color: var(--blue); border-color: rgba(88,166,255,0.3); }
|
|
22
|
+
.hero-badge.yellow { color: var(--yellow); border-color: rgba(210,153,34,0.3); }
|
|
23
|
+
.hero-badge.purple { color: var(--purple); border-color: rgba(188,140,255,0.3); }
|
|
24
|
+
.cta { display: inline-flex; gap: 12px; flex-wrap: wrap; justify-content: center; }
|
|
25
|
+
.cta a { padding: 12px 28px; border-radius: 8px; font-weight: 600; font-size: 15px; text-decoration: none; transition: all 0.2s; }
|
|
26
|
+
.cta-primary { background: var(--blue); color: var(--bg); }
|
|
27
|
+
.cta-primary:hover { background: #79c0ff; }
|
|
28
|
+
.cta-secondary { background: var(--surface); color: var(--text); border: 1px solid var(--border); }
|
|
29
|
+
.cta-secondary:hover { border-color: var(--blue); color: var(--blue); }
|
|
30
|
+
|
|
31
|
+
/* Container */
|
|
32
|
+
.container { max-width: 1100px; margin: 0 auto; padding: 0 20px; }
|
|
33
|
+
|
|
34
|
+
/* Agents strip */
|
|
35
|
+
.agents-strip { display: flex; justify-content: center; gap: 24px; padding: 40px 20px; flex-wrap: wrap; }
|
|
36
|
+
.agent-pill { display: flex; align-items: center; gap: 8px; padding: 10px 18px; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; }
|
|
37
|
+
.agent-pill .emoji { font-size: 1.4em; }
|
|
38
|
+
.agent-pill .name { font-weight: 700; color: var(--text); font-size: 14px; }
|
|
39
|
+
.agent-pill .role { color: var(--muted); font-size: 12px; }
|
|
40
|
+
|
|
41
|
+
/* Features grid */
|
|
42
|
+
.features { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 16px; padding: 40px 0; }
|
|
43
|
+
.feature { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 24px; }
|
|
44
|
+
.feature h3 { color: var(--blue); font-size: 1em; margin-bottom: 6px; }
|
|
45
|
+
.feature p { color: var(--muted); font-size: 13px; line-height: 1.5; }
|
|
46
|
+
|
|
47
|
+
/* Scenario sections */
|
|
48
|
+
.scenario { margin: 60px 0; }
|
|
49
|
+
.scenario-header { display: flex; align-items: center; gap: 14px; margin-bottom: 12px; }
|
|
50
|
+
.scenario-num { background: var(--blue); color: var(--bg); font-weight: 700; width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 15px; flex-shrink: 0; }
|
|
51
|
+
.scenario h2 { font-size: 1.5em; color: #f0f6fc; }
|
|
52
|
+
.scenario > p { color: var(--muted); margin-bottom: 16px; max-width: 800px; font-size: 15px; }
|
|
53
|
+
.demo-frame { border: 1px solid var(--border); border-radius: 10px; overflow: hidden; box-shadow: 0 8px 32px rgba(0,0,0,0.4); }
|
|
54
|
+
.demo-frame img { width: 100%; display: block; }
|
|
55
|
+
.demo-caption { background: var(--surface); padding: 10px 18px; font-size: 13px; color: var(--muted); border-top: 1px solid var(--border); }
|
|
56
|
+
|
|
57
|
+
/* Inline badges */
|
|
58
|
+
.badge { display: inline-block; padding: 2px 8px; border-radius: 4px; font-size: 11px; font-weight: 600; }
|
|
59
|
+
.badge-green { background: rgba(63,185,80,0.15); color: var(--green); border: 1px solid rgba(63,185,80,0.3); }
|
|
60
|
+
.badge-blue { background: rgba(88,166,255,0.15); color: var(--blue); border: 1px solid rgba(88,166,255,0.3); }
|
|
61
|
+
.badge-yellow { background: rgba(210,153,34,0.15); color: var(--yellow); border: 1px solid rgba(210,153,34,0.3); }
|
|
62
|
+
.badge-red { background: rgba(248,81,73,0.15); color: var(--red); border: 1px solid rgba(248,81,73,0.3); }
|
|
63
|
+
.hl { color: var(--green); font-weight: 600; }
|
|
64
|
+
|
|
65
|
+
/* Quick start */
|
|
66
|
+
.quickstart { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 32px; margin: 60px 0; }
|
|
67
|
+
.quickstart h2 { color: var(--blue); margin-bottom: 16px; }
|
|
68
|
+
.quickstart pre { background: var(--bg); border: 1px solid var(--border); border-radius: 8px; padding: 16px 20px; overflow-x: auto; font-size: 14px; line-height: 1.8; color: var(--green); }
|
|
69
|
+
.quickstart pre .comment { color: var(--muted); }
|
|
70
|
+
|
|
71
|
+
/* Architecture */
|
|
72
|
+
.arch { text-align: center; padding: 60px 0; }
|
|
73
|
+
.arch h2 { color: var(--blue); margin-bottom: 20px; }
|
|
74
|
+
.arch pre { background: var(--surface); border: 1px solid var(--border); border-radius: 10px; padding: 24px; display: inline-block; text-align: left; font-size: 13px; color: var(--muted); line-height: 1.7; }
|
|
75
|
+
|
|
76
|
+
/* Footer */
|
|
77
|
+
footer { text-align: center; color: #484f58; padding: 40px 0; border-top: 1px solid #21262d; margin-top: 80px; font-size: 13px; }
|
|
78
|
+
footer a { color: var(--blue); text-decoration: none; }
|
|
79
|
+
</style>
|
|
80
|
+
</head>
|
|
81
|
+
<body>
|
|
82
|
+
|
|
83
|
+
<!-- Hero -->
|
|
84
|
+
<div class="hero">
|
|
85
|
+
<h1>Minions <span>Mission Control</span></h1>
|
|
86
|
+
<p class="tagline">5 autonomous AI agents, one engine, one dashboard. Plan, implement, review, and ship code — hands-free.</p>
|
|
87
|
+
<div class="hero-badges">
|
|
88
|
+
<span class="hero-badge green">Zero Dependencies</span>
|
|
89
|
+
<span class="hero-badge blue">Claude-Powered</span>
|
|
90
|
+
<span class="hero-badge yellow">Multi-Project</span>
|
|
91
|
+
<span class="hero-badge purple">Self-Improving</span>
|
|
92
|
+
</div>
|
|
93
|
+
<div class="cta">
|
|
94
|
+
<a href="https://github.com/yemi33/minions" class="cta-primary">View on GitHub</a>
|
|
95
|
+
<a href="#quickstart" class="cta-secondary">Quick Start</a>
|
|
96
|
+
</div>
|
|
97
|
+
</div>
|
|
98
|
+
|
|
99
|
+
<!-- Agent strip -->
|
|
100
|
+
<div class="agents-strip">
|
|
101
|
+
<div class="agent-pill"><span class="emoji">🏗️</span><div><div class="name">Ripley</div><div class="role">Lead / Explorer</div></div></div>
|
|
102
|
+
<div class="agent-pill"><span class="emoji">🔧</span><div><div class="name">Dallas</div><div class="role">Engineer</div></div></div>
|
|
103
|
+
<div class="agent-pill"><span class="emoji">📊</span><div><div class="name">Lambert</div><div class="role">Analyst</div></div></div>
|
|
104
|
+
<div class="agent-pill"><span class="emoji">🧠</span><div><div class="name">Rebecca</div><div class="role">Architect</div></div></div>
|
|
105
|
+
<div class="agent-pill"><span class="emoji">⚙️</span><div><div class="name">Ralph</div><div class="role">Engineer</div></div></div>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
<!-- Features -->
|
|
109
|
+
<div class="container">
|
|
110
|
+
<div class="features">
|
|
111
|
+
<div class="feature"><h3>Autonomous Dispatch</h3><p>Engine discovers work from PRDs, PRs, and manual queue — routes to the right agent based on skills and availability.</p></div>
|
|
112
|
+
<div class="feature"><h3>Plan Lifecycle</h3><p>Plan → Review → Approve → PRD → Execute → Verify. Human-in-the-loop at every gate.</p></div>
|
|
113
|
+
<div class="feature"><h3>Git Worktree Isolation</h3><p>Each agent works in its own worktree. No conflicts, no cross-contamination, safe parallel execution.</p></div>
|
|
114
|
+
<div class="feature"><h3>Knowledge Consolidation</h3><p>Agent findings auto-consolidate into team notes and a searchable knowledge base. The minions learns as it works.</p></div>
|
|
115
|
+
<div class="feature"><h3>PR Integration</h3><p>Auto-syncs PRs from Azure DevOps and GitHub. Detects review feedback, build failures, and human comments.</p></div>
|
|
116
|
+
<div class="feature"><h3>Live Dashboard</h3><p>Real-time mission control on port 7331. Agent status, work items, PRD progress, dispatch queue, and metrics.</p></div>
|
|
117
|
+
</div>
|
|
118
|
+
|
|
119
|
+
<!-- Demo scenarios -->
|
|
120
|
+
<div class="scenario">
|
|
121
|
+
<div class="scenario-header"><div class="scenario-num">1</div><h2>Dashboard Overview</h2></div>
|
|
122
|
+
<p>All 5 agents visible with live status — <span class="hl">3 working</span>, <span class="hl">2 idle</span>. Work items sorted by priority, PRD progress with dependency tracking.</p>
|
|
123
|
+
<div class="demo-frame">
|
|
124
|
+
<img src="demo/01-dashboard-overview.gif" alt="Dashboard overview with agents working">
|
|
125
|
+
<div class="demo-caption">Scrolling through: Minions Members, Work Items (6 items across statuses), and PRD Progress (40% complete)</div>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
|
|
129
|
+
<div class="scenario">
|
|
130
|
+
<div class="scenario-header"><div class="scenario-num">2</div><h2>Command Center</h2></div>
|
|
131
|
+
<p>Natural language interface — type what you need. Create plans, dispatch work, ask questions about the codebase.</p>
|
|
132
|
+
<div class="demo-frame">
|
|
133
|
+
<img src="demo/02-command-center.gif" alt="Command Center typing">
|
|
134
|
+
<div class="demo-caption"><span class="badge badge-blue">CC</span> Typing a plan request, then switching to a one-off work item — the CC routes each to the right action</div>
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
|
|
138
|
+
<div class="scenario">
|
|
139
|
+
<div class="scenario-header"><div class="scenario-num">3</div><h2>Work Items</h2></div>
|
|
140
|
+
<p>Full lifecycle: <span class="badge badge-yellow">PENDING</span> <span class="badge badge-blue">DISPATCHED</span> <span class="badge badge-blue">IN-PR</span> <span class="badge badge-green">DONE</span> <span class="badge badge-red">FAILED</span>. Retry failed items with one click.</p>
|
|
141
|
+
<div class="demo-frame">
|
|
142
|
+
<img src="demo/03-work-items.gif" alt="Work items table">
|
|
143
|
+
<div class="demo-caption">Work items with mixed statuses — hovering over <span class="badge badge-red">Retry</span> on a failed exploration task</div>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
|
|
147
|
+
<div class="scenario">
|
|
148
|
+
<div class="scenario-header"><div class="scenario-num">4</div><h2>Plan & Doc Chat</h2></div>
|
|
149
|
+
<p>Click any plan to open its detail modal. Use the built-in doc chat to ask questions, steer direction, and revise — all before executing.</p>
|
|
150
|
+
<div class="demo-frame">
|
|
151
|
+
<img src="demo/04-plan-docchat.gif" alt="Plan detail with doc chat">
|
|
152
|
+
<div class="demo-caption">Opening a plan, viewing rendered markdown, then asking "What are the security implications?" in the doc chat</div>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
|
|
156
|
+
<div class="scenario">
|
|
157
|
+
<div class="scenario-header"><div class="scenario-num">5</div><h2>PRD Progress</h2></div>
|
|
158
|
+
<p>PRD items track dependencies and block dispatching until prerequisites complete. Progress bar shows done items.</p>
|
|
159
|
+
<div class="demo-frame">
|
|
160
|
+
<img src="demo/05-prd-progress.gif" alt="PRD progress with dependencies">
|
|
161
|
+
<div class="demo-caption">"User Authentication & Authorization" — 5 items with dependency chains, 2 done, 3 to do</div>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<div class="scenario">
|
|
166
|
+
<div class="scenario-header"><div class="scenario-num">6</div><h2>Inbox & Metrics</h2></div>
|
|
167
|
+
<p>Agent findings flow to the inbox, get consolidated by Haiku into team notes, and classified into the knowledge base. Quality metrics track per-agent performance.</p>
|
|
168
|
+
<div class="demo-frame">
|
|
169
|
+
<img src="demo/06-inbox-metrics.gif" alt="Inbox and metrics">
|
|
170
|
+
<div class="demo-caption">Inbox with agent findings, dispatch queue with completed tasks, and agent quality metrics</div>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
|
|
174
|
+
<!-- Quick Start -->
|
|
175
|
+
<div class="quickstart" id="quickstart">
|
|
176
|
+
<h2>Quick Start</h2>
|
|
177
|
+
<pre><span class="comment"># Install</span>
|
|
178
|
+
npm install -g @yemi33/minions
|
|
179
|
+
|
|
180
|
+
<span class="comment"># Initialize — scans for repos, starts engine + dashboard</span>
|
|
181
|
+
minions init
|
|
182
|
+
|
|
183
|
+
<span class="comment"># Open dashboard</span>
|
|
184
|
+
open http://localhost:7331
|
|
185
|
+
|
|
186
|
+
<span class="comment"># Use the Command Center to create your first plan</span>
|
|
187
|
+
<span class="comment"># Or add work items directly from the dashboard</span></pre>
|
|
188
|
+
</div>
|
|
189
|
+
|
|
190
|
+
<!-- Architecture -->
|
|
191
|
+
<div class="arch">
|
|
192
|
+
<h2>Architecture</h2>
|
|
193
|
+
<pre>
|
|
194
|
+
┌─────────────────────────────────────────────────────┐
|
|
195
|
+
│ ~/.minions/ (central hub) │
|
|
196
|
+
│ │
|
|
197
|
+
│ engine.js ──── 60s tick loop ────┐ │
|
|
198
|
+
│ │ │ │
|
|
199
|
+
│ discover work spawn agents poll PRs │
|
|
200
|
+
│ │ │ │ │
|
|
201
|
+
│ ┌───┴───┐ ┌──────┴──────┐ ┌──┴───┐ │
|
|
202
|
+
│ │ PRDs │ │ Worktrees │ │ ADO │ │
|
|
203
|
+
│ │ Items │ │ (isolated) │ │ GitHub│ │
|
|
204
|
+
│ └───────┘ └─────────────┘ └──────┘ │
|
|
205
|
+
│ │
|
|
206
|
+
│ dashboard.js ── port 7331 ── mission control │
|
|
207
|
+
│ notes.md ── consolidated team knowledge │
|
|
208
|
+
│ knowledge/ ── searchable KB by category │
|
|
209
|
+
└─────────────────────────────────────────────────────┘
|
|
210
|
+
</pre>
|
|
211
|
+
</div>
|
|
212
|
+
|
|
213
|
+
</div>
|
|
214
|
+
|
|
215
|
+
<footer>
|
|
216
|
+
<p>Minions — <a href="https://github.com/yemi33/minions">GitHub</a> — MIT License — Zero dependencies, powered by Claude</p>
|
|
217
|
+
</footer>
|
|
218
|
+
|
|
219
|
+
</body>
|
|
220
|
+
</html>
|
|
221
|
+
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Plan Lifecycle
|
|
2
|
+
|
|
3
|
+
How plans go from idea to verified, running code.
|
|
4
|
+
|
|
5
|
+
## Pipeline
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
/plan "feature description"
|
|
9
|
+
→ agent writes plan JSON (plan-*.json)
|
|
10
|
+
→ engine chains plan → PRD (plan-to-prd)
|
|
11
|
+
→ agent converts plan into structured PRD items with acceptance criteria
|
|
12
|
+
→ engine materializes PRD items as work items (PL-W001, PL-W002, ...)
|
|
13
|
+
→ engine dispatches work items respecting dependency order
|
|
14
|
+
→ agents implement each item, create PRs
|
|
15
|
+
→ engine auto-reviews PRs, handles feedback loops
|
|
16
|
+
→ all items done → engine creates VERIFY task
|
|
17
|
+
→ verify agent builds everything, starts webapp, writes testing guide
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Dependency Management
|
|
21
|
+
|
|
22
|
+
### Dispatch Gating
|
|
23
|
+
|
|
24
|
+
PRD items can declare `depends_on: ["P001", "P003"]`. The engine won't dispatch an item until all its dependencies have status `done`. This prevents agents from starting work before prerequisite code exists.
|
|
25
|
+
|
|
26
|
+
### Branch Merging at Spawn
|
|
27
|
+
|
|
28
|
+
When an agent is spawned for a work item with dependencies, the engine merges the dependency PR branches into the worktree **before the agent starts**. This solves the problem where dependencies have PRs but haven't been merged to `main` yet.
|
|
29
|
+
|
|
30
|
+
```
|
|
31
|
+
Agent gets work item PL-W006 (plan item P009)
|
|
32
|
+
depends_on: ["P006", "P007"]
|
|
33
|
+
|
|
34
|
+
spawnAgent():
|
|
35
|
+
1. Create worktree from main:
|
|
36
|
+
git worktree add ../worktrees/work/PL-W006 -b work/PL-W006 main
|
|
37
|
+
|
|
38
|
+
2. Resolve dependencies:
|
|
39
|
+
P006 → work item PL-W001 → PR-4970100 → branch work/PL-W001
|
|
40
|
+
P007 → work item PL-W002 → PR-4970101 → branch work/PL-W002
|
|
41
|
+
|
|
42
|
+
3. Merge dependency branches:
|
|
43
|
+
git fetch origin work/PL-W001 work/PL-W002
|
|
44
|
+
git merge origin/work/PL-W001 --no-edit
|
|
45
|
+
git merge origin/work/PL-W002 --no-edit
|
|
46
|
+
|
|
47
|
+
4. Agent starts with all dependency changes present
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
If a merge conflict occurs, it's logged as a warning. The agent will see conflict markers and can resolve them, or the task will fail and get retried after the dependency PRs are merged to `main`.
|
|
51
|
+
|
|
52
|
+
### Resolution Chain
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
depends_on: ["P-43e5ac28"]
|
|
56
|
+
→ find work items where id = "P-43e5ac28" (across all projects)
|
|
57
|
+
→ find PRs where prdItems includes "P-43e5ac28"
|
|
58
|
+
→ extract branch names from those PRs
|
|
59
|
+
→ fetch + merge into worktree
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Plan Completion
|
|
63
|
+
|
|
64
|
+
When all PRD items reach `done` or `failed` status, `checkPlanCompletion()` fires:
|
|
65
|
+
|
|
66
|
+
1. **Completion summary** written to `notes/inbox/` with results, timing, and PR list
|
|
67
|
+
2. **Verification task** created (type `verify`, priority `high`) — see below
|
|
68
|
+
3. **PR work item** created for shared-branch plans (to merge the feature branch)
|
|
69
|
+
4. **Plan archived** to `plans/archive/`
|
|
70
|
+
|
|
71
|
+
## Verification Task
|
|
72
|
+
|
|
73
|
+
The verification task (`planItemId: "VERIFY"`) is the final step. It:
|
|
74
|
+
|
|
75
|
+
1. **Creates one worktree per affected project** with all PR branches merged in — not separate worktrees per branch. This means the agent builds and tests from a single directory per project with all changes combined.
|
|
76
|
+
|
|
77
|
+
2. **Builds and tests** every affected project from its worktree.
|
|
78
|
+
|
|
79
|
+
3. **Starts the webapp** on localhost if applicable, and keeps it running so the user can see it.
|
|
80
|
+
|
|
81
|
+
4. **Writes a manual testing guide** (`notes/inbox/verify-*.md`) with:
|
|
82
|
+
- Build/test status table per project
|
|
83
|
+
- Feature-by-feature testing steps based on acceptance criteria
|
|
84
|
+
- Integration points to verify across projects
|
|
85
|
+
- Known issues
|
|
86
|
+
- Quick smoke test checklist
|
|
87
|
+
- Exact restart commands with absolute paths
|
|
88
|
+
|
|
89
|
+
### Verification Worktree Setup
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
# project-a — 3 PRs merged into one worktree
|
|
93
|
+
cd ~/project-a
|
|
94
|
+
git fetch origin "work/PL-W001" "work/PL-W002" "work/PL-W003" "main"
|
|
95
|
+
git worktree add "../worktrees/verify-my-plan-2026-03-15" "origin/main"
|
|
96
|
+
cd "../worktrees/verify-my-plan-2026-03-15"
|
|
97
|
+
git merge "origin/work/PL-W001" --no-edit
|
|
98
|
+
git merge "origin/work/PL-W002" --no-edit
|
|
99
|
+
git merge "origin/work/PL-W003" --no-edit
|
|
100
|
+
|
|
101
|
+
# project-b — 2 PRs merged into one worktree
|
|
102
|
+
cd ~/project-b
|
|
103
|
+
git fetch origin "feat/PL-W004" "feat/PL-W005" "master"
|
|
104
|
+
git worktree add "../worktrees/verify-my-plan-2026-03-15" "origin/master"
|
|
105
|
+
cd "../worktrees/verify-my-plan-2026-03-15"
|
|
106
|
+
git merge "origin/feat/PL-W004" --no-edit
|
|
107
|
+
git merge "origin/feat/PL-W005" --no-edit
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
The verify agent and the user can then build and run from these paths.
|
|
111
|
+
|
|
112
|
+
## Human Feedback on PRs
|
|
113
|
+
|
|
114
|
+
After PRs are created, humans can leave comments containing `@minions` to trigger fix tasks. If you're the only human commenting, any comment triggers a fix — no keyword needed. See `pollPrHumanComments()` in `engine/ado.js`.
|
|
115
|
+
|
|
116
|
+
## Routing
|
|
117
|
+
|
|
118
|
+
| Type | Preferred | Fallback |
|
|
119
|
+
|------|-----------|----------|
|
|
120
|
+
| plan | ripley | rebecca |
|
|
121
|
+
| plan-to-prd | lambert | rebecca |
|
|
122
|
+
| implement | dallas | ralph |
|
|
123
|
+
| implement:large | rebecca | dallas |
|
|
124
|
+
| review | ripley | lambert |
|
|
125
|
+
| fix | _author_ | dallas |
|
|
126
|
+
| verify | dallas | ralph |
|
|
127
|
+
| test | dallas | ralph |
|
|
128
|
+
|
|
129
|
+
## Key Files
|
|
130
|
+
|
|
131
|
+
| File | Purpose |
|
|
132
|
+
|------|---------|
|
|
133
|
+
| `plans/*.json` | Active plan files with PRD items |
|
|
134
|
+
| `plans/archive/` | Completed/archived plans |
|
|
135
|
+
| `playbooks/verify.md` | Verification task playbook |
|
|
136
|
+
| `playbooks/implement.md` | Implementation playbook |
|
|
137
|
+
| `playbooks/plan-to-prd.md` | Plan → PRD conversion playbook |
|
|
138
|
+
| `engine/lifecycle.js` | `checkPlanCompletion`, `chainPlanToPrd` |
|
|
139
|
+
| `engine.js` | `spawnAgent` (dependency merging), `resolveDependencyBranches` |
|
|
140
|
+
|