Getting started — the first ten minutes
ShippedWorks today.
Sign up, a book is provisioned as its own machine, you connect an agent to it, and the first thing you do is open accounts — because a posting to an account that was never opened is refused.
1. Get an account
app.countbean.com has two doors: Continue with Google, or email and a
password. Either one works; neither is a waiting list.
2. Your book is a machine
A book is not a row in a shared database. It is a private git-versioned Beancount ledger on its own machine, reachable only through the authenticated control plane — there is no public address for your book, by design.
That machine stops when idle and starts again on your next request. The first call after a quiet stretch takes a second or two, and can briefly answer “starting up”. That is a cold start, not a broken credential — the usual mistake at this point is to go and reissue a key that was perfectly good.
3. Connect an agent
In Claude, run /countbean:init. It shows you a short code and a link, you
open the link, choose which book to connect, and approve. Nothing is pasted and
no key is ever shown.
If your browser is on another machine, /countbean:connect takes a key
instead: open your book, Connect Claude → Create key, and paste the line it
gives you. The key is shown once.
Do not pass a
control_url.connect_bookrejects an explicit one even when it is the correct/v1/books/<id>/apiURL printed on the book page. Let the plugin resolve the endpoint.
Either path stores the connection in ~/.countbean/credentials.json, readable
only by you, and takes effect on the next tool call — no restart, no
environment variables.
4. Open accounts before you record anything
Beancount will not accept a posting to an account that was not opened first.
2026-01-01 open Assets:Bank:Checking USD
2026-01-01 open Liabilities:CreditCard USD
2026-01-01 open Income:Consulting
2026-01-01 open Expenses:Software
Ask the agent to set up a starter chart and it will compose exactly this and
send it through open_accounts. Read accounts before you
accept the suggestion — the currency on an open line cannot be changed later.
5. Put something real in it
/countbean:ingest ~/Downloads/statement-january.csv
The agent reads the file, maps rows to accounts, shows you a table, and only
then writes. Every write is validated with bean-check server-side and
committed to git. A rejected write returns REJECTED with the validator’s
error and nothing lands — there is no half-saved state to clean up.
6. Look at it
/countbean:status for balances and the last few commits.
/countbean:report for a styled HTML page or an Excel workbook.
Or open the book in your browser for the full ledger UI — balance sheet,
income statement, journals.
What there is not
No bank feeds, ever. You export a file from your bank, which is also why every bank in every country works on day one.
No data entry in the browser. The ledger UI is read-only and the proxy in
front of it accepts GET and HEAD only. Every write goes through the agent
or the API, so that every change has an author and a diff.
No import wizard. There is no screen where you map columns; you hand the file to the agent. A deterministic server-side importer is being built (#515).
No one-click export yet (#48) — see your data.
Something here wrong or missing? Put it on the board — it is public, and the reply is in the thread.