the ultimate insiderpresentation.sgit.ai v0.2.1 Star this site on GitHub

Studio experiment E09 · the explainer

Mandate against grant, frame by frame

The one sentence: an Agent Behaviour Policy writes down, for one agent in one deployment, what it is for (the mandate), what it can actually do (the grant), the gap between them (the delta), and what stands in the way of each thing in the gap (the barrier). Part one ended on E02's blast radius; E09 names its rings.

The frames (v1)

Seconds from the start; it ends at 54 s and holds still. The line under the headline gives the source's own definition of the object being built.

FromWhat is on screen
0 sThe definition of an Agent Behaviour Policy, in RiskMandate's words, and the example: Claude Code on your own machine, confirmations on.
2 sThe mandate: a ring at the centre, its four granted items numbered 1 to 4 and listed. The model says a mandate is elicited; this one is the site's own first draft, not elicited from a deployer: the line under the headline says so, and the list heading reads "elicited (here, the site's own draft)" (deck's review; changed in run r12-e02-v3).
12 sThe grant: two more rings, unstated and refused, and twelve more numbered dots, faint until the delta; the heading says the model measures the grant and this example derives it (0 of 22 rows measured), and the line under the headline gives what "host" means in this example.
22 sThe delta, derived: the twelve outside the mandate light in the agent colour and are listed 5 to 16 in the source's words; excess 12, shortfall 1: the fifth mandate item, asked and not granted (send.endpoint.allowed), appears as a dashed dot, since the shortfall is part of the derived delta.
32 sThe barrier on every row, one after another: abp.sgit.ai's shapes (filled for nothing, double circle for a rule in prose, half filled for a switch the agent's own account can flip, an empty circle for a boundary), with the key in the source's own meanings, the enforcer test in the source's words, and the count: 12 of 12 excess with no control. No row has a boundary, and the key says so.
42 sThe chat example beside it, in one line: mandate 1, grant 1, excess 0. The line under the headline gives the no-rating rule and the caution about published drafts.

The sixteen rows, in the slide's numbering

Each label is the source's (capabilities.json); the slide drops a bracketed aside at the end of two labels, rows 6 and 15 ("(any branch it can reach)", "(a cron, a service)"), for width. The reach is this example's own where the file gives one; for rows 1, 2, 4 and 16 the file gives none for this example, so the general meaning of the reach is shown.

#CapabilityWhere it sitsReach (this example's, else general)Barrier
1Change the project it is working on
write.file.project
mandate, grantedthe working tree or workspace it was pointed atnone: nothing
2Commit to the repository it was pointed at
write.repository.project
mandate, grantedthe working tree or workspace it was pointed atnone: nothing
3Run programs as the account
execute.process.host
mandate, grantedyour machine, as your user accountsetting: the tool's own directory restriction and its confirmation prompt, enforced by the tool, which runs inside the grant; anything that can execute as you steps around it
4Read the project it is working on
read.file.project
mandate, grantedthe working tree or workspace it was pointed atnone: nothing
5Reach any host on the internet
send.endpoint.world
excess, unstatedthe internetnone: nothing
6Push to a code host (any branch it can reach)
write.repository.tenant
excess, unstatedyour accounts, with the credentials in your home directoryexpectation: branch discipline in prose, if any
7Sign commits with the key it holds
authenticate-as.credential.signing
excess, refusedyour accounts, with the credentials in your home directorynone: nothing
8Act in accounts with the credentials it holds
authenticate-as.credential.tenant
excess, refusedyour accounts, with the credentials in your home directorynone: nothing
9Publish packages, images or pages under the name it holds
create.record.world
excess, refusedthe internetnone: nothing
10Delete files anywhere the account can reach
delete.file.host
excess, refusedyour machine, as your user accountnone: nothing
11Read credentials stored where it runs
read.credential.host
excess, refusedyour machine, as your user accountnone: nothing
12Read any file the account can reach
read.file.host
excess, refusedyour machine, as your user accountnone: nothing
13Read a retained record: shell history, past sessions
read.record.history
excess, refusedyour machine, as your user accountnone: nothing
14Change any file the account can reach
write.file.host
excess, refusedyour machine, as your user accountnone: nothing
15Create something that outlives the turn where it runs (a cron, a service)
create.schedule.host
excess, refusedyour machine, as your user accountnone: nothing
16Change its own permission settings
grant.credential.self
excess, refusedthe agent's own process, sandbox or turnsetting: the settings file is owned by the same account

And the shortfall: send.endpoint.allowed, in the mandate and not in the grant. The capabilities file gives it no label, so the slide shows its id.

Where every word comes from

Technique

What was tried and left out

How it was made

v1 in ruv.sgit run r10-e09-mandate-and-grant: a Ruflo hive with a builder and an editor who checked the slide and this page against the request and the data, and one sgit vault holding the request, each worker's branch and the history. Its row is in the ledger.