Overview
One "PM Zora" runs persistently on the Mac Mini, receives work via Signal/Telegram, spawns project-scoped child Zoras (one per project), and coordinates them via AgentBus. Each child Zora has its own config, port, and visually distinct dashboard.
This builds directly on PR #142 (Signal secure channel) — that's the foundation. Issue #143 (project-scoped dashboard colors) is a required sub-component.
Architecture
Signal / Telegram
│
▼
PM Zora (port 8070) ← persistent launchd daemon
│ spawn_zora_agent / AgentBus routing
┌────┴────┬─────────┐
▼ ▼ ▼
AgentDev AbundanceCoach Trading
(8071) (8072) (8073)
│ │ │
└────────────┴────────────┘
AgentBus :8090
Work Items
Pre-requisite
Group A — Start Immediately (fully parallel)
Group B — After Group A (parallel with each other)
Group C — After Group B + PR #142 merged
Dependency Graph
WI-0 (PR #142 merge) ──────────────────────────────┐
│
Group A (parallel): │
WI-1 (launchd) ──────────┬──── enables WI-4 │
WI-2 (config layout) ────┤──── enables WI-3 │
└──── enables WI-5 │
WI-3 (#143 dashboard) ── standalone │
│
Group B (parallel): │
WI-4 (spawn tool) ──────┐ │
WI-5 (AgentBus client) ─┴──── enables WI-6 ──────┘
Group C:
WI-6 (PM routing + SOUL.md) ← full PM Zora capability
WSJF Scoring
WSJF = (Cost of Delay) / Job Size, where Cost of Delay = usability + wiring + security + time_criticality
| ID |
Title |
WSJF |
Size |
| WI-0 |
Merge PR #142 |
31.0 |
S |
| WI-1 |
launchd daemon |
10.0 |
S |
| WI-2 |
multi-instance config |
9.67 |
S |
| WI-5 |
AgentBus client |
8.67 |
S |
| WI-4 |
spawn_zora_agent |
7.50 |
M |
| WI-3 |
dashboard colors (#143) |
6.33 |
M |
| WI-6 |
PM routing + SOUL.md |
6.25 |
M |
Key New Files
~/Library/LaunchAgents/com.ryaker.zora-pm.plist
~/.zora/pm/config.toml + SOUL.md
~/.zora/projects/<name>/config.toml (per project)
src/orchestrator/tools/spawn-zora-agent.ts
src/integrations/agentbus/agentbus-client.ts
src/channels/signal/signal-pm-router.ts
- Config/loader changes for
[project] section + --config-dir flag
Verification (definition of done)
Related
🤖 Generated with Claude Code
Overview
One "PM Zora" runs persistently on the Mac Mini, receives work via Signal/Telegram, spawns project-scoped child Zoras (one per project), and coordinates them via AgentBus. Each child Zora has its own config, port, and visually distinct dashboard.
This builds directly on PR #142 (Signal secure channel) — that's the foundation. Issue #143 (project-scoped dashboard colors) is a required sub-component.
Architecture
Work Items
Pre-requisite
feature/signal-secure-channel, push, merge PR feat(channel): Signal secure channel — E2E encrypted inbound/outbound messaging #142 — WSJF 31.0 (blocks WI-6)Group A — Start Immediately (fully parallel)
com.ryaker.zora-pm.plist) — restart-on-crash, log rotation, JAVA_HOME/API key env vars — WSJF 10.0~/.zora/projects/<name>/config.toml+policy.toml,--config-dirCLI flag) — WSJF 9.67GET /api/project, dynamic favicon, CSS var override for project color — WSJF 6.33Group B — After Group A (parallel with each other)
spawn_zora_agenttool in orchestrator — check if instance running, spawn if not, register with AgentBus, return port — WSJF 7.50send_to_projecttool, deregister on shutdown — WSJF 8.67Group C — After Group B + PR #142 merged
SOUL.md+ Signal routing logic —@projectprefix routing, LLM classification fallback,/status/spawn/stopcommands — WSJF 6.25Dependency Graph
WSJF Scoring
WSJF = (Cost of Delay) / Job Size, where Cost of Delay = usability + wiring + security + time_criticality
Key New Files
~/Library/LaunchAgents/com.ryaker.zora-pm.plist~/.zora/pm/config.toml+SOUL.md~/.zora/projects/<name>/config.toml(per project)src/orchestrator/tools/spawn-zora-agent.tssrc/integrations/agentbus/agentbus-client.tssrc/channels/signal/signal-pm-router.ts[project]section +--config-dirflagVerification (definition of done)
launchctl list | grep zora-pmshows loaded; kill → restarts in < 10scurl localhost:8071/api/projectreturns correct name/color"spawn AgentDev"→ port 8071 becomes reachableagent-bus statusshows PM Zora and child Zoras as registered sessions/statusto PM Zora returns all running instance healthRelated
docs/CENTRAL_ZORA_PM_PLAN.mdin this repo🤖 Generated with Claude Code