agent-launcher-orchest…
Use when someone wants to build, launch, grade or schedule a Claude Managed Agent in their own Anthropic account ('build me an…
Use when installing or tuning the PreToolUse security hook that warns before Claude writes command injection, XSS, SQL injection, unsafe deserialization, eval or GitHub Actions injection. Warns once per file and rule; ENABLE_SECURITY_REMINDER=0 turns it off.
Claude Code
$ npx -y skills add alirezarezvani/claude-skills --skill security-guidance --agent claude-code
Codex
$ npx skills add alirezarezvani/claude-skills --skill security-guidance -a codex -y
Cursor
$ npx skills add alirezarezvani/claude-skills --skill security-guidance -a cursor -y
Gemini CLI
$ npx skills add alirezarezvani/claude-skills --skill security-guidance -a gemini-cli -y
GitHub Copilot
$ npx skills add alirezarezvani/claude-skills --skill security-guidance -a github-copilot -y
OpenCode
$ npx skills add alirezarezvani/claude-skills --skill security-guidance -a opencode -y
Windsurf
$ npx skills add alirezarezvani/claude-skills --skill security-guidance -a windsurf -y
name: security-guidance description: "Use when installing or tuning the PreToolUse security hook that warns before Claude writes command injection, XSS, SQL injection, unsafe deserialization, eval or GitHub Actions injection. Warns once per file and rule; ENABLE_SECURITY_REMINDER=0 turns it off."
**A PreToolUse hook that blocks 12 common security anti-patterns before Claude Code writes them.**
This skill is a **hook**, not a slash command. Once installed, it runs automatically before every `Edit`, `Write`, or `MultiEdit` operation and warns + blocks if it detects a known dangerous pattern.
The hook scans both:
| Pattern | Category | Risk | |---|---|---| | GitHub Actions workflow expressions | Path-based | Workflow command injection via untrusted inputs | | `child_process.exec`, `exec(`, `execSync(` | Substring | Node.js command injection | | `new Function` | Substring | JS code injection | | `eval(` | Substring | JS code injection | | `dangerouslySetInnerHTML` | Substring | React XSS | | `document.write` | Substring | DOM XSS | | `.innerHTML =` | Substring | DOM XSS | | `pickle` | Substring | Python deserialization RCE | | `os.system`, `from os import system` | Substring | Python command injection | | `shell=True` (subprocess) | Substring | Python command injection | | f-string SQL or `.format` SQL | Substring | SQL injection | | `yaml.load(`, `yaml.unsafe_load` | Substring | YAML deserialization RCE |
1. Claude Code is about to run `Edit`, `Write`, or `MultiEdit` 2. PreToolUse hook fires → invokes `security_reminder_hook.py` with the tool input as JSON on stdin 3. The hook extracts file_path + content + checks against the pattern table 4. If a pattern matches AND this warning hasn't been shown for this file+rule in this session:
5. If a pattern matches BUT the warning was already shown this session:
6. If no pattern matches:
This plugin ships as a Claude Code plugin with `hooks.json` wiring:
# In Claude Code: /plugin marketplace add alirezarezvani/claude-skills /plugin install security-guidance@claude-code-skills
Once installed, no further configuration needed — the hook runs automatically.
Disable per-session via environment variable:
ENABLE_SECURITY_REMINDER=0 claude # Hook is bypassed for this session
Use sparingly — the hook is most useful exactly when you're tempted to disable it (because you're under deadline pressure to ship something you know is sketchy).
If a specific file legitimately needs `eval()` or `pickle` (e.g., a sandboxed REPL, a deliberately unsafe parser for a fuzzer), document it in the file with a comment:
# SAFETY: pickle is the required serialization format for this internal tool. # This file does NOT accept untrusted input. See SECURITY.md for boundary analysis. import pickle
The hook will still warn on first edit per session. After acknowledging, subsequent edits in the same session are allowed (session-state caching).
Trade-off: AST-based detection would be more precise (no false positives on string literals containing "eval("). Substring-based is:
For 90%+ of cases, substring detection is sufficient. If you need stricter detection, layer in a proper SAST tool (semgrep, CodeQL) as a CI step.
The hook caches "warning shown" state in `~/.claude/security_warnings_state_<session_id>.json`. These files:
You can safely delete `~/.claude/security_warnings_state_*.json` files at any time — the hook regenerates them on next run.
The hook writes to `~/.claude/security-warnings-log.txt` for debugging hook misfires:
tail -f ~/.claude/security-warnings-log.txt # Shows JSON decode errors, state-file save failures, etc.
(Upstream version wrote to `/tmp/security-warnings-log.txt` — we moved it to `~/.claude/` for persistence across reboots.)
This plugin is ported from David Dworken's MIT-licensed implementation in [`alirezarezvani/aeo-box`](https://github.com/alirezarezvani/aeo-box/tree/main/.claude/plugins/security-guidance).
**Verbatim:** the original 9 patterns (GitHub Actions, child_process.exec, new Function, eval, dangerouslySetInnerHTML, document.write, innerHTML, pickle, os.system) are preserved with their exact warning text.
**Modifications:**
Defeats the purpose. If `ENABLE_SECURITY_REMINDER=0` becomes your default, you've trained yourself to ignore the safety net. Use it only for specific verified-safe operations.
411 production-ready skills for Claude Code and 12 other coding agents, covering engineering, product, marketing, compliance, finance and the C-suite. We test whether each skill loads when you ask in plain words, and publish the results.
Use when someone wants to build, launch, grade or schedule a Claude Managed Agent in their own Anthropic account ('build me an…
Use when a launched managed agent needs grading against a rubric and improving ('grade my agent', 'is it good enough'). Builds…
Use when someone has an agent idea to scope before launch ('help me scope an agent'). Interviews them about the one job and…
Use when a graded managed agent should run on a schedule, on an event trigger or on demand ('run it every morning'). Validates…
Use when a managed-agent build sheet is ready to launch ('launch it', 'deploy the agent'). Generates and validates API payloads…
Use when closing out a launched managed agent ('wrap up', 'what do I own now'). Inventories primitives with…
Behavioral guidelines to reduce common LLM coding mistakes. Use when writing, reviewing, or refactoring code to avoid…
Design and build AI agents for any domain. Use when users: (1) ask to "create an agent", "build an assistant", or "design an AI…