Sealed sandbox, not just a proxy
The agent process itself runs inside gVisor, Apple Container,
or a microVM. A compromise has to break the sandbox, not just
guess a hidden key.
Secret exfiltration protection
The allowlist is the real boundary; this is the backstop on
the hosts you did allow. Requests are scanned for known
tokens, secret patterns, and planted canaries — matches get
redacted, blocked, or held for a human to approve.
View source
Per-bottle egress allowlists
Only declared hosts, methods, headers, and path shapes get
through the proxy.
Credential shielding
One layer of the seal, not the whole story: host tokens stay
outside the agent, which sees proxy URLs instead of raw
credentials.
Gitleaks on push
Git remotes route through git-gate so refs are scanned before
they reach upstream.
View source
Composable, manifest-scoped policy
Each bottle declares its own skills, environment, git
identity, and route policy, and extends lets you
layer task-specific policy on top of a shared provider
baseline.
Trust boundary at $HOME
Bottle definitions live under ~/.bot-bottle/bottles/, outside
the repo. A malicious clone can't redirect a route or rewrite
its own policy.
View PRD
Supervised escalation
A blocked agent can request a new route. A human approves or
denies before any traffic moves.
Parallel agents
Launch as many bottles as you want at once. Each gets its own
isolation boundary and network, with no shared state or
collisions.
Any provider, any image
Bring your own provider and image, or use the built-in Claude,
Codex, and Pi providers.
Your isolation stack
Works with macOS containers, Firecracker, or Docker, driven by
stdlib Python only.