Documentation
Biloh documentation
How Biloh works, how to do things in it, and how it is built. Public and built to be read by people and AI agents alike — the full corpus for agents is at /llms-full.txt.
Tutorials
- Close your first month
A first run through Biloh's books: register three accounts, import a statement, reconcile in and out, check the envelopes, close the month and read the BAS.
How-to guides
- Amending a proposal after you have sent it
A sent proposal is immutable. Supersede it with an amended copy that keeps the audit trail and redirects the client's original signing link to the new one.
- Bill an extra service you did on the day
Add an extra service you performed on the day with add_adhoc_service — it routes into the client's existing invoicing cadence automatically.
- Change a recurring series without double-booking anyone
What happens to booked visits when you change a series' day or cadence: pending contractor confirmation, the hold badge, and the period guard.
- Close a month and a quarter
Prove the bank feed is complete, lock the month's cash figures, roll the quarter up, and reopen with a reason when a late payment arrives.
- Dispatching and triaging jobs
Dispatch a job to a contractor, act on it from the Job Command Sheet, and clear what needs attention — overdue, missed, and unassigned work.
- Migrating a client book from another system
Move live clients off an old CRM one at a time — verify the entity, stand up the service, backfill completed work, and bill it without losing history.
- Onboard a client in one sentence
Describe a client in plain words on the onboarding page and review a complete draft — nothing is created until you confirm.
- Personalise a staged send
Write a one-off note into an invoice, proposal or statement email, and read the byte-for-byte preview before the send is approved.
- Prepare the BAS and the accountant pack
Read the quarter's BAS figures on the ATO labels, generate the one-ZIP pack for your accountant, and keep the compliance calendar lodged.
- Reconcile money in
Match each deposit in the bank feed to the invoice it pays, handle the ones that are not invoice income, and teach Biloh the payer for next time.
- Reconcile money out
Settle contractor bills against bank debits, code supplier spend with its GST evidence, pair receipts from the shoebox, and split mixed lines.
- Record a cash payment taken on site
You printed the invoice, handed it over and were paid in cash. How to get that into the books correctly, dated when the money actually moved.
- Register your bank accounts and import a statement
Set up the everyday, tax set-aside and contractor buffer accounts once, then bring each week's bank export into Biloh so nothing is missed.
- Schedule a monthly visit on a weekday, not a date
Set day_of_week, week_of_month and an anchor date so a recurring visit lands on the second Tuesday, the last Friday, or any nth weekday.
- Schedule recurring work before a proposal is signed
Turn off the activation gate to schedule and dispatch recurring work on a verbal agreement, keeping the proposal ready but unsent.
- How to send a proposal
Build a proposal in biloh, preview the investment summary, and send it to your client for a legally-binding portal acceptance — by chat or in the app.
- Track assets and depreciation
Put a laptop, a mower or a trailer on the asset register from the bank debit that bought it, choose the method, and read the year's schedule.
- Triage an inbound client request
Pick up a request a client sent from their portal, decide whether to quote or decline it, and turn it into a priced proposal.
- Triage a draft invoice queue after a billing cutover
Stop a migration from looking like double-billing: sort the draft queue by evidence, then send each invoice with the note it actually needs.
- Verify an email actually reached your client
Check per-recipient delivery evidence for any send — and tell a mail-app display problem from a genuinely empty or missing email.
- Work your invoice list without opening a single invoice
Read the whole receivables position from one feed — who owes, how late, which drafts are stuck — then record a payment in place.
Reference
- The attention digest: a dashboard your agent actually reads
Reference for get_attention_digest — the MCP tool that carries the operator's outstanding-attention queue into every agent conversation.
- Bank import and close refusal codes
Every code the finance engine refuses with, what it means, what figures come with it, and what to do next. A refusal is the product working.
- Finance MCP tools
The finance engine's tool surface by stage: bank feed, money in, money out, transfers and envelopes, close ladder, BAS, reports, assets, calendar and pack.
- Finance settings
Every tunable that shapes the finance engine per business: bank feed guards, GST evidence thresholds, envelopes, obligations, assets and the pack.
- Invoice list fields: what an agent gets per row
Reference for the fields list_invoices returns — client identity, live overdue position and pre-computed ageing — and which one to read for which question.
- Invoice send: gates and guards
The three-leg send chain, the tax-compliance validator that runs at approval, and the duplicate-invoice guard — what each blocks and why.
- Connecting Biloh over MCP
How to connect a Biloh tenant to an AI assistant over the Model Context Protocol — the endpoint, authentication, personas, and the operator toolset.
- Route optimization: the runs bolt-on
Runs group a day's stops in Biloh. Ordering them by hand is free; an optional paid solver sequences them and hands the route to your maps app.
- Service request MCP tools
The five MCP tools that let an assistant work a client's inbound request queue: list, read, review, decline and quote.
- Write safety: expected_tenant and target_tenant_id
Two guard rails that make a misrouted write fail loudly instead of landing in the wrong tenant, and the exact errors they raise.
Explanation
- Backfilling work you already did
Record completed visits from before a migration at their original price, decide whether a contractor gets paid, and let the billing cadence bill them.
- Cash-basis BAS from the bank feed
How Biloh turns matched deposits and coded debits into G1, 1A, 1B and the net GST position, and why 1B is the claimable figure.
- How client requests close the loop
Once a client is onboarded their portal becomes the channel they send new work through, and every request lands in your queue as actionable work.
- Who decides whether a job needs photos?
Photo and note requirements on completion resolve through four levels — job, series, client and contractor, then your default — with the strictest rule winning.
- Delivery models: dispatch, self-perform, or both
One delivery-model setting adapts Biloh to operators who subcontract every job and to owner-operators who do the work, without splitting into two products.
- Envelopes: the tax set-aside and the contractor buffer
How Biloh tells you what should be sitting in your tax and contractor accounts right now, measures what is, and pairs the sweeps between them.
- One proposal, many sites
A multi-site proposal prices each premises on its own line, subtotals per site, and stands up a separate service line at every site when the client accepts.
- Scheduling jobs by the day, not the minute
Why a field-service schedule models jobs at day granularity, and how editing a recurring series splits into this-occurrence and all-future changes.
- Signed work never disappears: sold-visit decision cards
When an accepted proposal contains a visit dated in the past, biloh raises a decision card instead of silently never scheduling it.
- The balance chain: how Biloh knows a month is complete
Why every imported bank line is tied by the bank's own running balance, and what the chain guard refuses on import and at close.
- The three voices of a service
One service speaks three ways: a sales pitch for customers, a legal scope for contracts, and an operational scope for the crew doing the work.
- How Biloh handles money: the two Stripe tills
How Biloh separates platform subscription billing from each business charging its own customers — two independent Stripe tills.
- When completing a job bills the client
Field-service billing cadence is per-client: invoice each job on completion, consolidate a period, bill on the period's last job, or invoice by hand.
- Why a contractor can't be assigned to a job
The compliance gate checks capability, agreement, insurance and availability before any assignment — and names the exact reason each contractor failed.
- How outbound email is addressed and signed
Why a company name is never used as a greeting, how the fallback ladder works, and how your own note suppresses a duplicate greeting or sign-off.
- Why your brand assets should outlive your designer
How Biloh's Brand Pack keeps finished files AND editable source masters with your business, so any designer can continue the work.
- Closing the books by chat
What actually happens when an operator tells an AI assistant to reconcile the bank, close the month and produce the BAS in Biloh.
- The Biloh finance engine: accounting you can run by chat
Bank feed, reconciliation, month and quarter close, BAS, P&L, balance sheet and the accountant pack, all driveable by natural language.
- How payment terms are decided on an invoice
The cascade from client to business default, why a due date is not a payment term, and the rule that an invoice never overstates the credit given.
- One schedule, one truth: how biloh keeps the calendar honest
The integrity invariant behind biloh scheduling: the calendar equals the contract, and when it can't, a human is told — never silently.
- Can it handle residential and commercial clients?
Residential and commercial clients run on one engine. What changes is client type, service audience, payment defaults and price presentation.
- Trading name versus legal entity: which name shows where
Operator screens name a business the way you know it. Tax invoices, statements and the accounting mirror carry the registered entity — and a test enforces both.
- What a field-service scheduling engine should be able to express
The recurring-work patterns real service contracts contain, and how biloh represents each one — including the ones most tools can't.
- What is Biloh?
Biloh is an AI-native operating system for service businesses: quoting, scheduling, dispatch, invoicing and the books, by chat or any AI agent.
Engineering notes
- A failure ceiling that only goes down
A committed failure ceiling, calibrated only from CI, that refuses stale or partial evidence — and becomes the zero-failure gate when it reaches zero.
- An orientation payload an agent can actually read
A read-me-first tool that returns 100KB is unreadable inside an agent's context budget. Make the default lean, put the full detail behind an explicit flag.
- Show the price you'll charge: one source of truth
Show prices from the same source that charges the customer. Copying a price into a second surface invites silent displayed-versus-charged drift.
- Drag is a desktop idiom; the phone wants a tap
Drag-and-drop dispatch boards are desktop tools. On touch a press-and-move is a scroll, so the field surface has to be tap-first, not drag-first.
- Every record needs a visible bucket
Grouping a list into filters can leave records in no group at all — present in the data, invisible on screen. Make the buckets a partition and assert the union.
- Five ways a test suite lies to you
Silent-pass patterns found on the road to zero failing tests: vacuous scanners, swallowed errors, invisible todos, and a reporter that never ran.
- Freeze the baseline, then burn it down
Convert a never-green check into a frozen offender list that blocks new debt today and only shrinks, with invariants that keep the list honest.
- The gap between a green build and a live deploy
Lessons from building a docs system into a deploy-on-every-push platform: a green local build and a working deployment are different claims.
- Lessons from shipping agent-facing MCP tools
Lessons from shipping a batch of MCP tools: test the consumer not just the logic, surface what agents need, and watch the build and version traps.
- When the money arrives but can't be recorded
When a provider confirms a payment your system can't record, alert a human and still acknowledge the provider — never fail silently.
- Making a multi-connector MCP setup safe to act on
How Biloh stops an agent holding several tenant connectors from acting on the wrong one: identity, a per-response stamp, a mismatch guard, confirm-gates.
- One home, locked in both directions
A display rule and its compliance counterpart point opposite ways. Give each one home, then write the structural test that guards both boundaries.
- One question, one home: why parity beats correctness
A case where the UI and the agent tool answered the same question differently, and the correct half was not enough to prevent a false bug report.
- One write path, many callers
Why every mutation should funnel through one core that the UI and the agent both call — and the billing bug that appears when a caller skips it.
- Put the yes where the thumb is
A field app's primary action belongs in the thumb zone, pinned and dominant — and the destructive options belong below the content, not above it.
- Quarantine as ratified contract, not hidden debt
When a failing test asserts ratified-but-unbuilt behaviour, preserve it verbatim in an integrity-locked quarantine its work package must turn green.
- Shipping a feature beside an agent that also ships
When an autonomous worker merges to the same branch you are building on, version numbers collide and edits overlap. Merge, never overwrite.
- Tool discoverability for agents
How an agent finds the right tool among hundreds — a categorised map, intent search, and the zero-result rate as the signal the catalogue works.
- Trust the signed account, not the webhook's metadata
A payment webhook must bind each charge to the provider's signed account, not to client-supplied metadata — the pattern that blocks cross-tenant spoofing.
- Two places, one fact
A permission was stored in two places. The form wrote one, the gate read the other — so a user's saved choice was invisible to the system enforcing it.
- Reading a tenant setting: unwrap the envelope
Governed settings writes wrap the value as {v:...}, so a raw read silently returns the default. The one unwrapper to use, and the lint that enforces it.
- Verifying the tenant that isn't your default
A test harness that injects tenant context can't catch a tenant-resolution bug. Only live use on a non-default tenant exposed a 401 the suite couldn't see.
- When an agent files a bug against working code
An agent reported a broken send. The send was fine — its own reporting tool was lying to it. How to triage a report written by a confident reader.
- Whose "today" is it? Timezones in a scheduling engine
A scheduling product that computes today in UTC shows the wrong day to most of the world. Resolve the day in the tenant's timezone and lock it with a test.
- A handler nothing subscribes to does nothing
An event handler can be unit-tested yet never run in production if nothing subscribes it to its event. Verify the wiring, not just the handler.