intentic
Download the app
Download the app
Agent setup

Settings

The sandbox's own configuration, plus what it has saved you and which rules fired

On this page(11 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.

11 calls. Pick one to open it, or use the list on the right.

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
timezoneWhich clock this sandbox's schedules are…"" | string
stableSystemPromptKeep the instructions identical between turns…boolean
skillsWhich built-in tools are switched onstring[]
personaRoutingWhether a new chat is matched…boolean
hashlineEditsHave the agent edit files by…boolean
systemPromptModeWhich instructions the agent starts from:…"intentic" | "claude" | "custom"
systemPromptYour own instructions, used only when…string
leanGuidanceSend this product's own guidance in…boolean
leanGuidanceHoldoutWhat share of conversations to keep…number
toolResultClearingReplace old tool results from a…boolean
toolResultClearingHoldoutWhat share of conversations keep every…number
iqSearchTeach the agent how to use…boolean
iqSearchHoldoutWhat share of conversations to run…number
workspaceMapOpen every conversation with a map…boolean
workspaceMapHoldoutWhat share of conversations to open…number
fieldNotesOpen every turn with a brief…boolean
fieldNotesBudgetHow much of that brief to…integer
fieldNotesHoldoutWhat share of conversations to run…number
outputCleanersWhich command outputs to trim before…string
outputHoldoutWhat share of commands to leave…number
modelRolesWhich models do which job, one…object
autoModelGuidanceWhat you would tell somebody choosing…string
changelogReposWhich repositories keep a changelog, and…string[]
agentRetentionDaysHow many days a finished conversation…number
limitPolicyWhat happens to a turn a…"wait" | "resend" | "move"
outagePolicyWhat happens to a turn the…"wait" | "retry"
stopPolicyWhat happens to a turn that…"wait" | "retry"
limitMoveCarryUnderWhen a spent usage limit moves…integer
keepWarmKeeping an idle conversation's prompt cache…object
autoKeep a Claude conversation's prompt cache…boolean
hoursHow long an idle conversation is…number
minTokensOnly conversations at least this large,…integer
reserveHow much of an account's usage…integer
autoRepairWhether main's CI failing is repaired…boolean
followOriginWhether each workspace repo keeps up…boolean
offloadWhich heavy work runs on a…object
commandsobject
continueWhenNeedMetWhether a conversation carries on by…boolean
autoResumeOnRestartWhether a turn killed by the…boolean
adoptedChecksWhich repositories may run the checks…object
rulesStanding decisions about the sandbox's own…object[]
idstring
labelstring
moment"file.edited" | "turn.ending" | "agent.finished" | "agent.landed"
whenobject
repostring
pathsstring[]
outcome"clean" | "error" | "conflict" | "checks-failed"[]
samplenumber
actionobject
when kind is "command"shape
commandstring
timeoutMsnumber
when kind is "verdict"shape
verdict"allow" | "hold"
when kind is "builtin"shape
name"verify-ui-edits" | "version-landed"
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"
issues"allow" | "hold" | "deny"
workspace"allow" | "hold" | "deny"
workflow"allow" | "deny"
actionRulesWhat an agent may do out…object
commandJudgeWhether a model reads your safety…"off" | "watch" | "on"
projectInstallsWhat happens when an agent installs…"automatic" | "ask" | "never"
subagentsAtOnceHow many subagents may work at…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
timezoneWhich clock this sandbox's schedules are…"" | stringbody
stableSystemPromptKeep the instructions identical between turns…booleanbody
skillsWhich built-in tools are switched onstring[]body
personaRoutingWhether a new chat is matched…booleanbody
hashlineEditsHave the agent edit files by…booleanbody
systemPromptModeWhich instructions the agent starts from:…"intentic" | "claude" | "custom"body
systemPromptYour own instructions, used only when…stringbody
leanGuidanceSend this product's own guidance in…booleanbody
leanGuidanceHoldoutWhat share of conversations to keep…numberbody
toolResultClearingReplace old tool results from a…booleanbody
toolResultClearingHoldoutWhat share of conversations keep every…numberbody
iqSearchTeach the agent how to use…booleanbody
iqSearchHoldoutWhat share of conversations to run…numberbody
workspaceMapOpen every conversation with a map…booleanbody
workspaceMapHoldoutWhat share of conversations to open…numberbody
fieldNotesOpen every turn with a brief…booleanbody
fieldNotesBudgetHow much of that brief to…integerbody
fieldNotesHoldoutWhat share of conversations to run…numberbody
outputCleanersWhich command outputs to trim before…stringbody
outputHoldoutWhat share of commands to leave…numberbody
modelRolesWhich models do which job, one…objectbody
autoModelGuidanceWhat you would tell somebody choosing…stringbody
changelogReposWhich repositories keep a changelog, and…string[]body
agentRetentionDaysHow many days a finished conversation…numberbody
limitPolicyWhat happens to a turn a…"wait" | "resend" | "move"body
outagePolicyWhat happens to a turn the…"wait" | "retry"body
stopPolicyWhat happens to a turn that…"wait" | "retry"body
limitMoveCarryUnderWhen a spent usage limit moves…integerbody
keepWarmKeeping an idle conversation's prompt cache…objectbody
autoKeep a Claude conversation's prompt cache…booleanbody
hoursHow long an idle conversation is…numberbody
minTokensOnly conversations at least this large,…integerbody
reserveHow much of an account's usage…integerbody
autoRepairWhether main's CI failing is repaired…booleanbody
followOriginWhether each workspace repo keeps up…booleanbody
offloadWhich heavy work runs on a…objectbody
commandsobjectbody
continueWhenNeedMetWhether a conversation carries on by…booleanbody
autoResumeOnRestartWhether a turn killed by the…booleanbody
adoptedChecksWhich repositories may run the checks…objectbody
rulesStanding decisions about the sandbox's own…object[]body
idrequiredstringbody
labelrequiredstringbody
momentrequired"file.edited" | "turn.ending" | "agent.finished" | "agent.landed"body
whenobjectbody
repostringbody
pathsstring[]body
outcome"clean" | "error" | "conflict" | "checks-failed"[]body
samplenumberbody
actionrequiredobjectbody
when kind is "command"shapebody
commandrequiredstringbody
timeoutMsnumberbody
when kind is "verdict"shapebody
verdictrequired"allow" | "hold"body
when kind is "builtin"shapebody
namerequired"verify-ui-edits" | "version-landed"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
issues"allow" | "hold" | "deny"body
workspace"allow" | "hold" | "deny"body
workflow"allow" | "deny"body
actionRulesWhat an agent may do out…objectbody
commandJudgeWhether a model reads your safety…"off" | "watch" | "on"body
projectInstallsWhat happens when an agent installs…"automatic" | "ask" | "never"body
subagentsAtOnceHow many subagents may work at…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 '{"timezone":"","stableSystemPrompt":false,"skills":["…","…"],"personaRouting":true,"hashlineEdits":false,"systemPromptMode":"intentic","systemPrompt":"","leanGuidance":false,"leanGuidanceHoldout":0,"toolResultClearing":false,"toolResultClearingHoldout":0.5,"iqSearch":false,"iqSearchHoldout":0,"workspaceMap":false,"workspaceMapHoldout":0,"fieldNotes":false,"fieldNotesBudget":4000,"fieldNotesHoldout":0,"outputCleaners":"","outputHoldout":0,"modelRoles":{"src/app.ts":[{"provider":"claude","model":"claude-sonnet-4-6","effort":"…","thinking":true,"fast":true,"harness":"native"},{"provider":"claude","model":"claude-haiku-4-6","effort":"…","thinking":true,"fast":true,"harness":"claude-code"}],"README.md":[{"provider":"claude","model":"claude-sonnet-4-6","effort":"…","thinking":true,"fast":true,"harness":"native"},{"provider":"claude","model":"claude-haiku-4-6","effort":"…","thinking":true,"fast":true,"harness":"claude-code"}]},"autoModelGuidance":"","changelogRepos":["…","…"],"agentRetentionDays":3,"limitPolicy":"wait","outagePolicy":"wait","stopPolicy":"wait","limitMoveCarryUnder":100000,"keepWarm":{"auto":false,"hours":4,"minTokens":100000,"reserve":15},"autoRepair":true,"followOrigin":true,"offload":{"commands":{"src/app.ts":"…","README.md":"…"}},"continueWhenNeedMet":true,"autoResumeOnRestart":false,"adoptedChecks":{"src/app.ts":"…","README.md":"…"},"rules":[{"id":"a1b2c3d4","label":"Nightly changelog","moment":"file.edited","when":{"repo":"root","paths":["src/app.ts","README.md"],"outcome":["clean","error"],"sample":1},"action":{"kind":"command","command":"pnpm dev","timeoutMs":900000},"enabled":true},{"id":"e5f6a7b8","label":"Release notes","moment":"turn.ending","when":{"repo":"site","paths":["src/app.ts","README.md"],"outcome":["clean","error"],"sample":1},"action":{"kind":"command","command":"pnpm build","timeoutMs":900000},"enabled":true}],"automationFailureLimit":0,"admission":{"schedule":"allow","event":"allow","listener":"allow","webchat":"allow","issues":"allow","workspace":"allow","workflow":"allow"},"actionRules":{"src/app.ts":"allow","README.md":"hold"},"commandJudge":"off","projectInstalls":"automatic","subagentsAtOnce":20,"subagentsPerTurn":200,"subagentDepth":3}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.set({
  "timezone": "",
  "stableSystemPrompt": false,
  "skills": [
    "…",
    "…"
  ],
  "personaRouting": true,
  "hashlineEdits": false,
  "systemPromptMode": "intentic",
  "systemPrompt": "",
  "leanGuidance": false,
  "leanGuidanceHoldout": 0,
  "toolResultClearing": false,
  "toolResultClearingHoldout": 0.5,
  "iqSearch": false,
  "iqSearchHoldout": 0,
  "workspaceMap": false,
  "workspaceMapHoldout": 0,
  "fieldNotes": false,
  "fieldNotesBudget": 4000,
  "fieldNotesHoldout": 0,
  "outputCleaners": "",
  "outputHoldout": 0,
  "modelRoles": {
    "src/app.ts": [
      {
        "provider": "claude",
        "model": "claude-sonnet-4-6",
        "effort": "…",
        "thinking": true,
        "fast": true,
        "harness": "native"
      },
      {
        "provider": "claude",
        "model": "claude-haiku-4-6",
        "effort": "…",
        "thinking": true,
        "fast": true,
        "harness": "claude-code"
      }
    ],
    "README.md": [
      {
        "provider": "claude",
        "model": "claude-sonnet-4-6",
        "effort": "…",
        "thinking": true,
        "fast": true,
        "harness": "native"
      },
      {
        "provider": "claude",
        "model": "claude-haiku-4-6",
        "effort": "…",
        "thinking": true,
        "fast": true,
        "harness": "claude-code"
      }
    ]
  },
  "autoModelGuidance": "",
  "changelogRepos": [
    "…",
    "…"
  ],
  "agentRetentionDays": 3,
  "limitPolicy": "wait",
  "outagePolicy": "wait",
  "stopPolicy": "wait",
  "limitMoveCarryUnder": 100000,
  "keepWarm": {
    "auto": false,
    "hours": 4,
    "minTokens": 100000,
    "reserve": 15
  },
  "autoRepair": true,
  "followOrigin": true,
  "offload": {
    "commands": {
      "src/app.ts": "…",
      "README.md": "…"
    }
  },
  "continueWhenNeedMet": true,
  "autoResumeOnRestart": false,
  "adoptedChecks": {
    "src/app.ts": "…",
    "README.md": "…"
  },
  "rules": [
    {
      "id": "a1b2c3d4",
      "label": "Nightly changelog",
      "moment": "file.edited",
      "when": {
        "repo": "root",
        "paths": [
          "src/app.ts",
          "README.md"
        ],
        "outcome": [
          "clean",
          "error"
        ],
        "sample": 1
      },
      "action": {
        "kind": "command",
        "command": "pnpm dev",
        "timeoutMs": 900000
      },
      "enabled": true
    },
    {
      "id": "e5f6a7b8",
      "label": "Release notes",
      "moment": "turn.ending",
      "when": {
        "repo": "site",
        "paths": [
          "src/app.ts",
          "README.md"
        ],
        "outcome": [
          "clean",
          "error"
        ],
        "sample": 1
      },
      "action": {
        "kind": "command",
        "command": "pnpm build",
        "timeoutMs": 900000
      },
      "enabled": true
    }
  ],
  "automationFailureLimit": 0,
  "admission": {
    "schedule": "allow",
    "event": "allow",
    "listener": "allow",
    "webchat": "allow",
    "issues": "allow",
    "workspace": "allow",
    "workflow": "allow"
  },
  "actionRules": {
    "src/app.ts": "allow",
    "README.md": "hold"
  },
  "commandJudge": "off",
  "projectInstalls": "automatic",
  "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
searchobject
metricsobject[]
metric"searchCalls" | "openingSearches" | "openingListings" | "callsBeforeTarget" … (7)
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations" | "opening turns"
cohortstring
mapobject
metricsobject[]
metric"searchCalls" | "openingSearches" | "openingListings" | "callsBeforeTarget" … (7)
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations" | "opening turns"
cohortstring
notesobject
metricsobject[]
metric"searchCalls" | "openingSearches" | "openingListings" | "callsBeforeTarget" … (7)
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations" | "opening turns"
cohortstring
guidanceobject
metricsobject[]
metric"searchCalls" | "openingSearches" | "openingListings" | "callsBeforeTarget" … (7)
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations" | "opening turns"
cohortstring
clearingobject
metricsobject[]
metric"searchCalls" | "openingSearches" | "openingListings" | "callsBeforeTarget" … (7)
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations" | "opening turns"
cohortstring
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();
GET/settings/repo-checksWhat each repository asks to run on its own code

Every repository that declares its own checks at `.intentic/checks.json`, what it declares, and whether you have switched it on. A repository declares what to run because the command belongs beside the scripts it names; nothing it declares runs until you say so.

What you send

Nothing. Call it as it is.

What comes back

FieldType
reposEvery repository that declares checks, in…object[]
repoWhich repository, by its workspace id…string
pathWhere the declaration lives, relative to…string
checksWhat it declares, in the order…object[]
whenWhen to run it: `edit` on…"edit" | "turn" | "land"
runThe command, run in this repository's…string
labelWhat to call it on screenstring
timeoutMsHow long it may take before…number
pathsOnly run it when the change…string[]
firedWhen each declared check last reported…number[]
adoptedWhether these are runningboolean
changedWhether the declaration changed since it…boolean
errorWhy the file could not be…string
Try itanswered in this tab
curl
curl "$SANDBOX/settings/repo-checks" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.repoChecks();
GET/settings/field-notesThe state of this sandbox's field notes

Whether `.intentic/config/field-notes.toon` exists, when it was last rewritten, how much of it the current budget reaches, and whether a monthly rewrite is scheduled.

What you send

Nothing. Call it as it is.

What comes back

FieldType
presentboolean
writtenAtnumber
ranksSentnumber
ranksTotalnumber
charsnumber
automation"missing" | "enabled" | "disabled"
nextRunAtnumber
unreadablestring
Try itanswered in this tab
curl
curl "$SANDBOX/settings/field-notes" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.fieldNotes();
POST/settings/timezoneOffer this sandbox a clock, if it has none

Sets which timezone this sandbox's schedules are meant in, but only while it has none set. Already answered, the stored zone wins and comes back unchanged, so any number of browsers can offer theirs without fighting over it. To change a zone that is already set, write the settings.

What you send

FieldTypeWhere
timezonerequiredThe zone the offering machine is…stringbody

What comes back

FieldType
timezoneThe zone this sandbox's schedules are…string
adoptedWhether this call is what set…boolean
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/settings/timezone" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"timezone":"…"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.adoptTimezone({
  "timezone": "…"
});
GET/settings/audienceWhich words the editor uses for you here

