Updates
Every change shipped to bookkeeper.onestos.org, most recent first.
Three improvements to the month-end close pack. (1) Warning resolutions: run 'bookkeeper resolve 2026-04 ANOM-010 "Interest Expense" --reason "..."' to mark a warning as investigated. Re-open the pack and it shows a CLEARED badge with your reason. (2) Channel P&L breakdown: new section showing revenue, COGS, and gross margin by channel (Amazon, Shopify DTC, Wholesale, Other) — derived from P&L line names, no extra Xero calls. (3) Accountant checklist: open items are separated from cleared ones with checkboxes, so your accountant can see at a glance what still needs attention. Schema bumped to v4 (close_resolutions table, auto-migrates on deploy).
The bills inbox workflow now connects to Gmail directly when GMAIL_CLIENT_ID and GMAIL_REFRESH_TOKEN are set in the environment. Previously it ran in demo mode only. Set the three env vars in DigitalOcean and forward [email protected] supplier invoices to the bookkeeper-bills label to go live.
The 'Approve X safe' button previously counted already-auto-applied transactions, making the number misleading. Auto-applied items now appear only in the 'Auto-applied this run' section, not in the pending approval sections. High-confidence transactions held back because they exceed the $1,000 auto-apply threshold are now flagged with [>AUD 1000] in the card.
The database now upgrades itself when the container starts. Schema version errors like 'Found v1, expected v2' can no longer block the site after a deploy.
When 3 or more bank transactions share the same LLM-assigned supplier and account code within 90 days, they're automatically queued as a proposed rule. The rule goes into a pending review queue — Ryan approves or rejects it. Fires after every batch apply and every Telegram approval.
High-confidence LLM suggestions (90%+) on transactions under $1,000 now apply to Xero automatically without waiting for manual approval. Medium and low confidence still go to the review queue.
Claude Haiku now categorizes bank transactions that don't match any coding rule. Results are cached for 24 hours so the same transaction isn't sent to the API twice. Includes 'bookkeeper migrate' command to upgrade existing databases to schema v2.
Transfers between ONEST bank accounts (e.g. ANZ operating to Amex credit card payment) are now detected and reconciled as matching pairs automatically. They no longer show up as unmatched exceptions.
The Shopify payout clearing account was incorrectly being matched as an inter-account transfer. It's now excluded from the transfer-pair detector.
Tapping Approve Safe or Approve All in the daily Telegram card now immediately reconciles the transactions in Xero — no separate step needed. Previously approve and apply were two separate actions.
New hero card showing current cash position, 30/60/90-day milestone cards, and a cleaner weekly bar chart. Replaced the previous basic table layout.
Cashflow projections now pull live data from the Google Sheets revenue model and Xero AR/AP balances. Previously the cashflow page showed demo data only.
You can now trigger the write-to-Xero apply step directly from the web UI without using the CLI. Also upgraded close-month commentary to Claude Sonnet for better quality summaries.
Added a sign-out button to the sidebar footer. Apply now surfaces detailed results (how many applied, how many skipped, any errors) as a modal rather than silently reloading.
Plain-English guide covering every section of the dashboard, confidence levels, common questions, and the Xero setup checklist for Waseem.
System analyses 90 days of transactions already reconciled in Xero and proposes new coding rules. Claude Haiku clusters transactions by counterparty and suggests a rule slug, account code, and reference pattern for each cluster. Ryan reviews and approves before rules go live.
The bookkeeper moved from localhost to a production DigitalOcean App Platform service. Persistent volume for the SQLite ledger so data survives deploys.
Ledger database now syncs to Turso (cloud SQLite) after each run. Data is preserved across container restarts and deploys even when the DO volume isn't mounted.
Generates a full close pack for any entity + month: P&L comparison (current vs prior month vs prior year), balance sheet reconciliation, variance analysis, anomaly detection, and an AI executive summary. Read-only — nothing is written to Xero.
The month-end close page now opens with a plain-English verdict: 'This month can be closed' or 'X things are blocking close', with specific actions listed.
A browser bookmarklet that clicks all green 'OK' suggestion ticks in Xero's bank rec UI automatically. Install once (drag to bookmarks bar), use on any Xero bank rec page. Saves clicking 50+ rows one-by-one.
New page showing bank transactions already reconciled in Xero with their assigned account codes. Useful for auditing how suppliers have been coded historically.
bookkeeper serve now starts a full web dashboard at localhost:8765 (now bookkeeper.onestos.org). Includes bank rec, bills inbox, cashflow, runs history, rules management, entities, and settings.
Reads supplier invoices from the Gmail 'bookkeeper-bills' label, extracts vendor, amount, date, and line items using Claude, and creates draft bills in Xero for review.
Initial bookkeeper-cli: typed CLI with SQLite operation ledger, entities resolver, idempotency keys, error codes, init/doctor/status/runs/explain commands. The foundation everything else is built on.