@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.
- package/agents/lambert/charter.md +1 -2
- package/agents/ripley/charter.md +1 -1
- package/dashboard/js/command-center.js +27 -4
- package/dashboard.js +22 -0
- package/docs/command-center.md +3 -155
- package/docs/index.html +45 -33
- package/package.json +1 -1
|
@@ -39,8 +39,7 @@
|
|
|
39
39
|
|
|
40
40
|
## How I Work
|
|
41
41
|
|
|
42
|
-
- Read
|
|
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)
|
package/agents/ripley/charter.md
CHANGED
|
@@ -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
|
|
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="
|
|
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.
|
|
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.
|
|
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.
|
|
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) => {
|
package/docs/command-center.md
CHANGED
|
@@ -1,159 +1,7 @@
|
|
|
1
1
|
# Command Center
|
|
2
2
|
|
|
3
|
-
The Command Center (CC) is the
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
7
|
-
<meta name="description" content="
|
|
6
|
+
<title>Minions — 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">
|
|
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">
|
|
89
|
-
<span class="hero-badge blue">Claude
|
|
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">
|
|
91
|
+
<span class="hero-badge purple">Dashboard + CLI</span>
|
|
92
92
|
</div>
|
|
93
93
|
<div class="cta">
|
|
94
|
-
<a href="https://
|
|
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 — routes to the right agent
|
|
112
|
-
<div class="feature"><h3>Plan Lifecycle</h3><p>Plan → Approve → PRD → Execute → Review → Verify.
|
|
111
|
+
<div class="feature"><h3>Autonomous Dispatch</h3><p>Engine discovers work from plans, PRs, schedules, pipelines, and queues — then routes to the right agent by role, skill, and availability.</p></div>
|
|
112
|
+
<div class="feature"><h3>Plan Lifecycle</h3><p>Plan → Approve → PRD → Execute → Review → 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>
|
|
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
|
|
118
|
-
<div class="feature"><h3>PR Integration</h3><p>
|
|
119
|
-
<div class="feature"><h3>Scheduled Tasks</h3><p>Cron-style recurring work
|
|
120
|
-
<div class="feature"><h3>Command Center</h3><p>Natural language
|
|
121
|
-
<div class="feature"><h3>
|
|
122
|
-
<div class="feature"><h3>
|
|
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 & 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 & Doc Chat</h3><p>Natural language orchestration, persistent CC tabs, document Q&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
|
|
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
|
|
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 — 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 & PRD</h2></div>
|
|
146
|
-
<p>Plan cards with Approve / Discuss & Revise / Reject. PRD dependency graph with per-item retry
|
|
147
|
+
<p>Plan cards with Approve / Discuss & 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
|
|
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 & Knowledge Base</h2></div>
|
|
182
|
-
<p>Inbox for agent findings, consolidated team notes, and categorized knowledge base. Inline Q&A on
|
|
183
|
+
<p>Inbox for agent findings, quick notes, pinned notes, consolidated team notes, and categorized knowledge base. Inline Q&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.
|
|
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 & 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 — agents implement.
|
|
210
|
+
<p>Natural language delegation. CC orchestrates — 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">#
|
|
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">#
|
|
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">#
|
|
229
|
-
minions
|
|
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
|
-
│
|
|
256
|
-
│ knowledge/ ──
|
|
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 — <a href="https://
|
|
276
|
+
<p>Minions — <a href="https://www.npmjs.com/package/@yemi33/minions">npm</a> — <a href="https://yemi33.github.io/minions/">Public site</a> — MIT License — 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.
|
|
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"
|