Service Pilot (Bookkeeping)
V2 only — invite-only edition. This is part of AI Partner V2 and is not in the open-source V1 you self-host from the Quick Start. V2 is available now, by invite. See V1 vs V2.
The model
You operate AI Partner; your clients are tenants who never see the UI. They email bank-statement CSVs (or message you on WhatsApp/Telegram), the month-end-close workflow categorizes + reconciles + builds the P&L workbook, and the deliverable lands back in their inbox. You review HITL approvals and invoice from per-tenant usage.
v1 is file-based: CSV statements in, Excel out. (QuickBooks/Tally integration and PDF statement parsing are future phases.)
Onboard a client (~10 minutes)
- 1Create the client's tenant
Admin Console → Users → generate an invite code and register an account for the client (e.g.
acme-stores). They never log in — the account exists for isolation: their statements, books, memory, and costs live in their own workspace. - 2Connect your operator Gmail
Integrations → Gmail (
GMAIL_USER,GMAIL_APP_PASSWORD,GMAIL_ACCESS_TOKEN). This mailbox receives client statements and sends back deliverables. - 3Create the statement trigger
POST /api/triggers/email(as the client tenant's user, or setuserId):{"name": "Acme — statements","filter": "from:owner@acmestores.com has:attachment","fetchAttachments": true,"mode": "goal","taskTemplate": "A bookkeeping client emailed bank statements. Saved files:\n{{attachments}}\nRun the month-end close for these statements: categorize every transaction, reconcile balances to the cent, build the P&L workbook with formulas, and email it to owner@acmestores.com with the workbook attached. Subject: '{{subject}} — books closed'."}fetchAttachments: truedownloads the CSVs into the tenant workspace (uploads/email/<message_id>/) and substitutes their paths into{{attachments}}. - 4Map their messaging handle (optional)
Admin Console → Users → Client Channels → map their WhatsApp number / Telegram ID to the tenant. Now "what was my biggest expense last month?" from their phone is answered from their books. Unmapped numbers are unaffected.
- 5Set the approval posture
Outbound email to clients is governed by the AuthorityPolicy — by default
send_*actions are draft-and-ask, so you approve every outgoing deliverable at first (via the in-app prompt or Telegram HITL). Once the pipeline has earned trust, add an AUTHORITY.md rule to auto-approve sends to known client counterparties. - 6Dry-run
Email two sample statement CSVs from the client's address (format below). Watch Admin Console → Overview for the goal; approve the send; confirm the workbook arrives with live SUM/SUMIF formulas and a zero reconciliation difference.
The workflow
The shipped Month-End Close template (Workflows gallery, month-end-close) runs four contract-gated steps:
categorize ──▶ reconcile ──▶ report ──▶ deliver
(bookkeeper) (bookkeeper) (excel- (bookkeeper:
categorized.csv reconciliation.csv builder) gmail_send + attachment)
+ balances.json diff itemized formulas,
csv schema gate to the cent 4 sheets
Each step's output is validated before the next starts (column schemas, freshness, minimum size); a failed reconciliation retries once with feedback. The bookkeeper profile enforces the discipline: no guessed categories (ambiguous → UNCATEGORIZED, listed explicitly), totals must tie to the statement, formulas not pasted numbers.
You can also skip the workflow and just talk to it — the bookkeeper profile auto-selects on keywords like reconcile, bank statement, p&l, or explicitly via @bookkeeper.
Statement CSV format
Any reasonable bank export works; the canonical shape:
date,description,amount,balance
2026-06-01,UPI/ACME SUPPLIES/payment,-12500.00,184300.50
2026-06-02,NEFT CR SALARY REIMB,45000.00,229300.50
Negative amounts = outflows. If the export lacks a balance column, include the statement's opening/closing balances in the email body.
Pricing the service
Each client's exact AI cost is in Admin Console → Usage & Cost (their tenant row). Cost-plus pricing is straightforward: a typical month-end run costs cents in LLM usage and replaces hours of manual work — price the outcome (₹/month per client), not the tokens.
Limits to know
- CSV statements only in v1 — PDF statements need conversion first (note it in your client instructions).
- The first sends require your approval (by design) — budget a minute per client per month until you loosen the authority rule.
- One operator Gmail serves all clients in v1; per-tenant mailboxes work too (store Gmail credentials as that tenant's secrets).