Cato.
A boundary for AI agents.
A portable sandbox. One config defines what an agent can read, write, and reach — the same rules in every environment.
Agents run with your full permissions.
Every file. Every secret. Every endpoint they can reach. Same for build scripts, npm packages, downloaded code.
You either set up Docker (heavy) or trust everything (risky).
A config defines the boundary.
A .cato.toml in your repo declares what is readable, what is writable, and which network domains are reachable.
Same rules, every environment.
Local, CI, container — the .cato.toml follows the repo. There is no "works on my machine" for your security policy.
View on GitHub →- ~/.ssh/id_rsaREAD
- .env, .env.localREAD · WRITE
- ~/.aws/credentialsREAD
- any URL on the internetNETWORK
- your entire $HOMEREAD · WRITE
Boundaries, at the OS level.
Reads of denied files fail at the syscall. Network calls outside the allowlist do not leave the process. No daemon. No container. No root.
A 2 MB binary. Sub-second startup.
brew tap harikrishnareddyl/cato brew install cato
npm install -g cato-cli
pip install cato-cli-py
cargo install cato-cli
cd my-project cato init # creates .cato.toml cato tool add node git python3 # register tools cato run # enter sandbox