Skip to main content
A write may start in the console or through an MCP client. It reaches QuickBooks only after it becomes a plan and a reviewer approves that plan.

Plan

Zeno resolves the proposed work against the connected ledger. It checks for duplicates and closed periods, applies confirmed client rules, and renders a plan. Planning changes nothing in the ledger. There is more than one way to arrive at a plan, and they all arrive at the same one: Feeds and imports stop at this same plan. They do not have a separate posting path.

Review

A reviewer sees each entry, its source, coding, warnings, and the result of preflight checks. Approval and rejection are explicit verdicts recorded against the exact digest of the plan that was reviewed. A reviewer can also exclude individual lines. Exclusions are part of what the verdict is pinned to, so approving a plan approves the plan as decided, not the plan as it was first rendered.

Apply

Only approved entries are sent to the ledger adapter. If the plan or its exclusions changed after the verdict, applying is refused and a new plan is required — Zeno revalidates and stops rather than silently applying a stale plan. Applying twice is refused too: the run already exists. Each entry carries a key derived from its content, so an apply interrupted partway is safe to retry. Plan Drift Refusal Lock A plan built from the bank feed reads its lines as they stand now, not as they stood when it was built. A line that was matched to a transaction already in the books, excluded, or posted by a later plan shows on the plan as already posted, with what happened to it, and applying skips it and says why on the run. The rest of the plan posts as approved; the approval still fits, because the plan itself did not change. A feed plan whose every line was accounted for elsewhere reads stalled in the list.

Reverse

Each run keeps the provider identifiers and prior state needed to perform the ledger’s native reversal operation. Entries reverse in descending order, voided where QuickBooks voids and deleted where it cannot, and any names the run created are retired last. A cleanup run is journalled with each document’s pre-image before it acts, so reversing it restores a void or an edit onto the same document. A deleted document can only come back under a new id, and the reversal says which it did. Reversal is available regardless of plan tier. Reads and review also remain available when a commercial entitlement blocks a new write.

Names go through the same door

A name write is a ledger write. A renamed vendor changes what every check prints; a retired customer leaves every picker. So the name lists — accounts, customers, vendors, employees, products and services, classes, locations, terms, and payment methods — are created, changed, and retired only through a plan (qb_plan_names, or the lists section of qb_plan_batch). There is no direct tool that creates or edits a name, and an AI client cannot reach one. The plan is read like any other. Each line says what it does — Create, Modify, or Deactivate — and names its row exactly. A near match is refused with the candidates rather than guessed, because retiring the wrong customer is the one mistake this table must not make on a reviewer’s behalf. Retirements run first, then changes, then creates, so one plan can retire a customer and create a vendor under the same name. Deactivation is the only delete QuickBooks Online offers for a name. The row leaves every picker, its posted history stays, and a later Modify with active: true brings it back. For an employee, deactivation is the termination; a release date can ride on the same line, and it is the only field a Deactivate accepts. Any other field on a retirement is refused rather than dropped. Reversing a names run works by the mirror of each action: a created name is deactivated (QuickBooks cannot delete it), a retired one is reactivated, and a changed one gets the touched fields put back from the state the run recorded before it wrote. A reactivated parent does not bring back the sub-customers or sub-accounts QuickBooks retired with it; the reversal says so on the line.

What a plan carries but does not keep

Plans and runs are kept for good, and a verdict is pinned to the exact plan that was approved, so a plan is never rewritten after the fact. That is why Zeno does not take government identification numbers at all: a vendor’s tax id, an employee’s SSN and a date of birth are refused, and nothing is planned until they are taken off the lines. Enter them in QuickBooks Online itself. A vendor can still be marked for 1099 reporting in the plan. An import from QuickBooks Desktop leaves each vendor’s tax id behind and names the vendors that had one, so you know which to finish in QuickBooks Online.