Skip to content

Introduction

Moneypenny is an open-source, local-first coding agent. Three modes, one stack:

  • CLI Agent — Install it, point it at a repo, get AI help writing and understanding code.
  • MCP Sidecar — Augment Cursor, Claude Code, or any MCP client with persistent code intelligence, governance, and audit.
  • Daemon — Define background agents via markdown, schedule them with cron, govern them with YAML policies.

All three share the same storage, search, context, and governance layers. The difference is the transport: CLI for interactive work, MCP for IDE integration, daemon for autonomous agents.

Everything lives in a SQLite file in your repo.

Why Moneypenny

Other coding agents are cloud-first. Your code context goes to their servers. Your agent’s state is ephemeral or locked in their platform. You don’t control the cost, the data, or the infrastructure.

Moneypenny inverts all of that:

  • Local-first. The agent runs on your machine. Bring your own API key.
  • Portable state. Sessions, code index, policies, audit trail — one SQLite file. Copy it to another machine, copy the agent.
  • Governed. Policy checks on every tool call. Deny destructive commands, rate-limit shell access, audit everything.
  • Persistent memory. Sessions persist across restarts. Knowledge compounds. The next session starts with everything the last one learned.

Core Capabilities

Hybrid Code Search

BM25 full-text + vector semantic search across your codebase. Local embeddings via sqlite-ai. Incremental indexing. Zero API cost.

Governance & Policy

Policy checks on every tool call. Denial-aware control flow. Auditable decisions. Credential redaction. Cost limits per session and per turn.

Portable State

The database is the runtime. One SQLite file per project. Back up by copying a file. Inspect with any SQLite client. No infrastructure.

Agents as Markdown

Define agents in .md files with YAML frontmatter. The body is the system prompt. Tools, schedule, model, and policies in the frontmatter.

How It Works

The database is the runtime. Code search, policy evaluation, and audit logging all execute inside SQLite. The orchestrator is a thin async loop; the intelligence lives at the data boundary.

User message (CLI, MCP, or HTTP)
→ Incremental index check
→ Context assembly (code + history + skills)
→ Policy evaluation
→ LLM generation (your API key)
→ Tool execution (policy-gated, audited)
→ Response

Every step operates on the same SQLite file. No Postgres, no Redis, no vector database. The entire surface area is available over MCP, so every operation can be triggered from Cursor, Claude Code, or any MCP-compatible client.

Use It Your Way

The mp command is the primary interface:

Terminal window
npx moneypenny init
mp chat "refactor the auth module to use JWT"
mp search "where do we handle rate limiting?"
mp doctor

Built On

SQLite extensions that handle vector search, embeddings, and local inference:

ComponentRole
sqlite-aiOn-device LLM inference, embeddings, chat (GGUF)
sqlite-vecVector search, SIMD, quantization
FTS5Full-text search with BM25 scoring

Next Steps