@yemi33/minions 0.1.1882 → 0.1.1884

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.
@@ -39,8 +39,7 @@
39
39
 
40
40
  ## How I Work
41
41
 
42
- - Read Ripley's exploration findings from `{{team_root}}/notes/inbox/ripley-findings-*.md`
43
- - Read Dallas's build summary from `{{team_root}}/notes/inbox/dallas-build-*.md`
42
+ - Read recent teammate findings under `{{team_root}}/notes/inbox/` — filenames follow the engine-injected "Write Learnings" contract in each agent's dispatch prompt, so defer to that contract rather than matching ad-hoc filename globs here
44
43
  - Cross-reference against all `docs/`, agent `CLAUDE.md` files, and prototype instructions
45
44
  - Be exhaustive on missing features — better to over-document than under-document
46
45
  - Output the JSON to `{{team_root}}/prd/<plan-slug>.json` (the engine's `materializePlansAsWorkItems()` reads from that directory)
@@ -22,7 +22,7 @@
22
22
  - Always read `CLAUDE.md` files (root + per-agent) before anything else
23
23
  - Map the repo structure: `agents/`, `modules/`, `.devtools/`, `docs/`, `eval/`
24
24
  - Look for prototype instructions in: `docs/`, `agents/*/CLAUDE.md`, `README.md`, inline comments
25
- - Document findings in `notes/inbox/ripley-findings-{timestamp}.md` (relative to squad team root)
25
+ - Document findings in the inbox file the dispatch prompt assigns under "Write Learnings" — that section is the single source of truth for the path and filename; do not re-derive it here
26
26
  - Never guess — if something is unclear, note it explicitly for human review
27
27
 
28
28
  ## Boundaries
@@ -179,6 +179,29 @@ async function _ccDashboardHealth() {
179
179
  }
180
180
  }
181
181
 
