Not a budget toy. The pages below replace what people use Mint, Empower, and a stack of spreadsheets to do — under one roof, with your own data.
Per-account FIFO matching mirroring the 1099-B. Chain-correct wash-sale calculator, cross-account transfer reconciliation, Form 8949 CSV, pre-flight sell modal, tax-loss harvest finder.
Multi-decade Monte Carlo with bracket-aware tax math, Roth conversion ladder, IRMAA, RMDs, survivor scenario, sequence-of-returns stress, age-banded spending phases.
30-day forward calendar with paycheck overlay, per-day running balance, projected low-point tile, drag-to-reschedule for one-off events.
Full amortization with extra-payment slider, bi-weekly comparison, refinance modeler, PMI drop-off detection, HELOC modeling, multi-loan stacked timeline.
HSA contribution tracker, capital-loss carryover, Schedule C bucketizer with capital-vs-expense routing, business mileage. One PDF for your CPA.
Per-category targets with personal/business split. Auto-rollover for variable categories. Force-tag/untag overrides for the subscription detector.
The tile grid above is the brochure. This is the showroom — what each page actually looks like and the specific work it does.
The page you open every morning. Net-worth + cash + month-delta tiles, anomaly insights surfaced before you go looking, and stale-balance alerts on accounts that haven’t synced.
A spreadsheet that knows what categories are. Search, filter, edit in bulk, attach notes, pin for later — and when you recategorize a one-off, the app offers to make it a permanent rule.
Heatmap of when you spend, leaderboard of who you pay, year-over-year of how that’s shifting. The page that makes patterns visible before they become problems.
A real calendar, not a list. Bills and paychecks land on actual dates with a running balance underneath, and a low-point tile flags the day you should worry about.
One page that answers “what if I paid an extra $200/mo?” without a spreadsheet. Includes the modeling tools your bank charges to use.
The page accountants charge $300/hour to assemble. Per-account FIFO matching that mirrors your 1099-B, a chain-correct wash-sale calculator, and a clean Form 8949 CSV at the end.
A retirement model that knows about progressive brackets, RMDs, IRMAA, the 0% LTCG rule, and what happens when one spouse outlives the other. Most calculators stop at “rough estimate.”
A year-end summary that pulls from every other page — HSA contributions, capital loss carryover, Schedule C buckets, business mileage — and stitches them into a single document.
One SQLite file, not a SaaS. Plaid runs over TLS direct from your laptop to your bank. No cloud, no analytics, no telemetry, no marketing emails to opt out of.
Mint went away. Many of its replacements will eventually too. Tusk Ledger is yours — fork it, host it, hack it. The bus factor is one (you).
Free Plaid tier covers up to 100 connected items. For a personal household that’s permanent. Past that you’re paying Plaid directly, not me.
Plaid talks to your bank, your laptop talks to Plaid, and that's the entire round-trip. There is no Tusk Ledger server in the middle because there is no Tusk Ledger server. Your AI assistant connects via a second local process — the MCP server — that never leaves your machine either.
Five years ago, running a local-first finance app meant being a developer. Today, you just need an AI assistant in your pocket. Tusk Ledger is built to work with Claude Code, Cursor, Cowork, and the rest — clone the repo, hand it to your assistant, and let it install, configure, and customize it for you.
Tell Claude / Cursor / Cowork to set up tuskledger. It clones, reads AGENTS.md, installs the venv + node modules, and gets the dev servers running.
Add tuskledger-mcp to your assistant's MCP config (one uvx line). Now it can call typed tools like list_accounts, query_transactions, and get_holdings — no UI scraping, no guessing at the schema.
Your assistant guides you through getting sandbox keys (5 min) or production access (a few days). When something errors out, paste the error back to it; the gotchas are documented.
"Add a tile that shows my coffee spending by week." "Make the dashboard hide income." Your assistant edits the React component, hot-reloads, and the change is live. The repo is your repo.
The data stays on your laptop. Your assistant stays separate (you bring your own — there's no LLM embedded in the app). The bridge between them — tuskledger-mcp — stays local too.
Where it's the same, where it's different, where the trade-offs sit. Calibrated by someone who actually used all five for years.
| Mint | Empower | Quicken | Spreadsheet | Tusk Ledger | |
|---|---|---|---|---|---|
| Local-only data | ○ | ○ | ◐ | ● | ● |
| Open source / inspectable | ○ | ○ | ○ | ● | ● |
| No subscription | ◐ | ● | ○ | ● | ● |
| Bank sync (Plaid) | ● | ● | ● | ○ | ● |
| Bills + paycheck calendar | ● | ○ | ● | ○ | ● |
| Tax-aware retirement model | ○ | ◐ | ◐ | ○ | ● |
| Wash-sale calculator | ○ | ○ | ◐ | ○ | ● |
| Schedule C bucketizer | ○ | ○ | ◐ | ○ | ● |
| Zero telemetry | ○ | ○ | ○ | ● | ● |
| Survives if vendor folds | ○ | ○ | ○ | ● | ● |
| AI assistant (MCP) hookup | ○ | ○ | ○ | ○ | ● |
Your bank data should live where your bank statements live — on your machine. No SaaS to outlive, no breach to be in, no marketing emails to opt out of. SQLite is in your home folder; you can move it, back it up, or delete it like any other file.
Copy the .db file. That’s the entire app’s state. Restore on the new machine, run ./start.sh, and you’re back exactly where you left off. Plaid access tokens carry over too unless they’ve expired.
The app auto-snapshots the SQLite DB on every startup to a sibling folder. You decide what backup tooling fits the rest of your life — Time Machine, rsync, encrypted external drive, an iCloud Drive folder. The DB is one file.
Plaid’s free tier covers 100 connected items. For one household, that’s permanent. If you go past it, you pay Plaid directly — there’s no middle layer marking up your usage. If Plaid disappeared tomorrow you’d lose bank sync but keep every transaction you’d already pulled.
It’s already out. The whole DB is on your laptop in plain SQLite. Open it in DB Browser, dump it to CSV, query it from a Python REPL — there’s no export button because there’s no lock-in.
Demo mode ships enabled by default so you can poke around with seeded data before linking real accounts. One toggle in Settings flips you to real mode; the app refuses to mix the two and prompts before the switch.
Optional. There’s full email/password + TOTP MFA support if you want it; on a single-user laptop many people skip it via DEV_BYPASS_AUTH. Your machine, your call.
GitHub issues for bugs, GitHub PRs for code, GitHub discussions for ideas. The main app and the MCP server are separate repos with their own issue trackers — file the bug where the bug lives.
tuskledger-mcp is a separate, optional Model Context Protocol server. Add it to your AI assistant's config (one uvx line) and Claude / Cursor / Cowork can call typed tools like list_accounts, query_transactions, get_holdings, get_retirement_projection — instead of scraping the React UI. The main app runs perfectly without it; the MCP server just makes agent-driven workflows fast.
No. It binds to 127.0.0.1 only and talks to your local Tusk Ledger backend over stdio. The "MCP cloud" doesn't exist — it's one Python process on your machine talking to another Python process on the same machine. Your assistant reads the responses, your assistant's provider sees those responses (whichever LLM you chose), and that's the entire trust boundary.
Hand the install to your AI assistant, or run the five-line shell setup yourself. Same end state either way: app on localhost, data on your laptop, no cloud in the loop.
Copy the prompt below into Claude Code, Cursor, Cowork, or any other AI client with file system and shell access. Your assistant clones the repo, reads AGENTS.md, runs the setup, pauses to ask you for Plaid sandbox keys, then verifies with ./tuskledger doctor. You answer two questions; it does the rest.
I want to install Tusk Ledger, a locally-run personal finance app. Main repo: https://github.com/BradMorphsters/tuskledger MCP server: https://github.com/BradMorphsters/tuskledger-mcp (optional, recommended) Please: 1. Clone the main repo to a sensible place on my machine. 2. Read AGENTS.md at the repo root — it documents permission boundaries, common operations, and known footguns. Follow its conventions. 3. Run the setup (cp backend/.env.example backend/.env, then ./start.sh). 4. When .env needs Plaid keys, pause and ask me — I'll get sandbox keys from plaid.com (5 min). Don't make up credentials. 5. Run ./tuskledger doctor and show me the JSON; confirm all checks pass. 6. Open http://localhost:5173 and verify Demo Mode loads. 7. Ask if I want the MCP server wired in. If yes, add tuskledger-mcp to my MCP client's config (ask which client) using uvx --from git+<repo>. Don't disable auth or rotate the encryption key without asking. Everything stays local — there is no cloud server to talk to.
Works in any client with file system + shell access (Claude Code, Cursor, Cowork, Copilot CLI, Aider, etc.). Won't work in plain claude.ai or chatgpt.com — those can't touch your computer.
Requires Python 3.12+ and Node 22+. Plaid sandbox keys are immediate; production access takes a few days but is free for household use.
# 1. Clone
git clone https://github.com/BradMorphsters/tuskledger.git
cd tuskledger
# 2. Configure backend (paste Plaid sandbox keys)
cp backend/.env.example backend/.env
# 3. Launch — sets up venv + npm install + boots both servers
./start.shOr double-click Tusk Ledger.command if you cloned to a Mac. Demo mode is enabled by default so you can poke around before linking real accounts.
Drop this into Claude Desktop, Cursor, Cowork, or any other MCP-aware client and your assistant gets typed access to your local Tusk Ledger data — accounts, transactions, holdings, the whole API surface. Source at github.com/BradMorphsters/tuskledger-mcp.
{
"mcpServers": {
"tuskledger": {
"command": "uvx",
"args": ["--from", "git+https://github.com/BradMorphsters/tuskledger-mcp", "tuskledger-mcp"]
}
}
}Restart your client and the tools appear. The server runs locally — it binds to 127.0.0.1 and talks to your laptop's Tusk Ledger backend over stdio. No data leaves your machine.