Whether your editor speaks git's own words (developer) or plain ones (maker) on this sandbox, in every browser and on every device. Absent until you have chosen here.

What you send

Nothing. Call it as it is.

What comes back

FieldType
audiencedeveloper for git's own words, maker…"developer" | "maker"
Try itanswered in this tab
curl
curl "$SANDBOX/settings/audience" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.audience();
POST/settings/audienceChoose which words the editor uses for you here

Sets whether your editor speaks git's own words (developer) or plain ones (maker) on this sandbox, for every browser and device you open it on. Other members keep their own. With `offer` it is taken only while you have none kept, and the kept answer comes back unchanged.

What you send

FieldTypeWhere
audiencerequireddeveloper for git's own words, maker…"developer" | "maker"body
offerTake it only while this person…booleanbody

What comes back

FieldType
audienceThe words this sandbox's editor now…"developer" | "maker"
adoptedWhether this call set itboolean
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/settings/audience" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"audience":"developer","offer":true}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.setAudience({
  "audience": "developer",
  "offer": true
});
POST/settings/repo-checks/adoptSwitch a repository's own checks on or off

Adopts exactly what that repository declares as it stands now. If the declaration changes afterwards it stops running until you adopt it again, so a command nobody has read cannot inherit the answer given to a different one.

What you send

FieldTypeWhere
reporequiredWhich repository's declaration to switchstringbody
onrequiredOn adopts what it declares as…booleanbody

What comes back

FieldType
okAlways truetrue
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/settings/repo-checks/adopt" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"repo":"root","on":true}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.adoptRepoChecks({
  "repo": "root",
  "on": true
});

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