spectra-audit
Skill0 starsChanged 4 months agoMITView on GitHub
Audit changed code for security sharp edges — dangerous defaults, type confusion, and silent failures
6 other projects use a version of this, 3 of them edited.
Adopted by
Most recently taken up by
- DanSnow/hoarder-pipettetheir own version, first seen Oct 8, 2026
- leoho0722/naver-blog-image-downloaderedited, first seen Aug 31, 2026
- PsychQuant/claude-hot-limitword for word, first seen Jul 1, 2026
- harrychuang/cursor-skillsword for word, first seen Jun 17, 2026
- BananaBay69/claude-code-watchdogedited, first seen Apr 29, 2026
- PsychQuant/che-ical-mcpedited, first seen Mar 31, 2026
Other versions6 projects use a version of this.
Word for word · 2
- harrychuang/cursor-skills★ 19100% same
- PsychQuant/claude-hot-limit★ 0100% same
Edited · 3
- PsychQuant/che-ical-mcp★ 4442% same
- BananaBay69/claude-code-watchdog★ 242% same
- leoho0722/naver-blog-image-downloader★ 242% same
Wrote their own version · 1
- DanSnow/hoarder-pipette★ 98same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository13 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- spectra-analyzeSkill
- spectra-applySkill
- spectra-archiveSkill
- spectra-askSkill
- spectra-commitSkill
- spectra-debugSkill
- spectra-discussSkill
- spectra-driftSkill
- spectra-ingestSkill
- spectra-proposeSkill
- spectra-verifySkill
The file
We split this skill into the rules it gives an agent
1 rule. 0 are common, 1 is distinctive, and 0 are very specific to this project.
0
Common
Most of the 4 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 19
Run git diff HEAD to gather the current changes.
“Common” is measured: kept by at least 6 in 10 of the 4 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Audit changed code for security sharp edges in a Claude Code fork. This generated skill is report-only: it SHALL NOT edit files and SHALL NOT apply fixes directly inside the fork.
Claude fork context
Run git diff HEAD to gather the current changes. If there are no changes, report that no security sharp edges were found and stop.
Analyze the diff through the Scoundrel, Lazy Developer, and Confused Developer lenses. Return a consolidated report with findings grouped by severity, affected files, and recommended fixes. The main thread decides whether to apply any fixes.
Core Framework
Three Adversaries
| Role | Mindset | Key Questions |
| Scoundrel | Malicious, deliberate exploitation | Can I disable security via config? Downgrade algorithms? Inject values? |
| Lazy Developer | Copy-paste, skips docs, deadline pressure | Is the first example safe? Is the default secure? Do errors guide me right? |
| Confused Developer | Misunderstands usage | Can I swap params silently? Will mistakes fail loudly? Are types distinguishable? |
Six Trap Categories
1. Algorithm Choice Traps
Letting developers choose algorithms = inviting them to choose wrong.
# Dangerous: accepts arbitrary algorithm
OpenSSL::Digest.new(algorithm).hexdigest(password) # algorithm = "md5"?
# Safe: no choice
BCrypt::Password.create(password) # can't pick wrong2. Dangerous Defaults
Defaults that are insecure, or zero/empty values that disable security.
# What does timeout=0 mean? Never expire? Expire immediately?
def verify_token(token, timeout: 300)
return true if timeout == 0 # 0 = skip verification?!
endKey question: What do timeout=0, max_attempts=0, key="", nil each mean?
3. Raw Primitives vs Semantic Types
Using raw bytes/strings instead of meaningful types invites type confusion.
# Dangerous: both params are strings, swappable
encrypt(message, key, nonce)
# Safe: types protect against swapping
encrypt(message, Key.new(k), Nonce.new(n))4. Configuration Cliffs
One wrong config value = disaster, with no warning.
# A typo = security mechanism disappears
verify_ssl: fasle # not "false", might be treated as truthy?
# Dangerous combination
auth_required: true
bypass_auth_for_health: true
health_check_path: "/" # oops, entire site bypasses auth5. Silent Failures
Security errors that don't surface, or "success" masking failure.
# Silent bypass
def verify_signature(sig, data, key)
return true if key.nil? # no key = skip verification?!
end
# Return value ignored
result = crypto.verify(data, sig) # returns false but nobody checks6. Stringly-Typed Security
Security-critical values as plain strings = open door for injection and confusion.
# Dangerous: string concatenation
permissions = "read,write"
permissions += ",admin" # too easy to escalate
# Safe: use enums
permissions = Set[Permission::READ, Permission::WRITE]Severity Classification
| Severity | Condition | Example |
| Critical | Default or most obvious usage is insecure | verify: false is default, empty password accepted |
| High | Easy misconfiguration breaks security | Algorithm param accepts "none" |
| Medium | Uncommon but possible misconfiguration | Negative timeout has unexpected behavior |
| Low | Requires deliberate misuse | Obscure parameter combination |
Rationalization Table
| Excuse | Why It's Wrong | What To Do |
| "Docs explain it" | Devs skip docs under deadlines | Make the safe option the default or only option |
| "Advanced users need flexibility" | Flexibility = foot-gun opportunity | Provide safe high-level API, hide low-level primitives |
| "It's the developer's responsibility" | You designed the trap | Remove the trap or make it impossible to misuse |
| "Nobody would do that" | Devs under pressure do everything | Assume maximum developer chaos |
| "It's just a config option" | Config is code; wrong config ships to prod | Validate config, reject dangerous combinations |
| "Backwards compatibility" | Insecure defaults can't be grandfathered | Deprecate loudly, force migration |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

