watch-errors — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited watch-errors (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Run .skills/watch-errors/scripts/watch_errors.sh from the project root. It watches a proxy you already started with the monitor skill (run_monitor.sh --detach) and emits one line per genuinely actionable error on stdout — and nothing during the constant benign churn.
.skills/watch-errors/scripts/watch_errors.sh # defaults below
.skills/watch-errors/scripts/watch_errors.sh data/clawback.run.log data/clawback.run.pid
.skills/watch-errors/scripts/watch_errors.sh selftest # run the filter corpus; exit!=0 on regressionDefaults match run_monitor.sh:
LOG_FILE = data/clawback.run.logPID_FILE = data/clawback.run.pidWATCH_ERRORS_POLL_SEC (default 5s)[error] / [fatal] line, unhandled/uncaughtexceptions, Error: stack traces, bind/connection failures (EADDRINUSE, ECONNREFUSED, ECONNRESET, ETIMEDOUT, ENOTFOUND), self-loop, and the synthetic PROXY DOWN. A hard error wakes you even if it also mentions a benign token (e.g. [error] keep-alive scheduler crashed: uncaught …).
failed lines — i.e.server-side 5xx that are not 529 (500/502/503/504…) and any non-keep-alive request that 4xx/5xx'd for a reason outside the benign set below.
[error] PROXY DOWN … the moment the proxy pidstops responding — the most important error of all (the dev server is gone) — after which the watch exits non-zero so it ends deliberately instead of hanging silent.
Every one of these was observed live as a repeating flood; none is worth a wake-up (and each wake replays the whole agent context = pure token burn):
401 (auth-stale: the captured OAuth bearerrotated; the scheduler pauses until the next real request refreshes it), 404 (a session pinned to a now-retired model loops on not_found), 429/529 (transient). Keep-alive is cache-warming only; its failures never block real work.
auto-retries these with backoff; you have no lever, so they are not actionable.
HEAD /<id> → 404 [no-route] is normalprobe-then-decide session negotiation.
Deliberate non-goal: a sustained transient outage (hundreds of 529s in a row = a real Anthropic outage) will not wake you. The filter is per-line and stateless, so a transient code is dropped no matter how often it repeats — the right trade to kill the noise. Add rate-based escalation if you ever need outage alerts.
operate?operate (operator_watch.sh) surfaces every [warn] and every 4xx/5xx, plus rebind / runtime-mode info. That is the right tool when you want to see all proxy activity. But against the live proxy it wakes an agent every few minutes on keep-alive 401/404/529 and request 429/529 — benign churn that costs a full context replay each time. watch-errors keeps the liveness guarantee and the hard-error net while dropping that flood, so an agent's Monitor stays silent until something is genuinely wrong.
The classifier is one awk program (single source of truth for live watching and the test). .skills/watch-errors/scripts/watch_errors.sh selftest runs a corpus of real log shapes captured live — 8 benign (must drop) + 7 legitimate (must wake), including the tricky [error] keep-alive … uncaught (hard-wins) and a real-request 404 with [session=…] (wakes) vs a keep-alive 404 (drops) — and exits non-zero on any regression. Re-run it after editing the patterns.
.skills/scripts/run_monitor.sh --detach — start the proxy (if not already up)..skills/watch-errors/scripts/watch_errors.sh withpersistent: true. Each emitted line becomes a notification — and during healthy operation there are none.
PROXY DOWN (or any hard error), read the tail ofdata/clawback.run.log for the cause, then bring it back with the restart skill and re-arm the Monitor.
Stop the proxy with the shutdown skill; the watch exits on its own when the proxy is gone.
umask 077) — the proxy log can contain capturedauth headers and upstream error bodies.
-F re-opens the log across the truncate-and-recreate thatrun_monitor.sh --detach does on restart, so the watch survives a restart.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.