[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ENA3V7M77ZP16HRM9K83D3":3,"skill-same:01M6ENA3V7M77ZP16HRM9K83D3":102},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":56,"ownerHtmlUrl":57,"ownerBlogUrl":6,"ownerDescription":58,"updatedAt":59,"install":60,"resources":73},"01M6ENA3V7M77ZP16HRM9K83D3","building-hooks",null,"Expert at creating and modifying Claude Code event hooks for automation and policy enforcement. Auto-invokes when the user wants to create, update, modify, enhance, validate, or standardize hooks, or when modifying hooks.json configuration, needs help with event-driven automation, or wants to understand hook patterns. Also auto-invokes proactively when Claude is about to write hooks.json files, or implement tasks that involve creating event hook configurations.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fc0ntr0lledcha0s\u002Fbuilding-hooks\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"building hooks","hooks","edit","event-driven","patterns","expert","files","enhance","enforcement","auto","policy","write","read","Bash","code","update","create","tasks","automation","implement","2026-11-10 10:12:30",false,"---\nname: building-hooks\ndescription: Expert at creating and modifying Claude Code event hooks for automation and policy enforcement. Auto-invokes when the user wants to create, update, modify, enhance, validate, or standardize hooks, or when modifying hooks.json configuration, needs help with event-driven automation, or wants to understand hook patterns. Also auto-invokes proactively when Claude is about to write hooks.json files, or implement tasks that involve creating event hook configurations.\nversion: 2.0.0\nallowed-tools: Read, Write, Edit, Grep, Glob, Bash\n---\n\n# Building Hooks Skill\n\nYou are an expert at creating Claude Code event hooks. Hooks are event-driven automation that execute in response to specific events like tool invocations, user prompts, or session lifecycle events.\n\n## When to Create Hooks\n\n**Use HOOKS when:**\n- You need event-driven automation\n- You want to validate or block tool usage\n- You need to enforce policies automatically\n- You want to log or audit Claude's actions\n- You need pre\u002Fpost-processing for tool invocations\n\n**Use COMMANDS instead when:**\n- The user explicitly triggers an action\n- You need manual invocation\n\n**Use AGENTS\u002FSKILLS instead when:**\n- You need Claude's reasoning and generation\n- The task requires LLM capabilities\n\n## Hook Schema & Structure\n\n### File Location\n- **Project-level**: `.claude\u002Fhooks.json`\n- **Project settings**: `.claude\u002Fsettings.json` (hooks section)\n- **Directory-specific**: `.claude-hooks.json` (in any directory)\n- **Plugin-level**: `plugin-dir\u002Fhooks\u002Fhooks.json`\n\n### File Format\nJSON configuration file.\n\n### Schema Structure\n\n```json\n{\n  \"hooks\": {\n    \"EventName\": [\n      {\n        \"matcher\": \"ToolPattern\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash command to execute\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n## Event Types\n\n### Events WITH Matchers (Tool-Specific)\n\n**PreToolUse**: Before a tool runs\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"Bash\",\n        \"hooks\": [{\"type\": \"command\", \"command\": \"bash validate.sh\"}]\n      }\n    ]\n  }\n}\n```\n\n**PostToolUse**: After a tool completes successfully\n```json\n{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"hooks\": [{\"type\": \"command\", \"command\": \"bash format.sh\"}]\n      }\n    ]\n  }\n}\n```\n\n### Events WITHOUT Matchers (Lifecycle Events)\n\n**UserPromptSubmit**: When user submits a prompt\n```json\n{\n  \"hooks\": {\n    \"UserPromptSubmit\": [\n      {\n        \"hooks\": [{\"type\": \"command\", \"command\": \"bash log-prompt.sh\"}]\n      }\n    ]\n  }\n}\n```\n\n**Stop**: When Claude finishes responding\n```json\n{\n  \"hooks\": {\n    \"Stop\": [\n      {\n        \"hooks\": [{\"type\": \"command\", \"command\": \"bash cleanup.sh\"}]\n      }\n    ]\n  }\n}\n```\n\n**SessionStart**: When session starts\n```json\n{\n  \"hooks\": {\n    \"SessionStart\": [\n      {\n        \"hooks\": [{\"type\": \"command\", \"command\": \"bash setup.sh\"}]\n      }\n    ]\n  }\n}\n```\n\n**Other Events**:\n- **Notification**: When Claude sends an alert\n- **SubagentStop**: When a subagent completes\n- **PreCompact**: Before transcript compaction\n\n## Matcher Patterns\n\nFor `PreToolUse` and `PostToolUse` events:\n\n| Pattern | Matches | Example |\n|---------|---------|---------|\n| `\"Write\"` | Exact tool name | Matches only Write tool |\n| `\"Edit\\|Write\"` | Regex OR | Matches Edit or Write |\n| `\"Bash\"` | Single tool | Matches Bash tool |\n| `\"*\"` | Wildcard | Matches ALL tools |\n| `\"Notebook.*\"` | Regex pattern | Matches NotebookEdit, etc. |\n| `\"\"` | Empty (for non-tool events) | For lifecycle events |\n\n## Hook Types\n\n### Type 1: Command Hook\n\nExecute a bash command:\n\n```json\n{\n  \"type\": \"command\",\n  \"command\": \"bash \u002Fpath\u002Fto\u002Fscript.sh\"\n}\n```\n\n**Use for:**\n- Validation scripts\n- Formatting tools\n- Logging and auditing\n- File system operations\n\n### Type 2: Prompt Hook (LLM-based)\n\nUse LLM for evaluation:\n\n```json\n{\n  \"type\": \"prompt\",\n  \"prompt\": \"Analyze the tool usage and determine if it's safe\"\n}\n```\n\n**Use for:**\n- Complex policy evaluation\n- Context-aware decisions\n- Natural language analysis\n\n## Hook Return Values\n\nHooks can return structured JSON to control behavior:\n\n```json\n{\n  \"continue\": true,\n  \"decision\": \"approve\",\n  \"reason\": \"Explanation for the decision\",\n  \"suppressOutput\": false,\n  \"systemMessage\": \"Optional message shown to user\",\n  \"hookSpecificOutput\": {\n    \"permissionDecision\": \"approve\",\n    \"permissionDecisionReason\": \"Safe operation\",\n    \"additionalContext\": \"Extra context for Claude\"\n  }\n}\n```\n\n### Key Fields\n\n- **`continue`**: `true` to proceed, `false` to stop\n- **`decision`**: `\"approve\"`, `\"block\"`, or `\"warn\"`\n- **`reason`**: Explanation for the decision\n- **`suppressOutput`**: Hide hook output from transcript\n- **`systemMessage`**: Message displayed to user\n- **`permissionDecision`**: For tool permission hooks\n- **`additionalContext`**: Context added to Claude's knowledge\n\n### Exit Codes\n\n- **`0`**: Success (stdout shown in transcript mode)\n- **`2`**: Blocking error (stderr fed to Claude)\n- **Other**: Non-blocking error\n\n## Common Hook Patterns\n\n### Pattern 1: Validation Hook (PreToolUse)\n\nValidate tool usage before execution:\n\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Fvalidate-write.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**Example validate-write.sh**:\n```bash\n#!\u002Fbin\u002Fbash\n# Check if writing to protected directory\n\nFILE_PATH=\"$1\"\n\nif [[ \"$FILE_PATH\" == \u002Fprotected\u002F* ]]; then\n  echo '{\"decision\": \"block\", \"reason\": \"Cannot write to protected directory\"}'\n  exit 2\nfi\n\necho '{\"decision\": \"approve\", \"reason\": \"Path is valid\"}'\nexit 0\n```\n\n### Pattern 2: Formatting Hook (PostToolUse)\n\nAuto-format files after writing:\n\n```json\n{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Fformat-file.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**Example format-file.sh**:\n```bash\n#!\u002Fbin\u002Fbash\nFILE_PATH=\"$1\"\n\nif [[ \"$FILE_PATH\" == *.py ]]; then\n  black \"$FILE_PATH\"\nelif [[ \"$FILE_PATH\" == *.js ]]; then\n  prettier --write \"$FILE_PATH\"\nfi\n\nexit 0\n```\n\n### Pattern 3: Logging Hook (All Tools)\n\nLog all tool usage:\n\n```json\n{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"*\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Flog-tool.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n### Pattern 4: Security Hook (Bash Commands)\n\nValidate bash commands for security:\n\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"Bash\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Fvalidate-bash.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**Example validate-bash.sh**:\n```bash\n#!\u002Fbin\u002Fbash\nCOMMAND=\"$1\"\n\n# Block dangerous commands\nif echo \"$COMMAND\" | grep -qE \"rm -rf \u002F|dd if=\"; then\n  echo '{\"decision\": \"block\", \"reason\": \"Dangerous command detected\"}'\n  exit 2\nfi\n\necho '{\"decision\": \"approve\"}'\nexit 0\n```\n\n### Pattern 5: Session Setup Hook\n\nInitialize environment on session start:\n\n```json\n{\n  \"hooks\": {\n    \"SessionStart\": [\n      {\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Fsetup-session.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**Example setup-session.sh**:\n```bash\n#!\u002Fbin\u002Fbash\n# Load environment, start services, etc.\nexport PROJECT_ROOT=$(pwd)\necho \"Session initialized for project: $PROJECT_ROOT\"\nexit 0\n```\n\n## Creating Hooks\n\n### Step 1: Identify the Need\nAsk the user:\n1. What event should trigger the hook?\n2. What validation or action is needed?\n3. Should it block, warn, or just log?\n4. What tools or operations need monitoring?\n\n### Step 2: Choose Event and Matcher\n- **PreToolUse**: Validate before execution\n- **PostToolUse**: Process after execution\n- **UserPromptSubmit**: Analyze prompts\n- **SessionStart**: Initialize environment\n- **Stop**: Cleanup or summary\n\n### Step 3: Design the Hook Logic\n- Write bash script for the hook\n- Define input parameters\n- Plan return JSON structure\n- Handle error cases\n- Test security\n\n### Step 4: Create hooks.json\n```json\n{\n  \"hooks\": {\n    \"EventName\": [\n      {\n        \"matcher\": \"ToolPattern\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Fscript.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n### Step 5: Implement Hook Script\n- Accept appropriate input parameters\n- Validate inputs\n- Perform check or action\n- Return JSON with decision\n- Use appropriate exit code\n\n### Step 6: Test the Hook\n- Place hooks.json in `.claude\u002F`\n- Trigger the event\n- Verify hook executes correctly\n- Check blocking\u002Fapproving works\n- Test error handling\n\n## Validation Script\n\nThis skill includes a validation script:\n\n### validate-hooks.py - Schema Validator\n\nPython script for validating hooks.json files.\n\n**Usage:**\n```bash\npython3 {baseDir}\u002Fscripts\u002Fvalidate-hooks.py \u003Chooks.json>\n```\n\n**What It Checks:**\n- JSON syntax validity\n- Event name validity (PreToolUse, PostToolUse, etc.)\n- Matcher requirements (tool events need matchers)\n- Hook type validity (command, prompt)\n- Script existence (referenced scripts exist)\n- Security patterns (dangerous commands, injection risks)\n\n**Returns:**\n- Exit code 0 if valid\n- Exit code 1 with error messages if invalid\n\n**Example:**\n```bash\npython3 validate-hooks.py .claude\u002Fhooks.json\n\n✅ Hooks validation passed\n   Events configured: PreToolUse, PostToolUse\n   Total hooks: 3\n   Scripts verified: 2\n```\n\n## Hook Script Best Practices\n\n### Input Parameters\n\nHooks receive context as arguments:\n\n**PreToolUse \u002F PostToolUse**:\n- `$1`: Tool name\n- `$2`: Tool parameters (JSON)\n- Environment variables with tool details\n\n**UserPromptSubmit**:\n- `$1`: User prompt text\n\n**Other events**:\n- Event-specific parameters\n\n### Return JSON Format\n\nAlways return well-formed JSON:\n\n```bash\n#!\u002Fbin\u002Fbash\n\n# Success\necho '{\"decision\": \"approve\", \"reason\": \"Validation passed\"}'\nexit 0\n\n# Block\necho '{\"decision\": \"block\", \"reason\": \"Security violation detected\"}'\nexit 2\n\n# Warn\necho '{\"decision\": \"warn\", \"reason\": \"Unusual pattern detected\"}'\nexit 0\n```\n\n### Error Handling\n\n```bash\n#!\u002Fbin\u002Fbash\n\nif [ $# -lt 1 ]; then\n  echo '{\"decision\": \"block\", \"reason\": \"Missing required arguments\"}' >&2\n  exit 2\nfi\n\n# Validate input\nif ! validate_input \"$1\"; then\n  echo '{\"decision\": \"block\", \"reason\": \"Invalid input\"}' >&2\n  exit 2\nfi\n\n# Normal processing\necho '{\"decision\": \"approve\"}'\nexit 0\n```\n\n## Security Considerations\n\nWhen creating hooks:\n\n1. **Validate All Inputs**: Never trust data from tool parameters\n2. **Avoid Command Injection**: Sanitize strings used in shell commands\n3. **Check Exit Codes**: Use appropriate codes (0, 2)\n4. **Limit Permissions**: Run with minimal necessary privileges\n5. **Log Security Events**: Audit sensitive operations\n6. **Test Thoroughly**: Try to bypass your own hooks\n\n### Security Anti-Patterns\n\n**Bad** (Command Injection):\n```bash\neval \"$1\"  # NEVER DO THIS\n```\n\n**Good** (Safe Validation):\n```bash\nif [[ \"$1\" =~ ^[a-zA-Z0-9_\u002F-]+$ ]]; then\n  # Process sanitized input\nfi\n```\n\n## Validation Checklist\n\nBefore deploying hooks, verify:\n\n- [ ] hooks.json has valid JSON syntax\n- [ ] Event names are correct\n- [ ] Matchers are properly escaped (use \\| for regex OR)\n- [ ] Hook scripts exist and are executable\n- [ ] Scripts accept correct input parameters\n- [ ] Scripts return valid JSON\n- [ ] Exit codes are appropriate (0 or 2)\n- [ ] Security validation is thorough\n- [ ] Error cases are handled\n- [ ] Hooks don't create infinite loops\n\n## Reference Templates\n\nFull templates and examples are available at:\n- `{baseDir}\u002Ftemplates\u002Fhooks-template.json` - Basic hooks configuration\n- `{baseDir}\u002Ftemplates\u002Fvalidation-script.sh` - Validation hook script\n- `{baseDir}\u002Ftemplates\u002Fformatting-script.sh` - Formatting hook script\n- `{baseDir}\u002Freferences\u002Fhook-examples.md` - Real-world examples\n\n## Complete Example: Protected Directories\n\n**hooks.json**:\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash ~\u002F.claude\u002Fhooks\u002Fprotect-dirs.sh\"\n          }\n        ]\n      }\n    ],\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash ~\u002F.claude\u002Fhooks\u002Fauto-format.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**protect-dirs.sh**:\n```bash\n#!\u002Fbin\u002Fbash\nTOOL_NAME=\"$1\"\nFILE_PATH=\"$2\"\n\nPROTECTED_DIRS=(\"\u002Fetc\" \"\u002Fusr\" \"\u002Fsys\" \"\u002Fprotected\")\n\nfor dir in \"${PROTECTED_DIRS[@]}\"; do\n  if [[ \"$FILE_PATH\" == $dir\u002F* ]]; then\n    echo \"{\\\"decision\\\": \\\"block\\\", \\\"reason\\\": \\\"Cannot modify protected directory: $dir\\\"}\"\n    exit 2\n  fi\ndone\n\necho '{\"decision\": \"approve\"}'\nexit 0\n```\n\n**auto-format.sh**:\n```bash\n#!\u002Fbin\u002Fbash\nFILE_PATH=\"$2\"\n\nif [[ \"$FILE_PATH\" == *.py ]]; then\n  black --quiet \"$FILE_PATH\" 2>\u002Fdev\u002Fnull\nelif [[ \"$FILE_PATH\" == *.js ]] || [[ \"$FILE_PATH\" == *.ts ]]; then\n  prettier --write \"$FILE_PATH\" > \u002Fdev\u002Fnull 2>&1\nfi\n\necho '{\"decision\": \"approve\", \"reason\": \"File formatted\"}'\nexit 0\n```\n\n## Your Role\n\nWhen the user asks to create hooks:\n\n1. Understand what behavior needs automation or validation\n2. Recommend appropriate event and matcher\n3. Design hook logic with security in mind\n4. Generate hooks.json configuration\n5. Create hook scripts with proper structure\n6. Validate JSON syntax and script logic\n7. Make scripts executable\n8. Provide testing instructions\n\nBe proactive in:\n- Identifying security risks\n- Recommending appropriate events\n- Creating robust validation logic\n- Writing defensive hook scripts\n- Testing edge cases and error conditions\n\nYour goal is to help users create secure, reliable event hooks that automate workflows and enforce policies effectively.\n\n## Maintaining and Updating Hooks\n\nHooks are security-critical infrastructure and need ongoing maintenance.\n\n### Security-First Principles\n\n1. **Never Trust Input**: All parameters are potentially malicious\n   ```bash\n   # WRONG\n   eval \"$1\"\n\n   # RIGHT\n   if [[ \"$1\" =~ ^[a-zA-Z0-9_\u002F-]+$ ]]; then\n       # Safe to use\n   fi\n   ```\n\n2. **Validate Everything**: Check parameters, paths, commands\n   ```bash\n   set -euo pipefail  # Strict error handling\n   [[ ! \"$PATH\" =~ \\.\\. ]]  # No directory traversal\n   ```\n\n3. **Use Safe Defaults**: Block by default, approve explicitly\n   ```bash\n   echo '{\"decision\": \"block\", \"reason\": \"Validation failed\"}' >&2\n   exit 2\n   ```\n\n4. **Block Dangerous Patterns**:\n   - `eval`, command substitution without validation\n   - `rm -rf \u002F`, `dd if=`, `mkfs`\n   - Piping wget\u002Fcurl to bash\n   - Overly permissive permissions (chmod 777)\n\n### Maintenance Checklist\n\nWhen reviewing hooks for updates:\n\n- [ ] **JSON syntax valid**: Valid JSON structure\n- [ ] **Event names correct**: PreToolUse, PostToolUse, etc.\n- [ ] **Matchers appropriate**: Specific tools, not wildcards\n- [ ] **Scripts exist**: Referenced scripts are present\n- [ ] **Scripts executable**: chmod +x on script files\n- [ ] **Input validation**: Scripts validate parameters\n- [ ] **No dangerous patterns**: No eval, rm -rf, etc.\n\n### Common Maintenance Scenarios\n\n#### Scenario 1: Hook Script Not Executing\n\n**Problem**: Hook script not running when expected\n**Solutions**:\n- Verify script exists at the path specified\n- Make script executable: `chmod +x script.sh`\n- Check hook event name matches expected trigger\n- Verify matcher pattern matches the tool\n\n#### Scenario 2: Security Hardening\n\n**Problem**: Hook lacks input validation\n**Solution**: Add parameter validation at start of script:\n```bash\n#!\u002Fbin\u002Fbash\nset -euo pipefail\n\n# Validate input\nif [[ ! \"$1\" =~ ^[a-zA-Z0-9_\u002F-]+$ ]]; then\n    echo '{\"decision\": \"block\", \"reason\": \"Invalid input\"}'\n    exit 2\nfi\n```\n\n#### Scenario 3: Change Hook Event\n\n**Problem**: Need to move from PostToolUse to PreToolUse\n**Solution**: Edit hooks.json to change the event key:\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [...]  \u002F\u002F Changed from PostToolUse\n  }\n}\n```\n\n### Best Practices\n\n1. **Use specific matchers**: `\"Write|Edit\"` instead of `\"*\"`\n2. **Validate all inputs**: Never trust parameters\n3. **Use absolute paths**: For script references\n4. **Log security events**: Audit sensitive operations\n5. **Test thoroughly**: Try to bypass your own hooks\n6. **Backup before changes**: Keep original hooks.json\n7. **Version control**: Commit hooks.json changes\n","# Building Hooks Skill\n\nYou are an expert at creating Claude Code event hooks. Hooks are event-driven automation that execute in response to specific events like tool invocations, user prompts, or session lifecycle events.\n\n## When to Create Hooks\n\n**Use HOOKS when:**\n- You need event-driven automation\n- You want to validate or block tool usage\n- You need to enforce policies automatically\n- You want to log or audit Claude's actions\n- You need pre\u002Fpost-processing for tool invocations\n\n**Use COMMANDS instead when:**\n- The user explicitly triggers an action\n- You need manual invocation\n\n**Use AGENTS\u002FSKILLS instead when:**\n- You need Claude's reasoning and generation\n- The task requires LLM capabilities\n\n## Hook Schema & Structure\n\n### File Location\n- **Project-level**: `.claude\u002Fhooks.json`\n- **Project settings**: `.claude\u002Fsettings.json` (hooks section)\n- **Directory-specific**: `.claude-hooks.json` (in any directory)\n- **Plugin-level**: `plugin-dir\u002Fhooks\u002Fhooks.json`\n\n### File Format\nJSON configuration file.\n\n### Schema Structure\n\n```json\n{\n  \"hooks\": {\n    \"EventName\": [\n      {\n        \"matcher\": \"ToolPattern\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash command to execute\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n## Event Types\n\n### Events WITH Matchers (Tool-Specific)\n\n**PreToolUse**: Before a tool runs\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"Bash\",\n        \"hooks\": [{\"type\": \"command\", \"command\": \"bash validate.sh\"}]\n      }\n    ]\n  }\n}\n```\n\n**PostToolUse**: After a tool completes successfully\n```json\n{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"hooks\": [{\"type\": \"command\", \"command\": \"bash format.sh\"}]\n      }\n    ]\n  }\n}\n```\n\n### Events WITHOUT Matchers (Lifecycle Events)\n\n**UserPromptSubmit**: When user submits a prompt\n```json\n{\n  \"hooks\": {\n    \"UserPromptSubmit\": [\n      {\n        \"hooks\": [{\"type\": \"command\", \"command\": \"bash log-prompt.sh\"}]\n      }\n    ]\n  }\n}\n```\n\n**Stop**: When Claude finishes responding\n```json\n{\n  \"hooks\": {\n    \"Stop\": [\n      {\n        \"hooks\": [{\"type\": \"command\", \"command\": \"bash cleanup.sh\"}]\n      }\n    ]\n  }\n}\n```\n\n**SessionStart**: When session starts\n```json\n{\n  \"hooks\": {\n    \"SessionStart\": [\n      {\n        \"hooks\": [{\"type\": \"command\", \"command\": \"bash setup.sh\"}]\n      }\n    ]\n  }\n}\n```\n\n**Other Events**:\n- **Notification**: When Claude sends an alert\n- **SubagentStop**: When a subagent completes\n- **PreCompact**: Before transcript compaction\n\n## Matcher Patterns\n\nFor `PreToolUse` and `PostToolUse` events:\n\n| Pattern | Matches | Example |\n|---------|---------|---------|\n| `\"Write\"` | Exact tool name | Matches only Write tool |\n| `\"Edit\\|Write\"` | Regex OR | Matches Edit or Write |\n| `\"Bash\"` | Single tool | Matches Bash tool |\n| `\"*\"` | Wildcard | Matches ALL tools |\n| `\"Notebook.*\"` | Regex pattern | Matches NotebookEdit, etc. |\n| `\"\"` | Empty (for non-tool events) | For lifecycle events |\n\n## Hook Types\n\n### Type 1: Command Hook\n\nExecute a bash command:\n\n```json\n{\n  \"type\": \"command\",\n  \"command\": \"bash \u002Fpath\u002Fto\u002Fscript.sh\"\n}\n```\n\n**Use for:**\n- Validation scripts\n- Formatting tools\n- Logging and auditing\n- File system operations\n\n### Type 2: Prompt Hook (LLM-based)\n\nUse LLM for evaluation:\n\n```json\n{\n  \"type\": \"prompt\",\n  \"prompt\": \"Analyze the tool usage and determine if it's safe\"\n}\n```\n\n**Use for:**\n- Complex policy evaluation\n- Context-aware decisions\n- Natural language analysis\n\n## Hook Return Values\n\nHooks can return structured JSON to control behavior:\n\n```json\n{\n  \"continue\": true,\n  \"decision\": \"approve\",\n  \"reason\": \"Explanation for the decision\",\n  \"suppressOutput\": false,\n  \"systemMessage\": \"Optional message shown to user\",\n  \"hookSpecificOutput\": {\n    \"permissionDecision\": \"approve\",\n    \"permissionDecisionReason\": \"Safe operation\",\n    \"additionalContext\": \"Extra context for Claude\"\n  }\n}\n```\n\n### Key Fields\n\n- **`continue`**: `true` to proceed, `false` to stop\n- **`decision`**: `\"approve\"`, `\"block\"`, or `\"warn\"`\n- **`reason`**: Explanation for the decision\n- **`suppressOutput`**: Hide hook output from transcript\n- **`systemMessage`**: Message displayed to user\n- **`permissionDecision`**: For tool permission hooks\n- **`additionalContext`**: Context added to Claude's knowledge\n\n### Exit Codes\n\n- **`0`**: Success (stdout shown in transcript mode)\n- **`2`**: Blocking error (stderr fed to Claude)\n- **Other**: Non-blocking error\n\n## Common Hook Patterns\n\n### Pattern 1: Validation Hook (PreToolUse)\n\nValidate tool usage before execution:\n\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Fvalidate-write.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**Example validate-write.sh**:\n```bash\n#!\u002Fbin\u002Fbash\n# Check if writing to protected directory\n\nFILE_PATH=\"$1\"\n\nif [[ \"$FILE_PATH\" == \u002Fprotected\u002F* ]]; then\n  echo '{\"decision\": \"block\", \"reason\": \"Cannot write to protected directory\"}'\n  exit 2\nfi\n\necho '{\"decision\": \"approve\", \"reason\": \"Path is valid\"}'\nexit 0\n```\n\n### Pattern 2: Formatting Hook (PostToolUse)\n\nAuto-format files after writing:\n\n```json\n{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Fformat-file.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**Example format-file.sh**:\n```bash\n#!\u002Fbin\u002Fbash\nFILE_PATH=\"$1\"\n\nif [[ \"$FILE_PATH\" == *.py ]]; then\n  black \"$FILE_PATH\"\nelif [[ \"$FILE_PATH\" == *.js ]]; then\n  prettier --write \"$FILE_PATH\"\nfi\n\nexit 0\n```\n\n### Pattern 3: Logging Hook (All Tools)\n\nLog all tool usage:\n\n```json\n{\n  \"hooks\": {\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"*\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Flog-tool.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n### Pattern 4: Security Hook (Bash Commands)\n\nValidate bash commands for security:\n\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"Bash\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Fvalidate-bash.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**Example validate-bash.sh**:\n```bash\n#!\u002Fbin\u002Fbash\nCOMMAND=\"$1\"\n\n# Block dangerous commands\nif echo \"$COMMAND\" | grep -qE \"rm -rf \u002F|dd if=\"; then\n  echo '{\"decision\": \"block\", \"reason\": \"Dangerous command detected\"}'\n  exit 2\nfi\n\necho '{\"decision\": \"approve\"}'\nexit 0\n```\n\n### Pattern 5: Session Setup Hook\n\nInitialize environment on session start:\n\n```json\n{\n  \"hooks\": {\n    \"SessionStart\": [\n      {\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Fsetup-session.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**Example setup-session.sh**:\n```bash\n#!\u002Fbin\u002Fbash\n# Load environment, start services, etc.\nexport PROJECT_ROOT=$(pwd)\necho \"Session initialized for project: $PROJECT_ROOT\"\nexit 0\n```\n\n## Creating Hooks\n\n### Step 1: Identify the Need\nAsk the user:\n1. What event should trigger the hook?\n2. What validation or action is needed?\n3. Should it block, warn, or just log?\n4. What tools or operations need monitoring?\n\n### Step 2: Choose Event and Matcher\n- **PreToolUse**: Validate before execution\n- **PostToolUse**: Process after execution\n- **UserPromptSubmit**: Analyze prompts\n- **SessionStart**: Initialize environment\n- **Stop**: Cleanup or summary\n\n### Step 3: Design the Hook Logic\n- Write bash script for the hook\n- Define input parameters\n- Plan return JSON structure\n- Handle error cases\n- Test security\n\n### Step 4: Create hooks.json\n```json\n{\n  \"hooks\": {\n    \"EventName\": [\n      {\n        \"matcher\": \"ToolPattern\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash \u002Fpath\u002Fto\u002Fscript.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n### Step 5: Implement Hook Script\n- Accept appropriate input parameters\n- Validate inputs\n- Perform check or action\n- Return JSON with decision\n- Use appropriate exit code\n\n### Step 6: Test the Hook\n- Place hooks.json in `.claude\u002F`\n- Trigger the event\n- Verify hook executes correctly\n- Check blocking\u002Fapproving works\n- Test error handling\n\n## Validation Script\n\nThis skill includes a validation script:\n\n### validate-hooks.py - Schema Validator\n\nPython script for validating hooks.json files.\n\n**Usage:**\n```bash\npython3 {baseDir}\u002Fscripts\u002Fvalidate-hooks.py \u003Chooks.json>\n```\n\n**What It Checks:**\n- JSON syntax validity\n- Event name validity (PreToolUse, PostToolUse, etc.)\n- Matcher requirements (tool events need matchers)\n- Hook type validity (command, prompt)\n- Script existence (referenced scripts exist)\n- Security patterns (dangerous commands, injection risks)\n\n**Returns:**\n- Exit code 0 if valid\n- Exit code 1 with error messages if invalid\n\n**Example:**\n```bash\npython3 validate-hooks.py .claude\u002Fhooks.json\n\n✅ Hooks validation passed\n   Events configured: PreToolUse, PostToolUse\n   Total hooks: 3\n   Scripts verified: 2\n```\n\n## Hook Script Best Practices\n\n### Input Parameters\n\nHooks receive context as arguments:\n\n**PreToolUse \u002F PostToolUse**:\n- `$1`: Tool name\n- `$2`: Tool parameters (JSON)\n- Environment variables with tool details\n\n**UserPromptSubmit**:\n- `$1`: User prompt text\n\n**Other events**:\n- Event-specific parameters\n\n### Return JSON Format\n\nAlways return well-formed JSON:\n\n```bash\n#!\u002Fbin\u002Fbash\n\n# Success\necho '{\"decision\": \"approve\", \"reason\": \"Validation passed\"}'\nexit 0\n\n# Block\necho '{\"decision\": \"block\", \"reason\": \"Security violation detected\"}'\nexit 2\n\n# Warn\necho '{\"decision\": \"warn\", \"reason\": \"Unusual pattern detected\"}'\nexit 0\n```\n\n### Error Handling\n\n```bash\n#!\u002Fbin\u002Fbash\n\nif [ $# -lt 1 ]; then\n  echo '{\"decision\": \"block\", \"reason\": \"Missing required arguments\"}' >&2\n  exit 2\nfi\n\n# Validate input\nif ! validate_input \"$1\"; then\n  echo '{\"decision\": \"block\", \"reason\": \"Invalid input\"}' >&2\n  exit 2\nfi\n\n# Normal processing\necho '{\"decision\": \"approve\"}'\nexit 0\n```\n\n## Security Considerations\n\nWhen creating hooks:\n\n1. **Validate All Inputs**: Never trust data from tool parameters\n2. **Avoid Command Injection**: Sanitize strings used in shell commands\n3. **Check Exit Codes**: Use appropriate codes (0, 2)\n4. **Limit Permissions**: Run with minimal necessary privileges\n5. **Log Security Events**: Audit sensitive operations\n6. **Test Thoroughly**: Try to bypass your own hooks\n\n### Security Anti-Patterns\n\n**Bad** (Command Injection):\n```bash\neval \"$1\"  # NEVER DO THIS\n```\n\n**Good** (Safe Validation):\n```bash\nif [[ \"$1\" =~ ^[a-zA-Z0-9_\u002F-]+$ ]]; then\n  # Process sanitized input\nfi\n```\n\n## Validation Checklist\n\nBefore deploying hooks, verify:\n\n- [ ] hooks.json has valid JSON syntax\n- [ ] Event names are correct\n- [ ] Matchers are properly escaped (use \\| for regex OR)\n- [ ] Hook scripts exist and are executable\n- [ ] Scripts accept correct input parameters\n- [ ] Scripts return valid JSON\n- [ ] Exit codes are appropriate (0 or 2)\n- [ ] Security validation is thorough\n- [ ] Error cases are handled\n- [ ] Hooks don't create infinite loops\n\n## Reference Templates\n\nFull templates and examples are available at:\n- `{baseDir}\u002Ftemplates\u002Fhooks-template.json` - Basic hooks configuration\n- `{baseDir}\u002Ftemplates\u002Fvalidation-script.sh` - Validation hook script\n- `{baseDir}\u002Ftemplates\u002Fformatting-script.sh` - Formatting hook script\n- `{baseDir}\u002Freferences\u002Fhook-examples.md` - Real-world examples\n\n## Complete Example: Protected Directories\n\n**hooks.json**:\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash ~\u002F.claude\u002Fhooks\u002Fprotect-dirs.sh\"\n          }\n        ]\n      }\n    ],\n    \"PostToolUse\": [\n      {\n        \"matcher\": \"Write|Edit\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"bash ~\u002F.claude\u002Fhooks\u002Fauto-format.sh\"\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n**protect-dirs.sh**:\n```bash\n#!\u002Fbin\u002Fbash\nTOOL_NAME=\"$1\"\nFILE_PATH=\"$2\"\n\nPROTECTED_DIRS=(\"\u002Fetc\" \"\u002Fusr\" \"\u002Fsys\" \"\u002Fprotected\")\n\nfor dir in \"${PROTECTED_DIRS[@]}\"; do\n  if [[ \"$FILE_PATH\" == $dir\u002F* ]]; then\n    echo \"{\\\"decision\\\": \\\"block\\\", \\\"reason\\\": \\\"Cannot modify protected directory: $dir\\\"}\"\n    exit 2\n  fi\ndone\n\necho '{\"decision\": \"approve\"}'\nexit 0\n```\n\n**auto-format.sh**:\n```bash\n#!\u002Fbin\u002Fbash\nFILE_PATH=\"$2\"\n\nif [[ \"$FILE_PATH\" == *.py ]]; then\n  black --quiet \"$FILE_PATH\" 2>\u002Fdev\u002Fnull\nelif [[ \"$FILE_PATH\" == *.js ]] || [[ \"$FILE_PATH\" == *.ts ]]; then\n  prettier --write \"$FILE_PATH\" > \u002Fdev\u002Fnull 2>&1\nfi\n\necho '{\"decision\": \"approve\", \"reason\": \"File formatted\"}'\nexit 0\n```\n\n## Your Role\n\nWhen the user asks to create hooks:\n\n1. Understand what behavior needs automation or validation\n2. Recommend appropriate event and matcher\n3. Design hook logic with security in mind\n4. Generate hooks.json configuration\n5. Create hook scripts with proper structure\n6. Validate JSON syntax and script logic\n7. Make scripts executable\n8. Provide testing instructions\n\nBe proactive in:\n- Identifying security risks\n- Recommending appropriate events\n- Creating robust validation logic\n- Writing defensive hook scripts\n- Testing edge cases and error conditions\n\nYour goal is to help users create secure, reliable event hooks that automate workflows and enforce policies effectively.\n\n## Maintaining and Updating Hooks\n\nHooks are security-critical infrastructure and need ongoing maintenance.\n\n### Security-First Principles\n\n1. **Never Trust Input**: All parameters are potentially malicious\n   ```bash\n   # WRONG\n   eval \"$1\"\n\n   # RIGHT\n   if [[ \"$1\" =~ ^[a-zA-Z0-9_\u002F-]+$ ]]; then\n       # Safe to use\n   fi\n   ```\n\n2. **Validate Everything**: Check parameters, paths, commands\n   ```bash\n   set -euo pipefail  # Strict error handling\n   [[ ! \"$PATH\" =~ \\.\\. ]]  # No directory traversal\n   ```\n\n3. **Use Safe Defaults**: Block by default, approve explicitly\n   ```bash\n   echo '{\"decision\": \"block\", \"reason\": \"Validation failed\"}' >&2\n   exit 2\n   ```\n\n4. **Block Dangerous Patterns**:\n   - `eval`, command substitution without validation\n   - `rm -rf \u002F`, `dd if=`, `mkfs`\n   - Piping wget\u002Fcurl to bash\n   - Overly permissive permissions (chmod 777)\n\n### Maintenance Checklist\n\nWhen reviewing hooks for updates:\n\n- [ ] **JSON syntax valid**: Valid JSON structure\n- [ ] **Event names correct**: PreToolUse, PostToolUse, etc.\n- [ ] **Matchers appropriate**: Specific tools, not wildcards\n- [ ] **Scripts exist**: Referenced scripts are present\n- [ ] **Scripts executable**: chmod +x on script files\n- [ ] **Input validation**: Scripts validate parameters\n- [ ] **No dangerous patterns**: No eval, rm -rf, etc.\n\n### Common Maintenance Scenarios\n\n#### Scenario 1: Hook Script Not Executing\n\n**Problem**: Hook script not running when expected\n**Solutions**:\n- Verify script exists at the path specified\n- Make script executable: `chmod +x script.sh`\n- Check hook event name matches expected trigger\n- Verify matcher pattern matches the tool\n\n#### Scenario 2: Security Hardening\n\n**Problem**: Hook lacks input validation\n**Solution**: Add parameter validation at start of script:\n```bash\n#!\u002Fbin\u002Fbash\nset -euo pipefail\n\n# Validate input\nif [[ ! \"$1\" =~ ^[a-zA-Z0-9_\u002F-]+$ ]]; then\n    echo '{\"decision\": \"block\", \"reason\": \"Invalid input\"}'\n    exit 2\nfi\n```\n\n#### Scenario 3: Change Hook Event\n\n**Problem**: Need to move from PostToolUse to PreToolUse\n**Solution**: Edit hooks.json to change the event key:\n```json\n{\n  \"hooks\": {\n    \"PreToolUse\": [...]  \u002F\u002F Changed from PostToolUse\n  }\n}\n```\n\n### Best Practices\n\n1. **Use specific matchers**: `\"Write|Edit\"` instead of `\"*\"`\n2. **Validate all inputs**: Never trust parameters\n3. **Use absolute paths**: For script references\n4. **Log security events**: Audit sensitive operations\n5. **Test thoroughly**: Try to bypass your own hooks\n6. **Backup before changes**: Keep original hooks.json\n7. **Version control**: Commit hooks.json changes\n",{"name":5,"version":49,"description":7,"allowed-tools":50},"2.0.0","Read, Write, Edit, Grep, Glob, Bash","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fc0ntr0lledcha0s\u002Fbuilding-hooks",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill building-hooks",{"tool":66,"command":67},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill building-hooks",{"tool":69,"command":70},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill building-hooks","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fc0ntr0lledcha0s\u002Fbuilding-hooks\u002FSKILL.md",true,[74,80,84,90,94,98],{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Fhook-checklist.md","REFERENCE","参考文档",8757,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fc0ntr0lledcha0s\u002Fbuilding-hooks\u002Freferences\u002Fhook-checklist.md",{"path":81,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fhook-maintenance-guide.md",10352,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fc0ntr0lledcha0s\u002Fbuilding-hooks\u002Freferences\u002Fhook-maintenance-guide.md",{"path":85,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":88,"sourceHtmlUrl":89},"scripts\u002Fvalidate-hooks.py","SCRIPT","脚本",7485,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fc0ntr0lledcha0s\u002Fbuilding-hooks\u002Fscripts\u002Fvalidate-hooks.py",{"path":91,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":92,"sourceHtmlUrl":93},"skill-report.json",44878,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fc0ntr0lledcha0s\u002Fbuilding-hooks\u002Fskill-report.json",{"path":95,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":96,"sourceHtmlUrl":97},"templates\u002Fhooks-template.json",1360,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fc0ntr0lledcha0s\u002Fbuilding-hooks\u002Ftemplates\u002Fhooks-template.json",{"path":99,"resourceType":86,"resourceTypeDesc":87,"sizeBytes":100,"sourceHtmlUrl":101},"templates\u002Fvalidation-hook.sh",2108,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fc0ntr0lledcha0s\u002Fbuilding-hooks\u002Ftemplates\u002Fvalidation-hook.sh",[103,113,123,132,138,145],{"skillNo":104,"name":105,"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":106,"categories":107,"keywords":109,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[108],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[110,111,112],"model","model hierarchy","model hierarchy skill",{"skillNo":114,"name":115,"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":116,"categories":117,"keywords":119,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[118],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[120,121,122],"MCP","zoom","zoom mcp",{"skillNo":124,"name":125,"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":126,"categories":127,"keywords":128,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[129,130,131,121],"sdk","zoom apps sdk","apps",{"skillNo":133,"name":134,"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":135,"categories":136,"keywords":137,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[134],{"skillNo":139,"name":140,"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":141,"categories":142,"keywords":144,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[143],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[140],{"skillNo":146,"name":147,"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":148,"categories":149,"keywords":150,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[147]]