jwp23/joe-bag-of-tricks/security-review
Claude Code and agent skill by jwp23/joe-bag-of-tricks
- community
Checking that the SKILL.md file is still in the repository.
Use when completing development work, before creating PRs, or on-demand to audit code changes for security vulnerabilities across any tech stack
Install
npx vskill@latest install jwp23/joe-bag-of-tricks/security-reviewSKILL.md
Security Review
Audit code changes for common vulnerability patterns. Detects the tech stack and applies language-specific checks.
Core principle: Security is verified systematically, not caught ad-hoc.
Announce at start: "I'm using the security-review skill to audit these changes."
When to Use
- Before PR creation (auto-triggered via finishing-a-development-branch Step 1.5)
- On-demand via
/security-review - After adding new dependencies
- After fixing bugs in security-sensitive code (subprocess calls, file I/O, user input handling)
Procedure
Step 1: Determine Scope
Pre-PR review (default): Changed files only.
On-demand full review: All source files. State scope explicitly in output.
Step 2: Detect Tech Stack
Check for indicator files and note which language-specific checks apply:
| File | Stack | Audit Tool | |
|---|---|---|---|
Cargo.toml | Rust | cargo audit | |
package.json | Node.js | npm audit | |
pyproject.toml, requirements.txt | Python | pip-audit | |
go.mod | Go | govulncheck |
Multiple stacks may apply.
Step 3: Run Dependency Audit
Execute the appropriate audit tool. Capture and report output.
If the tool is not installed, report as an Important finding — do not skip silently.
Step 4: Run the 8-Point Checklist
Check every category against the scoped files. Do not skip categories — report "Pass" for clean categories rather than omitting them.
1. Command Execution — All subprocess calls pass arguments safely?
| Safe | Unsafe | |
|---|---|---|
Rust: Command::new().arg() | sh -c with interpolated strings | |
Python: subprocess.run([...]) | shell=True, os.system() | |
Node: execFile() | exec() with string interpolation | |
Go: exec.Command() with separate args | String concatenation in args |
2. Dependency Vulnerabilities — Audit tool output from Step 3.
3. Input Validation — User-controlled data validated before sensitive operations?
Trace from source (file dialogs, text fields, CLI args, config files) to sink (file operations, commands, output). Check for type validation, bounds checking, encoding validation at boundaries.
4. Path Handling — Typed path APIs used, not string concatenation?
| Safe | Unsafe | |
|---|---|---|
Rust: Path, PathBuf, .join() | format!("{}/{}", dir, file) | |
Python: pathlib.Path | f-string path construction | |
Node: path.join() | String concatenation |
Check for ../ traversal vectors in user-controlled paths.
5. Secrets/Credentials — No hardcoded secrets in source?
Grep for: password, secret, token, api_key, private_key, Bearer, connection strings, high-entropy strings. Check .gitignore covers .env, *.pem, *.key.
6. Unsafe Code — All unsafe blocks justified and documented?
Rust: unsafe {, unsafe fn. Go: unsafe.Pointer. Python: ctypes, cffi.
Each block needs a // SAFETY: comment explaining invariants.
7. Error Information Disclosure — User-facing errors free of system internals?
Check for: absolute paths, stack traces, hostnames, connection strings, software versions in error output.
8. Temp File Handling — Secure creation with automatic cleanup?
| Safe | Unsafe | |
|---|---|---|
Rust: tempfile::TempDir | Manual /tmp/myapp_ paths | |
Python: tempfile.mkstemp() | Predictable temp names | |
Go: os.MkdirTemp() | Missing cleanup |
Step 5: Report
Use this exact format:
Red Flags
Never:
- Skip a checklist category (report Pass, not silence)
- Skip dependency audit because tool isn't installed (report it)
- Mark everything as Critical (reserve for exploitable vulnerabilities)
- Include process recommendations (CI changes, tooling) — stay in your lane as a code auditor
Always:
- Run the actual audit tool, don't just note its absence
- Use file:line references for every finding
- State the attack scenario for each finding (why it matters)
- Report scope and tech stack at the top
Integration
Called by:
- finishing-a-development-branch (Step 1.5) — Before push and PR creation
Pairs with:
- requesting-code-review — Security review first, then code quality review
Invocable on-demand: /security-review
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingplugins/joe-bag-of-tricks/skills/security-review/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/jwp23/joe-bag-of-tricks/security-review)