Secrets
Stored values the agent can use without ever reading them
On this page(5 sections)
Write a secret, list which names exist, delete one. Revealing a value is the deliberate exception and the only route that hands one back; everywhere else the daemon substitutes a secret by reference at the moment a command runs.
POST/secretsStore a secret
Writes one name and value into the sandbox's own store, where running processes pick it up without a restart. Refused until the sandbox has somewhere to keep them.
What you send
| Field | Type | Where |
|---|---|---|
keyrequiredThe name to store it under,… | string | body |
valuerequiredThe value | string | body |
What comes back
| Field | Type |
|---|---|
okAlways true | true |
curl -X POST "$SANDBOX/secrets" \
-H "x-intentic-control: $INTENTIC_TOKEN" \
-H "content-type: application/json" \
-d '{"key":"OPENAI_API_KEY","value":"…"}'import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.secrets.set({
"key": "OPENAI_API_KEY",
"value": "…"
});GET/secretsNames of the stored secrets
Which secrets exist here. Names only, never values.
What you send
Nothing. Call it as it is.
What comes back
| Field | Type |
|---|---|
keysThe names that exist here | string[] |
curl "$SANDBOX/secrets" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.secrets.list();DELETE/secrets/{key}Delete a secret
Removes one by name.
What you send
| Field | Type | Where |
|---|---|---|
keyrequiredWhich secret, by name | string | address |
What comes back
| Field | Type |
|---|---|
okAlways true | true |
curl -X DELETE "$SANDBOX/secrets/OPENAI_API_KEY" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.secrets.remove({
"key": "OPENAI_API_KEY"
});GET/secrets/inventoryEvery secret this sandbox holds, from everywhere
One view across all the places secrets live here: what exists, where it came from and whether it is working. Never any values. This one always answers, even before there is a store to write to.
What you send
Nothing. Call it as it is.
What comes back
| Field | Type |
|---|---|
entriesOne entry per secret this sandbox… | object[] |
keyWhat identifies it | string |
kindWhere it came from: you set… | "env" | "generated" | "capability" | "provider" |
labelA friendlier name, for entries that… | string |
statusWhether it exists and, for a… | "missing" | "set" | "connected" |
requiredByWhat is waiting on it | object[] |
resourceIdWhich resource | string |
typeWhat kind of resource it is | string |
storedAtWhere it actually lives, in words | string |
revealableWhether its value can be shown… | boolean |
ciWhether a copy has been given… | object |
syncedWhether the pipeline has it | boolean |
pushedAtWhen it was last sent there | string |
lastUseThe last time an agent actually… | object |
atWhen, in milliseconds | number |
laneHow it was used: a command,… | "shell" | "code" | "browser" |
detailWhere it went: the start of… | string |
curl "$SANDBOX/secrets/inventory" \
-H "x-intentic-control: $INTENTIC_TOKEN"import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.secrets.inventory();POST/secrets/revealShow one secret's value
The only call that hands a value back, and it is for the owner alone. Sent as a body rather than in the address, so the name never ends up in a log or a browser's history.
What you send
| Field | Type | Where |
|---|---|---|
keyrequiredWhich secret, by name | string | body |
What comes back
| Field | Type |
|---|---|
valueThe value itself | string |
curl -X POST "$SANDBOX/secrets/reveal" \
-H "x-intentic-control: $INTENTIC_TOKEN" \
-H "content-type: application/json" \
-d '{"key":"OPENAI_API_KEY"}'import { sandbox } from "@intentic/sandbox-client";
const result = await sandbox.secrets.reveal({
"key": "OPENAI_API_KEY"
});