Skip to content

weklund/fiduciary

Repository files navigation

Fiduciary

fiduciary — your money. your machine. your advisor.

Agent Skills License: MIT

A local-first personal finance advisor. Connects to your bank accounts, stores everything in SQLite on your machine, and uses an LLM agent as a conversational advisor — grounded in your real data, not generic platitudes.

Note

All data stays on your machine. No cloud storage. No telemetry. No product recommendations. See docs/PRIVACY.md for full details. If you have any questions please feel free to hit me on X! https://x.com/WesEklund

You: "What did I spend on dining this month?"
Advisor: queries your local DB, shows the answer with merchants and totals

You: "Should I pay off my credit card or keep cash reserves?"
Advisor: walks your actual balances and rates through a priority framework,
         accounts for your constraints, gives a specific recommendation with the math

Prerequisites

macOS or Linux (Windows via WSL) · Python 3.8+ · SQLite 3 · Homebrew · An Agent Skills-compatible runtime

Verify your setup
python3 --version   # 3.8+
sqlite3 --version   # any
brew --version      # any

All three come pre-installed on macOS. On Linux, install via your package manager.

Quick Start

git clone https://github.com/weklund/fiduciary.git && cd fiduciary
git config core.hooksPath .githooks
brew install plaid/plaid-cli/plaid
First-time Plaid setup (free account required)
plaid register     # opens browser — create a free Plaid developer account
plaid trial        # apply for the free Trial plan (auto-approved in ~60 seconds)
plaid login        # authenticate the CLI (opens browser for OAuth)
plaid keys fetch   # download your API keys

The Trial plan is free for personal use (up to 10 linked institutions).

plaid link --products transactions,liabilities,investments   # connect your bank (opens browser)
bash scripts/sync.sh                                         # pull data + build local DB
Connect your agent

Claude Code — open Claude Code in this directory. Skills auto-discover.

Hermes Agent:

cp CLAUDE.md ~/.hermes/SOUL.md
hermes skills add ./.claude/skills/*

Other tools — any Agent Skills-compatible runtime works (Gemini CLI, Cursor, GitHub Copilot, 42+ others).

Then run the advisor intake:

/onboard

This asks about your goals, situation, and risk tolerance — then writes a personalized profile so all future advice is tailored to you.

Skills

Command What it does
/onboard Financial advisor intake — sets up your personalized profile
/sync-data Pull fresh transactions from Plaid
/finance-query Ask any question about your finances
/next-dollar "What should I do with $X?" — applies order of operations to YOUR situation
/health-check Quarterly full assessment — pyramid status, ratios, action plan
/tactics Optimize your cards, accounts, and tools
/spending-audit Find waste, unused subscriptions, overspending
/weekly-report Generate a weekly spending summary

How It Works

┌─────────────┐     ┌──────────────┐     ┌─────────────────┐
│  Plaid CLI  │────▶│  SQLite DB   │◀────│  CSV Statements │
│  (live sync)│     │  (unified    │     │  (historical    │
└─────────────┘     │   ledger)    │     │   backfill)     │
                    └──────┬───────┘     └─────────────────┘
                           │
                    ┌──────▼───────┐
                    │  LLM Agent   │
                    │  (skills +   │
                    │   CLAUDE.md  │
                    │   frameworks)│
                    └──────────────┘

The advisory logic is built on the CFP Board's fiduciary planning process — a layered pyramid where you never optimize a higher layer while a lower one is unstable. See docs/ADVISORY.md for the full framework.

Adding Historical Data

Plaid gives ~30 days. For deeper analysis, add bank CSVs:

# Drop CSVs into data/statements/, then:
python3 scripts/ingest.py

Supports: Amex, Chase, Capital One, or any CSV with Date,Description,Amount columns.

Privacy & Security

This project handles your most sensitive data. We believe you deserve full transparency about what happens with it — not just marketing claims, but a published threat model you can read and challenge.

Your financial data never touches a git-tracked file. The only external calls are to Plaid (for sync) and your chosen LLM provider (for analysis).

Recommended: Commercial API key (7-day retention, no training). Zero-trust: Ollama locally (nothing leaves your machine).

Document What it covers
docs/PRIVACY.md Provider comparison, session logs, retention settings, credentials
docs/THREAT-MODEL.md Full STRIDE threat analysis — 15 threats, mitigations, accepted risks, runtime comparison
docs/HLD-Fiduciary.md System architecture, trust boundaries, data classification
Connecting additional banks

Run plaid link again for each institution:

plaid link --products transactions              # checking/savings only
plaid link --products transactions,investments  # brokerage accounts

Verify connections:

plaid item list      # list all linked institutions
plaid balance --all  # test that balances come back

Common issues:

  • Bank not found? Most major US banks are supported. Some smaller credit unions may not be in Plaid's network.
  • ITEM_LOGIN_REQUIRED? Bank session expired. Re-run plaid link to re-authenticate.
  • 10-institution limit: The free Trial allows 10 linked institutions.
Updating your profile

Run /onboard again anytime your situation changes:

  • New job or lost income
  • Major life event (marriage, kids, inheritance)
  • Goals or priorities shift
  • Want to add accounts or update metrics

The skill detects existing context and offers to update rather than start fresh.

Project structure
CLAUDE.md              ← Advisory frameworks (committed, no PII)
scripts/
  sync.sh              ← Pull from Plaid + rebuild DB
  ingest.py            ← Rebuild DB from all sources
.claude/skills/        ← Conversational finance skills (8 skills)
data/                  ← (gitignored) Financial data + SQLite DB
reports/               ← (gitignored) Generated reports
docs/                  ← Deep documentation
  ADVISORY.md          ← How the advisory logic works
  PRIVACY.md           ← Data retention + provider comparison

Philosophy

Track everything. Automate the boring stuff. Spend deliberately on what builds the future. Cut ruthlessly what doesn't.

This tool exists because most financial apps sell you products or harvest your data, generic advice doesn't account for YOUR situation, a financial advisor costs $200-400/hour, and your bank has the data. You should too, queryable, on your terms.

Contributing

See CONTRIBUTING.md. Good first contributions: CSV parsers for new banks, new advisory skills, improved category detection.

License

MIT

About

A personal financial advisor that runs locally. Plaid CLI + SQLite + Claude Code skills. Fiduciary-grade advice grounded in your real data.

Topics

Resources

License

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors