agent-instructions
Use when writing project instructions for a coding agent (CLAUDE.md, AGENTS.md, or equivalent). Covers what belongs in them, what…
Use when auditing code or a change for vulnerabilities. Produces severity-ranked findings with exploit paths and fixes, covering the OWASP Top 10, authorization, secrets, and dependency risk. Trigger on "security review this pr", "is this code vulnerable", "audit before we go
Claude Code
$ npx -y skills add nimadorostkar/Claude-Skills-collection --skill security-review --agent claude-code
Codex
$ npx skills add nimadorostkar/Claude-Skills-collection --skill security-review -a codex -y
Cursor
$ npx skills add nimadorostkar/Claude-Skills-collection --skill security-review -a cursor -y
Gemini CLI
$ npx skills add nimadorostkar/Claude-Skills-collection --skill security-review -a gemini-cli -y
GitHub Copilot
$ npx skills add nimadorostkar/Claude-Skills-collection --skill security-review -a github-copilot -y
OpenCode
$ npx skills add nimadorostkar/Claude-Skills-collection --skill security-review -a opencode -y
Windsurf
$ npx skills add nimadorostkar/Claude-Skills-collection --skill security-review -a windsurf -y
name: security-review description: Use when auditing code or a change for vulnerabilities. Produces severity-ranked findings with exploit paths and fixes, covering the OWASP Top 10, authorization, secrets, and dependency risk. Trigger on "security review this pr", "is this code vulnerable", "audit before we go public", "triage this pentest report". Do not use for writing new auth or input handling — see the secure-coding skill; for design-time risk, see the threat-modeling skill. metadata: category: security version: 1.0.0 tags: [security, audit, owasp, review, vulnerability]
Find the vulnerabilities in a codebase or a change, with enough specificity that each finding can be fixed and verified. A security review that produces a list of theoretical concerns is not a security review.
Findings ranked by severity, each with:
1. **Map the attack surface** — Every route, every queue consumer, every file upload, every parameter. You cannot audit what you have not enumerated. 2. **Follow untrusted data** — From each entry point, trace where the data goes: into a query, a command, a template, a file path, a redirect. Each of those is a potential injection. 3. **Audit every authorization check** — For each endpoint taking an identifier: is there a check that the caller may access *that specific object*? This is where the real vulnerabilities are. 4. **Look for the secrets** — In the repository, the history, the config, the logs, and the error messages. 5. **Assess the dependencies** — Known vulnerabilities, unmaintained packages, and anything with install scripts. 6. **Rank by exploitability, not by CVSS alone** — An unauthenticated remote data leak outranks a theoretical timing attack, whatever the score says.
**A finding written so that it gets fixed:**
### Critical — Broken object-level authorization on the invoice endpoint
**Location:** `api/invoices.py:47`
**Vulnerability:** `GET /invoices/{id}` authenticates the caller but does not
verify that the invoice belongs to them. Invoice IDs are sequential integers.
**Exploit:**
curl -H "Authorization: Bearer <any valid token>" https://api.example.com/invoices/1
for i in $(seq 1 100000); do curl .../invoices/$i; done
Any authenticated user — including a free-tier account — can enumerate and read
every invoice in the system, including customer names, addresses, and amounts.
This is a reportable data breach under GDPR.
**Fix:**
```python
invoice = await db.invoices.get(invoice_id)
if invoice is None or invoice.tenant_id != user.tenant_id:
raise HTTPException(404, "Invoice not found") # 404, not 403: do not confirm existence**Also:** migrate invoice IDs from sequential integers to ULIDs, so that enumeration is not possible even if an authorization check is missed again.
**Verification:** `test_cannot_read_another_tenants_invoice` — authenticate as tenant A, request an invoice belonging to tenant B, assert 404.
**Searching the history, not just the tree:**
```bash
# The key was deleted in a later commit. It is still in the history, and still
# compromised. Deleting it from the tree changes nothing.
git log --all -p -S "AKIA" --pickaxe-regex | grep -E "^\+.*AKIA[0-9A-Z]{16}"
# Findings here require rotating the credential. Rewriting history is optional;
# rotation is not.A curated library of 137 production-grade skills for Claude and other AI coding agents. Every skill follows one structure, speaks with one voice, and earns its place by changing what the agent does.
Use when writing project instructions for a coding agent (CLAUDE.md, AGENTS.md, or equivalent). Covers what belongs in them, what…
Use when an agent needs state that survives a session or a context compaction. Covers what to persist, file-based memory,…
Use when automating agent behavior with lifecycle hooks. Covers hook events, deterministic enforcement of rules the model should…
Use when packaging skills, commands, hooks, and MCP servers into a distributable plugin. Covers manifest structure, bundling,…
Use when writing a new skill for an AI agent. Covers scoping, description writing for reliable triggering, progressive…
Use when reviewing or improving an existing agent skill. Covers triggering accuracy, content quality, redundancy with the base…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.