Sandbox
- Writes: only under the working directory, temp and caches.
- Network: none beyond this machine, or only the hosts you name.
- Read-only to the agent:
.hum/,.claude/,.codex/,.git/hooks,.git/config.
apt install bubblewrap). Neither: /tools shows sandbox: none.
On Windows there is no sandbox, so ~/.hum/run/, which holds the token that opens a running engine’s socket, stays readable by anything you can run.
!cmd runs as you, unconfined. MCP servers run with their own process’s reach.
Credential-like variables (*KEY*, *PASSWORD*, *SECRET*, *TOKEN*, *CREDENTIAL*, HUM_*) are stripped from the model’s commands.
Approval panel
Shown when a command needs more than the sandbox allows./approve makes every change wait for you. Leaving the sandbox asks regardless.
Rules
~/.hum/config.toml (yours) or <repo>/.hum/config.toml (the project’s):
&&, ;, ||, |) need every part allowed. Substitutions, redirections and unclosed quotes are asked about.
Settings
Hosts
Withallow_hosts set and network = false, commands reach those hosts and no others. Humboldt runs one proxy on this machine for the session and hands its address to every command in HTTP_PROXY, HTTPS_PROXY and ALL_PROXY; git, pip, npm, curl and most tools honour them. HTTPS is tunnelled; Humboldt sees the host name and never the bytes. example.com names that host alone, *.example.com names every host below it. A host that is not on the list gets a 403 that names the list, the model reads it, the session shows network: <host> refused, and a network_refused event goes on the transcript. web_fetch and the tool servers you configure are held to the same list. A tool that ignores proxy variables still has no network. network = true opens everything and the list is not used.
HUM_SANDBOX=off for one run. Even off, file tools never write .hum/, .claude/ or .codex/.
mode = "required" refuses to start a session on a machine with no sandbox. File tools never read through a symlink into what the sandbox hides (~/.ssh, ~/.hum/credentials.json, ~/.hum/run).