Skip to main content
Content checks run on every call’s arguments (and on results, for injection phrasing). They are heuristics: they raise the cost of obvious abuse and give operators a reason to look. They do not prove a call is safe. Actions: flag (note it in the ledger and let the call run), require_approval, deny.
The content: section lives in the policy file. Without a policy file, content checks are off.

Cumulative intent

Each call looks fine alone; the sequence is the problem. A cumulative rule fires when a tool matching egress is called in a run where a tool matching sources has already succeeded.

Results

When a tool result contains injection-like text or an encoded payload, the succeeded record notes it (result content check (injection): …). The result is still returned: Reversi does not rewrite what tools say.

Secrets never reach the ledger

Independent of these checks, every free-text ledger field (reason, detail, error text) is run through secret redaction before it is written, so a token pasted into an error message is stored as [REDACTED:github_token]. Arguments and results are never stored at all, only hashed.