Settings
The sandbox's own configuration, plus what it has saved you and which rules fired
On this page(18 sections)
- Read the agent execution domain
- Choose the agent execution domain
- Read the AI literacy notice and your confirmation
- Confirm your own AI literacy notice
- List AI literacy confirmations
- How this sandbox is configured
- Change the sandbox settings
- What the token-saving measures were worth
- Read a built-in system prompt
- When each rule last did something
- What each repository asks to run on its own code
- The state of this sandbox's field notes
- Offer this sandbox a clock, if it has none
- Which words the editor uses for you here
- Choose which words the editor uses for you here
- What you said about the getting-started checklist here
- Put away or bring back the getting-started checklist
- Switch a repository's own checks on or off
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
| Field | Type |
|---|---|
agentDomain | "root" | "unprivileged" |
curl "$SANDBOX/settings/agent-domain" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.settings.agentDomain();POST/settings/agent-domainChoose the agent execution domain
What you send
| Field | Type | Where |
|---|---|---|
agentDomain | "root" | "unprivileged" | body |
What comes back
| Field | Type |
|---|---|
okAlways true | true |
curl -X POST "$SANDBOX/settings/agent-domain" \
-H "x-intentic-control: $INTENTIC_TOKEN" \
-H "content-type: application/json" \
-d '{"agentDomain":"root"}'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
| Field | Type | Where |
|---|---|---|
localerequired | "en" | "pl" | "de" | "fr" … (5) | address |
What comes back
| Field | Type |
|---|---|
show | boolean |
text | string |
version | string |
confirmedAt | string |
curl "$SANDBOX/settings/ai-literacy/en" \
-H "x-intentic-control: $INTENTIC_TOKEN"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
| Field | Type | Where |
|---|---|---|
versionrequired | string | body |
localerequired | "en" | "pl" | "de" | "fr" … (5) | body |
What comes back
| Field | Type |
|---|---|
show | boolean |
text | string |
version | string |
confirmedAt | string |
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"}'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
| Field | Type |
|---|---|
records | object[] |
member | string |
version | string |
confirmedAt | string |
curl "$SANDBOX/settings/ai-literacy/confirmations" \
-H "x-intentic-control: $INTENTIC_TOKEN"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
| Field | Type |
|---|---|
timezoneWhich clock this sandbox's schedules are… | "" | string |
skillsWhich built-in tools are switched on | string[] |
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 is | string |
nameWhat it is called on the… | string |
pinsThe models it runs on, tried… | object[] |
providerWhich provider serves this work | string |
modelWhich of its models | string |
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 |
commands | object |
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[] |
id | string |
label | string |
moment | "file.edited" | "turn.ending" | "agent.finished" | "agent.landed" |
when | object |
repo | string |
paths | string[] |
outcome | "clean" | "error" | "conflict" | "checks-failed"[] |
sample | number |
action | object |
when kind is "command" | shape |
command | string |
timeoutMs | number |
when kind is "verdict" | shape |
verdict | "allow" | "hold" |
when kind is "builtin" | shape |
name | "verify-ui-edits" | "version-landed" |
enabled | boolean |
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 speaks | string |
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 |
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 |
|---|---|---|
timezoneWhich clock this sandbox's schedules are… | "" | string | body |
skillsWhich built-in tools are switched on | string[] | body |
personaRoutingWhether a new chat is matched… | boolean | body |
chatPagesLet the agent answer with a… | boolean | body |
documentSearchKeep the text of every document… | boolean | body |
sleepWhenUnusedLet the computer this sandbox runs… | boolean | body |
hashlineEditsHave the agent edit files by… | boolean | 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 |
toolSearchLoad the schemas of connected tools… | boolean | body |
toolSearchHoldoutWhat share of conversations to run… | number | body |
stableSystemPromptKeep the instructions identical between turns… | boolean | body |
stableSystemPromptHoldoutWhat share of conversations to run… | number | body |
coldTrimResume large Claude Code conversations with… | boolean | body |
coldTrimHoldoutWhat share of conversations to resume… | number | body |
coldTrimMinTokensHow many measured context tokens a… | integer | body |
workspaceMapOpen every conversation with a map… | boolean | body |
workspaceMapHoldoutWhat share of conversations to open… | number | body |
fieldNotesOpen every turn with a brief… | boolean | body |
fieldNotesBudgetHow much of that brief to… | integer | body |
fieldNotesHoldoutWhat share of conversations to run… | number | body |
outputCleanersWhich command outputs to trim before… | string | body |
outputHoldoutWhat share of commands to leave… | number | body |
modelSetupsThe model setups jobs run on:… | object[] | body |
idrequiredWhich setup this is | string | body |
nameWhat it is called on the… | string | body |
pinsThe models it runs on, tried… | object[] | body |
providerrequiredWhich provider serves this work | string | body |
modelrequiredWhich of its models | string | body |
effortHow hard this model should think,… | string | body |
thinkingWhether this model reasons before it… | boolean | body |
fastAsk for this model's work at… | boolean | body |
harnessWhich agentic loop runs it | "native" | "claude-code" | "codex" | "opencode" … (7) | body |
roleSetupsWhich setup each job runs on:… | object | body |
autoModelGuidanceWhat you would tell somebody choosing… | string | body |
changelogReposWhich repositories keep a changelog, and… | string[] | body |
agentRetentionDaysHow many days a finished conversation… | number | body |
heldCheckoutDaysHow many quiet days a held… | integer | body |
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… | integer | body |
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… | integer | body |
handoffSummaryOverFor the suggested hand-off: at or… | integer | body |
keepWarmKeeping an idle conversation's prompt cache… | object | body |
autoKeep a Claude conversation's prompt cache… | boolean | body |
hoursHow long an idle conversation is… | number | body |
minTokensOnly conversations at least this large,… | integer | body |
reserveHow much of an account's usage… | integer | body |
autoRepairWhether main's CI failing is repaired… | boolean | body |
followOriginWhether each workspace repo keeps up… | boolean | body |
offloadWhich work runs on a runner… | object | body |
commands | object | body |
sessions | "suggest" | "auto" | "off" | body |
continueWhenNeedMetWhether a conversation carries on by… | boolean | body |
autoResumeOnRestartWhether a turn killed by the… | boolean | body |
adoptedChecksWhich repositories may run the checks… | object | body |
rulesStanding decisions about the sandbox's own… | object[] | body |
idrequired | string | body |
labelrequired | string | body |
momentrequired | "file.edited" | "turn.ending" | "agent.finished" | "agent.landed" | body |
when | object | body |
repo | string | body |
paths | string[] | body |
outcome | "clean" | "error" | "conflict" | "checks-failed"[] | body |
sample | number | body |
actionrequired | object | body |
when kind is "command" | shape | body |
commandrequired | string | body |
timeoutMs | number | body |
when kind is "verdict" | shape | body |
verdictrequired | "allow" | "hold" | body |
when kind is "builtin" | shape | body |
namerequired | "verify-ui-edits" | "version-landed" | body |
enabled | boolean | body |
automationFailureLimitHow many failures in a row… | number | body |
voiceHow the agent's replies are spoken… | object | body |
repliesWhen you talk to the agent… | boolean | body |
interruptStop speaking the moment you start… | boolean | body |
speedHow fast it speaks, 1 being… | number | body |
voicesWhich voice speaks each language, where… | object | body |
cloudA speech provider of your own,… | object | body |
providerrequiredWhich provider speaks | "elevenlabs" | "cartesia" | "deepgram" | body |
secretrequiredThe stored secret holding its API… | string | body |
modelWhich of its models speaks | string | body |
voiceWhich of its voices, by the… | string | body |
wakeTalking to the agent from across… | object | body |
wordThe name you call the agent… | string | body |
retentionHow long this sandbox keeps each… | object | body |
transcriptDaysHow many days a conversation's transcript… | integer | body |
restorePointKeepDaysHow many days the workspace's restore… | integer | body |
privacyVaultDaysHow many days the privacy shield… | integer | body |
cacheDaysHow many days converted copies of… | integer | body |
rawOutputDaysHow many days the full, untrimmed… | integer | body |
auditThe audit trail: who changed a… | object | body |
retentionDaysHow many days audit records are… | integer | body |
recordReadsAlso record who opened which conversation,… | boolean | body |
forwardUrlAn HTTPS address each audit record… | "" | string | body |
forwardSecretThe name of a stored secret… | string | body |
productAnalyticsLet Intentic's product analytics (usage events… | boolean | body |
aiNoticeA notice members confirm once, telling… | object | body |
showShow members a short notice the… | boolean | body |
textYour own wording for that notice,… | string | 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 |
issues | "allow" | "hold" | "deny" | body |
workspace | "allow" | "hold" | "deny" | body |
workflow | "allow" | "deny" | body |
actionRulesWhat an agent may do out… | object | body |
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… | number | body |
subagentsPerTurnHow many a single turn may… | number | body |
subagentDepthHow many levels deep the delegation… | number | body |
childRerunHorizonHoursHow long a subagent refused for… | integer | body |
subagentBudgetStart a subagent only where an… | boolean | body |
subagentReservePercentHow much of each allowance window,… | integer | body |
automationThreadsAtOnceHow many threads of one team-chat… | 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 '{"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}'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
| 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 |
search | object |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
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" | "opening turns" |
cohort | string |
previous | object |
from | number |
to | number |
cohort | string |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
on | object |
off | object |
controlTurnsNeeded | number |
marginPct | number |
deltaPct | number |
saved | number |
uptake | object |
on | number |
off | number |
turns | number |
map | object |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
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" | "opening turns" |
cohort | string |
previous | object |
from | number |
to | number |
cohort | string |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
on | object |
off | object |
controlTurnsNeeded | number |
marginPct | number |
deltaPct | number |
saved | number |
uptake | object |
on | number |
off | number |
turns | number |
notes | object |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
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" | "opening turns" |
cohort | string |
previous | object |
from | number |
to | number |
cohort | string |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
on | object |
off | object |
controlTurnsNeeded | number |
marginPct | number |
deltaPct | number |
saved | number |
uptake | object |
on | number |
off | number |
turns | number |
toolSearch | object |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
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" | "opening turns" |
cohort | string |
previous | object |
from | number |
to | number |
cohort | string |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
on | object |
off | object |
controlTurnsNeeded | number |
marginPct | number |
deltaPct | number |
saved | number |
uptake | object |
on | number |
off | number |
turns | number |
stablePrompt | object |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
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" | "opening turns" |
cohort | string |
previous | object |
from | number |
to | number |
cohort | string |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
on | object |
off | object |
controlTurnsNeeded | number |
marginPct | number |
deltaPct | number |
saved | number |
uptake | object |
on | number |
off | number |
turns | number |
coldTrim | object |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
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" | "opening turns" |
cohort | string |
previous | object |
from | number |
to | number |
cohort | string |
metrics | object[] |
metric | "searchCalls" | "openingSearches" | "openedWithListing" | "callsBeforeTarget" … (7) |
on | object |
off | object |
controlTurnsNeeded | number |
marginPct | number |
deltaPct | number |
saved | number |
uptake | object |
on | number |
off | number |
turns | 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();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
| Field | Type |
|---|---|
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 screen | string |
timeoutMsHow long it may take before… | number |
pathsOnly run it when the change… | string[] |
firedWhen each declared check last reported… | number[] |
adoptedWhether these are running | boolean |
changedWhether the declaration gained or rewrote… | boolean |
heldFor a changed declaration, which of… | boolean[] |
errorWhy the file could not be… | string |
curl "$SANDBOX/settings/repo-checks" \
-H "x-intentic-control: $INTENTIC_TOKEN"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
| Field | Type |
|---|---|
present | boolean |
writtenAt | number |
ranksSent | number |
ranksTotal | number |
chars | number |
automation | "missing" | "enabled" | "disabled" |
nextRunAt | number |
unreadable | string |
unlisted | string[] |
curl "$SANDBOX/settings/field-notes" \
-H "x-intentic-control: $INTENTIC_TOKEN"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
| Field | Type | Where |
|---|---|---|
timezonerequiredThe zone the offering machine is… | string | body |
What comes back
| Field | Type |
|---|---|
timezoneThe zone this sandbox's schedules are… | string |
adoptedWhether this call is what set… | boolean |
curl -X POST "$SANDBOX/settings/timezone" \
-H "x-intentic-control: $INTENTIC_TOKEN" \
-H "content-type: application/json" \
-d '{"timezone":"…"}'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
| Field | Type |
|---|---|
audiencedeveloper for git's own words, maker… | "developer" | "maker" |
curl "$SANDBOX/settings/audience" \
-H "x-intentic-control: $INTENTIC_TOKEN"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
| Field | Type | Where |
|---|---|---|
audiencerequireddeveloper for git's own words, maker… | "developer" | "maker" | body |
offerTake it only while this person… | boolean | body |
What comes back
| Field | Type |
|---|---|
audienceThe words this sandbox's editor now… | "developer" | "maker" |
adoptedWhether this call set it | boolean |
curl -X POST "$SANDBOX/settings/audience" \
-H "x-intentic-control: $INTENTIC_TOKEN" \
-H "content-type: application/json" \
-d '{"audience":"developer","offer":true}'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
| Field | Type |
|---|---|
hiddenWhether this person put the checklist… | boolean |
skippedThe checklist steps this person passed… | string[] |
curl "$SANDBOX/settings/getting-started" \
-H "x-intentic-control: $INTENTIC_TOKEN"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
| Field | Type | Where |
|---|---|---|
hiddenWhether this person put the checklist… | boolean | body |
skippedThe checklist steps this person passed… | string[] | body |
What comes back
| Field | Type |
|---|---|
hiddenWhether this person put the checklist… | boolean |
skippedThe checklist steps this person passed… | string[] |
curl -X POST "$SANDBOX/settings/getting-started" \
-H "x-intentic-control: $INTENTIC_TOKEN" \
-H "content-type: application/json" \
-d '{"hidden":true,"skipped":["…","…"]}'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
| Field | Type | Where |
|---|---|---|
reporequiredWhich repository's declaration to switch | string | body |
onrequiredOn adopts what it declares as… | boolean | body |
What comes back
| Field | Type |
|---|---|
okAlways true | true |
curl -X POST "$SANDBOX/settings/repo-checks/adopt" \
-H "x-intentic-control: $INTENTIC_TOKEN" \
-H "content-type: application/json" \
-d '{"repo":"root","on":true}'import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.settings.adoptRepoChecks({
"repo": "root",
"on": true
});