Getting it into your agent
It runs from inside its repository, so the clone comes first — what it calls does not travel with the file alone.
git clone --depth 1 https://github.com/Enovatr-Labs/SpecRoutenpx agentmods add commands/enovatr-labs/specroute/sanitizeWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/enovatr-labs/specroute/sanitize)<a href="https://agentmods.dev/commands/enovatr-labs/specroute/sanitize"><img src="https://agentmods.dev/badge/commands/enovatr-labs/specroute/sanitize/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/commands/enovatr-labs/specroute/sanitize"><img src="https://agentmods.dev/badge/commands/enovatr-labs/specroute/sanitize.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00023 | $0.01512 |
| Opus 5 | $0.00012 | $0.00756 |
| Sonnet 5 | $0.00005 | $0.00302 |
| Haiku 4.5 | $0.00002 | $0.00151 |
Grade A, and why
sanitize scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 9d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 109 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Run a sanitization sweep over the SpecRoute repository. SpecRoute is a public open-source repo; private upstream codebases must never leak into tracked files.
Execute these checks in order, over tracked and newly-added files (gitignored files like initial.md and .claude/settings.local.json stay excluded):
# 1. Confirm gitignore is in place
echo "── gitignore status ──"
grep -E "settings\.local|initial\.md" .gitignore || echo "WARN: expected gitignore entries missing"
# 1b. Build the scan set: tracked files PLUS untracked-but-not-ignored files.
# `git grep` reads ONLY tracked content, so a commit that ADDS a leaking file
# is invisible to it - and new content is the most likely to leak. Ignored
# files stay excluded (--exclude-standard); the wordlist itself lives in one.
# NUL-delimited so paths with spaces survive.
SCAN="$(mktemp)"; trap 'rm -f "$SCAN"' EXIT
{ git ls-files -z; git ls-files -z --others --exclude-standard; } > "$SCAN"
echo "Scanning $(tr -cd '\0' < "$SCAN" | wc -c | tr -d ' ') files (tracked + newly added)."
# 2. Forbidden upstream-project strings (case-insensitive; working tree,
# untracked additions, and the staged index).
# Wordlist lives in .claude/.forbidden-strings.txt (gitignored, per-installation).
echo
echo "── forbidden strings ──"
WORDLIST=".claude/.forbidden-strings.txt"
if [ ! -f "$WORDLIST" ]; then
echo "WARN $WORDLIST missing - no terms to scan. Populate it with any private upstream names."
else
while IFS= read -r line || [ -n "$line" ]; do
case "$line" in '#'*|'') continue ;; esac
s="$(printf '%s' "$line" | tr -d '[:space:]')"
[ -z "$s" ] && continue
# `|| true`: xargs returns 123 when any grep batch finds nothing, even if
# another batch matched. Test the captured output, not the exit status.
hits=$(xargs -0 grep -l -i -I -e "$s" < "$SCAN" 2>/dev/null || true)
if [ -n "$hits" ]; then
echo "FAIL '$s' found in:"
echo "$hits" | sed 's/^/ /'
fi
staged=$(git grep --cached -l -i -- "$s" 2>/dev/null || true)
if [ -n "$staged" ]; then
echo "FAIL '$s' found in staged index:"
echo "$staged" | sed 's/^/ /'
fi
done < "$WORDLIST"
fi
# 3. Absolute filesystem paths and their flattened equivalents.
# Three shapes, because a leak can hide in any of them:
# a) /Users/<name>/LocalDev/ - path into a local dev checkout
# b) /Users/<name>/ - any bare home-directory absolute path
# (superset of (a), so one pattern covers both)
# c) -Users-<name>- - the FLATTENED form Claude uses for project
# dirs, e.g. ~/.claude/projects/-Users-<name>-<repo>/
# Known-benign lines are dropped by the IGNORE_RE alternation below - the
# documented `<user>` / `<private>` placeholders, and regex-source lines
# (which contain a `[^` character-class fragment, so they are patterns, not
# paths). Extend IGNORE_RE rather than deleting a check.
# `U` is interpolated so this command's own source does not self-match.
echo
echo "── absolute / flattened path leaks ──"
U="Users"
IGNORE_RE='<user>|<private>|<name>|<repo>|<flattened-project-path>|yourname|youruser|\[\^'
xargs -0 grep -nHE -I -e "/$U/[^/[:space:]]+/" -e "-$U-[A-Za-z0-9]+-" < "$SCAN" 2>/dev/null \
| grep -Ev "$IGNORE_RE" \
|| echo "OK no absolute or flattened path leaks"
git grep --cached -nE "/$U/[^/[:space:]]+/|-$U-[A-Za-z0-9]+-" \
-- '*.md' '*.json' '*.toml' '*.yaml' '*.yml' '*.sh' '*.py' 2>/dev/null \
| grep -Ev "$IGNORE_RE" || true
# 4. Likely secrets in tracked files
echo
echo "── likely secrets ──"
xargs -0 grep -nHE -I -e "(api[_-]?key|secret|token|password)[[:space:]]*[:=][[:space:]]*['\"][A-Za-z0-9_-]{16,}" < "$SCAN" 2>/dev/null \
|| echo "OK no obvious secrets"
git grep --cached -nE "(api[_-]?key|secret|token|password)[[:space:]]*[:=][[:space:]]*['\"][A-Za-z0-9_-]{16,}" \
-- '*.md' '*.json' '*.toml' '*.yaml' '*.yml' '*.sh' 2>/dev/null || true
# 4b. Private-source provenance (release gate, local inputs stay gitignored).
if [ -f .claude/.provenance-sources.txt ]; then
python3 tools/provenance-audit.py \
--source-list .claude/.provenance-sources.txt \
--terms-file .claude/.forbidden-strings.txt \
--allowlist .claude/.provenance-allowlist.txt \
--history
else
echo "WARN provenance audit skipped - .claude/.provenance-sources.txt is not configured"
fi
# 5. What would actually be committed
echo
echo "── tracked file inventory ──"
git ls-files | wc -l | xargs echo "Tracked files:"
echo
echo "── current diff status ──"
git status --short
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 9d ago First seen · 109 lines · 23 tokens per session scan A ba7e4982c81f
sanitize is a command published in the GitHub repository Enovatr-Labs/SpecRoute (3 stars, last pushed 1mo ago), licensed Apache-2.0. It adds 23 tokens to every session and 1,512 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other commands, from other repositories
sdd-apply
Implement SDD tasks — writes code following specs and design.
sdd-init
Initialize SDD context — detects project stack and bootstraps persistence backend.
icpg-bootstrap
Infer ReasonNodes from existing git commit history. One-time setup for existing codebases.
atomic-plan
Write a design doc (concepts, business rules, approaches) and a checkpoint-table spec (contract) for non-trivial work; inline spec only for trivial. Gauges triviality; loops spec authoring with subagents. Human-facing artifact, Mermaid diagrams allowed.
review-branch
Review the current branch's diff against base by dispatching atomic-reviewer. No orchestration loop, no spec required — pre-flight before /commit pr or /commit merge.
session-report
Capture what changed this session and why, scoped to the current branch. Read by ship verbs when synthesizing the commit message; deleted after a successful commit.