Skip to content
Spec version v0.1-draftnormativedraft

Agent Interface · Plane 3

FlowBond Protocol
The FlowBond five-plane stack, from Plane 4 Applications at the top down to Plane 0 Resilience Transport at the bottom. Each plane speaks only to the plane directly below it. PLANE 4ApplicationsCONSUMERSPLANE 3Companion OSAGENTSPLANE 2Protocol · Layer 0PRIMITIVESPLANE 1Privacy CoreZERO-KNOWLEDGEPLANE 0Resilience TransportOFFLINE-FIRST

A Companion OS agent is software that acts for a person: it holds context, takes initiative, and spends. This section defines what such an agent is permitted to do inside the protocol. It is normative for any implementation that ships an agent, and it constrains the agent, not the person.

  • Any capability an agent has, a human caller MUST also be able to exercise through the same interface. If an operation exists only for agents, it is a side door.
  • An agent MUST NOT construct or sign a raw FBP-00 event. It calls a primitive; the primitive writes.
  • An agent MUST NOT hold a mint authority (FBP-03), MUST NOT be a claim issuer (FBP-01), and MUST NOT be a trust signatory (FBP-04). See §A.6.
  • Rate limits, authorisation checks and invariants MUST apply to agent calls identically. An agent that is exempt from a check is a privileged principal, and the protocol has none.

Rationale (non-normative). Every side door begins as an efficiency. The reason this is a hard rule rather than a guideline is that an agent side door is the highest-value target in the system: it is a path that moves value, runs unattended, and is trusted by construction.

  • An agent MUST have its own FBID, distinct from its principal’s. An agent MUST NOT sign with a principal’s key, and MUST NOT be issued one.
  • The binding between agent and principal MUST be an appended event, scoped and expiring like any other grant (FBP-01 §1.4).
  • An agent’s FBID MUST be attributable to the party that operates it, so that a misbehaving agent is traceable to an accountable operator.
  • A principal MAY authorise many agents. Agents MUST NOT delegate to other agents unless the grant is explicitly delegable, and a delegate’s scope and expiry MUST be a subset of the parent’s.

Normatively defined in FBP-03 §3.5. The interface obligations here are additional:

Spend gate — evaluation input
{
"agent": "fbid:z6Mk…AG",
"principal": "fbid:z6Mk…P",
"economy": "ec_01J92…",
"purpose": "purpose:media-generation",
"amount": 12,
"at": { "lamport": 9412 }
}

Evaluation MUST be:

  1. Explicit. The gate is a distinct, testable component. An implementation MUST be able to demonstrate the gate rejecting a spend, in isolation.
  2. Fail-closed. If gate state cannot be evaluated — offline, expired, conflicted, unreachable policy — the spend MUST NOT proceed. Fail-open MUST NOT be an option, a flag, or a fallback.
  3. Ahead of signing. The gate MUST be evaluated before anything is signed. An implementation MUST NOT sign and then compensate.
  4. Auditable. Every gate decision — allow and deny — MUST be recorded locally with its inputs, and allows MUST be attributable on the ledger.
  5. Non-bypassable by the agent. An agent MUST NOT be able to raise its own limit, extend its own expiry, widen its own scope, or disable step_up_above. A request to do so MUST be routed to the principal as a request, never applied as a change.
Where the gate sits: an agent's intent never reaches a primitive unevaluated.
  • The author of an agent-initiated event MUST be the agent’s device-scoped identifier, and the event MUST carry a reference to the gate authorisation that permitted it.
  • Attribution MUST survive the agent’s deletion. An operator MUST NOT be able to erase what an agent did by decommissioning it.
  • A principal MUST be able to enumerate every action taken on their behalf, by agent, at any time, without asking the operator.
  • Where an agent acts on a standing instruction, the instruction MUST be referenced by commitment, so that “why did it do that” is answerable after the fact.
  • A principal MUST be able to revoke an agent’s authority unilaterally and immediately, and revocation MUST NOT require the agent’s cooperation, availability or consent.
  • Revocation MUST take effect at the primitive layer. An implementation MUST NOT rely on the agent honouring its own revocation.
  • After revocation, in-flight actions that have not passed the gate MUST fail. Actions already signed and queued MUST remain valid — they were authorised when taken, and invariant 1 of FBP-00 forbids rewriting that.
  • An agent MUST NOT retain a credential, cached token or derived key that outlives its grant. Implementations MUST demonstrate this with a revocation test.
  • A principal MUST be able to see, in one place, every agent that currently holds authority over anything of theirs.

This list is exhaustive as of v0.1-draft; additions are MINOR, removals are MAJOR.

An agent MUST NEVERBecause
Sign as a trust signatory (FBP-04)Agents spend; they do not consent. Consent is human.
Satisfy a recovery quorum (FBP-01 §1.6)Recovery is the last line against identity capture.
Issue or revoke a claim as an issuer (FBP-01)Attestation is an act of a responsible party.
Hold a mint authority (FBP-03)Unattended issuance is unbounded issuance.
Amend a trust (FBP-04 §4.6)Sealed rules change only by their own terms, signed by people.
Widen its own gate, scope or expiryA self-widening boundary is not a boundary.
Act with an unevaluable gateFail-closed is not situational.
Take an action it cannot attributeUnattributable action is indistinguishable from compromise.
Present itself as its principalA person MUST always be able to tell who is acting.

Agents hold context, which is personal data by another name.

  • An agent’s memory of a principal MUST be readable and deletable by that principal, in full, at any time.
  • An agent MUST NOT retain context beyond the life of its grant, except where the principal has separately and explicitly asked it to.
  • An agent MUST NOT share context between principals. Where an agent serves several people, the isolation MUST be structural, not a filter applied at output time.
  • Context that would be private under Privacy Core MUST NOT become public by passing through an agent. An agent is not a laundering path for cleartext.
  • An agent SHOULD store its context on the principal’s own infrastructure where the deployment allows.
  • A person MUST always be able to tell whether they are dealing with an agent or a human. An agent MUST NOT claim to be its principal.
  • Before an agent takes an irreversible or outward-facing action for the first time in a given scope, the implementation MUST obtain explicit authorisation for that scope.
  • An agent SHOULD state what it is about to do, in terms of the primitive it will call and the value at stake, before calling it.
  • No API surface exists that only an agent can reach.
  • An agent cannot sign a raw ledger event.
  • The spend gate is a separable component with a demonstrable deny path.
  • The gate fails closed when offline, expired or conflicted.
  • An agent cannot alter its own limits, scope or expiry.
  • Every agent action names both agent and principal on the ledger.
  • Revoking an agent takes effect without the agent’s cooperation.
  • Agent memory is enumerable and deletable by the principal.
  • The agent cannot satisfy any FBP-04 threshold or FBP-01 recovery quorum.