intentic
Create your workspace
Agent setup

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

FieldType
stableSystemPromptKeep the instructions identical between turns…boolean
skillsWhich skills are switched onstring[]
hashlineEditsHave the agent edit files by…boolean
terseOutputAsk the agent to say lessboolean
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 thinkstring
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[]
idstring
labelstring
moment"turn.ending" | "push.starting" | "agent.finished"
whenobject
repostring
pathsstring[]
outcome"clean" | "error" | "conflict"[]
actionobject
when kind is "command"shape
commandstring
timeoutMsnumber
when kind is "instruct"shape
textstring
when kind is "verdict"shape
verdict"allow" | "hold"
when kind is "builtin"shape
name"verify-edits"
enabledboolean
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
Try itanswered in this tab
curl
curl "$SANDBOX/settings" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
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

FieldTypeWhere
stableSystemPromptKeep the instructions identical between turns…booleanbody
skillsWhich skills are switched onstring[]body
hashlineEditsHave the agent edit files by…booleanbody
terseOutputAsk the agent to say lessbooleanbody
terseHoldoutWhat share of turns to run…numberbody
systemPromptModeWhich instructions the agent starts from:…"intentic" | "claude" | "custom"body
systemPromptYour own instructions, used only when…stringbody
iqSearchTeach the agent how to use…booleanbody
iqSearchHoldoutWhat share of conversations to run…numberbody
workspaceMapOpen every conversation with a map…booleanbody
outputCleanersWhich command outputs to trim before…stringbody
outputHoldoutWhat share of commands to leave…numberbody
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 thinkstringbody
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…numberbody
resumeAfterOutageWhether a turn killed by the…booleanbody
autoResumeOnRestartWhether a turn killed by the…booleanbody
rulesStanding instructions you give the sandbox…object[]body
idrequiredstringbody
labelrequiredstringbody
momentrequired"turn.ending" | "push.starting" | "agent.finished"body
whenobjectbody
repostringbody
pathsstring[]body
outcome"clean" | "error" | "conflict"[]body
actionrequiredobjectbody
when kind is "command"shapebody
commandrequiredstringbody
timeoutMsnumberbody
when kind is "instruct"shapebody
textrequiredstringbody
when kind is "verdict"shapebody
verdictrequired"allow" | "hold"body
when kind is "builtin"shapebody
namerequired"verify-edits"body
enabledbooleanbody
automationFailureLimitHow many failures in a row…numberbody
admissionWhether work started from outside may…objectbody
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…objectbody
commandRulesWhat an agent may run inside…objectbody
subagentsAtOnceHow many helper agents may work…numberbody
subagentsPerTurnHow many a single turn may…numberbody
subagentDepthHow many levels deep the delegation…numberbody

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
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}'
TypeScript
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

FieldTypeWhere
fromFirst day to include, as YYYY-MM-DD…stringquery
toLast day to include, as YYYY-MM-DD…stringquery

What comes back

FieldType
inputobject
updatedAtnumber
commandsnumber
rawTokensnumber
emittedTokensnumber
savedPctnumber
perCleanerobject[]
idstring
commandsnumber
savedTokensnumber
holdoutobject
cleanednumber
heldOutnumber
measuredSavedPctnumber
gapsobject[]
commandstring
commandsnumber
tokensnumber
outputobject
metricsobject[]
metric"proseChars" | "searchCalls" | "openingSearches"
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations"
cohortstring
searchobject
metricsobject[]
metric"proseChars" | "searchCalls" | "openingSearches"
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations"
cohortstring
tierobject
judgednumber
fastnumber
atStakeUsdnumber
routednumber
routedUsdnumber
escalatednumber
deniednumber
Try itanswered in this tab
curl
curl "$SANDBOX/settings/savings" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
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

FieldTypeWhere
baserequired"intentic" | "claude"address

What comes back

FieldType
textstring
versionstring
Try itanswered in this tab
curl
curl "$SANDBOX/settings/system-prompt/intentic" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
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.

Try itanswered in this tab
curl
curl "$SANDBOX/settings/rule-firings" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.firings();
More in Agent setup

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