The 2-minute proof
This is the smallest real shape: If your system can: then you can build an adapter.
- read current target state,
- decide admitted versus blocked for one bounded action,
- and perform one bounded effect after claim,
Adapter guide
Your team may have a system that an agent should work with: a database, API, workflow, local tool, or internal service. An adapter lets that system participate in the boundary. The agent can propose work, the Core decides what may continue, and your adapter only carries out work that has already been admitted.
Implementation guide / preview path
Because a tool call can become direct impact. An adapter keeps the useful part — the agent can prepare work — while the Core decides whether that work may reach the target system.
Your adapter exposes the state the Core should check, describes the local boundary, claims admitted work, and reports what happened.
The Core owns the decision. Your adapter owns the target-system details: state, policy shape, materialization, and outcomes.
The first useful adapter does not need to cover the whole system. Pick one action, one state view, one policy boundary, and one outcome path.
Let agents propose changes or maintenance actions without giving them direct database write authority.
Gate requests before they become real calls against sensitive services.
Let agents prepare workflow steps while the boundary decides what can move forward.
Connect scripts, file operations, or local automation without turning them into unrestricted agent tools.
This is the smallest real shape: If your system can: then you can build an adapter.
You do not need to: The host and Core stay inside the bundle. Your code stays outside the bundle and owns only target-specific behavior.
ImpactRoom is a useful reference shape because it is concrete and easy to picture. It is not part of this shipped bundle. The bundle includes the generic minimal fixture, not a room-specific adapter.
That is enough to prove you can build your own adapter.
This section is not only orientation. It is the build-your-own path:
Once you need exact field names and wire shapes, move into the main docs:
The point of "build your own adapter" is not to fork the system. It is to keep your target-specific logic in your own code while still requiring the explicit path: That is why this bundle is useful even without public Core source. The adapter contract is HTTP. Your implementation can be Go, TypeScript, Python, Rust, or anything else that can speak the protocol.