CPA package: every receipt behind the period's entries with an index,
company documents, the journal as IIF, the 1099 worksheet, and a README;
include_receipts=false for a light package. The scaffolded AGENTS.md
covers receipts from email, switching from QuickBooks/Xero/spreadsheets,
and working with the CPA. GUI: a books copy without a server database
reads 'Read-only copy'. Site: example prompts, QuickBooks comparison,
what it does and doesn't do yet, the CPA section, FAQ.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MtYEaR6M6Ybdhm6X98BWNu
DiskCheck::Matches=>(true,"Database matches journal".to_string(),"The server's SQLite database matches a fresh projection of the journal, every table, row for row.".to_string()),
DiskCheck::Matches=>(true,"Database matches journal".to_string(),"The server's SQLite database matches a fresh projection of the journal, every table, row for row.".to_string()),
DiskCheck::Behind{applied,journal}=>(true,"Database catching up".to_string(),format!("The database has applied {applied} of {journal} journal events; the server applies the rest right after writing them.")),
DiskCheck::Behind{applied,journal}=>(true,"Database catching up".to_string(),format!("The database has applied {applied} of {journal} journal events; the server applies the rest right after writing them.")),
DiskCheck::Missing=>(true,"Database will rebuild".to_string(),"No database file yet; the server builds it from the journal when it starts.".to_string()),
DiskCheck::Missing=>(true,"Read-only copy".to_string(),"No server database here: a copy of the books (a CPA's, say), or the server hasn't run yet. The journal and every file are verified either way.".to_string()),
DiskCheck::Differs(why)=>(false,"Database differs".to_string(),format!("{why}. The server rebuilds it from the journal (books.verify, or on its next start).")),
DiskCheck::Differs(why)=>(false,"Database differs".to_string(),format!("{why}. The server rebuilds it from the journal (books.verify, or on its next start).")),
description = "Build the CPA handoff package as a zip (base64): the profit and loss, balance sheet, cash flow, statement of changes in members' equity (multi-member LLCs), and trial balance, each as PDF and XLSX; plus the general ledger (by account) and general journal (entry by entry) as XLSX. cash_accounts (e.g. [\"1000\"]) is required: the cash flow statement reconciles to them. as_of defaults to today; period reports cover the fiscal year to date.",
description = "Build the CPA handoff package as a zip (base64): the profit and loss, balance sheet, cash flow, statement of changes in members' equity (multi-member LLCs), tax summary, and trial balance, each as PDF and XLSX; the general ledger (by account) and general journal (entry by entry) as XLSX; the journal as IIF (imports into QuickBooks Desktop); the 1099 worksheet as CSV; every receipt behind the year's entries (receipts/, with an index.csv tying each file to its entry) and the company's documents (documents/), unless include_receipts is false; and a README with the journal's verified hash. cash_accounts (e.g. [\"1000\"]) is required: the cash flow statement reconciles to them. as_of defaults to today; period reports cover the fiscal year to date.",
"{name} — books package for the CPA\n\nFiscal year to date: {fy_start} through {as_of_s}. {basis} basis.\nKept in wanderbooks: double-entry books from an append-only, hash-chained journal ({seq} events, verified).\n\nStatements (PDF and XLSX): profit and loss, balance sheet, cash flow, {members}tax summary, trial balance.\nLedgers (XLSX): general ledger by account; general journal entry by entry.\ngeneral-journal.iif: every posted entry, for import into QuickBooks Desktop.\n1099-worksheet-{year}.csv: cash paid per vendor marked for a 1099, against the year's threshold.\n{receipts}\nThe tax summary maps accounts to return categories; it's a worksheet, not a filing. Questions go to the owners, who can ask their bookkeeping agent to trace any number to its entries and receipts.\n",
name=self.company.name,
basis=self.company.basis,
members=ifself.company.members.is_empty(){
""
}else{
"members' equity, "
},
receipts=ifp.include_receipts{
format!(
"receipts/: the {receipt_count} receipts behind the period's entries; index.csv ties each to its entry, date, amount, and SHA-256.\ndocuments/: the company's formation, legal, and tax documents.\n"
<title>wanderbooks — bookkeeping you talk to</title>
<title>wanderbooks — own your books, hire an AI bookkeeper</title>
<metaname="description"content="Double-entry bookkeeping run by an AI bookkeeper. You talk; it keeps the books. You watch every number, live. Opensource, your files, on your machine.">
<metaname="description"content="Real double-entry bookkeeping in a folder you own, kept by an AI bookkeeper you talk to. No subscription, no lock-in, every number traceable to its receipt. An open-source alternative to QuickBooks Online.">
<pclass="lede">wanderbooks is real double-entry accounting run by an AI bookkeeper. You tell it what happened and hand it receipts; it keeps the books, balanced to the cent. You watch every number, live, and click through any of them to the receipt behind it.</p>
<h1>Own your books. Hire an AI bookkeeper.</h1>
<divclass="install"id="install-box">
<pclass="lede">wanderbooks is real double-entry accounting that lives in <b>a folder you own</b>, kept by <b>an AI bookkeeper you talk to</b>. It finds your receipts, records and categorizes everything, fixes its mistakes the way an accountant would, and hands your CPA a clean package. No subscription. No lock-in. Every number traceable to its receipt.</p>
<divclass="install">
<spanclass="prompt">$</span>
<spanclass="prompt">$</span>
<codeid="cmd">curl -fsSL https://git.swaits.com/swaits/wanderbooks/raw/branch/main/install.sh | sh -s -- ~/Books/YourCompany</code>
<codeid="cmd">curl -fsSL https://git.swaits.com/swaits/wanderbooks/raw/branch/main/install.sh | sh -s -- ~/Books/YourCompany</code>
<buttonclass="copy"id="copy">Copy</button>
<buttonclass="copy"id="copy">Copy</button>
</div>
</div>
<pclass="note">One line: installs everything, makes your books, and starts your bookkeeper. Linux and macOS; Windows via WSL2.</p>
<pclass="note">One line installs everything, makes your books, and starts your bookkeeper. Linux and macOS; Windows via WSL2. Free and open source; you bring <ahref="https://claude.com/claude-code">Claude</a>.</p>
</div>
</div>
<divclass="shot light"><imgsrc="assets/overview.png"alt="The wanderbooks overview: cash, what you owe, spending, revenue, runway, a cash chart, and what needs attention"width="1440"height="920"></div>
<divclass="shot light"><imgsrc="assets/overview.png"alt="The wanderbooks overview: cash, what you owe, spending, revenue, runway, a cash chart, and what needs attention"width="1440"height="920"></div>
<divclass="shot dark"><imgsrc="assets/overview-dark.png"alt="The wanderbooks overview in dark mode"width="1440"height="920"></div>
<divclass="shot dark"><imgsrc="assets/overview-dark.png"alt="The wanderbooks overview in dark mode"width="1440"height="920"></div>
<pclass="caption">The overview of a demo company. It leads with the answer, then the evidence.</p>
<pclass="caption">The desktop view of a demo company. It leads with the answer, then the evidence.</p>
<sectionid="how">
<sectionid="ask">
<h2>You talk. It keeps the books. You see everything.</h2>
<h2>Just ask.</h2>
<pclass="sub">No forms, no categories to hunt for, no month-end scramble. The bookkeeper works through an accounting engine that refuses to be wrong, and the books are always open in front of you.</p>
<pclass="sub">Your bookkeeper is Claude, working through an accounting engine that won't let it be wrong. Talk to it the way you'd talk to a good bookkeeper. It does the work, shows you the result, and waits for your OK before anything is posted.</p>
<divclass="grid">
<divclass="grid">
<divclass="card"><divclass="k">Talk</div><h3>Your bookkeeper is an AI agent</h3><p>“Record the Apple developer fee, the receipt's in my email.” It drafts the entry, shows you the preview, attaches the receipt, and posts when you say so. Claude Code, via MCP.</p></div>
<divclass="card ask"><divclass="say">Find the receipt for the $106.38 Apple charge in my email and record it.</div><p>Searches your inbox, files the receipt as a PDF, drafts the entry with the right accounts, and shows you the preview.</p></div>
<divclass="card"><divclass="k">See</div><h3>A desktop view of everything</h3><p>Cash and runway, profit by month, every transaction with its rendered receipt, statements an accountant would sign off on. Changes the agent makes appear in milliseconds.</p></div>
<divclass="card ask"><divclass="say">Here's last month's bank export. Categorize everything.</div><p>Imports the transactions as drafts, proposes an account for each from how you've booked them before, and asks about the ones it isn't sure of.</p></div>
<divclass="card"><divclass="k">Own</div><h3>Your books are files you keep</h3><p>An append-only journal, your receipts, and a config file, in a folder under git. No subscription, no lock-in, no cloud you don't control.</p></div>
<divclass="card ask"><divclass="say">The domain renewal went to the wrong account. Fix it.</div><p>Reverses the entry and records it correctly. Nothing is ever erased; the history shows exactly what changed and why.</p></div>
<divclass="card ask"><divclass="say">Why did software spending jump in March?</div><p>Traces the number to the entries and receipts behind it, and tells you what's new.</p></div>
<divclass="card ask"><divclass="say">Can we afford to hire someone at $6,000 a month?</div><p>Works it out from your actual cash, burn, and what's coming in, and shows its math.</p></div>
<divclass="card ask"><divclass="say">We paid the designer $2,400 this year. Does she need a 1099?</div><p>Checks the threshold for the year, whether payments were by card, and whether her W-9 is on file.</p></div>
<divclass="card ask"><divclass="say">Close September.</div><p>Checks for missing receipts and unposted drafts, reconciles to your bank statement, posts depreciation and amortization, and closes the period.</p></div>
<divclass="card ask"><divclass="say">Get Krista everything she needs for our tax return.</div><p>Builds the CPA package: every statement, the ledgers, the tax summary, the 1099 worksheet, and every receipt, indexed.</p></div>
<divclass="card ask"><divclass="say">Move us off QuickBooks.</div><p>Rebuilds your history from QuickBooks' exports and checks every statement against QuickBooks, to the cent, before you cancel.</p></div>
</div>
</section>
<sectionid="quickbooks">
<h2>Why not QuickBooks Online?</h2>
<pclass="sub">QuickBooks rents you access to your own financial history, raises the rent every year, and makes leaving painful. You still do the bookkeeping yourself, in forms. wanderbooks turns that around.</p>
<tr><td>Where your books live</td><td>A folder on your computer, under git. Plain, documented files.</td><td>Intuit's servers. You get access while you pay.</td></tr>
<tr><td>What it costs</td><td>Nothing. Open source, forever. You bring your Claude plan.</td><td>A monthly subscription per company, and the price keeps rising.</td></tr>
<tr><td>Who does the bookkeeping</td><td>An AI bookkeeper: receipts, entries, categories, fixes, closes.</td><td>You do, in screens and forms. Or you pay someone.</td></tr>
<tr><td>Receipts</td><td>Required over a threshold you set, enforced on every entry, shown right beside it.</td><td>Optional attachments.</td></tr>
<tr><td>Audit trail</td><td>Every change is a hash-chained event; nothing is ever edited or erased.</td><td>An audit log inside their app.</td></tr>
<tr><td>Leaving</td><td>Your files are the books. Standard exports any time, including QuickBooks formats.</td><td>Export what you can, and hope.</td></tr>
</table>
<pclass="callout"><b>Can it really replace QuickBooks?</b> For most small businesses, yes. Here's exactly what you get, and what you don't (yet).</p>
<divclass="grid two-col"style="margin-top:22px">
<divclass="card">
<h3>What it does</h3>
<ulclass="ticks">
<li><b>Real double-entry books</b>: chart of accounts, journal, general ledger, trial balance.</li>
<li><b>Statements</b>: P&L, balance sheet, cash flow, owners' equity; by month, quarter, or year; with comparisons.</li>
<li><b>Invoices and bills</b>, with receivables and payables aging.</li>
<li><b>Tax-ready</b>: tax categories for Schedule C, 1065, 1120-S, and 1120; a 1099 worksheet.</li>
<li><b>The rest of a real business</b>: fixed assets and depreciation, prepaid expenses and deferred revenue, recurring entries, platform payouts, classes, foreign-currency lines, period close, bank reconciliation.</li>
</ul>
</div>
<divclass="card">
<h3>What it doesn't (yet)</h3>
<ulclass="crosses">
<li><b>Automatic bank feeds.</b> Hand it your bank's CSV export or statements; it does the rest.</li>
<li><b>Payroll processing.</b> It records payroll you run elsewhere (Gusto, ADP), taxes and all.</li>
<li><b>Sending invoices and taking payments.</b> It tracks them; your payment processor collects.</li>
<li><b>Logins for your team.</b> Others get a read-only copy (below) or their own session with the bookkeeper.</li>
<li><b>Point-and-click setup.</b> Today you run one command in a terminal. After that it's plain English.</li>
</ul>
</div>
</div>
</section>
<sectionid="cpa">
<divclass="two">
<div>
<h2>“But my CPA works in QuickBooks.”</h2>
<pclass="sub">Your CPA doesn't need QuickBooks. They need your numbers, the evidence behind them, and files their software can read. wanderbooks gives them more than a QuickBooks login ever did.</p>
<ulclass="ticks">
<li><b>One package, ready to send</b>: P&L, balance sheet, cash flow, equity, and trial balance as PDF and Excel; the general ledger and journal; the tax summary.</li>
<li><b>Every receipt</b> behind the year's entries, indexed by entry, date, and amount.</li>
<li><b>QuickBooks-compatible</b>: the journal as an IIF file that imports into QuickBooks Desktop, if that's where their workflow lives.</li>
<li><b>The 1099 worksheet</b>, with W-9 status.</li>
<li><b>A live, read-only view</b> if they want to look around: share the books folder privately and they open it in the desktop view. Nothing they do can change your books.</li>
</ul>
</div>
<divclass="shot"><imgsrc="assets/pnl.png"alt="A profit and loss statement in wanderbooks with interval columns and drill-down"width="1440"height="920"></div>
</div>
</div>
</section>
</section>
<section>
<section>
<divclass="two">
<divclass="two">
<divclass="shot"><imgsrc="assets/entry.png"alt="A transaction with its lines, its rendered receipt, and its history"width="1440"height="920"></div>
<div>
<div>
<h2>Every number goes all the way down.</h2>
<h2>Every number goes all the way down.</h2>
<pclass="sub">Click an amount on a statement and you get the transactions behind it, for exactly those dates. Click a transaction and you get its lines, the receipt itself, and every event in its history.</p>
<pclass="sub">The desktop view is read-only and live: whatever your bookkeeper posts appears in a fraction of a second. Click any amount on a statement for the transactions behind it. Click a transaction for its lines, the receipt itself, and every event in its history.</p>
<ulclass="ticks">
<ulclass="ticks">
<li><b>Statements an accountant expects:</b> profit and loss, balance sheet, cash flow, owners' equity, trial balance, general ledger.</li>
<li><b>Answers first</b>: cash, runway, profit, and what needs attention, in a sentence.</li>
<li><b>By month, quarter, or year</b>, compared with the prior period, each line as a share of income.</li>
<li><b>Needs attention</b> finds missing receipts, unposted drafts, overdue invoices, 1099 vendors without a W-9, and hands you the prompt to fix each.</li>
<li><b>Tax-ready:</b> tax categories by return (Schedule C, 1065, 1120-S, 1120), a 1099 worksheet, receivables and payables aging.</li>
<li><b>All the data</b>: the full journal, every receipt and document, light and dark.</li>
<li><b>Real-business features:</b> invoices and bills, fixed assets and depreciation, prepaid expenses, recurring entries, platform payouts grossed up, classes, multi-currency lines.</li>
</ul>
</ul>
</div>
</div>
<divclass="shot"><imgsrc="assets/entry.png"alt="A transaction with its lines, its rendered receipt, and its history"width="1440"height="920"></div>
</div>
</div>
</section>
</section>
<sectionid="trust">
<sectionid="trust">
<h2>Built so you can trust it.</h2>
<h2>Built so you can trust it.</h2>
<pclass="sub">An AI is doing your books, so the books have to be impossible to quietly get wrong.</p>
<pclass="sub">An AI is keeping your books, so the books have to be impossible to quietly get wrong.</p>
<divclass="grid">
<divclass="grid">
<divclass="card"><h3>The engine enforces accounting</h3><p>Every entry balances exactly; money is exact decimal, never floating point. Posted entries are permanent; corrections are reversing entries. Receipts are required over your threshold, enforced by the server.</p></div>
<divclass="card"><h3>The engine enforces accounting</h3><p>Every entry balances exactly; money is exact decimal, never floating point. Posted entries are permanent; corrections are reversing entries. The receipt rule is enforced by the server, not left to the AI's judgment.</p></div>
<divclass="card"><h3>A tamper-evident journal</h3><p>Every change is an event, hash-chained to the one before it. The database is rebuilt from the journal and checked against it, table by table; every receipt is checked against its hash. The app shows you the result.</p></div>
<divclass="card"><h3>A tamper-evident journal</h3><p>Every change is an event hash-chained to the one before. The database is checked against the journal table by table, and rebuilt if it ever drifts; every receipt is checked against its hash. The desktop view shows you the result.</p></div>
<divclass="card"><h3>You approve what matters</h3><p>The agent previews every posting before it happens. The desktop view can't change anything; when it spots a problem it hands you a prompt for the agent.</p></div>
<divclass="card"><h3>You approve what matters</h3><p>The bookkeeper previews every posting before it happens and waits for you. The desktop view can't change anything at all.</p></div>
</div>
</div>
</section>
</section>
<sectionid="install">
<sectionid="install">
<h2>Install</h2>
<h2>Install</h2>
<pclass="sub">The one line above does everything. It installs Rust if you don't have it, builds wanderbooks, makes your books folder with the bookkeeper wired in, and starts a session to set up your company.</p>
<pclass="sub">The one line at the top does everything: installs Rust if you don't have it, builds wanderbooks, makes your books folder with the bookkeeper wired in, and starts a session to set up your company.</p>
<divclass="platforms">
<divclass="grid">
<divclass="card"><h3>Linux</h3><p>Needs a C compiler and git (<codeclass="inline">build-essential</code> on Debian and Ubuntu). The installer tells you if anything's missing.</p></div>
<divclass="card"><h3>Linux</h3><p>Needs a C compiler and git (<codeclass="inline">build-essential</code> on Debian and Ubuntu). The installer tells you if anything's missing.</p></div>
<divclass="card"><h3>macOS</h3><p>Needs Apple's command line tools: <codeclass="inline">xcode-select --install</code>.</p></div>
<divclass="card"><h3>macOS</h3><p>Needs Apple's command line tools: <codeclass="inline">xcode-select --install</code>.</p></div>
<divclass="card"><h3>Windows</h3><p>Run it inside WSL2 (<codeclass="inline">wsl --install</code>, then Ubuntu). On Windows 11 the desktop view opens as a normal window. Native Windows is on the way.</p></div>
<divclass="card"><h3>Windows</h3><p>Run it inside WSL2 (<codeclass="inline">wsl --install</code>, then Ubuntu). On Windows 11 the desktop view opens as a normal window. Native Windows is on the way.</p></div>
</div>
</div>
<pclass="note"style="margin-top:24px">Already installed? <codeclass="inline">wanderbooks new ~/Books/AnotherCompany</code>. Inside a books folder, <codeclass="inline">just gui</code>opens the desktop view and <codeclass="inline">just agent</code>starts your bookkeeper. You'll need <ahref="https://claude.com/claude-code">Claude Code</a>.</p>
<pclass="note"style="margin-top:24px">Already installed? <codeclass="inline">wanderbooks new ~/Books/AnotherCompany</code>. In a books folder, <codeclass="inline">just agent</code>starts your bookkeeper and <codeclass="inline">just gui</code>opens the desktop view.</p>
</section>
<sectionid="faq">
<h2>Questions</h2>
<details><summary>What does it cost?</summary><p>wanderbooks is free and open source (MIT or Apache-2.0). Your bookkeeper is Claude, through Claude Code, which comes with a Claude Pro or Max plan or runs on API credits.</p></details>
<details><summary>Do I need to be technical?</summary><p>You need to paste one command into a terminal, once. After that you talk to your bookkeeper in plain English and read your books in the desktop app.</p></details>
<details><summary>How does it find my receipts?</summary><p>Connect your email to Claude (an email connector like Gmail's, or the Claude browser extension with your mail open) and ask. It searches for the vendor and amount, files one clean PDF per receipt, and attaches it to the entry. It asks before downloading anything, and it never types passwords or account numbers.</p></details>
<details><summary>Where's my data, and what does the AI see?</summary><p>Your books are files on your computer: a journal, your receipts, and a settings file, in a git repository you control. Nothing is uploaded to wanderbooks; there is no wanderbooks server. What your bookkeeper reads to help you goes to Anthropic like any Claude conversation.</p></details>
<details><summary>What if the AI gets something wrong?</summary><p>Every posting is previewed before it happens. If something slips through, it's corrected the way accountants do it, with a reversing entry, so the mistake and the fix are both on the record. The engine itself refuses anything that doesn't balance, anything without a required receipt, and anything in a closed period.</p></details>
<details><summary>Is this real accounting, or a spreadsheet with an AI on top?</summary><p>Real double-entry accounting, with the rules enforced in code: exact decimal money, balanced entries, immutable posting, closes, depreciation, accrual or cash basis. Its statements are tested against hand-computed numbers, golden files, and property tests.</p></details>
<details><summary>Can I bring my history from QuickBooks or a spreadsheet?</summary><p>Yes. Export your chart of accounts, journal, and reports, and ask your bookkeeper to move you over. It rebuilds the history and compares every statement against the old system, to the cent, before calling it done. Keep the old system read-only until you've closed a month in wanderbooks.</p></details>
</section>
</section>
<footer>
<footer>
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.