An execution harness, not another chatbot.
The treasury screen is one application. Underneath is a reusable branch-and-commit engine that controls agent state, approval, and tool execution.
How a decision becomes an action
- 01 / ProposeAI planner
A model drafts alternative plans as validated, structured actions. Its output is untrusted data.
- 02 / CompareBranch engine
Each plan is simulated against the same frozen snapshot. Plans the money cannot cover are rejected here.
- 03 / ApproveHuman gate
The CFO approves one plan. Its exact steps are frozen and hashed, and cannot be edited.
- 04 / EnforceArmorIQ
The approved steps are signed as an intent plan. Every tool call is checked against it and against policy.
- 05 / VerifyMCP + ledger
The payment server accepts only a single-use capability, writes an append-only receipt, and is reconciled.
Four ways a call can be stopped
These are separate outcomes from separate systems. The interface never shows one in the colors of another, so you always know who said no.
- Rejected by FORKBefore ArmorIQ is asked
The plan itself cannot work, for example it overdraws the account or breaks the minimum reserve. It can never be approved.
- Blocked by ArmorIQOn a tool call
The agent's tool call is not in the signed plan, or policy forbids it. A bank-detail change that nobody approved stops here.
- Held by ArmorIQOn a tool call
The call is allowed but large. It waits until a person approves it on the ArmorIQ platform. FORK cannot approve it.
- Refused by the MCPAfter ArmorIQ allows
The payment server rejects a request with a missing capability, a different recipient, or not enough cash.
What makes it reusable?
The harness owns branches, lifecycle, approvals, execution checkpoints and the event history. A domain supplies its own simulation rules and tools. Treasury is the first one.
- Snapshot isolation
- Harness
- Branch lifecycle and state
- Harness
- Simulation and feasibility
- Domain adapter
- Human approval and plan hash
- Harness
- Intent signing and policy
- ArmorIQ
- Large-payment holds
- ArmorIQ
- Payments and receipts
- Finance MCP
- Audit log and reconciliation
- Harness + ledger
The contract
A domain adapter implements one small typed interface.
interface ForkDomainAdapter<Base, Action, Projection, Diff, Receipt> {
validateActions(base: Base, input: unknown): Action[];
simulate(base: Base, actions: Action[]): Projection;
diff(base: Base, projected: Projection): Diff;
feasibility(base: Base, projection: Projection): Feasibility;
toToolSteps(
base: Base, actions: Action[], idempotencyPrefix: string,
): CanonicalToolStep[];
verifyPostcondition(
before: Base, after: Base, receipts: Receipt[],
): VerificationResult;
}From packages/harness/src/adapter.ts.
What is real in this demo, and what is not?Honest scope
- Real: the planner and inbox agents are live models, and ArmorIQ verdicts are recorded from real ArmorIQ responses.
- Sandbox: the company, its vendors, the bank ledger and the payments. No real money moves.
- The two safeguard tests in the studio are deliberate, and every record labels them as security tests rather than agent behavior.