Hi, I'm a designer building agent harnesses with OpenClaw and Claude Code.
Here are a few small tools I've built to make building with agents easier. Sharing what's helped me, in case it helps you build something too:
- bash-havoc-guard. Reads every shell command your agent is about to run and stops the dangerous ones.
- path-fence. Resolves a path all the way down first, then refuses the credential-shaped ones.
- untrusted-read. Makes an agent treat a notes directory as data instead of instructions.
- transcript-redactor. Redacts shell output before your agent's transcript records it.
- attest-check. Fails an agent's answer if anything you asked about went unmentioned.
- anchor-check. Catches plans that point at code that doesn't exist.
- linter-selftest. A linter that proves its own rules can still fire.
- scar-audit. Tells you which of the rules you wrote for your agent are actually being followed.
- never-worse-backup. A git auto-backup that stops before it can lose your work or push a secret.
- cas-write. Compare-and-swap file writes, so a second writer can't silently erase the first.
- guarded-deploy. Ships only from a clean tree, on the exact commit your checks passed.
- alert-throttle. Stops a stuck check from posting the same alert forever.
- alert-redactor. Builds alerts that carry the shape of a failure and none of its content.
- freshness-gate. Says whether a signal is fresh, stale, or dead, from its real timestamp.
- openclaw-spillway. Moves an OpenClaw agent onto a backup lane before a usage window runs out, instead of after requests start failing.
- headroom. Puts your Claude usage windows and OpenRouter spend in the macOS menu bar, so checking is one glance instead of two logins.
- bash32-check. Blocks the shell lines it can prove will kill your script partway through.
- deid-allowlist. Drops every field you didn't explicitly allow, before a record leaves your machine.
- inert-css. Finds the CSS rules that are valid, present, and quietly lose to another rule further down the file.
Each one is small, tested offline, and clear about its limits. The README includes the ways I've found to break it so far.
What I learned building them is in LESSONS.md.
If you spot a gap, or something just looks off, open an issue. I'd be grateful.