Agent-file integrity
An agent reads a lot of text it did not write.
Skills, commands, plugins, CLAUDE.md, settings.json, .mcp.json. Some of it loads on every session, unattended, forever. A file in that set is not documentation. It is configuration with a voice.
The surface, on one machine
Armed means it runs without asking: a hook in settings.json, an MCP server, any script they point at — and !`cmd` inside a skill, which executes at load time, before the model receives a single token. Nothing can refuse what nothing has read.
Skills also load from a project's own .claude/skills/, from nested packages in a monorepo, and from added directories. Cloning a repository can put a skill into a trusted session without anyone installing anything. Watching only the home directory watches the one path an attacker does not need.
What it reports
Why the count came down
The first version reported 85 critical findings and none of them were real. A security plugin whose job is to list injection phrases matched every pattern. You are a… — how every agent definition opens — accounted for 31 of 36. Coercive words like “never silently delete” flagged 19 files, all 19 of them safety rules written in the vocabulary of an attack.
A scanner nobody reads is worse than no scanner, because it looks like coverage. Third-party files are now hashed rather than pattern-scanned while they match the baseline; coercive language is reported only in a file that also executes, fetches or transmits. Pairing is the signal — single words are not.
What it does not do
It does not block, and it is not antivirus. It answers one question — did the text instructing this agent change, and does any of it read like an instruction rather than a description — and leaves the judgement to a person.
A clean report means unremarkable, not safe. There is no public demo: it runs against a real machine's files, and that is not a thing to put on the internet.