Agent-readable docs index: /llms.txt. Full docs in one file: /llms-full.txt. Download /docs.zip to grep all markdown files locally.

await SecretStore.create(**kwargs)

Create a new secret store.
python
from opencomputer import SecretStore store = await SecretStore.create( name='my-agent-secrets', egress_allowlist=['api.anthropic.com'], )
body namestrrequired
Store name (unique per organization)
body egress_allowlistlist[str] | None
Allowed egress hosts
Returns: dict

await SecretStore.list(**kwargs)

Returns: list[dict]

await SecretStore.get(store_id, **kwargs)

body store_idstrrequired
UUID of the secret store
Returns: dict

await SecretStore.update(store_id, **kwargs)

Partial updates — only the fields you pass are changed.
python
updated = await SecretStore.update( 'store-uuid', name='new-name', egress_allowlist=['api.anthropic.com', '*.openai.com'], )
body store_idstrrequired
UUID of the store to update
body namestr
New store name
body egress_allowlistlist[str] | None
New allowed egress hosts
Returns: dict

await SecretStore.delete(store_id, **kwargs)

Deletes the store and all its secrets. Running sandboxes are not affected.
Returns: None

await SecretStore.set_secret(store_id, name, value, **kwargs)

Set a secret. Encrypted at rest, never returned by API.
python
await SecretStore.set_secret('store-uuid', 'ANTHROPIC_API_KEY', 'sk-ant-...') # Optionally restrict to specific hosts: await SecretStore.set_secret( 'store-uuid', 'ANTHROPIC_API_KEY', 'sk-ant-...', allowed_hosts=['api.anthropic.com'], )
body store_idstrrequired
UUID of the secret store
body namestrrequired
Secret name (env var name in sandboxes)
body valuestrrequired
Secret value
body allowed_hostslist[str] | None
Restrict to specific hosts
Returns: None

await SecretStore.list_secrets(store_id, **kwargs)

Returns metadata only. Values are never exposed.
Returns: list[dict]

await SecretStore.delete_secret(store_id, name, **kwargs)

Returns: None

Using Secrets with Sandboxes

python
sandbox = await Sandbox.create( secret_store='my-agent-secrets', timeout=600, ) # Secrets are available as sealed env vars result = await sandbox.commands.run('echo $ANTHROPIC_API_KEY') # stdout: "osb_sealed_abc123..." (sealed, not the real key) # Outbound HTTPS requests get the real value substituted by the proxy api_result = await sandbox.commands.run( 'curl -s https://api.anthropic.com/v1/messages -H "x-api-key: $ANTHROPIC_API_KEY" ...' )

Using Secrets with Snapshots and Checkpoints

Snapshot template with secrets

Attach a secret store when creating a sandbox from a pre-built snapshot — even if the snapshot was built without one:
python
from opencomputer import Sandbox, Snapshots, Image # Pre-build a snapshot with dependencies snapshots = Snapshots() await snapshots.create( name='data-pipeline', image=Image.base().apt_install(['python3-pip']).pip_install(['pandas']), ) # Create sandboxes from the snapshot, each with their own credentials worker1 = await Sandbox.create( snapshot='data-pipeline', secret_store='worker-1-keys', ) worker2 = await Sandbox.create( snapshot='data-pipeline', secret_store='worker-2-keys', )

Checkpoint fork with secrets

Attach or layer a secret store when forking from a checkpoint:
python
# Bake a base environment with git credentials base = await Sandbox.create(secret_store='git-creds') await base.exec.run('git clone https://github.com/org/repo /app') cp = await base.create_checkpoint('repo-cloned') # Fork with different credentials per sandbox (layered on top of git-creds) worker = await Sandbox.create_from_checkpoint( cp['id'], secret_store='worker-keys', # layered on top of git-creds )
When layered, secrets merge (fork's store wins on collision) and egress allowlists aggregate.