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(18 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.

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

GET/settings/agent-domainRead the agent execution domain

What you send

Nothing. Call it as it is.

What comes back

FieldType
agentDomain"root" | "unprivileged"
Try itanswered in this tab
curl
curl "$SANDBOX/settings/agent-domain" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.agentDomain();
POST/settings/agent-domainChoose the agent execution domain

What you send

FieldTypeWhere
agentDomain"root" | "unprivileged"body

What comes back

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

const result = await sandbox.settings.setAgentDomain({
  "agentDomain": "root"
});
GET/settings/ai-literacy/{locale}Read the AI literacy notice and your confirmation

What you send

FieldTypeWhere
localerequired"en" | "pl" | "de" | "fr" … (5)address

What comes back

FieldType
showboolean
textstring
versionstring
confirmedAtstring
Try itanswered in this tab
curl
curl "$SANDBOX/settings/ai-literacy/en" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.aiLiteracy({
  "locale": "en"
});
POST/settings/ai-literacy/confirmConfirm your own AI literacy notice

What you send

FieldTypeWhere
versionrequiredstringbody
localerequired"en" | "pl" | "de" | "fr" … (5)body

What comes back

FieldType
showboolean
textstring
versionstring
confirmedAtstring
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/settings/ai-literacy/confirm" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"version":"1.4.0","locale":"en"}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.confirmAiLiteracy({
  "version": "1.4.0",
  "locale": "en"
});
GET/settings/ai-literacy/confirmationsList AI literacy confirmations

What you send

Nothing. Call it as it is.

What comes back

