Skip to content

Architecture: Moneypenny vs Agent Runners

Fleet-facing summary distilled from chezmoi:docs/architecture/moneypenny-system-architecture.md, moneypenny-product-overview.md, and moneypenny-vs-radlo-grounding.md.


One-Sentence Answer

Moneypenny is the intake/classification/triage/dispatch pipeline. Pi, Codex, Claude Code, and Gemini are swappable agent runners called through agent-mesh.

MP does not fork pi. Pi does not become MP. They are separate concerns at different layers.


Layer Map

┌─────────────────────────────────────────────────────────┐
│  LISTENERS  (always-on, event-driven)                   │
│  iMessage · Gmail · WhatsApp · Telegram · SMS · Voice   │
└───────────────────────┬─────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  EAVESDROPPER  (passive observer)                       │
│  Signal rules: keyword · regex · sender · semantic      │
│  Flags content for triage without generating responses  │
└───────────────────────┬─────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  CLASSIFICATION PIPELINE                                │
│  Classifier → Ticket Builder → Entity Extraction        │
│  → HITL Feedback → Splitter / Refiner                   │
└───────────────────────┬─────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  SWITCHBOARD  (HITL triage surface)                     │
│  Tinder-swipe UX: approve · kill · re-label · split     │
│  5-second decisions → propagate to execution pipeline   │
└───────────────────────┬─────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│  BATONPASS ENGINE  (execution dispatch)                  │
│  conductor/tracks · symphony runner · eval gate          │
│  Dispatches agents via agent-mesh transport              │
└───────────────┬───────┬───────┬───────┬─────────────────┘
                ▼       ▼       ▼       ▼
            ┌──────┐┌──────┐┌──────┐┌──────┐
            │  pi  ││Codex ││Claude││Gemini│
            │      ││      ││ Code ││      │
            └──────┘└──────┘└──────┘└──────┘
            Agent Runners (swappable via stable contract)

Why This Split Matters

Subsumption-resistant architecture. Every frontier lab is converging on agentic capabilities. A stronger Claude Code is a stronger runner — it's a dependency upgrade, not a competitor.

The value Moneypenny owns sits above the runners (intake, classification, triage, dispatch) and below them (evidence substrate, ClickHouse archive, eval gate, self-improvement flywheel). No frontier lab will build passive cross-channel eavesdropping on personal comms or a Tinder-swipe HITL triage surface for personal AI task management.


Source Locations (chezmoi repo)

ComponentPathRuntime
MP core pipelineprojects/moneypenny/Bun :9100
MP SDKprojects/moneypenny-sdk/Library
Switchboard UIprojects/batonpass/switchboard/SvelteKit
MP CLIdot_local/bin/executable_moneypennyBash
iMsg pipelinedot_local/bin/executable_imsg-{eavesdropper,classify,ticket-builder,pipeline}Bash + qwythos
Agent mesh transportdot_pi/agent/lib/mesh/Bun sidecar
Mesh gatewaydot_pi/agent/extensions/mesh-gateway.tsPi extension
Architecture docsdocs/architecture/moneypenny-*.md (25+ files)Markdown
Brand systemdocs/design/moneypenny-brand-system.mdMarkdown
Strategic roadmapdocs/strategy/2026-06-29-moneypenny-strategic-roadmap.mdMarkdown

Current State (2026-07-02)

  • Pipeline core: TypeScript classes tested (79 expect() calls across eavesdropper/classifier/ticket-builder). Not running as daemon yet.
  • Channel adapters: iMessage (378 LOC, 69 expects) and Gmail (417 LOC, 37 expects) built and tested.
  • Switchboard UI: SvelteKit components on macwork branch (2504 LOC across 15 files). Not yet on main.
  • Agent mesh: Cross-machine verified (steambox ↔ Mac) via Bun/Tailscale P2P. ClickHouse archive layer wired.
  • CLI: moneypenny start/stop/status/logs/tail operational.

Gap to Live

  1. Channel registry runtime (glue between adapters, eavesdropper, and classifier)
  2. Semantic matching in eavesdropper (returns 0; keyword/regex/sender work)
  3. Gmail polling daemon (adapter built, no LaunchAgent)
  4. Switchboard UI merge from macwork branch to main
  5. LM Studio loaded for qwythos classifier gate

Authored by research-docs-GUY, 2026-07-02.

Built with ❤️ following Bell Labs standards. Dedicated to Stan Eisenstat.