froggo-mission-control 1.2.1 → 1.2.3

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/README.md CHANGED
@@ -11,14 +11,16 @@
11
11
 
12
12
  Mission Control is your personal AI operations center. It ships with:
13
13
 
14
- - **15 agents** — Hire from the catalog: Inbox, Coder, Designer, Researcher, Clara (QA), Chief, HR, Writer, Social Manager, Finance, Growth Director, Discord Manager, Voice, Senior Coder, and the Mission Control orchestrator
15
- - **18 modules** — Install what you need: Kanban, Analytics, Approvals, Chat Rooms, Calendar, Gmail Inbox, Finance, Library, Projects, Voice, Writing, Meetings, and more
14
+ - **15 agents** — Hire from the catalog: Inbox, Coder, Senior Coder, Designer, Researcher, Clara (QA), Chief, HR, Writer, Social Manager, Finance, Growth Director, Discord Manager, Voice, and the Mission Control orchestrator
15
+ - **Modular dashboard** — Install what you need: Kanban, Analytics, Approvals, Chat Rooms, Schedule, Gmail Inbox, Finance, Library, Projects, Voice, Writing, Meetings, and more
16
+ - **Task pipeline** — Full lifecycle: `todo → internal-review → in-progress → agent-review → done`, with Clara QA gates before work starts and after it completes
17
+ - **Projects** — Kanban boards, agent dispatch, shared chat rooms, file library — all linked
18
+ - **Memory vault** — Obsidian-compatible knowledge base that agents read/write across sessions, pre-seeded with platform documentation
16
19
  - **Comms Inbox** — Gmail integration with AI-powered triage (Smart Inbox)
17
- - **Google Calendar** — Today's schedule widget and full Epic Calendar view
18
- - **Task system** — Full lifecycle: todo → internal-review → in-progress → review → human-review → done, with agent auto-dispatch and Clara QA gate
19
- - **Projects** — Kanban boards, agent dispatch, shared chat rooms, file library
20
- - **Memory vault** — Obsidian-compatible knowledge base that agents read/write across sessions
20
+ - **Google Calendar** — Today's schedule widget and full calendar view
21
21
  - **Voice** — Real-time voice interface via Gemini Live
22
+ - **Agent trust tiers** — Mission Control runs with full trust; Clara and HR as workers; all others as apprentices with scoped permissions
23
+ - **OS keychain** — API keys stored securely in the system keychain (macOS Keychain / Linux Secret Service), never in plaintext
22
24
  - **MCP servers** — Native Claude Code CLI integration for task management, memory search, and scheduling
23
25
 
24
26
  ---
@@ -29,14 +31,14 @@ Mission Control is your personal AI operations center. It ships with:
29
31
  |---|---|---|