FieldType
recordsobject[]
memberstring
versionstring
confirmedAtstring
Try itanswered in this tab
curl
curl "$SANDBOX/settings/ai-literacy/confirmations" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.aiLiteracyConfirmations();
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
skillsWhich built-in tools are switched onstring[]
personaRoutingWhether a new chat is matched…boolean
chatPagesLet the agent answer with a…boolean
documentSearchKeep the text of every document…boolean
sleepWhenUnusedLet the computer this sandbox runs…boolean
hashlineEditsHave the agent edit files by…boolean
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
toolSearchLoad the schemas of connected tools…boolean
toolSearchHoldoutWhat share of conversations to run…number
stableSystemPromptKeep the instructions identical between turns…boolean
stableSystemPromptHoldoutWhat share of conversations to run…number
coldTrimResume large Claude Code conversations with…boolean
coldTrimHoldoutWhat share of conversations to resume…number
coldTrimMinTokensHow many measured context tokens a…integer
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
modelSetupsThe model setups jobs run on:…object[]
idWhich setup this isstring
nameWhat it is called on the…string
pinsThe models it runs on, tried…object[]
providerWhich provider serves this workstring
modelWhich of its modelsstring
effortHow hard this model should think,…string
thinkingWhether this model reasons before it…boolean
fastAsk for this model's work at…boolean
harnessWhich agentic loop runs it"native" | "claude-code" | "codex" | "opencode" … (7)
roleSetupsWhich setup each job runs on:…object
autoModelGuidanceWhat you would tell somebody choosing…string
changelogReposWhich repositories keep a changelog, and…string[]
agentRetentionDaysHow many days a finished conversation…number
heldCheckoutDaysHow many quiet days a held…integer
limitPolicyWhat happens to a turn a…"wait" | "resend" | "move"
outagePolicyWhat happens to a turn the…"wait" | "retry"
turnCapMinutesThe longest one turn may run…integer
stopPolicyWhat happens to a turn that…"wait" | "retry"
memoryPolicyWhat happens to a message the…"wait" | "resend"
limitHandoffHow a turn a spent usage…"suggested" | "carry" | "trim" | "summary"
limitMoveCarryUnderFor the suggested hand-off: carry the…integer
handoffSummaryOverFor the suggested hand-off: at or…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 work runs on a runner…object
commandsobject
sessions"suggest" | "auto" | "off"
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
voiceHow the agent's replies are spoken…object
repliesWhen you talk to the agent…boolean
interruptStop speaking the moment you start…boolean
speedHow fast it speaks, 1 being…number
voicesWhich voice speaks each language, where…object
cloudA speech provider of your own,…object
providerWhich provider speaks"elevenlabs" | "cartesia" | "deepgram"
secretThe stored secret holding its API…string
modelWhich of its models speaksstring
voiceWhich of its voices, by the…string
wakeTalking to the agent from across…object
wordThe name you call the agent…string
retentionHow long this sandbox keeps each…object
transcriptDaysHow many days a conversation's transcript…integer
restorePointKeepDaysHow many days the workspace's restore…integer
privacyVaultDaysHow many days the privacy shield…integer
cacheDaysHow many days converted copies of…integer
rawOutputDaysHow many days the full, untrimmed…integer
auditThe audit trail: who changed a…object
retentionDaysHow many days audit records are…integer
recordReadsAlso record who opened which conversation,…boolean
forwardUrlAn HTTPS address each audit record…"" | string
forwardSecretThe name of a stored secret…string
productAnalyticsLet Intentic's product analytics (usage events…boolean
aiNoticeA notice members confirm once, telling…object
showShow members a short notice the…boolean
textYour own wording for that notice,…string
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
childRerunHorizonHoursHow long a subagent refused for…integer
subagentBudgetStart a subagent only where an…boolean
subagentReservePercentHow much of each allowance window,…integer
automationThreadsAtOnceHow many threads of one team-chat…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
skillsWhich built-in tools are switched onstring[]body
personaRoutingWhether a new chat is matched…booleanbody
chatPagesLet the agent answer with a…booleanbody
documentSearchKeep the text of every document…booleanbody
sleepWhenUnusedLet the computer this sandbox runs…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
iqSearchTeach the agent how to use…booleanbody
iqSearchHoldoutWhat share of conversations to run…numberbody
toolSearchLoad the schemas of connected tools…booleanbody
toolSearchHoldoutWhat share of conversations to run…numberbody
stableSystemPromptKeep the instructions identical between turns…booleanbody
stableSystemPromptHoldoutWhat share of conversations to run…numberbody
coldTrimResume large Claude Code conversations with…booleanbody
coldTrimHoldoutWhat share of conversations to resume…numberbody
coldTrimMinTokensHow many measured context tokens a…integerbody
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
modelSetupsThe model setups jobs run on:…object[]body
idrequiredWhich setup this isstringbody
nameWhat it is called on the…stringbody
pinsThe models it runs on, tried…object[]body
providerrequiredWhich provider serves this workstringbody
modelrequiredWhich of its modelsstringbody
effortHow hard this model should think,…stringbody
thinkingWhether this model reasons before it…booleanbody
fastAsk for this model's work at…booleanbody
harnessWhich agentic loop runs it"native" | "claude-code" | "codex" | "opencode" … (7)body
roleSetupsWhich setup each job runs on:…objectbody
autoModelGuidanceWhat you would tell somebody choosing…stringbody
changelogReposWhich repositories keep a changelog, and…string[]body
agentRetentionDaysHow many days a finished conversation…numberbody
heldCheckoutDaysHow many quiet days a held…integerbody
limitPolicyWhat happens to a turn a…"wait" | "resend" | "move"body
outagePolicyWhat happens to a turn the…"wait" | "retry"body
turnCapMinutesThe longest one turn may run…integerbody
stopPolicyWhat happens to a turn that…"wait" | "retry"body
memoryPolicyWhat happens to a message the…"wait" | "resend"body
limitHandoffHow a turn a spent usage…"suggested" | "carry" | "trim" | "summary"body
limitMoveCarryUnderFor the suggested hand-off: carry the…integerbody
handoffSummaryOverFor the suggested hand-off: at or…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 work runs on a runner…objectbody
commandsobjectbody
sessions"suggest" | "auto" | "off"body
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
voiceHow the agent's replies are spoken…objectbody
repliesWhen you talk to the agent…booleanbody
interruptStop speaking the moment you start…booleanbody
speedHow fast it speaks, 1 being…numberbody
voicesWhich voice speaks each language, where…objectbody
cloudA speech provider of your own,…objectbody
providerrequiredWhich provider speaks"elevenlabs" | "cartesia" | "deepgram"body
secretrequiredThe stored secret holding its API…stringbody
modelWhich of its models speaksstringbody
voiceWhich of its voices, by the…stringbody
wakeTalking to the agent from across…objectbody
wordThe name you call the agent…stringbody
retentionHow long this sandbox keeps each…objectbody
transcriptDaysHow many days a conversation's transcript…integerbody
restorePointKeepDaysHow many days the workspace's restore…integerbody
privacyVaultDaysHow many days the privacy shield…integerbody
cacheDaysHow many days converted copies of…integerbody
rawOutputDaysHow many days the full, untrimmed…integerbody
auditThe audit trail: who changed a…objectbody
retentionDaysHow many days audit records are…integerbody
recordReadsAlso record who opened which conversation,…booleanbody
forwardUrlAn HTTPS address each audit record…"" | stringbody
forwardSecretThe name of a stored secret…stringbody
productAnalyticsLet Intentic's product analytics (usage events…booleanbody
aiNoticeA notice members confirm once, telling…objectbody
showShow members a short notice the…booleanbody
textYour own wording for that notice,…stringbody
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
childRerunHorizonHoursHow long a subagent refused for…integerbody
subagentBudgetStart a subagent only where an…booleanbody
subagentReservePercentHow much of each allowance window,…integerbody
automationThreadsAtOnceHow many threads of one team-chat…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":"","skills":["…","…"],"personaRouting":true,"chatPages":true,"documentSearch":true,"sleepWhenUnused":true,"hashlineEdits":false,"systemPromptMode":"intentic","systemPrompt":"","iqSearch":false,"iqSearchHoldout":0,"toolSearch":true,"toolSearchHoldout":0.5,"stableSystemPrompt":true,"stableSystemPromptHoldout":0.5,"coldTrim":true,"coldTrimHoldout":0.5,"coldTrimMinTokens":100000,"workspaceMap":false,"workspaceMapHoldout":0,"fieldNotes":false,"fieldNotesBudget":4000,"fieldNotesHoldout":0,"outputCleaners":"","outputHoldout":0,"modelSetups":[{"id":"a1b2c3d4","name":"nightly changelog","pins":[{"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"}]},{"id":"e5f6a7b8","name":"release notes","pins":[{"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"}]}],"roleSetups":{"src/app.ts":"…","README.md":"…"},"autoModelGuidance":"","changelogRepos":["…","…"],"agentRetentionDays":3,"heldCheckoutDays":14,"limitPolicy":"wait","outagePolicy":"wait","turnCapMinutes":30,"stopPolicy":"wait","memoryPolicy":"wait","limitHandoff":"suggested","limitMoveCarryUnder":150000,"handoffSummaryOver":700000,"keepWarm":{"auto":false,"hours":4,"minTokens":100000,"reserve":15},"autoRepair":true,"followOrigin":true,"offload":{"commands":{"src/app.ts":"…","README.md":"…"},"sessions":"suggest"},"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,"voice":{"replies":true,"interrupt":false,"speed":1,"voices":{"src/app.ts":"…","README.md":"…"},"cloud":{"provider":"elevenlabs","secret":"…","model":"","voice":""},"wake":{"word":"Leon"}},"retention":{"transcriptDays":0,"restorePointKeepDays":30,"privacyVaultDays":0,"cacheDays":0,"rawOutputDays":0},"audit":{"retentionDays":365,"recordReads":false,"forwardUrl":"","forwardSecret":""},"productAnalytics":true,"aiNotice":{"show":false,"text":""},"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,"childRerunHorizonHours":6,"subagentBudget":true,"subagentReservePercent":10,"automationThreadsAtOnce":3}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.set({
  "timezone": "",
  "skills": [
    "…",
    "…"
  ],
  "personaRouting": true,
  "chatPages": true,
  "documentSearch": true,
  "sleepWhenUnused": true,
  "hashlineEdits": false,
  "systemPromptMode": "intentic",
  "systemPrompt": "",
  "iqSearch": false,
  "iqSearchHoldout": 0,
  "toolSearch": true,
  "toolSearchHoldout": 0.5,
  "stableSystemPrompt": true,
  "stableSystemPromptHoldout": 0.5,
  "coldTrim": true,
  "coldTrimHoldout": 0.5,
  "coldTrimMinTokens": 100000,
  "workspaceMap": false,
  "workspaceMapHoldout": 0,
  "fieldNotes": false,
  "fieldNotesBudget": 4000,
  "fieldNotesHoldout": 0,
  "outputCleaners": "",
  "outputHoldout": 0,
  "modelSetups": [
    {
      "id": "a1b2c3d4",
      "name": "nightly changelog",
      "pins": [
        {
          "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"
        }
      ]
    },
    {
      "id": "e5f6a7b8",
      "name": "release notes",
      "pins": [
        {
          "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"
        }
      ]
    }
  ],
  "roleSetups": {
    "src/app.ts": "…",
    "README.md": "…"
  },
  "autoModelGuidance": "",
  "changelogRepos": [
    "…",
    "…"
  ],
  "agentRetentionDays": 3,
  "heldCheckoutDays": 14,
  "limitPolicy": "wait",
  "outagePolicy": "wait",
  "turnCapMinutes": 30,
  "stopPolicy": "wait",
  "memoryPolicy": "wait",
  "limitHandoff": "suggested",
  "limitMoveCarryUnder": 150000,
  "handoffSummaryOver": 700000,
  "keepWarm": {
    "auto": false,
    "hours": 4,
    "minTokens": 100000,
    "reserve": 15
  },
  "autoRepair": true,
  "followOrigin": true,
  "offload": {
    "commands": {
      "src/app.ts": "…",
      "README.md": "…"
    },
    "sessions": "suggest"
  },
  "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,
  "voice": {
    "replies": true,
    "interrupt": false,
    "speed": 1,
    "voices": {
      "src/app.ts": "…",
      "README.md": "…"
    },
    "cloud": {
      "provider": "elevenlabs",
      "secret": "…",
      "model": "",
      "voice": ""
    },
    "wake": {
      "word": "Leon"
    }
  },
  "retention": {
    "transcriptDays": 0,
    "restorePointKeepDays": 30,
    "privacyVaultDays": 0,
    "cacheDays": 0,
    "rawOutputDays": 0
  },
  "audit": {
    "retentionDays": 365,
    "recordReads": false,
    "forwardUrl": "",
    "forwardSecret": ""
  },
  "productAnalytics": true,
  "aiNotice": {
    "show": false,
    "text": ""
  },
  "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,
  "childRerunHorizonHours": 6,
  "subagentBudget": true,
  "subagentReservePercent": 10,
  "automationThreadsAtOnce": 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" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations" | "opening turns"
