GitShow/denoland/clawpatrol
denoland

clawpatrol

Security firewall for agents

by denoland
Star on GitHubForkWebsite

Go

1.0k stars52 forks14 contributorsActive · 6d agoSince 2026v0.5.9MIT

Meet the team

See all 14 on GitHub →
littledivy
littledivy134 contributions
piscisaureus
piscisaureus121 contributions
ry
ry99 contributions
magurotuna
magurotuna72 contributions
arnauorriols
arnauorriols65 contributions
josh-collinsworth
josh-collinsworth29 contributions
divybot
divybot17 contributions
crowlKats
crowlKats4 contributions

Languages

View on GitHub →
Go88%
TypeScript9.3%
Swift1.7%
CSS0.5%
Shell0.3%
HTML0.1%

Commit activity

Last 12 weeks · 105 commits

Full graph →

Community health

2 of 6 standards met

Community profile →
37
✓README✓License○Contributing○Code of Conduct○Issue Template○PR Template

Recent PRs & issues

Active · Last activity 6d ago
See all on GitHub →
magurotuna
`run` (Linux): daemon spawn failure surfaces as bare EOF, real cause only in daemon.logOpenIssue

on a host whose daemon can't boot prints: Neither line is actionable, and the second one is wrong. The real cause was sitting in the whole time: That message is exactly what the operator needs, and it never reaches them. Diagnosing this took reading to learn the log existed. Two separate defects: 1. The ready-pipe EOF is content-free.* () waits for on the inherited fd 3. The daemon boots its transport before binding the control socket — deliberate, per 's comment, so a parent that reads can go straight to a session START — and s when fails. So every transport-boot failure reaches the client as an unadorned EOF, regardless of cause. already computes a few lines earlier. Sketch: stat the log before to record its size, and on a ready-read failure read from that offset and fold the last non-empty line into the returned error. Reading from the recorded offset rather than tailing matters because the log is opened and shared across respawns — the last line may belong to an older daemon. 2. The hint is unconditional. appends it to every failure. On the host above it is actively misleading: there is no marker, and — already checked earlier in the same function at — had returned false. Either gate the hint on that same predicate, or replace it with a pointer to the daemon log, which covers more failure modes than the one it guesses at. Worth noting what triggered it, since it may deserve its own fix: the host was joined by a build predating the marker. 's empty-mode fallback () rescues legacy joins by stat'ing and assuming WireGuard, but a legacy tailscale* join has neither file, so it falls through to the fatal error. The remedy is a re-join either way; the point of this issue is that the operator should be able to learn that from the command's own output.

magurotuna · 6d ago
magurotuna
fix: make HTTP body capture completion-awareOpenPR

Summary synchronize body sampling and record complete, incomplete, or aborted state emit a full-body SHA only when the body is complete preserve denied and partial-read request captures reject fixtures built from incomplete, lossy, redacted, or transformed bodies show partial capture state in the dashboard Why An early response could snapshot a body while it was still being written. Fixture export could also treat a partial or changed body as the original request. Tests focused race tests dashboard tests, format, lint, and build

magurotuna · 1w ago
ACodingfreak
Using clawpatrol run in ubuntu24.04 limits apparmor capabilitiesOpenIssue

Hi, I was trying clawpatrol for couple of weeks and was able to make it work end to end on ubuntu24.04 with wiregaurd after following changes Some of these changes are disabling default apparmor security features in Ubuntu24.04. I am curious if there is a cleaner way to run clawpatrol on ubuntu24.04 without disabling the same.

ACodingfreak · 1w ago

Recent fixes

View closed PRs →
magurotuna
mitm: sanitize request read errorsMergedPR

Summary avoid logging raw HTTP parser errors log only a short reason and sanitized host metadata add TLS regression tests for sensitive and oversized input Why Parser errors can contain request bytes. Logging them can expose credentials or write large attacker-controlled payloads to journald. Tests focused tests and race tests full test package

magurotuna · 1w ago
magurotuna
sandbox: mirror the dynamic loader into the namespaces sandboxMergedPR

What Fixes external plugins failing to start on non-FHS distros (NixOS, Guix). The namespaces sandbox's bind plan only mirrored FHS loader locations (, , , ...); on NixOS/Guix the dynamic loader lives under / , so exec of any dynamically-linked plugin failed with and reported a misleading "Unrecognized remote plugin message" handshake error. The probe did not catch it because it never execs a real binary. Changes now discovers the plugin binary's dynamic loader from its ELF section () and mirrors the loader file and its directory (glibc keeps etc. next to the loader) into the sandbox, deduplicated against the FHS entries. No distro-specific hardcoding — covers NixOS, Guix, and any future layout; static binaries are unaffected (no-op). New tests in (+ , a small dynamically-linked helper): unit: includes the binary's exact loader path, integration: a dynamically-linked binary actually execs inside the namespaces sandbox. Verification tests pass, including plugin-spawn tests (, , ...) previously failed on NixOS; they now pass (only pre-existing environmental Landlock failure remains on this host) clean Closes #794

magurotuna · 3w ago
Structured data for AI agents

Repository: denoland/clawpatrol. Description: Security firewall for agents Stars: 1029, Forks: 52. Primary language: Go. Languages: Go (88%), TypeScript (9.3%), Swift (1.7%), CSS (0.5%), Shell (0.3%). License: MIT. Homepage: https://clawpatrol.dev Latest release: v0.5.9 (6d ago). Open PRs: 44, open issues: 57. Last activity: 6d ago. Community health: 37%. Top contributors: littledivy, piscisaureus, ry, magurotuna, arnauorriols, josh-collinsworth, divybot, crowlKats, rajiteh, avocet-bot and others.

·@ofershap

Replace github.com with gitshow.dev