182
+ // Triggered by the CC "Restart Minions" recovery button when a stale dashboard
183
+ // connection is killing CC streams with "Failed to fetch". Spawns the same
184
+ // `minions restart` flow as the CLI command (kills + respawns engine AND
185
+ // dashboard). The browser auto-reloads via refresh.js when it sees the new
186
+ // dashboardStartedAt; if the POST itself fails (dashboard truly unreachable),
187
+ // fall back to a plain location.reload() so behavior is never worse than before.
188
+ async function ccRestartMinions(btn) {
189
+ if (btn) { try { btn.disabled = true; btn.textContent = 'Restarting...'; } catch {} }
190
+ try {
191
+ var res = await fetch('/api/dashboard/restart', { method: 'POST', headers: { 'Content-Type': 'application/json' } });
192
+ if (!res.ok) throw new Error('HTTP ' + res.status);
193
+ if (btn) { try { btn.textContent = 'Restarting Minions — page will reload...'; } catch {} }
194
+ // The dashboard process is about to be killed. refresh.js's status poll
195
+ // will detect the new dashboardStartedAt and call location.reload() once
196
+ // the new dashboard is online; this fallback handles the case where the
197
+ // poll hasn't fired (e.g., user closed the browser tab and reopened).
198
+ setTimeout(function() { try { location.reload(); } catch {} }, 8000);
199
+ } catch (e) {
200
+ if (btn) { try { btn.textContent = 'Restart failed — reloading...'; } catch {} }
201
+ setTimeout(function() { try { location.reload(); } catch {} }, 500);
202
+ }
203
+ }
204
+
182
205
  function _ccIsReconnectableStreamError(err) {
183
206
  if (!err) return false;
184
207
  var name = String(err.name || '').toLowerCase();
@@ -764,7 +787,7 @@ async function _ccDoSend(message, skipUserMsg, forceTabId, intentMetadata) {
764
787
  var retryId = retryRequest && retryRequest.id ? retryRequest.id : '';
765
788
  return (extraHtml || '') +
766
789
  '<button onclick="ccRetryLast(' + _ccJsArg(retryTabId) + ',' + _ccJsArg(retryId) + ')" style="margin-top:6px;padding:4px 12px;background:var(--surface2);border:1px solid var(--border);border-radius:4px;color:var(--blue);cursor:pointer;font-size:11px">Retry</button>' +
767
- (showReload ? ' <button onclick="location.reload()" style="margin-top:6px;padding:4px 12px;background:var(--orange);color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:11px">Reload Page</button>' : '') +
790
+ (showReload ? ' <button onclick="ccRestartMinions(this)" style="margin-top:6px;padding:4px 12px;background:var(--orange);color:#fff;border:none;border-radius:4px;cursor:pointer;font-size:11px">Restart Minions</button>' : '') +
768
791
  ' <button onclick="ccNewTab()" style="margin-top:6px;padding:4px 12px;background:var(--surface2);border:1px solid var(--border);border-radius:4px;color:var(--muted);cursor:pointer;font-size:11px">New Session</button>';
769
792
  }
770
793
  // Start phase timer immediately so thinking text updates while waiting for SSE
@@ -913,7 +936,7 @@ async function _ccDoSend(message, skipUserMsg, forceTabId, intentMetadata) {
913
936
  if (!reconnectHealth.reachable || reconnectHealth.restarted) {
914
937
  _cleanupStreamDiv();
915
938
  var reconnectHint = reconnectHealth.restarted
916
- ? '<div style="font-size:10px;color:var(--muted);margin-top:4px">Dashboard restarted while this response was streaming. Reload the page to reconnect to the new instance.</div>'
939
+ ? '<div style="font-size:10px;color:var(--muted);margin-top:4px">Dashboard restarted while this response was streaming. Restart Minions to reconnect to the new instance.</div>'
917
940
  : '<div style="font-size:10px;color:var(--muted);margin-top:4px">The request stream was interrupted, but the dashboard is still reachable. Retry or start a new session.</div>';
918
941
  var reconnectRetry = _ccStoreRetryRequest(activeTab, activeTabId, message);
919
942
  addMsg('assistant', (streamedText ? renderMd(streamedText) + _ccElapsedFooter('Stream interrupted after {seconds}s') : '') +
@@ -943,10 +966,10 @@ async function _ccDoSend(message, skipUserMsg, forceTabId, intentMetadata) {
943
966
  var connectionHint = '';
944
967
  if (isNetworkError) {
945
968
  connectionHint = dashboardHealth.restarted
946
- ? '<div style="font-size:10px;color:var(--muted);margin-top:4px">Dashboard restarted while this response was streaming. Reload the page to reconnect to the new instance.</div>'
969
+ ? '<div style="font-size:10px;color:var(--muted);margin-top:4px">Dashboard restarted while this response was streaming. Restart Minions to reconnect to the new instance.</div>'
947
970
  : dashboardHealth.reachable
948
971
  ? '<div style="font-size:10px;color:var(--muted);margin-top:4px">The request stream was interrupted, but the dashboard is still reachable. Retry or start a new session.</div>'
949
- : '<div style="font-size:10px;color:var(--muted);margin-top:4px">Dashboard connection lost. Reload the page to reconnect.</div>';
972
+ : '<div style="font-size:10px;color:var(--muted);margin-top:4px">Dashboard connection lost. Restart Minions to reconnect.</div>';
950
973
  }
951
974
  var errorRetry = _ccStoreRetryRequest(activeTab, activeTabId, message);
952
975
  addMsg('assistant', (streamedText ? renderMd(streamedText) + _ccElapsedFooter('Stream interrupted after {seconds}s') : '') +
package/dashboard.js CHANGED
@@ -6428,6 +6428,27 @@ What would you like to discuss or change? When you're happy, say "approve" and I
6428
6428
  } catch (e) { return jsonReply(res, e.statusCode || 500, { error: e.message }); }
6429
6429
  }
6430
6430
 
6431
+ // Spawns `node bin/minions.js restart` detached so it kills + respawns BOTH
6432
+ // engine and dashboard. Used by the CC "Restart Minions" recovery button when
6433
+ // a stale dashboard connection has CC streams failing with "Failed to fetch".
6434
+ // The reply returns immediately — the new dashboard will be online seconds
6435
+ // later and the browser's refresh poll auto-reloads on dashboardStartedAt change.
6436
+ async function handleDashboardRestart(req, res) {
6437
+ try {
6438
+ const { spawn: cpSpawn } = require('child_process');
6439
+ const minionsBin = path.join(MINIONS_DIR, 'bin', 'minions.js');
6440
+ const childEnv = { ...process.env };
6441
+ for (const key of Object.keys(childEnv)) {
6442
+ if (key === 'CLAUDECODE' || key.startsWith('CLAUDE_CODE') || key.startsWith('CLAUDECODE_')) delete childEnv[key];
6443
+ }
6444
+ const proc = cpSpawn(process.execPath, [minionsBin, 'restart'], {
6445
+ cwd: MINIONS_DIR, stdio: 'ignore', detached: true, env: childEnv, windowsHide: true,
6446
+ });
6447
+ proc.unref();
6448
+ return jsonReply(res, 200, { ok: true, pid: proc.pid });
6449
+ } catch (e) { return jsonReply(res, e.statusCode || 500, { error: e.message }); }
6450
+ }
6451
+
6431
6452
  function settingsClaudeConfig(config) {
6432
6453
  const claude = { ...shared.DEFAULT_CLAUDE, ...(config.claude || {}) };
6433
6454
  delete claude.permissionMode;
@@ -7606,6 +7627,7 @@ What would you like to discuss or change? When you're happy, say "approve" and I
7606
7627
  return jsonReply(res, 200, { ok: true, message: 'Wakeup signal sent' });
7607
7628
  }},
7608
7629
  { method: 'POST', path: '/api/engine/restart', desc: 'Force-kill engine and restart immediately', handler: handleEngineRestart },
7630
+ { method: 'POST', path: '/api/dashboard/restart', desc: 'Run `minions restart` to kill+respawn engine AND dashboard (detached)', handler: handleDashboardRestart },
7609
7631
 
7610
7632
  // Runtimes (CLI fleet) — model discovery + capability surface
7611
7633
  { method: 'GET', path: '/api/runtimes', desc: 'List registered CLI runtimes and their capability flags', handler: (req, res) => {
@@ -1,159 +1,7 @@
1
1
  # Command Center
2
2
 
3
- The Command Center (CC) is the minions's conversational AI brain. It powers the dashboard's chat panel, document editing modals, and plan steeringall through a single persistent Sonnet session with full minions awareness.
3
+ The Command Center (CC) is the dashboard's conversational chat panel. It opens from the **CC** button in the top-right header and lets you drive the engine — dispatching work items, saving notes, approving plans, and asking questions about minions state — through a persistent Claude/Copilot session with full repo awareness.
4
4
 
5
- ## Access
5
+ CC is intentionally a thin wrapper around the runtime CLI: state changes happen via `Bash`-tool `curl` calls to the dashboard's own REST API, not via parsed delimiter blocks. The end-to-end flow is `dashboard/js/command-center.js` `_ccDoSend()` → `POST /api/command-center` (or `/api/command-center/stream`) in `dashboard.js` (`handleCommandCenter`) → `engine/llm.js` `callLLM({ direct: true })` → claude/copilot CLI session persisted in `engine/cc-sessions.json`. Per-turn API mutations are correlated via the `X-CC-Turn-Id` header and surfaced as standalone `role='action'` chips rendered outside the assistant bubble (`_ccActionResultLine` + `addMsg('action', ...)`).
6
6
 
7
- Click the **CC** button in the top-right header of the dashboard. A slide-out chat drawer opens on the right side.
8
-
9
- ## Persistent Sessions
10
-
11
- CC maintains a true multi-turn session using Claude CLI's `--resume` flag. Unlike a typical stateless API call, each message resumes the same conversation — Claude retains full history including tool calls, intermediate reasoning, and file contents from prior turns.
12
-
13
- **Session lifecycle:**
14
- - **Created** on first message (or after the system prompt changes, or when you click **New Session**)
15
- - **Resumed** on subsequent messages via `--resume <sessionId>`
16
- - **Invalidated** only when the CC system prompt changes — detected by hashing `CC_STATIC_SYSTEM_PROMPT` into `_ccPromptHash` and comparing on each call. CC chat sessions do **not** auto-expire by TTL or turn count; `ENGINE_DEFAULTS.ccMaxTurns` (default 50) is a per-call tool-use cap inside the Claude CLI, not a session lifetime cap.
17
- - **Persisted** to `engine/cc-session.json` (legacy global session) and `engine/cc-sessions.json` (per-tab sessions) — both survive dashboard restarts and engine cleanup ticks
18
- - **Frontend messages** saved to `localStorage` — survive page refresh
19
- - **Removed** only when the user explicitly closes a tab via the **×** button on the tab strip — that fires `DELETE /api/cc-sessions/:id` to evict the persisted session
20
-
21
- Click **New Session** in the drawer header to start fresh; click the **×** on a tab to remove it permanently.
22
-
23
- ### Fresh State Each Turn
24
-
25
- The system prompt is baked into the session at creation (persona, rules, action format, tool access). Dynamic minions state is injected as a preamble in each user message, so CC always sees current data even in a resumed session.
26
-
27
- ```
28
- Turn 1: system prompt (static) + [Current Minions State] + user message
29
- Turn 2+: [Updated Minions State] + user message (system prompt already in session)
30
- ```
31
-
32
- ## What It Knows
33
-
34
- Full minions context is injected every turn:
35
-
36
- | Context | Details |
37
- |---------|---------|
38
- | Agents | Statuses, current tasks, full charters (expertise/roles) |
39
- | Routing | Who's preferred/fallback for each work type |
40
- | Config | Tick interval, max concurrent, timeouts, max turns |
41
- | Work items | Active, pending, failed across all projects with failure reasons |
42
- | Pull requests | Status, review status, build status, branch, URL |
43
- | Plans | Full `.md` plan contents + PRD JSON summaries + archived plans |
44
- | PRD items | All items with status, priority, dependencies |
45
- | Dispatch | Active agents + last 15 completions with result summaries |
46
- | Skills | All reusable agent workflows with triggers |
47
- | Knowledge base | Recent entries (architecture, conventions, build reports, reviews) |
48
- | Team notes | Recent consolidated notes |
49
-
50
- ## Tool Access
51
-
52
- CC can use tools to look beyond the pre-loaded context:
53
-
54
- - **Bash** — Run shell commands (git, build tools, scripts)
55
- - **Read** — Open any file (agent output logs, code, config, plans)
56
- - **Write** — Create or overwrite files
57
- - **Edit** — Make targeted edits to existing files
58
- - **Glob** — Find files by pattern (e.g., `agents/*/output.log`)
59
- - **Grep** — Search file contents (find functions, search agent outputs)
60
- - **WebFetch/WebSearch** — Look up external resources
61
-
62
- ## Unified Brain
63
-
64
- All LLM-powered features in the dashboard route through the same CC session:
65
-
66
- | Feature | Endpoint | How It Works |
67
- |---------|----------|-------------|
68
- | **CC chat panel** | `POST /api/command-center` | Direct CC interaction |
69
- | **Doc chat modal** | `POST /api/doc-chat` | Routes through CC via `ccDocCall()` |
70
- | **Doc steer** | `POST /api/steer-document` | Routes through CC via `ccDocCall()` |
71
- | **Plan revision** | `POST /api/plans/revise` | Routes through CC via `ccDocCall()` |
72
-
73
- This means:
74
- - A question in the doc chat modal shares context with the CC panel
75
- - CC remembers what you discussed in a document editing session
76
- - Doc modals can cross-reference other minions knowledge, PRs, work items
77
- - All turns accumulate in the same session
78
-
79
- ## Actions
80
-
81
- When you ask CC to *do* something, it includes structured action blocks in its response.
82
-
83
- | Action | What It Does | Example Prompt |
84
- |--------|-------------|----------------|
85
- | `dispatch` | Create a work item | "Have dallas fix the login bug" |
86
- | `note` | Save a decision/reminder | "Remember we need to migrate to v3" |
87
- | `plan` | Create an implementation plan | "Plan the GitHub integration feature" |
88
- | `cancel` | Stop a running agent | "Cancel whatever ripley is doing" |
89
- | `retry` | Retry failed work items | "Retry the three failed tasks" |
90
- | `pause-plan` | Pause a PRD | "Pause the officeagent PRD" |
91
- | `approve-plan` | Approve a PRD | "Approve the new plan" |
92
- | `edit-prd-item` | Edit a PRD item | "Change P003's priority to high" |
93
- | `remove-prd-item` | Remove a PRD item | "Remove P011 from the plan" |
94
- | `delete-work-item` | Delete a work item | "Delete work item W025" |
95
-
96
- For endpoints without a named action, CC may emit a local API fallback action with `endpoint`, `method`, and `params`. The server only invokes safe local `/api/...` paths, validates the requested method against the route index when available, sends GET params as query strings, and rejects streaming/recursive CC/doc-chat endpoints.
97
-
98
- ## Error Handling
99
-
100
- - **Frontend timeout**: 10-minute `AbortSignal` on the fetch — prevents infinite "thinking" spinner
101
- - **Backend timeout**: 5-minute kill timer on the claude process
102
- - **Resume failure**: If `--resume` fails (corrupted/deleted session), automatically retries with a fresh session
103
- - **Concurrency guard**: Only one CC call at a time — concurrent requests get a 429 "CC is busy" response
104
- - **Phase indicators**: Thinking indicator shows progressive phases ("Thinking..." → "Analyzing..." → "Timing out soon...")
105
-
106
- ## Architecture
107
-
108
- ```
109
- User message (CC panel, doc modal, or steer)
110
-
111
-
112
- POST /api/command-center (or /api/doc-chat, /api/steer-document)
113
-
114
- ├── Validate session (prompt-hash check — invalidate if `_ccPromptHash` drifted)
115
- ├── Build dynamic state preamble (buildCCStatePreamble)
116
- ├── callLLM() with sessionId (resume) or without (new)
117
- │ model: sonnet
118
- │ maxTurns: 25 (CC) or 10 (doc-plan) or 1 (doc-other)
119
- │ allowedTools: Bash, Read, Write, Edit, Glob, Grep, WebFetch, WebSearch
120
- │ timeout: 600s (CC) or 300s (doc-plan) or 60s (doc-other)
121
-
122
-
123
- engine/llm.js callLLM({ direct: true }) (bypasses engine/spawn-agent.js — CC + doc-chat only)
124
-
125
- ├── Resolves claude CLI binary path from engine/claude-caps.json
126
- ├── If --resume: pass -p --resume <id> (no system prompt file)
127
- ├── If new: pass -p --system-prompt-file <file>
128
-
129
-
130
- claude CLI (persistent session on disk)
131
-
132
-
133
- Parse response
134
- ├── Extract sessionId from stream-json result
135
- ├── Extract ===ACTIONS=== block (CC)
136
- ├── Extract ---DOCUMENT--- block (doc chat/steer)
137
- ├── Update cc-session.json
138
-
139
-
140
- Frontend
141
- ├── Render chat message
142
- ├── Execute actions / apply doc edits
143
- ├── Save sessionId + messages to localStorage
144
- ```
145
-
146
- ## Key Files
147
-
148
- | File | Role |
149
- |------|------|
150
- | `engine/llm.js` | `callLLM()` / `callLLMStreaming()` — single LLM function with optional `sessionId` for resume; `direct: true` spawns claude CLI directly (used by CC + doc-chat) |
151
- | `engine/spawn-agent.js` | Agent dispatch wrapper — resolves claude CLI path and invokes it. **Not used by CC/doc-chat** (direct spawn path). |
152
- | `engine/shared.js` | `parseStreamJsonOutput()` extracts `sessionId` from result |
153
- | `engine/cc-session.json` | Persisted session state (sessionId, turnCount, timestamps) |
154
- | `dashboard.js` | CC endpoint, `buildCCStatePreamble()`, `ccDocCall()`, `parseCCActions()` |
155
- | `dashboard/js/` | Frontend: localStorage persistence, session indicator, New Session button |
156
-
157
- ## Command Bar
158
-
159
- The command bar at the top of the dashboard routes all input to the CC panel. Typing in the command bar opens the CC drawer and sends the message as a CC turn.
7
+ For canonical detail (system prompt, session lifecycle, turn-ID surfacing pipeline, doc-chat integration, and CC API contract), read [`CLAUDE.md`](../CLAUDE.md) — see the **CC API Contract** and **Sessions** sections and the source in [`dashboard/js/command-center.js`](../dashboard/js/command-center.js), [`dashboard.js`](../dashboard.js) (`handleCommandCenter`), and [`prompts/cc-system.md`](../prompts/cc-system.md). This pointer file exists so the docs index has an entry for "Command Center"; the implementation details are deliberately not duplicated here because they drift.
package/docs/index.html CHANGED
@@ -3,8 +3,8 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
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.">
6
+ <title>Minions &mdash; Multi-Agent AI Dev Team</title>
7
+ <meta name="description" content="Five autonomous coding agents, one engine, and one dashboard. Minions orchestrates Claude or GitHub Copilot agents to plan, implement, review, verify, and ship code.">
8
8
  <style>
9
9
  :root { --bg: #0d1117; --surface: #161b22; --border: #30363d; --text: #c9d1d9; --muted: #8b949e; --blue: #58a6ff; --green: #3fb950; --yellow: #d29922; --red: #f85149; --purple: #bc8cff; }
10
10
  * { margin: 0; padding: 0; box-sizing: border-box; }
@@ -83,15 +83,15 @@
83
83
  <!-- Hero -->
84
84
  <div class="hero">
85
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 &mdash; hands-free.</p>
86
+ <p class="tagline">Five autonomous coding agents, one engine, one dashboard. Plan, implement, review, verify, and ship code with human control at every gate.</p>
87
87
  <div class="hero-badges">
88
- <span class="hero-badge green">Zero Dependencies</span>
89
- <span class="hero-badge blue">Claude-Powered</span>
88
+ <span class="hero-badge green">Node.js 18+</span>
89
+ <span class="hero-badge blue">Claude or Copilot</span>
90
90
  <span class="hero-badge yellow">Multi-Project</span>
91
- <span class="hero-badge purple">Self-Improving</span>
91
+ <span class="hero-badge purple">Dashboard + CLI</span>
92
92
  </div>
93
93
  <div class="cta">
94
- <a href="https://github.com/yemi33/minions" class="cta-primary">View on GitHub</a>
94
+ <a href="https://www.npmjs.com/package/@yemi33/minions" class="cta-primary">Install from npm</a>
95
95
  <a href="#quickstart" class="cta-secondary">Quick Start</a>
96
96
  </div>
97
97
  </div>
@@ -108,24 +108,25 @@
108
108
  <!-- Features -->
109
109
  <div class="container">
110
110
  <div class="features">
111
- <div class="feature"><h3>Autonomous Dispatch</h3><p>Engine discovers work from plans, PRs, pipelines, and queues &mdash; routes to the right agent based on skills and availability.</p></div>
112
- <div class="feature"><h3>Plan Lifecycle</h3><p>Plan &rarr; Approve &rarr; PRD &rarr; Execute &rarr; Review &rarr; Verify. Human-in-the-loop at every gate.</p></div>
111
+ <div class="feature"><h3>Autonomous Dispatch</h3><p>Engine discovers work from plans, PRs, schedules, pipelines, and queues &mdash; then routes to the right agent by role, skill, and availability.</p></div>
112
+ <div class="feature"><h3>Plan Lifecycle</h3><p>Plan &rarr; Approve &rarr; PRD &rarr; Execute &rarr; Review &rarr; Verify. Completed plans stay available until you manually archive them.</p></div>
113
113
  <div class="feature"><h3>Team Meetings</h3><p>Multi-agent meetings with investigate, debate, and conclude rounds. Agents research, discuss, and produce actionable conclusions.</p></div>
114
114
  <div class="feature"><h3>Multi-Stage Pipelines</h3><p>Chain tasks, meetings, plans, and more into automated workflows. Cron triggers or manual. Artifacts flow between stages.</p></div>
115
- <div class="feature"><h3>Eval Loop</h3><p>After implementation, auto-dispatches review &rarr; fix cycles. Configurable iterations and cost ceiling per work item.</p></div>
115
+ <div class="feature"><h3>Review / Fix Loop</h3><p>After implementation, Minions can dispatch reviews, react to human PR comments, and send fixes back to the original author agent.</p></div>
116
116
  <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>
117
- <div class="feature"><h3>Knowledge Consolidation</h3><p>Agent findings auto-consolidate into team notes and a searchable knowledge base. The team learns as it works.</p></div>
118
- <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>
119
- <div class="feature"><h3>Scheduled Tasks</h3><p>Cron-style recurring work: nightly tests, weekly audits, daily standups. Visual cron builder in the dashboard.</p></div>
120
- <div class="feature"><h3>Command Center</h3><p>Natural language interface for delegating work to agents. CC orchestrates &mdash; agents implement.</p></div>
121
- <div class="feature"><h3>Live Dashboard</h3><p>Real-time mission control on port 7331. Paginated views, optimistic updates, and visibility-aware polling.</p></div>
122
- <div class="feature"><h3>One-Command Updates</h3><p><code>minions update</code> pulls latest from npm and applies. Config and charters preserved automatically.</p></div>
117
+ <div class="feature"><h3>Knowledge Consolidation</h3><p>Agent findings, quick notes, pinned notes, and feedback consolidate into team notes and a categorized knowledge base.</p></div>
118
+ <div class="feature"><h3>PR Integration</h3><p>Tracks Azure DevOps and GitHub PRs, including review votes, build status, merge status, human comments, and context-only links.</p></div>
119
+ <div class="feature"><h3>Scheduled Tasks &amp; Watches</h3><p>Cron-style recurring work plus watches for PRs, work items, dispatches, meetings, pipelines, agents, and status changes.</p></div>
120
+ <div class="feature"><h3>Command Center &amp; Doc Chat</h3><p>Natural language orchestration, persistent CC tabs, document Q&amp;A/editing, issue filing, routing updates, and local API actions.</p></div>
121
+ <div class="feature"><h3>Pluggable Runtimes</h3><p>Run agents through Claude Code or GitHub Copilot CLI, with runtime-specific models, effort, session resume, and permission handling.</p></div>
122
+ <div class="feature"><h3>Live Dashboard</h3><p>Real-time mission control on port 7331 with paginated views, optimistic updates, live streams, metrics, and settings.</p></div>
123
+ <div class="feature"><h3>One-Command Updates</h3><p><code>minions update</code> pulls the latest npm package, reapplies files, and restarts while preserving config and customizations.</p></div>
123
124
  </div>
124
125
 
125
126
  <!-- Demo scenarios -->
126
127
  <div class="scenario">
127
128
  <div class="scenario-header"><div class="scenario-num">1</div><h2>Dashboard Overview</h2></div>
128
- <p>Home page with agent status cards, project bar, and setup guidance. All agents visible at a glance.</p>
129
+ <p>Home page with agent status cards, project bar, setup guidance, and engine state. All agents visible at a glance.</p>
129
130
  <div class="demo-frame">
130
131
  <img src="demo/01-dashboard-overview.png" alt="Dashboard overview with agent cards">
131
132
  <div class="demo-caption">Home page showing Minions Members, project bar, and engine status badge</div>
@@ -134,7 +135,7 @@
134
135
 
135
136
  <div class="scenario">
136
137
  <div class="scenario-header"><div class="scenario-num">2</div><h2>Work Items</h2></div>
137
- <p>Paginated table with status, type, priority, agent, and linked PRs. <span class="badge badge-yellow">PENDING</span> <span class="badge badge-blue">DISPATCHED</span> <span class="badge badge-green">DONE</span> <span class="badge badge-red">FAILED</span>. Retry, delete, and archive with optimistic updates.</p>
138
+ <p>Paginated table with status, type, priority, agent, dependencies, artifacts, and linked PRs. <span class="badge badge-yellow">PENDING</span> <span class="badge badge-blue">DISPATCHED</span> <span class="badge badge-green">DONE</span> <span class="badge badge-red">FAILED</span>. Retry, delete, archive, and add feedback with optimistic updates.</p>
138
139
  <div class="demo-frame">
139
140
  <img src="demo/02-work-items.png" alt="Work items table">
140
141
  <div class="demo-caption">Work items page &mdash; 20 per page with create, edit, retry, and delete actions</div>
@@ -143,7 +144,7 @@
143
144
 
144
145
  <div class="scenario">
145
146
  <div class="scenario-header"><div class="scenario-num">3</div><h2>Plans &amp; PRD</h2></div>
146
- <p>Plan cards with Approve / Discuss &amp; Revise / Reject. PRD dependency graph with per-item retry. Archive completed plans.</p>
147
+ <p>Plan cards with Approve / Discuss &amp; Revise / Reject. PRD dependency graph with per-item retry, reopening, verification, and manual archive.</p>
147
148
  <div class="demo-frame">
148
149
  <img src="demo/03-plans-prd.png" alt="Plans and PRD progress">
149
150
  <div class="demo-caption">Plans page with status-colored cards, PRD dependency graph, and action buttons</div>
@@ -152,7 +153,7 @@
152
153
 
153
154
  <div class="scenario">
154
155
  <div class="scenario-header"><div class="scenario-num">4</div><h2>Pull Requests</h2></div>
155
- <p>PR tracker sorted by date, with review, build, and merge status. Linked to work items and PRD items. Manual PR linking supported.</p>
156
+ <p>PR tracker sorted by date, with review, build, merge, conflict, and human-comment status. Linked to work items and PRD items. Manual PR linking and context-only observation supported.</p>
156
157
  <div class="demo-frame">
157
158
  <img src="demo/04-pull-requests.png" alt="Pull requests tracker">
158
159
  <div class="demo-caption">PRs sorted newest-first with build status, review status, and agent attribution</div>
@@ -170,7 +171,7 @@
170
171
 
171
172
  <div class="scenario">
172
173
  <div class="scenario-header"><div class="scenario-num">6</div><h2>Pipelines</h2></div>
173
- <p>Multi-stage workflows chaining tasks, meetings, plans, and more. Cron triggers or manual. Artifact tracking between stages.</p>
174
+ <p>Multi-stage workflows chaining tasks, meetings, plans, tests, docs, and more. Cron triggers or manual runs. Artifact tracking between stages.</p>
174
175
  <div class="demo-frame">
175
176
  <img src="demo/06-pipelines.png" alt="Pipelines page">
176
177
  <div class="demo-caption">Pipeline cards with stage flow visualization, run history, and progress bars</div>
@@ -179,7 +180,7 @@
179
180
 
180
181
  <div class="scenario">
181
182
  <div class="scenario-header"><div class="scenario-num">7</div><h2>Notes &amp; Knowledge Base</h2></div>
182
- <p>Inbox for agent findings, consolidated team notes, and categorized knowledge base. Inline Q&amp;A on any document.</p>
183
+ <p>Inbox for agent findings, quick notes, pinned notes, consolidated team notes, and categorized knowledge base. Inline Q&amp;A/editing on documents.</p>
183
184
  <div class="demo-frame">
184
185
  <img src="demo/07-notes-kb.png" alt="Notes and knowledge base">
185
186
  <div class="demo-caption">Notes inbox, team notes, and knowledge base with category tabs and pagination</div>
@@ -188,7 +189,7 @@
188
189
 
189
190
  <div class="scenario">
190
191
  <div class="scenario-header"><div class="scenario-num">8</div><h2>Scheduled Tasks</h2></div>
191
- <p>Cron-style recurring work with visual builder. Natural language parsing &mdash; type "every weekday at 9am" and it generates the cron.</p>
192
+ <p>Cron-style recurring work with a visual builder. Schedule work items, tests, docs, plans, asks, meetings, and recurring maintenance.</p>
192
193
  <div class="demo-frame">
193
194
  <img src="demo/08-schedules.png" alt="Schedules page">
194
195
  <div class="demo-caption">Schedule list with cron expressions, last-run times, and enable/disable toggles</div>
@@ -197,7 +198,7 @@
197
198
 
198
199
  <div class="scenario">
199
200
  <div class="scenario-header"><div class="scenario-num">9</div><h2>Engine &amp; Metrics</h2></div>
200
- <p>Dispatch queue, engine log, agent metrics, token usage, and context pressure. All paginated.</p>
201
+ <p>Dispatch queue, engine log, agent metrics, token usage, runtime/model data, quality signals, and context pressure. All paginated.</p>
201
202
  <div class="demo-frame">
202
203
  <img src="demo/09-engine.png" alt="Engine page">
203
204
  <div class="demo-caption">Active/pending dispatches, completed history, engine log, and per-agent quality metrics</div>
@@ -206,7 +207,7 @@
206
207
 
207
208
  <div class="scenario">
208
209
  <div class="scenario-header"><div class="scenario-num">10</div><h2>Command Center</h2></div>
209
- <p>Natural language delegation. CC orchestrates &mdash; agents implement. Session persists across refreshes. Actions auto-execute.</p>
210
+ <p>Natural language delegation. CC orchestrates &mdash; agents implement. Sessions persist across refreshes and tabs; actions can create work, notes, plans, watches, PR links, and issues.</p>
210
211
  <div class="demo-frame">
211
212
  <img src="demo/10-command-center.png" alt="Command Center panel">
212
213
  <div class="demo-caption">Command Center side panel with conversation history, action execution, and session indicator</div>
@@ -216,17 +217,27 @@
216
217
  <!-- Quick Start -->
217
218
  <div class="quickstart" id="quickstart">
218
219
  <h2>Quick Start</h2>
219
- <pre><span class="comment"># Install</span>
220
+ <pre><span class="comment"># Prerequisites: Node.js 18+, Git, and at least one agent runtime</span>
221
+ <span class="comment"># Install Claude Code or GitHub Copilot CLI separately, then install Minions</span>
220
222
  npm install -g @yemi33/minions
221
223
 
222
- <span class="comment"># Initialize &mdash; prompts for project locations, starts engine + dashboard</span>
224
+ <span class="comment"># Bootstrap ~/.minions/ and scan/link repositories</span>
223
225
  minions init
224
226
 
227
+ <span class="comment"># Or add a specific project later</span>
228
+ minions add ~/my-project
229
+
230
+ <span class="comment"># Start engine + dashboard, then open http://localhost:7331</span>
231
+ minions restart --open
232
+ minions dash
233
+
225
234
  <span class="comment"># Give your first task</span>
226
235
  minions work "Explore the codebase and document the architecture"
227
236
 
228
- <span class="comment"># Open dashboard at http://localhost:7331</span>
229
- minions dash
237
+ <span class="comment"># Useful operations</span>
238
+ minions status
239
+ minions doctor
240
+ minions config set-cli copilot --model gpt-5.4
230
241
 
231
242
  <span class="comment"># Update to latest</span>
232
243
  minions update</pre>
@@ -241,7 +252,7 @@ minions update</pre>
241
252
  │ │
242
253
  │ engine.js ──── 60s tick loop ────┐ │
243
254
  │ │ │ │
244
- │ discover work spawn agents poll PRs
255
+ │ discover work spawn agents poll PRs/comments
245
256
  │ │ │ │ │
246
257
  │ ┌───┴───┐ ┌──────┴──────┐ ┌──┴───┐ │
247
258
  │ │ Plans │ │ Worktrees │ │ ADO │ │
@@ -250,10 +261,11 @@ minions update</pre>
250
261
  │ └───────┘ └─────────────┘ └──────┘ │
251
262
  │ │
252
263
  │ dashboard.js ── port 7331 ── mission control │
264
+ │ runtimes/ ── Claude Code or GitHub Copilot CLI │
253
265
  │ meetings/ ── multi-agent discussions │
254
266
  │ pipelines/ ── multi-stage workflows │
255
- notes.md ── consolidated team knowledge
256
- │ knowledge/ ── searchable KB by category
267
+ schedules + watches ── recurring/conditional work
268
+ notes.md + knowledge/ ── team memory and KB
257
269
  └─────────────────────────────────────────────────────┘
258
270
  </pre>
259
271
  </div>
@@ -261,7 +273,7 @@ minions update</pre>
261
273
  </div>
262
274
 
263
275
  <footer>
264
- <p>Minions &mdash; <a href="https://github.com/yemi33/minions">GitHub</a> &mdash; <a href="https://www.npmjs.com/package/@yemi33/minions">npm</a> &mdash; MIT License &mdash; Zero dependencies, powered by Claude</p>
276
+ <p>Minions &mdash; <a href="https://www.npmjs.com/package/@yemi33/minions">npm</a> &mdash; <a href="https://yemi33.github.io/minions/">Public site</a> &mdash; MIT License &mdash; Claude Code or GitHub Copilot CLI runtime</p>
265
277
  </footer>
266
278
 
267
279
  </body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yemi33/minions",
3
- "version": "0.1.1882",
3
+ "version": "0.1.1884",
4
4
  "description": "Multi-agent AI dev team that runs from ~/.minions/ — five autonomous agents share a single engine, dashboard, and knowledge base",
5
5
  "bin": {
6
6
  "minions": "bin/minions.js"