intentic
Download the app
Download the app
Agent setup

Safety policy

The document deciding when an agent stops to ask, and the record of what it decided

On this page(3 sections)

Settings next door are read by a parser; this one is read by a model. The policy is prose about which of the things an agent may already do are worth interrupting you about, and the two policy routes read and replace it whole. The third is the log every verdict lands in, including the ones nobody was interrupted for, and it is what makes the document writable: an owner can only author a rule for behaviour they can see.

GET/safety/policyThe safety policy this sandbox is judged against

The document that decides when an agent stops to ask you before running something. Prose, not settings: it is read by the model that judges each command. When nobody has written one, this is the text the product ships with, and it describes the behaviour a fresh sandbox already has.

What you send

Nothing. Call it as it is.

What comes back

FieldType
textThe policy, as the owner wrote…string
customFalse when nobody has edited it…boolean
Try itanswered in this tab
curl
curl "$SANDBOX/safety/policy" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.safety.policy();
POST/safety/policyRewrite the safety policy

Replaces the document whole. Nothing in it can widen what the sandbox is structurally allowed to do: it decides which of the things an agent may already do are worth interrupting you about.

What you send

FieldTypeWhere
textrequiredThe policy, as you want it…stringbody

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/safety/policy" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"text":"export const start = () => listen(PORT);\n"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.safety.setPolicy({
  "text": "export const start = () => listen(PORT);\n"
});
GET/safety/logRecent safety verdicts

What was judged lately, what the judge decided, and whether you were interrupted. Newest first. This is where you find out why you were not asked about something, which is the question a policy page otherwise cannot answer.

What you send

Nothing. Call it as it is.

What comes back

FieldType
atWhen it was judged, epoch millisecondsinteger
programThe command or script, excerptedstring
classesThe kinds of consequence triage matched,…string[]
decisionWhat the judge decided"allow" | "ask" | "refuse"
sentenceThe judge's sentencestring
outcomeWhat the gate did in the…"allowed" | "asked" | "refused"
answerHow the owner answered, when they…"allowed" | "declined" | "unanswered"
machineWhich connected device it was headed…string
Try itanswered in this tab
curl
curl "$SANDBOX/safety/log" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.safety.log();

Type to search every page, in the docs and the API reference.