jjaylabs/audit-playv0.4.7Public
Audit play
After a few months of clicking yes, always, your Claude Code or Codex allow list is a list nobody has read.
Read the full description
This tells you which entries you can delete. It reads your settings files and MCP servers for what you granted, reads your session transcripts for what actually ran, and subtracts one from the other. You get four lists: grants nothing ever used, the write-capable ones among them, rules that can reach past this machine, and MCP servers that sat idle the whole window. Each row names the file it came from, so you can trim the list yourself. Your settings files are only ever read from, a grant stays granted, and no socket is opened; the only thing it puts on disk is its own report, six files in an output directory you choose, and the only thing it needs is python3.
Before you run it1 local tool
Everything here is checked on your machine when rote inspects the play. This page never learns what you have installed or which credentials you hold.
- ○python3local tool
Requires >=3.9. Run rote play inspect to check your host; unverified versions remain unknown.
Inputs11, all optional
rote asks for these before running and shows the defaults it will use.
- Project path
project_pathWhich project to audit. The word all audits every project this machine records, which is what a bare run with no parameters does. A path narrows to one project, selecting its policy files and its transcript directory. A path inside the rote run workspace is the play's own scratch directory rather than a project, so it falls back to all with a warning.
optionalstringdefaultallexample/Users/you/code/my-projectcustom value allowed - Window hours
window_hoursHow far back to look, in hours, filtered per event on the record timestamp. 0 means the whole recorded history. Shorter than a weekend produces mostly false idleness.
optionalstringdefault72example168custom value allowed - Harness
harnessWhich agent harness wrote the transcripts and config. claude reads ~/.claude/projects, ~/.claude.json and the settings files. codex reads ~/.codex/sessions rollouts and ~/.codex/config.toml, where policy is an approval mode rather than a rule list, so the three rule-shaped finding classes read not applicable. Any other value is a hard fault rather than a silent empty report.
optionalstringdefaultclaudeexamplecodex2 choices
claudecodex
- Denial patterns
denial_patternsCase insensitive regex that marks an errored tool result as a denial rather than an execution failure. Exposed because the harness wording is not a stable contract, and misreading it turns a control that worked into a control that was bypassed. The default carries the Claude Code phrasings and Codex's Sandbox(Denied marker.
optionalstringdefaulthas been denied|Permission denied|permission was denied|was denied by|tool use was rejected|Sandbox\(Deniedexamplehas been denied|rejected by policycustom value allowed - Include subagents
include_subagentsWhether to read subagent transcripts under each session's subagents directory alongside the session transcripts. They hold real tool calls, so excluding them makes every unused finding a floor.
optionalstringdefaulttrueexamplefalse2 choices
truefalse
- Policy scopes
policy_scopesComma separated settings scopes to union. Each scope reads its settings.json and settings.local.json.
optionalstringdefaultuser,projectexampleprojectcustom value allowed - Report
reportfindings prints the top items per class and omits the per-file array from traces.json; all prints every row in the least privilege profile and writes the per-file array. Neither setting changes a count.
optionalstringdefaultfindingsexampleall2 choices
findingsall
- Since
sincePath to the shadow-diff.json an earlier run wrote. Given one, the report adds what moved since that run — grants newly dead, grants newly used, rules added or removed, servers newly idle or newly active, and blocks that started or stopped. Two runs taken over different windows, scopes or harnesses are reported as not comparable rather than subtracted. Empty means no comparison.
optionalstringexample/tmp/last-audit/shadow-diff.jsoncustom value allowed - Session
sessionAudit one run instead of the machine. Takes a transcript file path or a session id; executed evidence then comes from that transcript and the subagents it spawned, and nothing else. The window still applies inside it. A machine-wide audit answers what a policy has authorised over months; this answers what one piece of work actually needed. A session that cannot be found is a hard fault rather than a silent fallback to everything.
optionalstringexamplea1cafe13-0abf-4a91-b65f-00ff1db6f676custom value allowed - Compare to
compare_toPath to the shadow-diff.json an earlier run wrote. Given one, the report says whether every count reproduces and, where a count moved, names the condition that moved underneath it — window bounds, transcript files enumerated, rules read, servers advertised, harness, scope, scan time. A count that moved while a condition moved was measuring something else, not failing to reproduce. Empty means no check.
optionalstringexample/tmp/last-audit/shadow-diff.jsoncustom value allowed - Out dir
out_dirWhere the six artifacts are written, five JSON files and one markdown profile. Empty means the run workspace working directory. traces.json records the command, file path or URL each call was made with, truncated, with credential-shaped spans masked; treat it as you would your shell history.
optionalstringexample/tmp/shadow-diffcustom value allowed
What it changes
No write operations are declared in this version's manifest.
Credentials remain in the recipient's local rote vault; this page and the publisher never receive them.
Runtime details
- rote CLIversion 0.62.0 or newer
- Servicesnone declared
- Digest
sha256:6f42c3df4382090f834d8c166a288b158b9a6f0754e5a4d9ea184b5220b22ad8 - Archive size73901 bytes
- Published2026-09-04T12:10:25.432735+00:00
- Published withrote 0.78.0
Credential values and current readiness remain local. Opening this page never prompts for a credential, opens an authorization browser, or calls a service this play uses.
A play is a published, versioned automation package that runs on your own machine through rote, a free command-line tool. Opening this page installs nothing and runs nothing.