mediate → constrain → prove
Bring agent behaviour into the light.
Every action passes one gate the agent cannot route around. Allowed, held for a person, or blocked. Every decision signed.
What the illustration shows
A line-drawn lighthouse stands at the only entrance of a harbour at night; its base line runs on as the breakwater to the gate. Small line-art robots, the agents, move on the water. Each robot has a rounded head, a visor with two eyes and an antenna ring in its own identity colour. A robot is neutral line art until a decision lands on its action: it then glows green for allow, red for block and amber for held for a person. The colour is always paired with a mark on the robot (a tick, a cross or a person) and with words. The beam follows your pointer, or sweeps on its own; whether a robot is lit never changes a decision.
- Three robots each post a speech bubble that says what they are doing, tagged with the robot's name, and send that action toward the harbour entrance, the single point every action must pass. For example: research, "Reading the docs…", fetch · docs.acme.dev.
- The first action is allowed. Its robot turns green, with a tick, and its bubble ends in "allow".
- The second is blocked with a real block reason, such as TOOL_NOT_ALLOWED or ARG_NOT_ALLOWED. Its robot turns red, with a cross, and the bubble ends in "block" and the reason.
- The third is an irreversible action, such as send_email. The answer is ask (HITL_REQUIRED). Its robot turns amber, with a person mark, and its bubble unfolds into a card with three fields: ACTION (for example "Send customer file"), TOOL (send_email) and ARGS (the recipient and the attachment count, redacted), above an amber bar that reads HUMAN REQUIRED. A person stamps the approval, a single-use grant, and the bar changes to APPROVED · SINGLE-USE. The robot retries, the grant is spent, the call is allowed, and the robot turns green.
- Each decision drops a signed, hash-chained receipt into a chain along the shore: allow, block, ask, then allow once the grant is spent. Each tile shows the receipt number, a short hash fragment, the verdict, the tool, and the name of the robot it belongs to. The same receipt number sits under that robot on the water, and a dotted line joins the robot to its tile as the tile drops. The lamp's four amber rays rest as a faint ghost and flash each time it signs.
- A robot outside the beam tries to leave another way, for example "Uploading to paste.site…". There is no other road: the network drops it at L0 (default-deny egress) before it reaches the gate. Its robot turns red, with a cross, and its bubble ends in "dropped at L0 · no receipt". The harbour wall lights from the point of impact in both directions and closes on the gate, the only opening. Nothing is signed, so there is no tile, no dotted line and the rays do not flash: governance does not depend on where the light points. A probe proves this once at boot; if it ever succeeded, AgentLighthouse would refuse to start.
- A light runs along the receipt chain from the oldest receipt to the newest, and each robot glints as the light passes its tile: the chain is verified. The story repeats with different robots, actions and block reasons.
This is an illustration of documented AgentLighthouse behaviour, not live traffic.
Products
Two tools, one rule: an agent acts through a gate it cannot approve for itself, and leaves a record behind.
AgentLighthouse
v0.3.0 · pilot · MIT · self-hostedThe runtime security and governance plane for AI agents. Every decision, a signed receipt.
Open source. OWASP Agentic Top 10 (2026): 10/10 categories mapped, 7 prevented, 3 contained.
access-control ac
v0.2.0 · supervised use · ProprietaryServer operations through declared bastion and jump-host routes. A person types every credential; the agent cannot approve itself.
When an agent drives the session, gated operations wait for out-of-band approval through AgentLighthouse; without it they are refused.
Gated operations wait for out-of-band approval through AgentLighthouse. The agent cannot approve itself.
al-verify; make demo is the release gatesource: AgentLighthouse docs/demos.md · ci.ymlThe premise
An agent can be steered by the text it reads. So the guard sits outside the agent, and the proof sits outside the guard.
01Mediate
One way out. Every network call, tool call, memory operation and inter-agent message goes through it.
fail-closed · scanner crash or timeout = block
02Constrain
If it isn't declared for that identity, it doesn't run. Irreversible verbs wait for a person.
HITL_REQUIRED → single-use grant · timeout = deny
03Prove
Every decision is signed and chained. Alter one receipt and the chain stops verifying.
prev_hash · record_hash · sig · RFC 8785
al-verify data/ledger.jsonl --pubkey keys/mediator_ed25519.pub
How they fit
access-control opens the route. AgentLighthouse decides, and signs.
“Mediation at the door, enforcement at the engine.”access-control · docs/integration/mcp-proxy-config.md
- The agent calls
actools throughal mcp proxy. acruns them in the operator's live session, on a declared route.- Gated operations wait. The approval is held in AgentLighthouse, never by the agent.
- Two evidence streams. One SPIFFE actor.
AgentLighthouse commitments
Trust the evidence without trusting the code that produced it.
al-verify needs only cryptography.“Open source” applies to AgentLighthouse only; access-control is proprietary. Mappings are engineering planning aids, not certifications. The hero animation is an illustration of documented behaviour, not live traffic.
Every agent, under the light.