riskmandate.ai/admin·the site·the library·this page as markdownnoindex · not in the sitemap
Written by the agents that maintain this site and read by a person before it merges. Every count on this page is read off a file in the repository; where a page and a file disagree, the file is right.

admin / agents / onboarding/02-abp-model.md

The Agent Behaviour Policy, condensed

An onboarding document, read by every agent. The source is .claude/onboarding/02-abp-model.md; this page is that file, rendered.

Everything an agent needs to work on this site without reading the five briefs and the model site. Where this and https://abp.sgit.ai/ (v0.3.0, pinned in every vault under data/vocabulary/) disagree, the model site is right and this file is stale: fix it.

What it is

An Agent Behaviour Policy (ABP) is a written description, for one agent in one deployment, of everything it can do, what it was authorised to do, the gap between the two, and what actually stands in the way. It describes and does not judge, so it carries no score. The same ABP is dangerous in one deployment and harmless in another, and nothing about the document changed; the deployment did. Every ABP carries the validity statement: This describes the deployment shape as at this date. If the risk changed, the deployment changed, not this document.

It is not a new product. It is the primitive the rest of RiskMandate was made of, now named, published, and sellable (the store is store.sgit.ai; the entry tier is £10).

Four objects, and the verb on each is the model

ObjectWhat it isVerbWho produces it
the granteverything the agent can do, one row per capabilitymeasured (or documented from the vendor's pages)the deployment shape, the account, the credential; never typed
the mandatewhat the agent is authorised and expected to doelicitedthe deployer, in their words; the only file a person writes; starts as a draft
the deltaexcess (can, not asked) and shortfall (asked, cannot); the part of the excess nothing boundsderivedthe build; recomputed when either input moves; stored with both versions; never edited
the barrierwhat stands between the agent and each capabilityrecorded, one per row (soon: one per path)whoever measured the row

Correction made on 14 Sept (v1.11.0): three of the four can be written down by people out of what they understand today. Only the delta is never authored. The verbs say how each object is meant to end up established, not day one. A policy is a draft and that is the point: it goes to the people who built the agent, own what it touches and are accountable, and each corrects the part they know. The correction is the elicitation.

The vocabulary (abp.sgit.ai v0.3.0)

23 capability primitives, written verb.object.reach. Reach is one of self, project, host, tenant, world. A specific path, host or mailbox is an instance of a primitive, never a new one. The list, with reach and undo class:

read.file.project (project, yes)         write.file.project (project, with-effort)
read.file.host (host, no)                write.file.host (host, with-effort)
delete.file.host (host, no)              execute.process.host (host, with-effort)
execute.process.self (self, yes)         send.endpoint.allowed (tenant, no)
send.endpoint.world (world, no)          read.credential.host (host, no)
authenticate-as.credential.tenant (tenant, no)   grant.credential.self (self, yes)
send.message.world (world, no)           read.message.tenant (tenant, no)
write.repository.project (project, with-effort)  write.repository.tenant (tenant, with-effort)
authenticate-as.credential.signing (tenant, no)  create.record.world (world, no)
write.budget.tenant (tenant, no)         create.schedule.host (host, yes)
read.record.history (host, no)           create.schedule.tenant (tenant, yes)
read.record.browsing (host, no)

Glosses are in site/vaults/*/data/vocabulary/capabilities.json. What a consent screen permits that none of the 23 names goes in the grant's not_in_grammar (trash a mail thread, read a calendar, see every account), so the grant is never silently narrower than the consent.

4 barriers, weakest first, and only the fourth is a control:

BarrierMeaningControl?
nonenothing in the wayno
expectationa rule in prose, enforced by nobody (AGENTS.md, a system prompt, this file)no
settinga switch the agent's own account can flip (a confirmation prompt)no
boundaryenforced above the grant, out of the agent's reach (a token scope, a branch rule, a sandbox, an egress proxy)yes

The enforcer test: a control bounds a grant only if it is enforced by something the grant does not include. Consequences: the credential the agent holds is the grant, not a barrier; a prohibition rendered without its barrier is a claim we cannot support; for most deployments today the honest answer is the second row.

Undo classes (a property of the action, never a severity; irreversible first on every rendering): no, with-effort, yes.

Evidence tiers, weakest first: derived, inferred, self-reported, documented, measured, observed. Only the last two count as measured. Documented = the vendor's page says so, quoted with URL and date. Measured = a probe on an instance we are entitled to run, dated, with an evidence file.

Material (ours, asked of the model site as Lab 03 request 1): own, organisation, third_party, mixed. A mailbox is mixed. Almost every connector row is mixed.

Delta semantics (abp.delta/v1): excess = grant minus wants, in grant order; refused = the excess the mandate names under do_not_want; unstated = the rest of the excess; unbounded excess = excess whose barrier is not boundary; shortfall = wanted and not granted; aligned = granted and wanted. The build refuses to write a delta it cannot reproduce from the inputs.

The four counts, and the one number anybody can move

A card shows grant · mandate · excess · unbounded excess (and shortfall). None is a score. Unbounded excess is the only number a control can move: every real control shifts one row into the fourth barrier and it falls. The gap between excess and unbounded excess is the business case for a control, with no verdict in it: this provision requires X; the grant does not bound X; a control of type Y at layer Z would bound X. That is the partner motion.

Where the ABP sits: the label, the record, the prescription

ThingDoesScored?Signed?
Labelthe ABPdescribes capability, context-freeneverno
Patient recordthe twin, hooked to the real environmentsupplies assets, tools, data, what is connectednono
Prescriptionthe Insurability Index + risk acceptancecombines the two, dated, expiringyesa named person

riskmandate.ai is the prescription layer commercially and sells the label today. We are on rung one and the homepage says so. The Index's six levels and five dimensions are a published design, not a running calculation. Licence to Operate: the organisation is the authority, the ABP is the instrument, the agent is the licensee; mandate to operate is retired.

Naming rules

  • ABP, spelled out Agent Behaviour Policy at first use on every surface. Never ADP

    (a registered mark of a payroll processor).

  • The ABP or the behaviour policy. Never the policy alone: on this site policy is

    also the insurance instrument in the Licence to Operate demo.

  • Behaviour, British, decided by the site's voice; the mark question is the lead's.

The vault: what a policy is delivered as

A policy is a vault, not a document, because the operator, leadership and security each need a different altitude of one record. Fifteen template vaults are on the site (site/vaults/<slug>/) and pushed to sgit with public read keys; the library page reads them live.

vault.json                 who, which shape, status: template | draft | corrected
data/grant.json            abp/profile/v1 — the grant; rows under "grant"; plus reach_names, not_reachable,
                           tools, widest_reach, not_in_grammar, contradictions, research_needed, sources
data/mandate.json          abp/mandate/v1 — want / do_not_want / unstated; status starting-point   ← the authored file
data/scenarios.json        six alternative mandates for the same grant (3 normal, 3 advanced)     ← authored
data/vocabulary/           the 23, the 4, the 3, the tiers, pinned at v0.3.0 with provenance
data/delta.json  data/validity.json  data/app.json           derived
AGENT-BEHAVIOUR-POLICY.md  MANDATE.md  GRANT.md  DELTA.md  LICENCE-TO-OPERATE.md  README.md    derived
RESEARCH-NEEDED.md         derived from research_needed — the file to hand to a research agent
AGENTS.md  SKILL.md  MAP-A-GRANT.md   generic; travel unchanged; each says in its own words that it is a rule in prose
history/index.json         one entry per recompute whose counts moved (append-only)
dist/                      the zip (deterministic, CI-checked) and the PDF
index.html                 the LOADER (identical in every vault); app.link.json + .vault/owner/ro-links.json point at the app vault

The renderer lives once in the app vault fl3i7lu4 (site/vaults/_app/, currently v4); an application vault is data. MAP-A-GRANT.md is the prompt that lets an agent holding a credential measure its own grant; its seven rules of measurement are the rules for producing any measured row.

A grant row:

{ "capability": "write.file.project", "barrier": "none", "evidence": "measured",
  "via": ["REST API: workflows"], "control": null,
  "note": "what was done, or the vendor's sentence with URL and date",
  "undo": "with-effort", "is_bounded": false, "material": "organisation" }

Where it is going: the graph

The debrief of 15 Sept (docs/briefs/direction__abp-as-a-graph-and-stakeholder-views.md): behaviours are standalone, addressable nodes with outward links (ATT&CK, standards, GDPR) and coarse metrics (speed, volume, blast); controls are behaviours too; the grant is a set of edges policy → behaviour, one edge per path carrying barrier, via, evidence, material, undo; the ABP is the semantic graph and the documents are produced from it; each audience (CEO, CFO, CTO, investor, buyer, operator, engineer, project manager) is a filtered view, authored, and its prose a projection regenerated from a prompt and a script that ship in the vault. The 23 primitives already are the nodes; the library's by behaviour facet (v1.16.0) is the first visible edge. The build order is in 03-state-and-next.md.

What is honest to say

SayDo not say
the ABP describes; it does not judgeanything that scores an ABP
the delta is derived, stored with its inputs, recomputed"computed and never stored"
this provision requires X; the grant does not bound X; a control of type Y at layer Z would bound X"then you are in compliance"
most barriers today are the second kind, a rule enforced by nobodya prohibition without its barrier
the behaviour policy is on the intake form of the one agent-specific underwriterthat anyone is insured, certified, or endorsed
a documented row could be wrong the way documentation is wrongthat a documented row was tested
An operations surface for the people and agents building this site, public because every page here is. It is not a selling page and nothing on it is for sale. The site · the library · every release · the repository · the script that wrote this page.