Repository navigation
v0.1.0
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 runfetches accounts, balances, transactions, holdings and investment transactions per connection. One connection's failure never stops another.--until-readykeeps going while a backfill is still arriving. The exit codes are built for a scheduler:0done,75run again soon,1a connection needs you,2the run could not happen. - Encrypted datastore. SQLCipher, with the key in the macOS keychain.
store key export,verifyandimportget the key out, check your copy, and put it back.store backupworks at any schema version.store rebuildreplays 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 reauthrepairs an expired login in place, keeping history and cursor.connections retireremoves 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_reportandget_pipeline_health. Every answer carries the environment it came from, a freshness stamp, coverage, the build that answered, and warnings (stale,gapped,partialand 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.