A local-first, self-hostable personal finance backend for AI agents and power users.
money pulls account and transaction data from user-configured financial providers, stores it in a user-owned encrypted SQLite database, and exposes stable CLI + JSON contracts for external agents, scripts, and cron jobs.
It does not embed AI chat, model providers, hosted billing, telemetry, or a required long-running server. Your data stays local. Your agent owns the reasoning.
Existing personal finance tools either lock data behind a paid SaaS, embed opinionated AI advisors, or assume a full web-app product shape. money takes a different approach:
- Local-first data ownership — your financial data lives in an encrypted file you control.
- Agent-friendly contracts — stable JSON envelopes that any AI agent, script, or automation can parse.
- Provider-neutral — Plaid, Bridge, CSV imports — providers are replaceable adapters.
- No server required — runs as a CLI on your laptop, in cron, or in CI.
👉 New to money? Read the full Getting Started guide for step-by-step installation, setup, and pricing details.
# Install via Homebrew Cask (macOS/Linux)
brew install --cask thedavidweng/tap/money
# Or install via Go (macOS/Linux/cross-platform)
go install github.com/thedavidweng/money/cmd/money@latest
# Initialize configuration and encrypted database (interactive)
money setup
# Link your bank and sync data
money link
money sync
# Query your local data
money accounts list --json
money transactions search "Costco" --jsonIf you installed an older Homebrew formula release, migrate to the cask:
brew update
brew uninstall --formula thedavidweng/tap/money
brew install --cask thedavidweng/tap/money
money versionYour local ~/.money config, secrets, and database are not removed by uninstalling the old formula.
Try it without real credentials:
money demo accounts list --json
money demo transactions search "coffee" --json# Getting Started
money setup Initialize configuration and encrypted database
money doctor Check configuration and system health (--fix, --dry-run)
money demo <command> Run against non-persistent sample data
# Data Queries
money accounts list List financial accounts
money accounts create-manual Create a local manual account
money transactions list List transactions with filters
money transactions search Search transactions by text
money tx Alias for transactions
money categories list List transaction categories
money tags list List transaction tags
money recurring list List recurring transactions
money investments holdings List investment holdings
money investments securities List investment securities
money liabilities list List liabilities
money items list List linked provider items
money items get <id> Get a linked provider item
money items rename <id> <name> Rename a provider item alias
money items remove <id> Remove a linked provider item with cascade delete
money import <source> <file> Import data from external sources (source: monarch, csv)
money cashflow Show cashflow summary by period
money net-worth Show net worth breakdown
# Budgets & Rules
money budgets list List budgets
money budgets create Create a budget
money budgets get <id> Get budget details with categories
money budgets delete <id> Delete a budget
money budgets categories create Add a category to a budget
money budgets categories delete Remove a category from a budget
money rules list List transaction rules
money rules create Create a transaction rule
money rules delete <id> Delete a transaction rule
money rules apply Apply rules to transactions
# Provider Management
money link Link a financial institution
money providers configure <provider> Configure provider credentials
money plaid login Sign in to Plaid Dashboard and fetch API keys
money plaid logout Remove Plaid Dashboard auth; keep API keys
money plaid sandbox link Create and store a Plaid Sandbox Provider Item
money providers plaid link Link a Plaid Provider Item
money providers bridge link Link a Bridge Provider Item
money sync Sync linked provider data (supports --start-date/--end-date)
# Utilities
money feedback Open the project GitHub issues page
money version Print version
--config string config file path
--profile string configuration profile (default "default")
-j, --json write a JSON envelope to stdout
Read commands and provisional sync diagnostics support --json for machine-readable output. Manual write operations require --dry-run or --confirm.
cmd/money/ CLI entrypoint (Cobra)
internal/cli/ CLI commands and doctor diagnostics
internal/config/ Configuration loading and validation
internal/contracts/ JSON envelopes, schema versions, error codes
internal/core/ Finance primitives and domain types
internal/importsource/ CSV and Monarch Money importers
internal/linking/ Plaid Link helper functions
internal/plaidlogin/ Plaid Dashboard OAuth login flow
internal/prompt/ Interactive TUI prompts (via Charm huh)
internal/providers/ Provider adapters (Plaid, Bridge, …)
internal/store/ Encrypted SQLite store and migrations
internal/syncer/ Transaction sync orchestration
Read commands use local data only. Sync is the explicit boundary where outbound provider calls happen. See docs/ARCHITECTURE.md for the full design.
- CLI-first — human output by default,
--jsonfor automation. - Stable contracts — versioned JSON envelopes with deterministic sorting and pagination.
- Explicit failures — no hidden fallbacks, no silent downgrades.
- BYOK providers — bring your own Plaid/Bridge credentials; no managed proxy or subscription.
- Encrypted at rest — real financial data never touches plaintext SQLite.
- Small deep modules — simple interfaces over pass-through wrappers.
| Document | Purpose |
|---|---|
docs/GETTING_STARTED.md |
Install, setup, and pricing guide |
docs/PRD.md |
Product requirements |
docs/ARCHITECTURE.md |
Module boundaries and data flow |
docs/CONTRACTS.md |
Current CLI JSON contracts |
docs/SCHEMA.md |
Database schema contract |
docs/CONFIG.md |
Configuration loading rules |
docs/ROADMAP.md |
Development phases |
CHANGELOG.md |
Release history |
SECURITY.md |
Vulnerability reporting policy |
The project landing page (Astro, static HTML) lives in website/. Published site: https://thedavidweng.github.io/money/ (enable GitHub Pages → GitHub Actions in the repository settings if it is not live yet).
cd website
npm ci
npm run dev # local preview
npm run build # output in website/distmoney draws inspiration from several excellent projects:
- monarchmoney-cli — agent-friendly CLI contract design, JSON envelope patterns, and safety model.
- Ray Finance — Plaid/Bridge sync architecture, local encrypted database patterns, and provider adapter design.
- Actual Budget — local-first budgeting philosophy and automation API patterns.
- Maybe Finance — personal finance domain modeling and product vocabulary.
