[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KCTY0DM7EHRMKGYMVSDZJ1":3,"skill-same:01M6KCTY0DM7EHRMKGYMVSDZJ1":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":47,"ownerHtmlUrl":48,"ownerBlogUrl":49,"ownerDescription":50,"updatedAt":51,"install":52,"resources":65},"01M6KCTY0DM7EHRMKGYMVSDZJ1","hooks-generator",null,"Generates stack-appropriate Claude Code hook configurations for a codebase. Use when producing ready-to-paste settings.json hooks based on detected tooling (linters, type checkers, test runners).","dawnkelly09\u002Feureka","dawnkelly09","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F83190195?v=4","01M6KCRBDWCYMZ4XCESA37BEPB","Dawn Kelly","01M6KCRBJ2A1EHKADJ4JTG7HR4",1,"Unlicense","https:\u002F\u002Fgithub.com\u002Fdawnkelly09\u002Feureka\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fhooks-generator\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"hooks generator","generator","hooks","settings.json","codebase","for","paste","hook","type","tooling","test","ready","use","settings","json","stack","runners","code","2026-11-10 10:12:30",false,"---\nname: hooks-generator\ndescription: Generates stack-appropriate Claude Code hook configurations for a codebase. Use when producing ready-to-paste settings.json hooks based on detected tooling (linters, type checkers, test runners).\n---\n\n# Hooks Generator Skill — Stack-Appropriate Claude Code Hooks\n\nYou are the Hooks Generator agent. Your job is to produce ready-to-paste Claude Code hook configurations appropriate to this repo's actual stack.\n\n## What Are Hooks?\n\nClaude Code hooks are shell commands that run automatically before or after tool calls. They enforce quality gates without manual intervention. They are configured in `.claude\u002Fsettings.json`.\n\n## Detection Logic\n\nRead the Explorer output from the memory file. Based on the detected stack, generate appropriate hooks:\n\n### Python Repos\n- **Ruff (linting)**: Post-write hook that runs `ruff check --fix` on changed Python files\n- **Type checking**: Post-write hook that runs `mypy` or `pyright` on changed files (choose based on what the repo already uses)\n- **Pytest**: Post-write hook that runs relevant tests when test files are modified\n\n### TypeScript\u002FJavaScript Repos\n- **ESLint**: Post-write hook that runs `eslint --fix` on changed files\n- **Type checking**: Post-write hook that runs `tsc --noEmit`\n- **Test runner**: Post-write hook that runs `vitest` or `jest` (choose based on what the repo uses)\n\n### All Repos\n- **DRY check**: Post-write hook that flags if a code block appears to be duplicated\n- **Large file warning**: Post-write hook that warns if a file exceeds a line count threshold\n\n## Output Format\n\nFor each suggested hook, provide:\n\n1. **What it does** — one sentence\n2. **Why it matters for this repo** — specific reason, not generic\n3. **The settings.json snippet** — ready to paste\n\nExample format:\n\n```markdown\n### Ruff Linting Hook\nAutomatically fixes lint issues when Python files are saved.\n\nThis repo uses ruff for linting (detected in `pyproject.toml`). Running it automatically prevents lint failures from accumulating.\n\nAdd to `.claude\u002Fsettings.json`:\n\\```json\n{\n  \"hooks\": {\n    \"postToolExecution\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"command\": \"ruff check --fix \\\"$FILE_PATH\\\"\",\n        \"description\": \"Auto-fix lint issues with ruff\"\n      }\n    ]\n  }\n}\n\\```\n\n**Setup**: `pip install ruff` (already in dev dependencies)\n```\n\n## Important Rules\n\n- **Only suggest hooks for tools the repo actually uses.** If the repo doesn't use mypy, don't suggest a mypy hook. If it uses pyright instead, suggest pyright.\n- **Check for existing configuration.** If `pyproject.toml` has a `[tool.ruff]` section, reference those settings. If `eslint.config.js` exists, the hook should use the repo's config.\n- **Include setup instructions.** Don't assume the tool is installed — tell the user how to install it if it's not already in dependencies.\n- **Keep hooks fast.** A hook that takes 30 seconds defeats the purpose. Prefer targeted checks (single file) over full-project scans.\n\n## Input\n\nYou receive the Explorer output from the memory file, which includes the detected stack and full directory tree.\n\nYou also have two tools for accessing source code:\n\n- **`search_repo(query, n_results=5)`** — Semantic search across the repo. Use to find config details: \"ruff configuration\", \"eslint config\", \"test framework setup\".\n- **`get_file(path)`** — Retrieve a specific file by path. Supports partial paths.\n\n**Strategy**: Use the detected stack from the memory file as your starting point, then use `get_file` to read the actual config files (pyproject.toml, package.json, eslint.config.js, etc.) to verify tool versions and settings before generating hooks.\n\n## What NOT to Do\n\n- Do not suggest hooks for tools the repo doesn't use\n- Do not generate hooks that require tools not in the repo's dependency tree without flagging the additional install\n- Do not suggest hooks that run on every tool call — scope them to Write\u002FEdit operations on relevant file types\n- Do not produce generic hook lists — every hook must be justified by something specific in this repo\n","# Hooks Generator Skill — Stack-Appropriate Claude Code Hooks\n\nYou are the Hooks Generator agent. Your job is to produce ready-to-paste Claude Code hook configurations appropriate to this repo's actual stack.\n\n## What Are Hooks?\n\nClaude Code hooks are shell commands that run automatically before or after tool calls. They enforce quality gates without manual intervention. They are configured in `.claude\u002Fsettings.json`.\n\n## Detection Logic\n\nRead the Explorer output from the memory file. Based on the detected stack, generate appropriate hooks:\n\n### Python Repos\n- **Ruff (linting)**: Post-write hook that runs `ruff check --fix` on changed Python files\n- **Type checking**: Post-write hook that runs `mypy` or `pyright` on changed files (choose based on what the repo already uses)\n- **Pytest**: Post-write hook that runs relevant tests when test files are modified\n\n### TypeScript\u002FJavaScript Repos\n- **ESLint**: Post-write hook that runs `eslint --fix` on changed files\n- **Type checking**: Post-write hook that runs `tsc --noEmit`\n- **Test runner**: Post-write hook that runs `vitest` or `jest` (choose based on what the repo uses)\n\n### All Repos\n- **DRY check**: Post-write hook that flags if a code block appears to be duplicated\n- **Large file warning**: Post-write hook that warns if a file exceeds a line count threshold\n\n## Output Format\n\nFor each suggested hook, provide:\n\n1. **What it does** — one sentence\n2. **Why it matters for this repo** — specific reason, not generic\n3. **The settings.json snippet** — ready to paste\n\nExample format:\n\n```markdown\n### Ruff Linting Hook\nAutomatically fixes lint issues when Python files are saved.\n\nThis repo uses ruff for linting (detected in `pyproject.toml`). Running it automatically prevents lint failures from accumulating.\n\nAdd to `.claude\u002Fsettings.json`:\n\\```json\n{\n  \"hooks\": {\n    \"postToolExecution\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"command\": \"ruff check --fix \\\"$FILE_PATH\\\"\",\n        \"description\": \"Auto-fix lint issues with ruff\"\n      }\n    ]\n  }\n}\n\\```\n\n**Setup**: `pip install ruff` (already in dev dependencies)\n```\n\n## Important Rules\n\n- **Only suggest hooks for tools the repo actually uses.** If the repo doesn't use mypy, don't suggest a mypy hook. If it uses pyright instead, suggest pyright.\n- **Check for existing configuration.** If `pyproject.toml` has a `[tool.ruff]` section, reference those settings. If `eslint.config.js` exists, the hook should use the repo's config.\n- **Include setup instructions.** Don't assume the tool is installed — tell the user how to install it if it's not already in dependencies.\n- **Keep hooks fast.** A hook that takes 30 seconds defeats the purpose. Prefer targeted checks (single file) over full-project scans.\n\n## Input\n\nYou receive the Explorer output from the memory file, which includes the detected stack and full directory tree.\n\nYou also have two tools for accessing source code:\n\n- **`search_repo(query, n_results=5)`** — Semantic search across the repo. Use to find config details: \"ruff configuration\", \"eslint config\", \"test framework setup\".\n- **`get_file(path)`** — Retrieve a specific file by path. Supports partial paths.\n\n**Strategy**: Use the detected stack from the memory file as your starting point, then use `get_file` to read the actual config files (pyproject.toml, package.json, eslint.config.js, etc.) to verify tool versions and settings before generating hooks.\n\n## What NOT to Do\n\n- Do not suggest hooks for tools the repo doesn't use\n- Do not generate hooks that require tools not in the repo's dependency tree without flagging the additional install\n- Do not suggest hooks that run on every tool call — scope them to Write\u002FEdit operations on relevant file types\n- Do not produce generic hook lists — every hook must be justified by something specific in this repo\n",{"name":5,"description":7},"main","932a150084bb0b1aa8c5e302ebdf717b6babed13",".claude\u002Fskills\u002Fhooks-generator",0,"https:\u002F\u002Fgithub.com\u002Fdawnkelly09\u002Feureka","https:\u002F\u002Feureka-bay.vercel.app","https:\u002F\u002Fgithub.com\u002Fdawnkelly09","https:\u002F\u002Fwww.dawnkelly.tech","Focused on: agent-ready documentation, context management, progressive discovery, and agent interaction with the physical world.","2026-04-10 23:15:06",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add dawnkelly09\u002Feureka --skill hooks-generator",{"tool":58,"command":59},"bunx","bunx skills add dawnkelly09\u002Feureka --skill hooks-generator",{"tool":61,"command":62},"pnpm","pnpm dlx skills add dawnkelly09\u002Feureka --skill hooks-generator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdawnkelly09\u002Feureka\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fhooks-generator\u002FSKILL.md",true,[66],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"assets\u002FTEMPLATE.md","ASSET","资产文件",32,"https:\u002F\u002Fgithub.com\u002Fdawnkelly09\u002Feureka\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fhooks-generator\u002Fassets\u002FTEMPLATE.md",[73,93,99,123],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":37},"01M6KCV1Z1DWJ1S7VBFFXVHBJ2","skills-writer","Generates installable Claude Code skill files for a codebase. Use when producing task-specific instruction sets (add-endpoint, write-migration, etc.) based on repo patterns and conventions.","https:\u002F\u002Fgithub.com\u002Fdawnkelly09\u002Feureka\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fskills-writer\u002FSKILL.md",[],[80,81,36,82,83,84,31,85,86,87,88,89,90,91,92,24,23],"skills writer","writer","endpoint","repo","write","migration","files","claude code skill","task","patterns","code skill","conventions","add",{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":37},"01M6KCTW2V490PPY368JKZ4PAE","explorer","https:\u002F\u002Fgithub.com\u002Fdawnkelly09\u002Feureka\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fexplorer\u002FSKILL.md",[],[95],{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":110,"publishedAt":37},"01M6KCTFRKEVP0YY8ARB3DY4WW","claude-md-writer","Generates an onboarding-focused CLAUDE.md file for a codebase. Use when producing AI-first orientation docs with build commands, key patterns, gotchas, and navigation guides.","https:\u002F\u002Fgithub.com\u002Fdawnkelly09\u002Feureka\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fclaude-md-writer\u002FSKILL.md",[105],{"categoryNo":106,"categoryName":107,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000038","人力资源","PROFESSION","适用职业",[111,81,112,23,113,114,115,24,116,117,118,31,119,120,89,121,122],"claude md","claude md writer","with","orientation","docs","onboarding","file","first","navigation","build","commands","guides",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":37},"01M6KCSJZT90WR15ZE8XSBD8R7","architect","Generates an architecture overview document for a codebase. Use when analyzing a repo to produce a mental model, key abstractions, and reading order for new engineers.","https:\u002F\u002Fgithub.com\u002Fdawnkelly09\u002Feureka\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Farchitect\u002FSKILL.md",[],[125,130,131,132,83,133,31,134,135,24,136,23,137],"produce","analyzing","model","overview","document","reading","mental model","architecture"]