Safety, and what vekna does not sandbox¶
Vekna does not sandbox agents. The agent edits your repository and runs your commands — that is the job, and a sandbox around it would defeat the point.
What the process split does buy is containment of failure: a broken ritual or a misbehaving SDK kills one cast process and nothing else.
Where a boundary is genuinely wanted, two things work, and neither is vekna's to build.
Scope the credentials, not the process¶
A ritual that triages pull requests needs a token that can read pull requests
and comment on them — not one that can push to main or read every repository
in the organisation.
Fine-grained tokens, one per ritual, least privilege. The example rituals each state the exact permission set they need, because a recommendation nobody can act on is not a recommendation.
Fence the whole thing if you want a fence¶
If a cast must not reach the host, run vekna inside the container — devcontainer, VM, whatever the project already uses — rather than expecting vekna to grow one inwards. A cast process is an ordinary Python process with a working directory, and it containerises like anything else.
What vekna does own¶
Small, and stated:
- The
codingmedium's tool gate.CodingOpts(gate_tools=[...])asks you before the agent runs a named tool, andpermission_mode="dontAsk"with anallowed_toolslist denies everything outside it without stopping to ask. That is how you get a genuinely read-only agent — the list doing the work, not the mode:dontAskdenies what is not on it and grants what is, so one write-capable tool in there is a write-capable agent. - A
decidenever defaults and never times out. Nothing in a cast answers a question on your behalf. - Step budgets.
max_stepsbounds the trampoline, so a ritual that loops forever stops rather than running until you notice.
None of these is a sandbox. They are places where you get to say no.