cohortstring
previousobject
fromnumber
tonumber
cohortstring
metricsobject[]
metric"searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
offobject
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
uptakeobject
onnumber
offnumber
turnsnumber
mapobject
metricsobject[]
metric"searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations" | "opening turns"
cohortstring
previousobject
fromnumber
tonumber
cohortstring
metricsobject[]
metric"searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
offobject
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
uptakeobject
onnumber
offnumber
turnsnumber
notesobject
metricsobject[]
metric"searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations" | "opening turns"
cohortstring
previousobject
fromnumber
tonumber
cohortstring
metricsobject[]
metric"searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
offobject
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
uptakeobject
onnumber
offnumber
turnsnumber
toolSearchobject
metricsobject[]
metric"searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations" | "opening turns"
cohortstring
previousobject
fromnumber
tonumber
cohortstring
metricsobject[]
metric"searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
offobject
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
uptakeobject
onnumber
offnumber
turnsnumber
stablePromptobject
metricsobject[]
metric"searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations" | "opening turns"
cohortstring
previousobject
fromnumber
tonumber
cohortstring
metricsobject[]
metric"searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
offobject
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
uptakeobject
onnumber
offnumber
turnsnumber
coldTrimobject
metricsobject[]
metric"searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
turnsnumber
meannumber
offobject
turnsnumber
meannumber
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
minTurnsnumber
sampleUnit"turns" | "conversations" | "opening turns"
cohortstring
previousobject
fromnumber
tonumber
cohortstring
metricsobject[]
metric"searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7)
onobject
offobject
controlTurnsNeedednumber
marginPctnumber
deltaPctnumber
savednumber
uptakeobject
onnumber
offnumber
turnsnumber
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 gained or rewrote…boolean
heldFor a changed declaration, which of…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
unlistedstring[]
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
});
GET/settings/getting-startedWhat you said about the getting-started checklist here

