Skip to content
titah

Capabilities

Sandbox

`sandbox.bash` fences shell commands at the process layer — the one gap the permission axes cannot close. Off by default, and it fails closed.

The gap it closes

Titah’s permission model guards at the tool layer, and it guards well. But once a bash command is allowed, it runs with your full rights: rm -rf ~, curl | sh, a write into ~/.ssh.

The delete axis governs the remove tool. bash never passes through it. No arrangement of axes fixes that, because the axes describe which tool is being used and the problem is what the tool can reach.

{ "sandbox": { "bash": true, "network": true } }

Reads stay free, writes are confined

Confining reads confines compilers, linters, and git log — you would turn the whole feature off within a day.

What is confined is writes outside the project directory and temp. That is the one fence that stops rm -rf ~ without stopping npm install.

network defaults to on, because npm and git need it. Turn it off for a tighter fence when the work does not.

It fails closed

Seatbelt on macOS, bubblewrap on Linux.

Turn the sandbox on where no sandbox exists and bash is refused rather than run unfenced. Somebody who enabled it believes there is a fence; running anyway would leave them believing it while there is none.

titah doctor reports which of the three states you are actually in: on and available, on with nothing to enforce it, or off.

Off by default

A sandbox changes how commands run, and a change like that must not arrive unrequested. A command that suddenly fails to write somewhere it has always been allowed to write is a failure nobody will connect to a Titah upgrade.

!!! warning “Platform status” Verified on macOS / Seatbelt. The bubblewrap path is written but has not yet been run on a Linux box. Windows has no sandbox at all — and no Titah support in v1 either.

What it is not

It is not a substitute for the permission engine, and not a claim that a sandboxed bash is safe to allow blindly. It bounds the blast radius of a command you approved; it does not decide whether to approve it. Both layers are worth having — see Permissions & undo.