Skip to content
WIP

This guide is a work in progress. Barry is also a work in progress.

What is Barry

Barry is a control layer for coding agents. It sits between the harness you run (Antigravity, Claude Code, Codex, Cursor, OpenCode, or Pi) and the capabilities that harness can reach, and it decides what each session may do. The same policy runs across every harness, so you configure an agent once and change the tool in front of it whenever you like.

Barry sits between coding-agent harnesses and bags: tool calls come in, decisions go back, and actions, schedules and workers run under the same policy.

A system prompt that says “do not push to main” is a request, not a control. Most setups cannot actually stop an agent from writing a file, pushing a branch, or reaching the network, and you configure each vendor by hand with its own settings, its own hooks, and its own idea of what a tool is. Nothing carries from one agent to the next.

Barry treats an agent’s power the way you treat software: something you compose, govern, and reuse. Four ideas follow from that.

  • Governance that holds. Barry enforces its restrictions rather than suggesting them. A tool Barry serves that the policy denies never reaches the model, denials beat grants, and policy fails closed. How far that reaches into a harness’s own built-in tools depends on the harness and its mode; enforcement coverage lists exactly what each one enforces.
  • Reuse by composition. Tools, policy, stores, services, and apps are packaged into bags, and bags compose into other bags. Power compounds instead of being rebuilt for each agent.
  • Work that outlives the session. A procedure becomes an action with typed inputs and outputs and a model of its own. Schedule it, and a durable engine backs every run so state survives restarts. When one machine is not enough, link others as workers and Barry spreads the work across them.
  • Portability. The same policy runs on every supported harness, and each identity carries its own keys and model provider.

A small set of primitives, fitting together the same way every time, is all Barry is. Primitives defines each one; the short version:

  • A bag bundles capabilities: tools, instructions, actions, services, schedules, apps, and other bags.
  • A trait grants a session some of what the packed bags offer. A bound takes access away and can never add it.
  • An identity is the persona a session runs as. It packs bags, carries default traits and required bounds, and names the harness and model it drives.

A session resolves those into one effective policy, and four enforcement points hold the session to it: the MCP tool filter, the call-time guards, the native ceiling and hook gate, and the egress sandbox. How Barry works follows that from an identity file to a running session.

Barry does not replace your coding agent; it governs the one you already use. It doesn’t run in the cloud by default: it’s a set of local services on your Mac. Barry’s own state and services stay local unless you link a worker or configure hosting. The harness still sends its context to its model endpoint, as it does without Barry. And it is not a prompt-engineering trick. The guarantees come from code that filters tools and rules calls, not from asking the model nicely.

To install it, continue to Build a Barry.