30
32
  | **Node.js** | 20+ | [nodejs.org](https://nodejs.org) |
31
33
  | **Claude Code CLI** | Latest | [install guide](https://docs.anthropic.com/claude-code) — requires active Claude subscription |
34
+ | **Obsidian** | Latest | Auto-installed via `brew install --cask obsidian`. Required for memory vault. |
32
35
  | **Git** | Any | For cloning + updates |
33
36
  | **macOS** or **Linux** | — | Windows not tested |
34
37
 
35
38
  **Optional:**
36
39
  - **Gemini API key** — Required for Voice. Free at [aistudio.google.com](https://aistudio.google.com/app/apikey)
37
40
  - **Google Workspace** — Gmail + Calendar integration (OAuth setup in the app wizard)
38
- - **QMD** — Hybrid BM25/vector memory search (`brew install profroggo/tap/qmd` once available). Falls back to ripgrep automatically if not installed.
39
- - **Obsidian** — For browsing the memory vault (any vault reader works)
41
+ - **QMD** — Hybrid BM25/vector memory search. Auto-installed via `brew install profroggo/tap/qmd`. Falls back to ripgrep automatically if not installed.
40
42
 
41
43
  ---
42
44
 
@@ -45,27 +47,30 @@ Mission Control is your personal AI operations center. It ships with:
45
47
  ### Option A — npm (recommended)
46
48
 
47
49
  ```bash
48
- # Step 1 — install the package (23 min, fully automatic)
50
+ # Step 1 — install the package (35 min, fully automatic)
49
51
  npm install -g froggo-mission-control
50
52
 
51
- # Step 2 — run first-time setup (non-interactive, ~1 min)
53
+ # Step 2 — run first-time setup (~1 min)
52
54
  mission-control
53
55
  ```
54
56
 
55
57
  **What `npm install -g` does automatically:**
56
58
  - Downloads the package and all dependencies
57
59
  - Compiles the 3 MCP servers (`mission-control-db-mcp`, `memory-mcp`, `cron-mcp`)
60
+ - Installs QMD memory search and Obsidian (via Homebrew on macOS)
58
61
  - Runs `next build` — full production build of the dashboard
59
62
 
60
63
  **What `mission-control` (first run) does automatically:**
61
64
  1. Checks prerequisites — Node.js 20+, Claude Code CLI
62
- 2. Creates the `~/mission-control/` directory tree
63
- 3. Bootstraps 4 core agent workspaces from catalog templates (main, clara, coder, writer)
64
- 4. Generates `CLAUDE.md`, `.claude/settings.json`, and `.mcp.json` in `~/mission-control/`
65
- 5. Creates empty data files (`schedule.json`, `google-tokens.json`)
66
- 6. Writes `.env`
67
- 7. Installs a **LaunchAgent** (macOS) or **systemd service** (Linux)
68
- 8. Starts the server and opens your browser to `http://localhost:3000/setup`
65
+ 2. Creates the full `~/mission-control/` directory tree (agents, data, library, memory, logs)
66
+ 3. Scaffolds the complete library structure with all output folders
67
+ 4. Bootstraps 4 core agent workspaces from catalog templates (mission-control, clara, coder, writer)
68
+ 5. Pre-seeds `~/mission-control/memory/knowledge/` with 6 platform documentation articles
69
+ 6. Generates `CLAUDE.md`, `.claude/settings.json`, and `.mcp.json` in `~/mission-control/`
70
+ 7. Creates data files (`schedule.json`, `google-tokens.json`)
71
+ 8. Writes `.env`
72
+ 9. Installs a **LaunchAgent** (macOS) or **two systemd services** (Linux) — app + cron daemon
73
+ 10. Starts the server and opens your browser to `http://localhost:3000/setup`
69
74
 
70
75
  No interactive prompts. No API keys in the terminal. Everything continues in the browser.
71
76
 
@@ -83,12 +88,14 @@ cd froggo-Mission-Control
83
88
  - Checks prerequisites (Node.js 20+, Claude Code CLI, Git)
84
89
  - Installs all npm dependencies
85
90
  - Compiles the 3 MCP servers
91
+ - Installs QMD and Obsidian
86
92
  - Builds the Next.js dashboard (`next build`)
87
- - Creates the full `~/mission-control/` directory tree
93
+ - Creates the full `~/mission-control/` directory tree and library structure
88
94
  - Bootstraps core agent workspaces from catalog templates
95
+ - Pre-seeds the knowledge base
89
96
  - Generates `.env`, `.mcp.json`, and `.claude/settings.json` configured for your machine
90
97
  - Sets up an Obsidian-compatible memory vault skeleton
91
- - Installs a **LaunchAgent** (macOS) or **systemd service** (Linux) — persistent, auto-start at login, auto-restart on crash
98
+ - Installs a **LaunchAgent** (macOS) or **systemd services** (Linux) — persistent, auto-start at login, auto-restart on crash
92
99
  - Opens `http://localhost:3000/setup` in your browser
93
100
 
94
101
  ---
@@ -98,11 +105,11 @@ cd froggo-Mission-Control
98
105
  After the CLI opens your browser, the wizard walks you through 10 steps:
99
106
 
100
107
  1. **Welcome** — what Mission Control does and what you're about to set up
101
- 2. **System Check** — verifies CLI, database, MCP servers, and agent files are ready (auto-pass)
108
+ 2. **System Check** — verifies CLI, database, MCP servers, and agent files are ready
102
109
  3. **Agent Permissions** — review the tool permissions agents need; confirm to unlock autonomous operation
103
110
  4. **Gemini API Key** — paste and validate (skippable — voice features won't work without it)
104
111
  5. **Google Workspace** — connect Gmail and Calendar via OAuth (skippable)
105
- 6. **Obsidian Vault** — open the memory vault in Obsidian for native browsing (skippable)
112
+ 6. **Obsidian & Permissions** — open the memory vault in Obsidian; grant mic/camera for voice
106
113
  7. **Agent & Module Picker** — 4 core agents pre-selected; choose optional agents and modules from the catalog
107
114
  8. **Animated Setup Checklist** — live progress as your selected agents and modules are installed
108
115
  9. **Interactive Tour** — guided walkthrough of every panel (re-launchable from Settings anytime)
@@ -115,25 +122,34 @@ After the CLI opens your browser, the wizard walks you through 10 steps:
115
122
  ```
116
123
  ~/mission-control/
117
124
  ├── data/
118
- │ ├── mission-control.db # SQLite database (all tasks, agents, chat, etc.)
125
+ │ ├── mission-control.db # SQLite database (tasks, agents, chat, approvals, etc.)
119
126
  │ ├── google-tokens.json # Google OAuth tokens (auto-managed)
120
127
  │ └── schedule.json # Cron job schedule
121
128
  ├── memory/ # Obsidian-compatible agent memory vault
129
+ │ ├── knowledge/ # Pre-seeded platform docs (architecture, MCP tools, task lifecycle, etc.)
122
130
  │ ├── agents/ # Per-agent memory files
123
- │ ├── knowledge/ # Knowledge base articles
124
131
  │ ├── sessions/ # Session logs
125
- └── daily/ # Daily notes
132
+ ├── daily/ # Daily notes
133
+ │ └── templates/ # Note templates
126
134
  ├── library/ # All agent output files
127
135
  │ ├── code/
128
136
  │ ├── design/
129
- └── docs/
130
- ├── agents/ # Per-agent workspaces (CLAUDE.md, SOUL.md, MEMORY.md)
131
- ├── main/ # Mission Control orchestrator
137
+ │ ├── ui/
138
+ │ │ ├── images/
139
+ │ └── media/
140
+ │ ├── docs/
141
+ │ │ ├── research/
142
+ │ │ ├── presentations/
143
+ │ │ └── strategies/
144
+ │ ├── campaigns/ # Per-campaign folders (auto-created)
145
+ │ └── projects/ # Per-project folders (auto-created)
146
+ ├── agents/ # Per-agent workspaces (CLAUDE.md, SOUL.md, MEMORY.md, DIRECTORIES.md)
147
+ │ ├── mission-control/ # Orchestrator
132
148
  │ ├── clara/ # QA review gate
133
149
  │ ├── coder/ # Code execution
134
150
  │ └── writer/ # Content & docs
135
151
  ├── .claude/
136
- │ └── settings.json # Tool permissions + MCP server registrations
152
+ │ └── settings.json # Tool permissions + MCP server registrations + hooks
137
153
  ├── .mcp.json # MCP server config for Claude Code sessions
138
154
  └── CLAUDE.md # Project context for all agent sessions
139
155
 
@@ -150,13 +166,15 @@ froggo-Mission-Control/
150
166
  │ └── api/ # 100+ API endpoints
151
167
  ├── src/
152
168
  │ ├── components/ # React UI components
153
- │ ├── lib/ # Server-side logic (db, env, agent dispatch)
169
+ │ ├── lib/ # Server-side logic (db, env, dispatch, keychain)
154
170
  │ ├── modules/ # Pluggable feature modules
155
- │ ├── stores/ # Zustand client stores
171
+ │ ├── store/ # Zustand client stores
156
172
  │ └── types/ # TypeScript types
157
173
  ├── catalog/
158
174
  │ ├── agents/ # Agent manifests + soul files + avatars (WebP)
159
175
  │ └── modules/ # Module manifests
176
+ ├── templates/
177
+ │ └── knowledge/ # Knowledge base articles seeded on install
160
178
  ├── tools/
161
179
  │ ├── mission-control-db-mcp/ # MCP server: task/agent/chat DB tools
162
180
  │ ├── memory-mcp/ # MCP server: memory vault read/write/search
@@ -164,6 +182,7 @@ froggo-Mission-Control/
164
182
  │ └── hooks/ # Claude Code CLI hooks
165
183
  ├── .claude/
166
184
  │ ├── CLAUDE.md # Platform instructions for agents
185
+ │ ├── agents/ # Agent definition files (trust tiers, tools, MCP)
167
186
  │ ├── settings.json.template # Claude Code settings template
168
187
  │ └── skills/ # Reusable skill files for agents
169
188
  ├── bin/
@@ -208,10 +227,32 @@ Agents are Claude Code CLI subprocesses spawned by Mission Control. Each agent h
208
227
  - A **soul file** (`catalog/agents/{id}/soul.md`) — personality, responsibilities, output paths
209
228
  - A **CLAUDE.md** (`catalog/agents/{id}/claude.md`) — boot sequence and MCP tool access
210
229
  - A **manifest** (`catalog/agents/{id}/manifest.json`) — model, capabilities, required APIs/tools
230
+ - A **definition file** (`.claude/agents/{id}.md`) — trust tier, tools, MCP servers
211
231
  - Access to MCP tools: `mcp__mission-control_db__*` for tasks/chat, `mcp__memory__*` for the vault
212
232
 
213
233
  The platform dispatches tasks to agents automatically. Agents report progress via MCP, update task status, and store learnings in the memory vault.
214
234
 
235
+ ### Agent trust tiers
236
+
237
+ | Tier | Who | Permissions |
238
+ |------|-----|-------------|
239
+ | **Trusted** | Mission Control | Full tool access, bypass permissions |
240
+ | **Worker** | Clara, HR | Full tool access, bypass permissions |
241
+ | **Apprentice** | All other agents | Default scoped permissions |
242
+
243
+ ### Task pipeline
244
+
245
+ ```
246
+ todo → internal-review → in-progress → agent-review → done
247
+ ↕ ↕
248
+ human-review human-review
249
+ (needs human input) (external dependency)
250
+ ```
251
+
252
+ - Clara reviews every task **before** work begins (internal-review gate) and **after** (agent-review gate)
253
+ - Agents cannot move tasks directly to `done` — only Clara can
254
+ - `human-review` replaces any notion of "blocked" — always has a path forward
255
+
215
256
  ---
216
257
 
217
258
  ## MCP servers
@@ -220,7 +261,7 @@ Three MCP servers ship with Mission Control and are auto-configured during insta
220
261
 
221
262
  | Server | Tools | Purpose |
222
263
  |---|---|---|
223
- | `mission-control_db` | `task_create`, `task_update`, `task_list`, `chat_post`, `chat_read`, `approval_create` + more | Read/write the platform database |
264
+ | `mission-control_db` | `task_create`, `task_update`, `task_list`, `task_add_activity`, `chat_post`, `chat_read`, `approval_create` + more | Read/write the platform database |
224
265
  | `memory` | `memory_search`, `memory_recall`, `memory_write`, `memory_read` | Hybrid BM25/vector memory vault |
225
266
  | `cron` | `schedule_create`, `schedule_list` | Schedule recurring jobs |
226
267
 
@@ -250,14 +291,26 @@ Voice uses [Gemini Live](https://ai.google.dev/gemini-api/docs/live) for real-ti
250
291
  ## Memory search
251
292
 
252
293
  Memory search uses a cascading backend:
253
- 1. **QMD** (preferred) — hybrid BM25/vector search. Install: `brew install profroggo/tap/qmd`
294
+ 1. **QMD** (preferred) — hybrid BM25/vector search. Auto-installed via `brew install profroggo/tap/qmd`
254
295
  2. **ripgrep** — fast full-text fallback. Install: `brew install ripgrep`
255
296
  3. **None** — shows a clear "search unavailable" message in the UI with install instructions
256
297
 
257
298
  ---
258
299
 
300
+ ## Security
301
+
302
+ - **API keys** are stored in the OS keychain (macOS Keychain / Linux Secret Service) via `keytar`, never in plaintext SQLite
303
+ - **Agent permissions** are scoped by trust tier — new agents start as apprentices
304
+ - **External actions** (emails, deploys, tweets) require human approval before execution
305
+ - **Approval tiers** (0–3) gate actions from read-only to external writes
306
+
307
+ ---
308
+
259
309
  ## Troubleshooting
260
310
 
311
+ **Build failed during install**
312
+ - Run `mission-control build` to retry the Next.js build
313
+
261
314
  **Agents won't spawn**
262
315
  - Check `CLAUDE_BIN`: `which claude` should return a path
263
316
  - Verify Claude Code is authenticated: `claude auth login`
package/next.config.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /** @type {import('next').NextConfig} */
2
2
  const nextConfig = {
3
- // better-sqlite3 is server-only prevents bundling into client chunks
4
- serverExternalPackages: ['better-sqlite3'],
3
+ // Native Node addons must not be bundled by Turbopack — loaded at runtime
4
+ serverExternalPackages: ['better-sqlite3', 'keytar'],
5
5
  // @ path alias is picked up automatically from tsconfig paths
6
6
 
7
7
  async headers() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "froggo-mission-control",
3
- "version": "1.2.1",
3
+ "version": "1.2.3",
4
4
  "description": "Self-hosted AI agent platform for Claude Code CLI. Multi-agent orchestration, task management, Gmail, Calendar, Kanban and more.",
5
5
  "keywords": [
6
6
  "claude",
@@ -104,6 +104,9 @@
104
104
  "lucide-react": "^0.303.0",
105
105
  "next": "^16.1.6",
106
106
  "node-gyp": "^12.2.0",
107
+ "postcss": "^8.4.32",
108
+ "autoprefixer": "^10.4.16",
109
+ "tailwindcss": "3.4.17",
107
110
  "react": "^18.2.0",
108
111
  "react-dom": "^18.2.0",
109
112
  "react-draggable": "^4.5.0",
@@ -133,7 +136,6 @@
133
136
  "@typescript-eslint/parser": "^8.0.0",
134
137
  "@vitejs/plugin-react": "^5.1.4",
135
138
  "@vitest/ui": "^4.0.18",
136
- "autoprefixer": "^10.4.16",
137
139
  "eslint": "^8.56.0",
138
140
  "eslint-config-prettier": "^9.1.0",
139
141
  "eslint-plugin-jsx-a11y": "^6.10.2",
@@ -142,9 +144,7 @@
142
144
  "happy-dom": "^20.4.0",
143
145
  "jsdom": "^27.4.0",
144
146
  "playwright": "^1.58.0",
145
- "postcss": "^8.4.32",
146
147
  "prettier": "^3.2.0",
147
- "tailwindcss": "^3.4.0",
148
148
  "typescript": "^5.3.3",
149
149
  "vitest": "^4.0.18",
150
150
  "ws": "^8.19.0"
@@ -133,12 +133,26 @@ function installObsidian() {
133
133
 
134
134
  installObsidian();
135
135
 
136
+ // ── Rebuild native addons for current Node.js version ──────────────────────
137
+ info('Rebuilding native modules for Node.js ' + process.version + '...');
138
+ for (const mod of ['better-sqlite3', 'keytar']) {
139
+ const result = spawnSync('npm', ['rebuild', mod], {
140
+ cwd: ROOT, shell: true, stdio: 'pipe', encoding: 'utf-8',
141
+ });
142
+ if (result.status === 0) {
143
+ success(`${mod} compiled`);
144
+ } else {
145
+ warn(`${mod} rebuild failed (non-fatal): ${(result.stderr || '').slice(0, 120)}`);
146
+ }
147
+ }
148
+
136
149
  // ── Build Next.js app ──────────────────────────────────────────────────────
137
150
  info('Building dashboard (Next.js)...');
138
151
  process.env.NEXT_TELEMETRY_DISABLED = '1';
139
152
 
140
- const buildResult = spawnSync('node', ['node_modules/.bin/next', 'build'], {
153
+ const buildResult = spawnSync('./node_modules/.bin/next', ['build'], {
141
154
  cwd: ROOT,
155
+ shell: true,
142
156
  stdio: 'inherit',
143
157
  env: { ...process.env, NEXT_TELEMETRY_DISABLED: '1' },
144
158
  });
@@ -1192,6 +1192,9 @@ export default function OnboardingWizard({ onComplete, onSkip }: OnboardingWizar
1192
1192
  // Block Continue on step 7 until install finishes
1193
1193
  const installInProgress = currentStep === 7 && !installComplete;
1194
1194
 
1195
+ // Block Continue on step 5 until user confirms they've opened Obsidian
1196
+ const obsidianRequired = currentStep === 5 && !obsidianConfirmed;
1197
+
1195
1198
  const canContinue = !criticalFailed && !permissionsRequired && !installInProgress && !obsidianRequired;
1196
1199
 
1197
1200
  // Steps that allow skipping (step 5 — Obsidian — is now mandatory)
@@ -1208,9 +1211,6 @@ export default function OnboardingWizard({ onComplete, onSkip }: OnboardingWizar
1208
1211
  goNext();
1209
1212
  };
1210
1213
 
1211
- // Block Continue on step 5 until user confirms they've opened Obsidian
1212
- const obsidianRequired = currentStep === 5 && !obsidianConfirmed;
1213
-
1214
1214
  return (
1215
1215
  <div className="fixed inset-0 z-50 flex items-center justify-center bg-black/80">
1216
1216
  <div className="w-full max-w-lg bg-mission-control-surface rounded-2xl shadow-2xl border border-mission-control-border overflow-hidden flex flex-col max-h-[90vh]">