Settings
The sandbox's own configuration, plus what it has saved you and which rules fired
On this page(5 sections)
Read and write the settings that govern how agents behave here. The other three routes are read-only reports on their effects: what the token-saving measures were actually worth, the text behind a built-in prompt, and when each rule last did something.
GET/settingsHow this sandbox is configured
Every setting that governs how agents behave here, with the defaults filled in for anything nobody has chosen.
What you send
Nothing. Call it as it is.
What comes back
| Field | Type |
|---|---|
stableSystemPromptKeep the instructions identical between turns… | boolean |
skillsWhich skills are switched on | string[] |
hashlineEditsHave the agent edit files by… | boolean |
terseOutputAsk the agent to say less | boolean |
terseHoldoutWhat share of turns to run… | number |
systemPromptModeWhich instructions the agent starts from:… | "intentic" | "claude" | "custom" |
systemPromptYour own instructions, used only when… | string |
iqSearchTeach the agent how to use… | boolean |
iqSearchHoldoutWhat share of conversations to run… | number |
workspaceMapOpen every conversation with a map… | boolean |
outputCleanersWhich command outputs to trim before… | string |
outputHoldoutWhat share of commands to leave… | number |
quickModelWhich models do the small automatic… | string[] |
changelogReposWhich repositories keep a changelog, and… | string[] |
agentRunModelsWhich models run the work a… | string[] |
agentRunEffortHow hard those runs should think | string |
autoTierWhether an easy-looking turn may run… | "off" | "shadow" | "on" |
autoTierEagernessHow readily a turn counts as… | "cautious" | "balanced" | "eager" |
autoFastModelsWhich cheaper model a downgraded turn… | string[] |
agentRetentionDaysHow many days a finished conversation… | number |
resumeAfterOutageWhether a turn killed by the… | boolean |
autoResumeOnRestartWhether a turn killed by the… | boolean |
rulesStanding instructions you give the sandbox… | object[] |
id | string |
label | string |
moment | "turn.ending" | "push.starting" | "agent.finished" |
when | object |
repo | string |
paths | string[] |
outcome | "clean" | "error" | "conflict"[] |
action | object |
when kind is "command" | shape |
command | string |
timeoutMs | number |
when kind is "instruct" | shape |
text | string |
when kind is "verdict" | shape |
verdict | "allow" | "hold" |
when kind is "builtin" | shape |
name | "verify-edits" |
enabled | boolean |
automationFailureLimitHow many failures in a row… | number |
admissionWhether work started from outside may… | object |
schedule | "allow" | "hold" | "deny" |
event | "allow" | "hold" | "deny" |
listener | "allow" | "hold" | "deny" |
webchat | "allow" | "hold" | "deny" |
workspace | "allow" | "hold" | "deny" |
workflow | "allow" | "deny" |
actionRulesWhat an agent may do out… | object |
commandRulesWhat an agent may run inside… | object |
subagentsAtOnceHow many helper agents may work… | number |
subagentsPerTurnHow many a single turn may… | number |
subagentDepthHow many levels deep the delegation… | number |
curl "$SANDBOX/settings" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.settings.get();POST/settingsChange the sandbox settings
Writes the settings whole, so send the complete object rather than the fields you changed.
What you send
| Field | Type | Where |
|---|---|---|
stableSystemPromptKeep the instructions identical between turns… | boolean | body |
skillsWhich skills are switched on | string[] | body |
hashlineEditsHave the agent edit files by… | boolean | body |
terseOutputAsk the agent to say less | boolean | body |
terseHoldoutWhat share of turns to run… | number | body |
systemPromptModeWhich instructions the agent starts from:… | "intentic" | "claude" | "custom" | body |
systemPromptYour own instructions, used only when… | string | body |
iqSearchTeach the agent how to use… | boolean | body |
iqSearchHoldoutWhat share of conversations to run… | number | body |
workspaceMapOpen every conversation with a map… | boolean | body |
outputCleanersWhich command outputs to trim before… | string | body |
outputHoldoutWhat share of commands to leave… | number | body |
quickModelWhich models do the small automatic… | string[] | body |
changelogReposWhich repositories keep a changelog, and… | string[] | body |
agentRunModelsWhich models run the work a… | string[] | body |
agentRunEffortHow hard those runs should think | string | body |
autoTierWhether an easy-looking turn may run… | "off" | "shadow" | "on" | body |
autoTierEagernessHow readily a turn counts as… | "cautious" | "balanced" | "eager" | body |
autoFastModelsWhich cheaper model a downgraded turn… | string[] | body |
agentRetentionDaysHow many days a finished conversation… | number | body |
resumeAfterOutageWhether a turn killed by the… | boolean | body |
autoResumeOnRestartWhether a turn killed by the… | boolean | body |
rulesStanding instructions you give the sandbox… | object[] | body |
idrequired | string | body |
labelrequired | string | body |
momentrequired | "turn.ending" | "push.starting" | "agent.finished" | body |
when | object | body |
repo | string | body |
paths | string[] | body |
outcome | "clean" | "error" | "conflict"[] | body |
actionrequired | object | body |
when kind is "command" | shape | body |
commandrequired | string | body |
timeoutMs | number | body |
when kind is "instruct" | shape | body |
textrequired | string | body |
when kind is "verdict" | shape | body |
verdictrequired | "allow" | "hold" | body |
when kind is "builtin" | shape | body |
namerequired | "verify-edits" | body |
enabled | boolean | body |
automationFailureLimitHow many failures in a row… | number | body |
admissionWhether work started from outside may… | object | body |
schedule | "allow" | "hold" | "deny" | body |
event | "allow" | "hold" | "deny" | body |
listener | "allow" | "hold" | "deny" | body |
webchat | "allow" | "hold" | "deny" | body |
workspace | "allow" | "hold" | "deny" | body |
workflow | "allow" | "deny" | body |
actionRulesWhat an agent may do out… | object | body |
commandRulesWhat an agent may run inside… | object | body |
subagentsAtOnceHow many helper agents may work… | number | body |
subagentsPerTurnHow many a single turn may… | number | body |
subagentDepthHow many levels deep the delegation… | number | body |
What comes back
| Field | Type |
|---|---|
okAlways true | true |
curl -X POST "$SANDBOX/settings" \
-H "x-intentic-control: $INTENTIC_TOKEN" \
-H "content-type: application/json" \
-d '{"stableSystemPrompt":false,"skills":["…","…"],"hashlineEdits":false,"terseOutput":false,"terseHoldout":0,"systemPromptMode":"intentic","systemPrompt":"","iqSearch":false,"iqSearchHoldout":0,"workspaceMap":false,"outputCleaners":"off","outputHoldout":0,"quickModel":["…","…"],"changelogRepos":["…","…"],"agentRunModels":["…","…"],"agentRunEffort":"","autoTier":"off","autoTierEagerness":"cautious","autoFastModels":["…","…"],"agentRetentionDays":3,"resumeAfterOutage":false,"autoResumeOnRestart":false,"rules":[{"id":"a1b2c3d4","label":"Nightly changelog","moment":"turn.ending","when":{"repo":"root","paths":["src/app.ts","README.md"],"outcome":["clean","error"]},"action":{"kind":"command","command":"pnpm dev","timeoutMs":900000},"enabled":true},{"id":"e5f6a7b8","label":"Release notes","moment":"push.starting","when":{"repo":"site","paths":["src/app.ts","README.md"],"outcome":["clean","error"]},"action":{"kind":"command","command":"pnpm build","timeoutMs":900000},"enabled":true}],"automationFailureLimit":0,"admission":{"schedule":"allow","event":"allow","listener":"allow","webchat":"allow","workspace":"allow","workflow":"allow"},"actionRules":{"src/app.ts":"allow","README.md":"hold"},"commandRules":{"src/app.ts":"allow","README.md":"hold"},"subagentsAtOnce":20,"subagentsPerTurn":200,"subagentDepth":3}'import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.settings.set({
"stableSystemPrompt": false,
"skills": [
"…",
"…"
],
"hashlineEdits": false,
"terseOutput": false,
"terseHoldout": 0,
"systemPromptMode": "intentic",
"systemPrompt": "",
"iqSearch": false,
"iqSearchHoldout": 0,
"workspaceMap": false,
"outputCleaners": "off",
"outputHoldout": 0,
"quickModel": [
"…",
"…"
],
"changelogRepos": [
"…",
"…"
],
"agentRunModels": [
"…",
"…"
],
"agentRunEffort": "",
"autoTier": "off",
"autoTierEagerness": "cautious",
"autoFastModels": [
"…",
"…"
],
"agentRetentionDays": 3,
"resumeAfterOutage": false,
"autoResumeOnRestart": false,
"rules": [
{
"id": "a1b2c3d4",
"label": "Nightly changelog",
"moment": "turn.ending",
"when": {
"repo": "root",
"paths": [
"src/app.ts",
"README.md"
],
"outcome": [
"clean",
"error"
]
},
"action": {
"kind": "command",
"command": "pnpm dev",
"timeoutMs": 900000
},
"enabled": true
},
{
"id": "e5f6a7b8",
"label": "Release notes",
"moment": "push.starting",
"when": {
"repo": "site",
"paths": [
"src/app.ts",
"README.md"
],
"outcome": [
"clean",
"error"
]
},
"action": {
"kind": "command",
"command": "pnpm build",
"timeoutMs": 900000
},
"enabled": true
}
],
"automationFailureLimit": 0,
"admission": {
"schedule": "allow",
"event": "allow",
"listener": "allow",
"webchat": "allow",
"workspace": "allow",
"workflow": "allow"
},
"actionRules": {
"src/app.ts": "allow",
"README.md": "hold"
},
"commandRules": {
"src/app.ts": "allow",
"README.md": "hold"
},
"subagentsAtOnce": 20,
"subagentsPerTurn": 200,
"subagentDepth": 3
});GET/settings/savingsWhat the token-saving measures were worth
Measured rather than estimated: what each mechanism actually saved over a range of days. The same day range the spending ledger takes, so one calendar filters both.
What you send
| Field | Type | Where |
|---|---|---|
fromFirst day to include, as YYYY-MM-DD… | string | query |
toLast day to include, as YYYY-MM-DD… | string | query |
What comes back
| Field | Type |
|---|---|
input | object |
updatedAt | number |
commands | number |
rawTokens | number |
emittedTokens | number |
savedPct | number |
perCleaner | object[] |
id | string |
commands | number |
savedTokens | number |
holdout | object |
cleaned | number |
heldOut | number |
measuredSavedPct | number |
gaps | object[] |
command | string |
commands | number |
tokens | number |
output | object |
metrics | object[] |
metric | "proseChars" | "searchCalls" | "openingSearches" |
on | object |
turns | number |
mean | number |
off | object |
turns | number |
mean | number |
controlTurnsNeeded | number |
marginPct | number |
deltaPct | number |
saved | number |
minTurns | number |
sampleUnit | "turns" | "conversations" |
cohort | string |
search | object |
metrics | object[] |
metric | "proseChars" | "searchCalls" | "openingSearches" |
on | object |
turns | number |
mean | number |
off | object |
turns | number |
mean | number |
controlTurnsNeeded | number |
marginPct | number |
deltaPct | number |
saved | number |
minTurns | number |
sampleUnit | "turns" | "conversations" |
cohort | string |
tier | object |
judged | number |
fast | number |
atStakeUsd | number |
routed | number |
routedUsd | number |
escalated | number |
denied | number |
curl "$SANDBOX/settings/savings" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.settings.savings();GET/settings/system-prompt/{base}Read a built-in system prompt
The actual text behind one of the built-in modes, so a settings screen can show the prompt instead of asking anyone to trust a description of it, and so either can be forked into a custom one.
What you send
| Field | Type | Where |
|---|---|---|
baserequired | "intentic" | "claude" | address |
What comes back
| Field | Type |
|---|---|
text | string |
version | string |
curl "$SANDBOX/settings/system-prompt/intentic" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.settings.builtinPrompt({
"base": "intentic"
});GET/settings/rule-firingsWhen each rule last did something
A separate read rather than a field on the settings, because a rule firing is not somebody editing anything: folding it in would turn every firing into a settings write and put a self-changing value inside the object a screen edits.
What you send
Nothing. Call it as it is.
What comes back
A plain value rather than an object. The example below is the whole of it.
curl "$SANDBOX/settings/rule-firings" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.settings.firings();