Skip to content

v0.1.0

Choose a tag to compare

@brookstalley brookstalley released this 14 Sep 22:21
fdf7836

The first release of bankmachine. It pulls your own financial data from Plaid into an encrypted datastore on your machine and serves it read-only to an AI agent over MCP. It runs against Plaid's sandbox or production, is built for one person on one Mac, and never moves money.

What's in it

  • Enrollment. Link an institution through Plaid Hosted Link. The history window is confirmed before anything irreversible happens, and the window actually granted is measured and reported once the backfill lands.
  • Sync. sync run fetches accounts, balances, transactions, holdings and investment transactions per connection. One connection's failure never stops another. --until-ready keeps going while a backfill is still arriving. The exit codes are built for a scheduler: 0 done, 75 run again soon, 1 a connection needs you, 2 the run could not happen.
  • Encrypted datastore. SQLCipher, with the key in the macOS keychain. store key export, verify and import get the key out, check your copy, and put it back. store backup works at any schema version. store rebuild replays the raw archive and refuses a result it cannot reproduce. A store this build cannot serve refuses instead of answering zero.
  • Connection health. Failures are recorded per connection and per data feed. connections reauth repairs an expired login in place, keeping history and cursor. connections retire removes a connection at the aggregator and keeps its rows.
  • MCP server. Seven of the eight specified tools: list_accounts, query_transactions (category, signed amount range, literal search), money_summary, balance_history (including net worth over time), list_holdings, get_coverage_report and get_pipeline_health. Every answer carries the environment it came from, a freshness stamp, coverage, the build that answered, and warnings (stale, gapped, partial and others) when the data behind it is incomplete.
  • Guard rails. Writes refuse to run until an environment is declared. Sandbox and production never share a datastore or a keychain entry. Transaction text is passed through as untrusted third-party input.

Upgrading a store from an earlier checkout

This release derives at version 12. Follow the upgrade order in docs/first-production-connection.md § 5.4: store backup, then store init, store status, and store rebuild.

Known gaps

  • Nothing schedules the sync yet. Run it daily yourself or from your own launchd job, because each run records that day's balances.
  • Pending-transaction settlement (#22) and the sign convention at a second cash institution (#23) have not been verified against real data.
  • A transactions page that carries a cursor marks that feed current at any status, including mid-backfill (#126).
  • Recurring-charge detection is specified but not built.