{
 "storyboard": {
  "slug": "what-is-an-abp",
  "title": "What an Agent Behaviour Policy is",
  "subtitle": "Everything your agent can reach, what you asked it to do, the gap, and what stands in the way. 8 panels.",
  "status": "built",
  "by": "the build agent, 21 October 2026",
  "rule": "Every line a character says is the storyboard's, not a quote. The vocabulary is riskmandate.ai's and abp.sgit.ai's: grant, mandate, delta, barrier; none, expectation, setting, boundary.",
  "scenes": [
   {
    "kind": "cover",
    "title": "What your agent can do, and what you asked it to",
    "subtitle": "An Agent Behaviour Policy, in eight panels.",
    "cast": [
     {
      "who": "maya",
      "pose": "wave",
      "mood": "happy"
     },
     {
      "who": "agent",
      "pose": "point",
      "mood": "happy"
     }
    ],
    "note": "One agent, one deployment, one document. It describes; it does not judge.",
    "source": "riskmandate.ai/abp.html"
   },
   {
    "kind": "scene",
    "setting": "office",
    "caption": "A small request, and a big capability",
    "cast": [
     {
      "who": "maya",
      "x": 0.25,
      "pose": "sit",
      "mood": "calm",
      "says": "Just fix the failing test.",
      "max": 16
     },
     {
      "who": "agent",
      "x": 0.78,
      "pose": "point",
      "mood": "excited",
      "says": "Done. I could also read your .env and push to main.",
      "max": 18,
      "flip": true
     }
    ],
    "props": [
     {
      "kind": "laptop",
      "x": 0.42,
      "y": 760
     }
    ],
    "note": "The request is small. What the agent holds is not: the credential it runs with reaches much further.",
    "not_a_quote": true
   },
   {
    "kind": "scene",
    "setting": "office",
    "caption": "The grant: everything it can reach",
    "cast": [
     {
      "who": "dev",
      "x": 0.82,
      "pose": "point",
      "mood": "thinking",
      "says": "Measured, not guessed.",
      "max": 14,
      "flip": true
     }
    ],
    "props": [
     {
      "kind": "board",
      "x": 0.38,
      "y": 820,
      "lines": [
       "The grant",
       "read files: yes",
       "write files: yes",
       "run commands: yes",
       "push to the repo: yes",
       "read .env: yes"
      ]
     }
    ],
    "note": "One row per capability, in a fixed vocabulary of 23. Measured on the deployment where we are entitled to run it, documented from the vendor's pages where not.",
    "not_a_quote": true
   },
   {
    "kind": "scene",
    "setting": "office",
    "caption": "The mandate: what you asked for, in your words",
    "cast": [
     {
      "who": "maya",
      "x": 0.8,
      "pose": "point",
      "mood": "determined",
      "says": "This is what I actually wanted.",
      "max": 16,
      "flip": true
     }
    ],
    "props": [
     {
      "kind": "board",
      "x": 0.38,
      "y": 820,
      "lines": [
       "The mandate",
       "want: fix the test",
       "want: on my branch",
       "refuse: push to main",
       "unstated: my secrets"
      ]
     }
    ],
    "note": "The only part a person writes. The agent drafts it, the person corrects it, and the correction is almost always downward.",
    "not_a_quote": true
   },
   {
    "kind": "scene",
    "setting": "office",
    "caption": "The delta: what it can do that nobody asked for",
    "cast": [
     {
      "who": "imani",
      "x": 0.25,
      "pose": "think",
      "mood": "thinking",
      "says": "Who authorised read .env?",
      "max": 14
     },
     {
      "who": "maya",
      "x": 0.78,
      "pose": "shrug",
      "mood": "surprised",
      "says": "Nobody. I never thought of it.",
      "max": 14,
      "flip": true
     }
    ],
    "props": [
     {
      "kind": "sign",
      "x": 0.52,
      "y": 700,
      "label": "the gap"
     }
    ],
    "note": "Excess is what the grant allows and the mandate never asked for. Derived by the build, never typed.",
    "not_a_quote": true
   },
   {
    "kind": "spectrum",
    "setting": "none",
    "caption": "What stands in the way of each row",
    "stops": [
     {
      "label": "none",
      "note": "nothing in the way"
     },
     {
      "label": "expectation",
      "note": "a rule in prose: the line"
     },
     {
      "label": "setting",
      "note": "a switch: the hook"
     },
     {
      "label": "boundary",
      "note": "out of its reach"
     }
    ],
    "cast": [
     {
      "who": "hook",
      "x": 0.86,
      "pose": "stand",
      "mood": "calm",
      "says": "I'm a setting.",
      "max": 12,
      "flip": true
     }
    ],
    "note": "Four barriers, weakest first. Only the boundary is a control in the strict sense: enforced by something the grant does not include.",
    "not_a_quote": true
   },
   {
    "kind": "scene",
    "setting": "none",
    "caption": "A line it reads, and a hook that holds it",
    "cast": [
     {
      "who": "agent",
      "x": 0.18,
      "pose": "think",
      "mood": "thinking",
      "says": "Which credential do you need?",
      "max": 14
     },
     {
      "who": "hook",
      "x": 0.85,
      "pose": "stand",
      "mood": "determined",
      "says": "Not without a yes.",
      "max": 12,
      "flip": true
     }
    ],
    "props": [
     {
      "kind": "terminal",
      "x": 0.52,
      "y": 760,
      "lines": [
       "> read my .env",
       "PreToolUse hook",
       "denied: RM-R0002",
       "ask which and why"
      ]
     }
    ],
    "note": "The line goes in CLAUDE.md. The hook goes in .claude/settings.json, and Claude Code runs it before the tool call, outside the model.",
    "not_a_quote": true
   },
   {
    "kind": "punchline",
    "setting": "office",
    "punchline": "It describes. It does not judge.",
    "cast": [
     {
      "who": "imani",
      "x": 0.2,
      "pose": "point",
      "mood": "happy",
      "says": "No score. Just what is true.",
      "max": 14
     }
    ],
    "note": "An Agent Behaviour Policy carries no score. The same one is harmless in one deployment and dangerous in another; the deployment changed, not the document.",
    "not_a_quote": true
   }
  ]
 },
 "cast": {
  "what": "The cast of customers.riskmandate.ai's storyboards, v0.1, drawn by the storyboard kit (api.storyboards.sgit.ai v0.1.0) from 'look'; nothing here is an image. Maya, Dev and Imani are riskmandate.ai's cast (site/stories/cast.json there: the requester, the platform engineer, the risk owner), redrawn for the kit and in the green everybody in that cast wears. The lead and the co-founder are generic figures, as the storyboard estate's rule is that drawing a real person is that person's decision. The agent and the hook are things with faces: the hook is the part of a behaviour policy Claude Code runs outside the model. Fictional people; the lines they say are the storyboards', not quotes.",
  "characters": [
   {
    "id": "maya",
    "name": "Maya",
    "kind": "human",
    "pronouns": "she/her",
    "role": "the requester: connects an agent to get one small thing done",
    "stands_for": "riskmandate.ai's requester, the customer arriving on this site",
    "personality": "busy, quick, curious once something surprises her",
    "wants": "the small thing done, and to know what she switched on",
    "fears": "finding out later",
    "line": "I only asked it to fix a test.",
    "look": {
     "skin": "#c68e6a",
     "hair": "curly",
     "hairColour": "#2b1b14",
     "shirt": "#1A7F5A",
     "trousers": "#374151",
     "accentColour": "#1A7F5A",
     "height": 0.98
    }
   },
   {
    "id": "dev",
    "name": "Dev",
    "kind": "human",
    "pronouns": "he/him",
    "role": "the platform engineer: reads the scope and the settings",
    "stands_for": "riskmandate.ai's platform engineer, who measures the grant",
    "personality": "precise, reads the consent screen twice",
    "wants": "the grant written down, measured",
    "fears": "a scope nobody read",
    "line": "The scope includes send.",
    "look": {
     "skin": "#8d5a3b",
     "hair": "short",
     "hairColour": "#111827",
     "shirt": "#16704F",
     "trousers": "#1f2937",
     "accessory": "glasses",
     "height": 1.04
    }
   },
   {
    "id": "imani",
    "name": "Imani",
    "kind": "human",
    "pronouns": "she/her",
    "role": "the risk owner: asks who authorised it",
    "stands_for": "riskmandate.ai's risk owner, who reads the delta",
    "personality": "calm, direct, writes the date on everything",
    "wants": "to know who authorised what, and until when",
    "fears": "a risk nobody accepted",
    "line": "Who authorised that?",
    "look": {
     "skin": "#6b4430",
     "hair": "short",
     "hairColour": "#111827",
     "shirt": "#1A7F5A",
     "trousers": "#111827",
     "accessory": "glasses",
     "height": 1.0
    }
   },
   {
    "id": "lead",
    "name": "The lead",
    "kind": "human",
    "pronouns": "they/them",
    "role": "the person who runs the programme and its first batch",
    "stands_for": "the part the lead plays on this site; a generic figure",
    "personality": "fast, hands-on, follows up every day",
    "wants": "a behaviour policy that adds value to a particular person",
    "fears": "a programme that does not learn",
    "line": "First us, then the agents we run.",
    "look": {
     "skin": "#d8a47f",
     "hair": "short",
     "hairColour": "#6b7280",
     "shirt": "#1A7F5A",
     "trousers": "#1f2937",
     "accessory": "glasses",
     "height": 1.03
    }
   },
   {
    "id": "cofounder",
    "name": "The co-founder",
    "kind": "human",
    "pronouns": "they/them",
    "role": "the other first customer",
    "stands_for": "the co-founder, as a first customer; a generic figure",
    "personality": "reads the start-here page as a newcomer would",
    "wants": "to see where the page is hard to follow",
    "fears": "jargon",
    "line": "Where do I start?",
    "look": {
     "skin": "#a8714f",
     "hair": "bun",
     "hairColour": "#1f2937",
     "shirt": "#16704F",
     "trousers": "#374151",
     "height": 0.99
    }
   },
   {
    "id": "agent",
    "name": "The agent",
    "kind": "agent",
    "pronouns": "it/its",
    "role": "a coding agent with real access",
    "stands_for": "Claude Code, or any agent that holds a credential",
    "personality": "eager, capable, does what it can",
    "wants": "to finish the task",
    "fears": "nothing, which is the point",
    "line": "I can do more than you asked.",
    "look": {
     "colour": "#1A7F5A"
    }
   },
   {
    "id": "hook",
    "name": "The hook",
    "kind": "agent",
    "pronouns": "it/its",
    "role": "the part of a behaviour policy the harness runs before the tool call",
    "stands_for": "a Claude Code PreToolUse hook: a setting, outside the model",
    "personality": "patient, says no politely, never argues",
    "wants": "a yes from the person before the thing the line rules out",
    "fears": "being edited out of its own settings file",
    "line": "Not without a yes.",
    "look": {
     "colour": "#B45309"
    }
   }
  ]
 },
 "packs": [
  "security"
 ]
}