Whether you put the editor's getting-started checklist away on this sandbox, and which of its steps you passed over. Whether a step is done is not kept here: the editor reads that from the sandbox itself.

What you send

Nothing. Call it as it is.

What comes back

FieldType
hiddenWhether this person put the checklist…boolean
skippedThe checklist steps this person passed…string[]
Try itanswered in this tab
curl
curl "$SANDBOX/settings/getting-started" \
  -H "x-intentic-control: $INTENTIC_TOKEN"
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.gettingStarted();
POST/settings/getting-startedPut away or bring back the getting-started checklist

Replaces what you said about the editor's getting-started checklist on this sandbox: whether it is put away, and which steps you passed over. Other members keep their own.

What you send

FieldTypeWhere
hiddenWhether this person put the checklist…booleanbody
skippedThe checklist steps this person passed…string[]body

What comes back

FieldType
hiddenWhether this person put the checklist…boolean
skippedThe checklist steps this person passed…string[]
Try itanswered in this tab
curl
curl -X POST "$SANDBOX/settings/getting-started" \
  -H "x-intentic-control: $INTENTIC_TOKEN" \
  -H "content-type: application/json" \
  -d '{"hidden":true,"skipped":["…","…"]}'
TypeScript
import { sandbox } from "@intentic/sandbox-client";

const result = await sandbox.settings.setGettingStarted({
  "hidden": true,
  "skipped": [
    "…",
    "…"
  ]
});
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.