[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6C63XTY68YC9VCSXC9V9QCV":3,"skill-same:01M6C63XTY68YC9VCSXC9V9QCV":99},{"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":28,"publishedAt":50,"linkOnly":51,"markdownContent":52,"markdownBody":53,"frontMatter":54,"refName":59,"commitSha":60,"skillDirectory":61,"forksCount":62,"repositoryHtmlUrl":63,"repositoryHomepageUrl":6,"ownerHtmlUrl":64,"ownerBlogUrl":6,"ownerDescription":65,"updatedAt":66,"install":67,"resources":80},"01M6C63XTY68YC9VCSXC9V9QCV","hooks-configuration",null,"Claude Code hooks configuration and development. Use when the user mentions hooks, PreToolUse, PostToolUse, SessionStart, SubagentStart, PermissionRequest, or TaskCompleted.","laurigates\u002Fclaude-plugins","laurigates","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13014001?v=4","01M6C59YHWS9C7KMXKSRX1YXNP","Lauri Gates","01M6C59YP2APG9YAM4DWYQYGFJ",59,"MIT","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fhooks-plugin\u002Fskills\u002Fhooks-configuration\u002FSKILL.md",[18,23],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"hooks configuration","hooks","configuration","claude-code","wed","2026","when","cat","false","2025","sep","user","code","Bash","use","claude code hooks","grep","edit","write","read","development","2026-11-10 10:12:30",false,"---\nname: hooks-configuration\ndescription: Claude Code hooks configuration and development. Use when the user mentions hooks, PreToolUse, PostToolUse, SessionStart, SubagentStart, PermissionRequest, or TaskCompleted.\nuser-invocable: false\nallowed-tools: Bash(bash *), Bash(cat *), Read, Write, Edit, Glob, Grep, TodoWrite\ncreated: 2025-12-16\nmodified: 2026-11-11\ncompatibility: claude-code\nreviewed: 2026-09-02\n---\n\n# Claude Code Hooks Configuration\n\nExpert knowledge for configuring and developing Claude Code hooks to automate workflows and enforce best practices.\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|------------------------|---------------------------|\n| Configuring hook lifecycle events (PreToolUse, PostToolUse, etc.) | Writing general shell scripts unrelated to hooks |\n| Blocking dangerous commands or enforcing patterns | Setting up CI\u002FCD pipelines (use CI tooling) |\n| Auto-formatting files after edits | Configuring Claude Code settings unrelated to hooks |\n| Injecting context at session or subagent start | Writing standalone automation scripts |\n| Setting up PermissionRequest auto-approve\u002Fdeny | Managing project permissions via settings.json directly |\n| Developing prompt or agent hooks for judgment-based decisions | Building MCP servers or custom tool integrations |\n\n## Core Concepts\n\n**What Are Hooks?**\nHooks are user-defined shell commands that execute at specific points in Claude Code's lifecycle. Unlike relying on Claude to \"decide\" to run something, hooks provide **deterministic, guaranteed execution**.\n\n**Why Use Hooks?**\n\n- Enforce code formatting automatically\n- Block dangerous commands before execution\n- Inject context at session start\n- Log commands for audit trails\n- Send notifications when tasks complete\n\n## Hook Lifecycle Events\n\n| Event                  | When It Fires                              | Key Use Cases                              |\n| ---------------------- | ------------------------------------------ | ------------------------------------------ |\n| **SessionStart**       | Session begins\u002Fresumes                     | Environment setup, context loading         |\n| **SessionEnd**         | Session terminates                         | Cleanup, state persistence                 |\n| **UserPromptSubmit**   | User submits prompt                        | Input validation, context injection        |\n| **UserPromptExpansion** | A typed skill\u002Fcommand\u002FMCP prompt expands, before it reaches Claude | Block a command, inject skill-specific context, log invocations |\n| **PreToolUse**         | Before tool execution                      | Permission control, blocking dangerous ops |\n| **PostToolUse**        | After tool completes                       | Auto-formatting, logging, validation       |\n| **PostToolUseFailure** | After tool execution fails                 | Retry decisions, error handling            |\n| **PermissionRequest**  | Claude requests permission for a tool      | Auto approve\u002Fdeny without user prompt      |\n| **PermissionDenied**   | Auto mode denies a tool call               | Audit denials, tell the model it may retry (`retry: true`) |\n| **PostToolBatch**      | A batch of parallel tool calls has resolved, before the next model call | Inject context once per batch, stop the loop |\n| **Stop**               | **Main agent** finishes responding         | Notifications, git reminders               |\n| **SubagentStart**      | Subagent (Task tool) is about to start     | Input modification, context injection      |\n| **SubagentStop**       | **Subagent** finishes                      | Per-task completion evaluation             |\n| **WorktreeCreate**     | New git worktree created via EnterWorktree | Worktree setup, dependency install         |\n| **WorktreeRemove**     | Worktree removed after session exits       | Cleanup, uncommitted changes alert         |\n| **TeammateIdle**       | Teammate in agent team goes idle           | Assign additional tasks to teammate        |\n| **TaskCompleted**      | Task in shared task list marked complete   | Validation gates before task acceptance    |\n| **PreCompact**         | Before context compaction                  | Transcript backup                          |\n| **Notification**       | Claude sends notification                  | Custom alerts                              |\n| **ConfigChange**       | Claude Code settings change at runtime     | Audit config changes, validation           |\n| **PreModelSwitch**     | Before the session model changes (`\u002Fmodel`, `fallbackModel`, safety-classifier fallback) | Audit or record the outgoing model |\n| **PostModelSwitch**    | After the session model has changed        | Re-apply per-model settings, log the new model |\n\n> **Stop vs SubagentStop**: `Stop` fires at the session level when the main agent finishes a response turn. `SubagentStop` fires when an individual subagent (spawned via the Task tool) completes. Use `Stop` for session-level notifications; use `SubagentStop` for per-task quality gates.\n\nFor full schemas, examples, and timeout recommendations for each event, see [.claude\u002Frules\u002Fhooks-reference.md](..\u002F..\u002F..\u002F.claude\u002Frules\u002Fhooks-reference.md).\n\n## Configuration\n\n### File Locations\n\nHooks are configured in settings files:\n\n- **`~\u002F.claude\u002Fsettings.json`** - User-level (applies everywhere)\n- **`.claude\u002Fsettings.json`** - Project-level (committed to repo)\n- **`.claude\u002Fsettings.local.json`** - Local project (not committed)\n\nClaude Code merges all matching hooks from all files.\n\n### Frontmatter Hooks (Skills and Commands)\n\nHooks can also be defined directly in skill and command frontmatter using the `hooks` field:\n\nExample frontmatter: [references\u002Ffrontmatter-hooks.md](references\u002Ffrontmatter-hooks.md).\n\n### Basic Structure\n\n```json\n{\n  \"hooks\": {\n    \"EventName\": [\n      {\n        \"matcher\": \"ToolPattern\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"your-command-here\",\n            \"timeout\": 30\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n### Matcher Patterns\n\n- **Exact match**: `\"Bash\"` - matches exactly \"Bash\" tool\n- **Regex patterns**: `\"Edit|Write\"` - matches either tool\n- **Wildcards**: `\"Notebook.*\"` - matches tools starting with \"Notebook\"\n- **All tools**: `\"*\"` - matches everything\n- **MCP tools**: `\"mcp__server__tool\"` - targets MCP server tools\n\n## Input\u002FOutput Schema Summary\n\nHooks receive JSON via stdin with common fields (`session_id`, `transcript_path`, `cwd`, `permission_mode`, `hook_event_name`). Event-specific fields include `tool_name` and `tool_input` for PreToolUse, plus `tool_response` for PostToolUse, and `subagent_type`\u002F`subagent_prompt` for SubagentStart.\n\n**Exit codes**: 0 = allow, 2 = block (stderr shown to Claude), other = non-blocking error.\n\n**JSON responses** vary by event: PreToolUse uses `hookSpecificOutput` with `permissionDecision`; Stop\u002FSubagentStop use `decision`\u002F`reason`; SubagentStart uses `updatedPrompt`; SessionStart uses `hookSpecificOutput` with `additionalContext`.\n\nFor detailed hook schemas and examples, see [REFERENCE.md](REFERENCE.md).\n\n## Common Hook Patterns\n\nWorked scripts (block dangerous commands, auto-format after edits, tool reminders, SessionStart context): [references\u002Fhook-patterns.md](references\u002Fhook-patterns.md).\n\nFor additional patterns (subagent injection, desktop notifications, audit logging, auto-approve, worktree setup, task gating), see [REFERENCE.md](REFERENCE.md).\n\n## Prompt-Based and Agent-Based Hooks\n\nFour hook types: `command` (shell script, exit code), `http` (HTTPS endpoint), `prompt` (single-turn LLM call), and `agent` (multi-turn with tool access). Use `command` for deterministic rules; `prompt`\u002F`agent` for judgment-based decisions. Add `async: true` for fire-and-forget; `once: true` to run only once per session.\n\nPrompt and agent hooks work on `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `Stop`, `SubagentStop`, `TaskCompleted`, `UserPromptSubmit`. All other events support `command` hooks only.\n\nFor hook type details, `CLAUDE_ENV_FILE`, and configuration examples, see [REFERENCE.md](REFERENCE.md) and [.claude\u002Frules\u002Fprompt-agent-hooks.md](..\u002F..\u002F..\u002F.claude\u002Frules\u002Fprompt-agent-hooks.md).\n\n## Handling Blocked Commands\n\nWhen a PreToolUse hook blocks a command:\n\n| Situation                 | Action                                                           |\n| ------------------------- | ---------------------------------------------------------------- |\n| Hook suggests alternative | Use the suggested tool\u002Fapproach                                  |\n| Alternative won't work    | Ask user to run command manually                                 |\n| User says \"proceed\"       | Still blocked - explain and provide command for manual execution |\n\n**Critical**: User permission does NOT bypass hooks. Retrying a blocked command will fail again.\n\n**When command is legitimately needed:**\n\n1. Explain why the command is required\n2. Describe alternatives considered and why they won't work\n3. Provide exact command for user to run manually\n4. Let user decide\n\n## Timeout Guidelines\n\nThe default hook timeout is 600s (10 minutes) since Claude Code 2.1.50. Set explicit timeouts to document intent and prevent \"Hook cancelled\" errors:\n\n| Hook Type | Recommended Timeout | Use Case |\n|-----------|---------------------|----------|\n| SessionStart | 120–300s | Tests, linters, dependency checks |\n| SessionEnd | 60–120s | Logging, cleanup, state saving |\n| Stop \u002F SubagentStop | 30–60s | Git status checks, quick validations |\n| PreToolUse | 10–30s | Quick validations |\n| PostToolUse | 30–120s | Logging, notifications |\n| PermissionRequest | 5–15s | Keep fast for good UX |\n\nFor slow work, run it in a background subshell: [references\u002Fhook-patterns.md](references\u002Fhook-patterns.md#background-subshell-pattern-recommended-for-slow-hooks).\n\n## Best Practices\n\n| Area | Key Points |\n|------|------------|\n| Script | Read stdin with `cat`; parse with `jq`; quote all vars; exit 2 to block, 0 to allow; stderr for messages; keep \u003C 5s |\n| Config | `$CLAUDE_PROJECT_DIR` for portable paths; explicit timeouts; specific matchers over wildcards; test before enabling |\n| Security | Validate all inputs; use absolute paths; avoid `.env` \u002F `.git\u002F` directly; review before deploy |\n\n## Debugging\n\nHook cancelled, failing, or not firing: [references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md).\n\n","# Claude Code Hooks Configuration\n\nExpert knowledge for configuring and developing Claude Code hooks to automate workflows and enforce best practices.\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|------------------------|---------------------------|\n| Configuring hook lifecycle events (PreToolUse, PostToolUse, etc.) | Writing general shell scripts unrelated to hooks |\n| Blocking dangerous commands or enforcing patterns | Setting up CI\u002FCD pipelines (use CI tooling) |\n| Auto-formatting files after edits | Configuring Claude Code settings unrelated to hooks |\n| Injecting context at session or subagent start | Writing standalone automation scripts |\n| Setting up PermissionRequest auto-approve\u002Fdeny | Managing project permissions via settings.json directly |\n| Developing prompt or agent hooks for judgment-based decisions | Building MCP servers or custom tool integrations |\n\n## Core Concepts\n\n**What Are Hooks?**\nHooks are user-defined shell commands that execute at specific points in Claude Code's lifecycle. Unlike relying on Claude to \"decide\" to run something, hooks provide **deterministic, guaranteed execution**.\n\n**Why Use Hooks?**\n\n- Enforce code formatting automatically\n- Block dangerous commands before execution\n- Inject context at session start\n- Log commands for audit trails\n- Send notifications when tasks complete\n\n## Hook Lifecycle Events\n\n| Event                  | When It Fires                              | Key Use Cases                              |\n| ---------------------- | ------------------------------------------ | ------------------------------------------ |\n| **SessionStart**       | Session begins\u002Fresumes                     | Environment setup, context loading         |\n| **SessionEnd**         | Session terminates                         | Cleanup, state persistence                 |\n| **UserPromptSubmit**   | User submits prompt                        | Input validation, context injection        |\n| **UserPromptExpansion** | A typed skill\u002Fcommand\u002FMCP prompt expands, before it reaches Claude | Block a command, inject skill-specific context, log invocations |\n| **PreToolUse**         | Before tool execution                      | Permission control, blocking dangerous ops |\n| **PostToolUse**        | After tool completes                       | Auto-formatting, logging, validation       |\n| **PostToolUseFailure** | After tool execution fails                 | Retry decisions, error handling            |\n| **PermissionRequest**  | Claude requests permission for a tool      | Auto approve\u002Fdeny without user prompt      |\n| **PermissionDenied**   | Auto mode denies a tool call               | Audit denials, tell the model it may retry (`retry: true`) |\n| **PostToolBatch**      | A batch of parallel tool calls has resolved, before the next model call | Inject context once per batch, stop the loop |\n| **Stop**               | **Main agent** finishes responding         | Notifications, git reminders               |\n| **SubagentStart**      | Subagent (Task tool) is about to start     | Input modification, context injection      |\n| **SubagentStop**       | **Subagent** finishes                      | Per-task completion evaluation             |\n| **WorktreeCreate**     | New git worktree created via EnterWorktree | Worktree setup, dependency install         |\n| **WorktreeRemove**     | Worktree removed after session exits       | Cleanup, uncommitted changes alert         |\n| **TeammateIdle**       | Teammate in agent team goes idle           | Assign additional tasks to teammate        |\n| **TaskCompleted**      | Task in shared task list marked complete   | Validation gates before task acceptance    |\n| **PreCompact**         | Before context compaction                  | Transcript backup                          |\n| **Notification**       | Claude sends notification                  | Custom alerts                              |\n| **ConfigChange**       | Claude Code settings change at runtime     | Audit config changes, validation           |\n| **PreModelSwitch**     | Before the session model changes (`\u002Fmodel`, `fallbackModel`, safety-classifier fallback) | Audit or record the outgoing model |\n| **PostModelSwitch**    | After the session model has changed        | Re-apply per-model settings, log the new model |\n\n> **Stop vs SubagentStop**: `Stop` fires at the session level when the main agent finishes a response turn. `SubagentStop` fires when an individual subagent (spawned via the Task tool) completes. Use `Stop` for session-level notifications; use `SubagentStop` for per-task quality gates.\n\nFor full schemas, examples, and timeout recommendations for each event, see [.claude\u002Frules\u002Fhooks-reference.md](..\u002F..\u002F..\u002F.claude\u002Frules\u002Fhooks-reference.md).\n\n## Configuration\n\n### File Locations\n\nHooks are configured in settings files:\n\n- **`~\u002F.claude\u002Fsettings.json`** - User-level (applies everywhere)\n- **`.claude\u002Fsettings.json`** - Project-level (committed to repo)\n- **`.claude\u002Fsettings.local.json`** - Local project (not committed)\n\nClaude Code merges all matching hooks from all files.\n\n### Frontmatter Hooks (Skills and Commands)\n\nHooks can also be defined directly in skill and command frontmatter using the `hooks` field:\n\nExample frontmatter: [references\u002Ffrontmatter-hooks.md](references\u002Ffrontmatter-hooks.md).\n\n### Basic Structure\n\n```json\n{\n  \"hooks\": {\n    \"EventName\": [\n      {\n        \"matcher\": \"ToolPattern\",\n        \"hooks\": [\n          {\n            \"type\": \"command\",\n            \"command\": \"your-command-here\",\n            \"timeout\": 30\n          }\n        ]\n      }\n    ]\n  }\n}\n```\n\n### Matcher Patterns\n\n- **Exact match**: `\"Bash\"` - matches exactly \"Bash\" tool\n- **Regex patterns**: `\"Edit|Write\"` - matches either tool\n- **Wildcards**: `\"Notebook.*\"` - matches tools starting with \"Notebook\"\n- **All tools**: `\"*\"` - matches everything\n- **MCP tools**: `\"mcp__server__tool\"` - targets MCP server tools\n\n## Input\u002FOutput Schema Summary\n\nHooks receive JSON via stdin with common fields (`session_id`, `transcript_path`, `cwd`, `permission_mode`, `hook_event_name`). Event-specific fields include `tool_name` and `tool_input` for PreToolUse, plus `tool_response` for PostToolUse, and `subagent_type`\u002F`subagent_prompt` for SubagentStart.\n\n**Exit codes**: 0 = allow, 2 = block (stderr shown to Claude), other = non-blocking error.\n\n**JSON responses** vary by event: PreToolUse uses `hookSpecificOutput` with `permissionDecision`; Stop\u002FSubagentStop use `decision`\u002F`reason`; SubagentStart uses `updatedPrompt`; SessionStart uses `hookSpecificOutput` with `additionalContext`.\n\nFor detailed hook schemas and examples, see [REFERENCE.md](REFERENCE.md).\n\n## Common Hook Patterns\n\nWorked scripts (block dangerous commands, auto-format after edits, tool reminders, SessionStart context): [references\u002Fhook-patterns.md](references\u002Fhook-patterns.md).\n\nFor additional patterns (subagent injection, desktop notifications, audit logging, auto-approve, worktree setup, task gating), see [REFERENCE.md](REFERENCE.md).\n\n## Prompt-Based and Agent-Based Hooks\n\nFour hook types: `command` (shell script, exit code), `http` (HTTPS endpoint), `prompt` (single-turn LLM call), and `agent` (multi-turn with tool access). Use `command` for deterministic rules; `prompt`\u002F`agent` for judgment-based decisions. Add `async: true` for fire-and-forget; `once: true` to run only once per session.\n\nPrompt and agent hooks work on `PreToolUse`, `PostToolUse`, `PostToolUseFailure`, `PermissionRequest`, `Stop`, `SubagentStop`, `TaskCompleted`, `UserPromptSubmit`. All other events support `command` hooks only.\n\nFor hook type details, `CLAUDE_ENV_FILE`, and configuration examples, see [REFERENCE.md](REFERENCE.md) and [.claude\u002Frules\u002Fprompt-agent-hooks.md](..\u002F..\u002F..\u002F.claude\u002Frules\u002Fprompt-agent-hooks.md).\n\n## Handling Blocked Commands\n\nWhen a PreToolUse hook blocks a command:\n\n| Situation                 | Action                                                           |\n| ------------------------- | ---------------------------------------------------------------- |\n| Hook suggests alternative | Use the suggested tool\u002Fapproach                                  |\n| Alternative won't work    | Ask user to run command manually                                 |\n| User says \"proceed\"       | Still blocked - explain and provide command for manual execution |\n\n**Critical**: User permission does NOT bypass hooks. Retrying a blocked command will fail again.\n\n**When command is legitimately needed:**\n\n1. Explain why the command is required\n2. Describe alternatives considered and why they won't work\n3. Provide exact command for user to run manually\n4. Let user decide\n\n## Timeout Guidelines\n\nThe default hook timeout is 600s (10 minutes) since Claude Code 2.1.50. Set explicit timeouts to document intent and prevent \"Hook cancelled\" errors:\n\n| Hook Type | Recommended Timeout | Use Case |\n|-----------|---------------------|----------|\n| SessionStart | 120–300s | Tests, linters, dependency checks |\n| SessionEnd | 60–120s | Logging, cleanup, state saving |\n| Stop \u002F SubagentStop | 30–60s | Git status checks, quick validations |\n| PreToolUse | 10–30s | Quick validations |\n| PostToolUse | 30–120s | Logging, notifications |\n| PermissionRequest | 5–15s | Keep fast for good UX |\n\nFor slow work, run it in a background subshell: [references\u002Fhook-patterns.md](references\u002Fhook-patterns.md#background-subshell-pattern-recommended-for-slow-hooks).\n\n## Best Practices\n\n| Area | Key Points |\n|------|------------|\n| Script | Read stdin with `cat`; parse with `jq`; quote all vars; exit 2 to block, 0 to allow; stderr for messages; keep \u003C 5s |\n| Config | `$CLAUDE_PROJECT_DIR` for portable paths; explicit timeouts; specific matchers over wildcards; test before enabling |\n| Security | Validate all inputs; use absolute paths; avoid `.env` \u002F `.git\u002F` directly; review before deploy |\n\n## Debugging\n\nHook cancelled, failing, or not firing: [references\u002Ftroubleshooting.md](references\u002Ftroubleshooting.md).\n\n",{"name":5,"created":55,"modified":56,"reviewed":57,"description":7,"allowed-tools":58,"compatibility":32,"user-invocable":51},1765843200000,1794355200000,1788307200000,"Bash(bash *), Bash(cat *), Read, Write, Edit, Glob, Grep, TodoWrite","main","34a98323c28903fa045a495d64f8600467050ed5","hooks-plugin\u002Fskills\u002Fhooks-configuration",6,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins","https:\u002F\u002Fgithub.com\u002Flaurigates","Linux enthusiast, cloud engineer, neovim addict, electronics hobbyist.","2026-11-12 03:43:32",{"source":8,"skillName":5,"commands":68,"prompt":78,"zipAvailable":79},[69,72,75],{"tool":70,"command":71},"npx","npx skills add laurigates\u002Fclaude-plugins --skill hooks-configuration",{"tool":73,"command":74},"bunx","bunx skills add laurigates\u002Fclaude-plugins --skill hooks-configuration",{"tool":76,"command":77},"pnpm","pnpm dlx skills add laurigates\u002Fclaude-plugins --skill hooks-configuration","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fhooks-plugin\u002Fskills\u002Fhooks-configuration\u002FSKILL.md",true,[81,87,91,95],{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"REFERENCE.md","REFERENCE","参考文档",8017,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fhooks-plugin\u002Fskills\u002Fhooks-configuration\u002FREFERENCE.md",{"path":88,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":89,"sourceHtmlUrl":90},"references\u002Ffrontmatter-hooks.md",277,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fhooks-plugin\u002Fskills\u002Fhooks-configuration\u002Freferences\u002Ffrontmatter-hooks.md",{"path":92,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":93,"sourceHtmlUrl":94},"references\u002Fhook-patterns.md",1919,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fhooks-plugin\u002Fskills\u002Fhooks-configuration\u002Freferences\u002Fhook-patterns.md",{"path":96,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":97,"sourceHtmlUrl":98},"references\u002Ftroubleshooting.md",646,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fhooks-plugin\u002Fskills\u002Fhooks-configuration\u002Freferences\u002Ftroubleshooting.md",[100,125,143,159,182,208],{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":109,"publishedAt":50},"01M70PFHMH9ADY0CRE6047Y4B2","kitty-show-image","Show the user an image with a note on what to judge, via a file send or a labelled kitty tab. Use when the user must see an image, or icat fails with no \u002Fdev\u002Ftty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002FSKILL.md",[106],{"categoryNo":107,"categoryName":108,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[110,111,112,113,114,115,116,117,118,119,43,35,42,120,121,122,123,124,34,48],"show","kitty show image","image","kitty","show image","ls","get","send","open","dev","file","text","with","xdg","via",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":50},"01M70PFEN18HKQ4RCQ1VPGMPTB","kitty-session-persistence","Snapshot and restore kitty terminal sessions on macOS. Use when surviving WindowServer hangs without losing tabs, configuring snapshots, or restoring after a force-reboot.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-session-persistence\u002FSKILL.md",[],[113,132,133,134,37,135,35,42,136,137,138,34,48,47,46,139,140,141,142,43],"kitty session persistence","session","persistence","snapshots","uname","reboot","terminal","snapshot","macos","sessions","restore",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":50},"01M70PFC77XGXCVQ1543VGZHYR","kitty-remote-control","Safe kitty remote control from an agent — read panes with kitty @ ls\u002Fget-text, notify, and never mutate the live terminal unasked. Use when running inside kitty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-remote-control\u002FSKILL.md",[],[150,151,113,152,153,115,154,155,116,156,157,43,35,158,42,121,122,138,34,48],"kitty remote control","remote","control","remote control","running","never","panes","notify","query",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":165,"publishedAt":50},"01M70P6WVMCT5JG4SACTM69AF9","docs-reference-check","Dangling doc-reference gate: flag markdown naming repo paths or relative links that no longer exist. Use when docs cite moved\u002Fdeleted files, or wiring a doc-drift lint.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fdocumentation-plugin\u002Fskills\u002Fdocs-reference-check\u002FSKILL.md",[],[166,167,168,169,170,171,172,173,174,175,43,35,42,176,120,177,178,179,180,181],"docs reference check","check","reference check","reference","docs","links","python3","repo","files","auto","drift","lint","wiring","chezmoi","references","cp",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":193,"publishedAt":50},"01M6C6NDE7DAQGNWSF22J5CJ0Z","youtube-upload","Upload a video to YouTube via the Data API v3 and edit its title, description, tags or thumbnail afterwards. Use when publishing or retitling a YouTube video.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-upload\u002FSKILL.md",[188,191,192],{"categoryNo":189,"categoryName":190,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":107,"categoryName":108,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":26,"taxonomyTypeDesc":27},[194,195,196,197,172,198,48,199,46,200,201,202,43,42,120,203,204,35,205,206,207,124,34],"youtube upload","upload","youtube","Video","run","uv run","publishing","data","uv","api","v3","tags","id","title",{"skillNo":209,"name":210,"nameZh":6,"description":211,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":212,"categories":213,"keywords":215,"publishedAt":50},"01M6C6NABWW1X58KJJM4F6GQMQ","youtube-studio-share","Share a private YouTube video with a whole Google Workspace organization by scripting YouTube Studio in the browser. Use when a video must be org-only.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-studio-share\u002FSKILL.md",[214],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[216,217,218,219,196,197,220,221,222,223,224,48,225,226,227,228,43,229,35,122,230,34],"youtube studio share","share","youtube studio","studio","browser","javascript","scripting","google workspace","workspace","tool","google","only","MCP","chrome","organization"]