I build the guardrails that let AI agents do real work.
Keeper runs ten Claude Code agents on a server, for my own work and for my clients. Every agent’s tool calls pass a policy gate compiled from written delegations, except the ops agent that maintains the system. The gate is open source.
Long-running agents, each with its own written delegation
10
Running daily since Aug 31, 2026. Gate data starts Oct 5
Daily
From the gate log of my own system. Every agent’s tool calls pass the gate, except the ops agent’s; the counts are a snapshot, not live. How Keeper works.
One tool call, through the gate
Agent · hook · policy from delegations · allow, log or deny · tool
Featured work
Things I’ve built
An open-source policy gate for AI agents and the system I run behind it, and a tool that shows who really does the work in an open-source project.
Keeper
An open-source policy gate for long-running Claude Code agents. It checks every agent’s tool calls against written delegations, except the ops agent’s: covered calls pass, a short list of dangerous ones is refused with a reason, and the rest are allowed and logged. I run ten agents behind it on a server, and failures report to an ops agent that fixes the cause.
Reads GitHub, Jira, Slack and mailing lists together and shows who contributes what. On Apache Kafka it covered 428 PRs and 308 Jira tickets, linked 105 contributors as the same person in GitHub and Jira, and found that 79% of the 308 Jira tickets had no GitHub PR reference. Claude Code writes the digests, and a verification script checks every statistic against the source data.
Used by an Apache Kafka PMC member, who shares its reports with other communities.
When many agents with different authority can message each other, “another agent said it is fine” must carry no weight. How I design permissions for ten long-running Claude Code agents.
Apostilles, translations, a US mailbox and a lawyer working from a portal checklist. How one of my agents ran the paperwork for a residence permit, and the parts it could not do.
How I moved a Kubernetes cluster from a public listener to Cloudflare Tunnels, so the cluster opens the connection and nothing listens on the internet.