Bulkheads for multi-agent AI systems.
Like bulkheads on a ship: a breach in one compartment does not sink the whole vessel.
- Agent = separate identity, separate workspace, separate context
- Domains exchange facts only - never raw data, both ways through the hub, with a human consent valve where you want one
- Walls enforced by boring servers (git + Postgres), not by prompts
- Audit trail for free: every crossing is an append-only row, every workspace and brief a git history
The full pattern - problem, five principles, architecture, limitations: PATTERN.md
Reference implementation running daily in my homelab (personal pilot).
cd demo && ./run.shSpins up a disposable Forgejo + Postgres in Docker, builds the walls, runs two fake agents + a hub, shows the human consent valve, prints a morning brief - and ends with the servers refusing two forbidden crossings. Under a minute. Details in demo/README.md.
Needs git 2.31 or newer: the engine passes bot credentials to git
through GIT_CONFIG_COUNT, which older versions ignore. Building it
needs Go 1.25+ (the database driver asks for it).
PATTERN.md the pattern: problem, principles, architecture
cmd/factwall/ the engine: one Go binary, wall tests included
internal/core/ what it is made of - walls, bridges, workspaces
demo/ self-contained demo on generated data
provision lay the foundations: org, brief, hub, schema
join <domain> add one domain: workspace repo + bridge role
sync / save an agent's workspace repo, as its own bot
facts / send / inbox / collect
the two-way fact contract
pending / approve the human consent valve
route add|rm|list relay edges: whose facts reach whose inbox
relay carry every declared edge, one cycle at a time
credential git asks it for the bot token
🚧 Status: early preview. The personal pilot is running; the pattern and the demo are stable, the engine is still moving. Questions and feedback: open an issue.