{
  "markdown": "# Security Linter Plugin\n\nA PreToolUse hook plugin for Claude Code that scans code for security vulnerabilities before it is written to disk.\n\n## What It Detects\n\n| Rule ID | Pattern | Severity |\n|---------|---------|----------|\n| EVAL_USAGE | `eval()` calls | Error (blocks) |\n| FUNCTION_CONSTRUCTOR | `new Function()` / `Function()` | Error (blocks) |\n| HARDCODED_API_KEY | `api_key = \"...\"` and variants | Error (blocks) |\n| HARDCODED_SECRET | `password = \"...\"`, `secret_key = \"...\"` | Error (blocks) |\n| BEARER_TOKEN | `\"Bearer eyJ...\"` hardcoded tokens | Error (blocks) |\n| AWS_ACCESS_KEY | `AKIA...` access key IDs | Error (blocks) |\n| AWS_SECRET_KEY | `aws_secret_access_key = \"...\"` | Error (blocks) |\n| INNERHTML_ASSIGNMENT | `.innerHTML =` / `.outerHTML =` | Error (blocks) |\n| PRIVATE_KEY_INLINE | PEM-encoded private keys | Error (blocks) |\n| GITHUB_TOKEN | `ghp_...` / `github_pat_...` tokens | Error (blocks) |\n| DOCUMENT_WRITE | `document.write()` | Warning (non-blocking) |\n| DANGEROUSLY_SET_INNERHTML | React `dangerouslySetInnerHTML` | Warning (non-blocking) |\n\n## How It Works\n\n1. The hook intercepts every `Write`, `Edit`, and `MultiEdit` tool call.\n2. It extracts the code content from the tool input (handling each tool's JSON shape).\n3. Content is scanned against all regex patterns, skipping matches inside comments.\n4. **Errors** block the write with a detailed denial message listing every violation.\n5. **Warnings** allow the write but inject advisory context for Claude to consider.\n6. The linter always exits 0 (fail-open) — if the linter itself errors, writes are not blocked.\n\n## Installation\n\n```bash\nclaude --plugin-dir /path/to/security-linter\n```\n\nVerify it loaded:\n\n```bash\n/plugins list\n```\n\n## Requirements\n\n- Node.js >= 14 (no npm dependencies)\n\nRun the check script:\n\n```bash\nbash /path/to/security-linter/scripts/install-deps.sh\n```\n",
  "bytes": 1875,
  "sha": "d53a470e6e34aac7ee31a325429b95e3fbd991cb439f797e97ecee8a43811185",
  "repo_slug": "its-animay/claude-security-linter",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_its_animay_claude_security_linter_claude_32c8e224/readme"
}