hookify
Easily create hooks to prevent unwanted behaviors by analyzing conversation patterns
Installation
/plugin marketplace add giginet/claude-plugins-official
/plugin install hookify@claude-plugins-official
claude plugin marketplace add giginet/claude-plugins-official
claude plugin install hookify@claude-plugins-official
Skills
| Name | Description | |||||
|---|---|---|---|---|---|---|
writing-rules |
This skill should be used when the user asks to "create a hookify rule", "write a hook rule", "configure hookify", "add a hookify rule", or needs guidance on hookify rule syntax and patterns. | |||||
Writing Hookify RulesOverviewHookify rules are markdown files with YAML frontmatter that define patterns to watch for and messages to show when those patterns match. Rules are stored in Rule File FormatBasic Structure
Frontmatter Fieldsname (required): Unique identifier for the rule
- Use kebab-case: enabled (required): Boolean to activate/deactivate
- event (required): Which hook event to trigger on
- action (optional): What to do when rule matches
- pattern (simple format): Regex pattern to match - Used for simple single-condition rules - Matches against command (bash) or new_text (file) - Python regex syntax Example:
Advanced Format (Multiple Conditions)For complex rules with multiple conditions:
Condition fields:
- All conditions must match for rule to trigger. Message BodyThe markdown content after frontmatter is shown to Claude when the rule triggers. Good messages: - Explain what was detected - Explain why it's problematic - Suggest alternatives or best practices - Use formatting for clarity (bold, lists, etc.) Example:
Event Type Guidebash EventsMatch Bash command patterns:
Common patterns:
- Dangerous commands: file EventsMatch Edit/Write/MultiEdit operations:
Match on different fields:
Common patterns:
- Debug code: stop EventsMatch when agent wants to stop (completion checks):
Use for: - Reminders about required steps - Completion checklists - Process enforcement prompt EventsMatch user prompt content (advanced):
Pattern Writing TipsRegex BasicsLiteral characters: Most characters match themselves
- Special characters need escaping:
- Common metacharacters:
- Examples:
Testing PatternsTest regex patterns before using:
Or use online regex testers (regex101.com with Python flavor). Common PitfallsToo broad:
Better: Too specific:
Better: Escaping issues:
- YAML quoted strings: File OrganizationLocation: All rules in Good names:
- Bad names:
- WorkflowCreating a Rule
Refining a Rule
Disabling a RuleTemporary: Set ExamplesSee Quick ReferenceMinimum viable rule:
Rule with conditions:
Event types:
- Field options:
- Bash: Operators:
- |
||||||
Commands
| Name | Description | |||||
|---|---|---|---|---|---|---|
configure |
Enable or disable hookify rules interactively | |||||
Configure Hookify RulesLoad hookify:writing-rules skill first to understand rule format. Enable or disable existing hookify rules using an interactive interface. Steps1. Find Existing RulesUse Glob tool to find all hookify rule files:
If no rules found, inform user:
2. Read Current StateFor each rule file:
- Read the file
- Extract 3. Ask User Which Rules to ToggleUse AskUserQuestion to let user select rules:
Option format:
- Label: 4. Parse User SelectionFor each selected rule: - Determine current state from label (enabled/disabled) - Toggle state: enabled → disabled, disabled → enabled 5. Update Rule FilesFor each rule to toggle:
- Use Read tool to read current content
- Use Edit tool to change Edit pattern for enabling:
Edit pattern for disabling:
6. Confirm ChangesShow user what was changed:
Important Notes
Edge CasesNo rules to configure:
- Show message about using User selects no rules: - Inform that no changes were made File read/write errors: - Inform user of specific error - Suggest manual editing as fallback |
||||||
help |
Get help with the hookify plugin | |||||
Hookify Plugin HelpExplain how the hookify plugin works and how to use it. OverviewThe hookify plugin makes it easy to create custom hooks that prevent unwanted behaviors. Instead of editing How It Works1. Hook SystemHookify installs generic hooks that run on these events: - PreToolUse: Before any tool executes (Bash, Edit, Write, etc.) - PostToolUse: After a tool executes - Stop: When Claude wants to stop working - UserPromptSubmit: When user submits a prompt These hooks read configuration files from 2. Configuration FilesUsers create rules in
Key fields:
- The message body is what Claude sees when the rule triggers. 3. Creating RulesOption A: Use /hookify command
This analyzes your request and creates the appropriate rule file. Option B: Create manually
Create Option C: Analyze conversation
Without arguments, hookify analyzes recent conversation to find behaviors you want to prevent. Available Commands
Example Use CasesPrevent dangerous commands:
Warn about debugging code:
Require tests before stopping:
Pattern SyntaxUse Python regex syntax:
- Examples:
- Important NotesNo Restart Needed: Hookify rules ( Block or Warn: Rules can either Rule Files: Keep rules in Disable Rules: Set TroubleshootingHook not triggering:
- Check rule file is in Import errors:
- Check Python 3 is available: Pattern not matching: - Test regex separately - Check for escaping issues (use unquoted patterns in YAML) - Try simpler pattern first, then refine Getting Started
For more examples, check the |
||||||
hookify |
Create hooks to prevent unwanted behaviors from conversation analysis or explicit instructions | |||||
Hookify - Create Hooks from Unwanted BehaviorsFIRST: Load the hookify:writing-rules skill using the Skill tool to understand rule file format and syntax. Create hook rules to prevent problematic behaviors by analyzing the conversation or from explicit user instructions. Your TaskYou will help the user create hookify rules to prevent unwanted behaviors. Follow these steps: Step 1: Gather Behavior InformationIf $ARGUMENTS is provided:
- User has given specific instructions: If $ARGUMENTS is empty: - Launch the conversation-analyzer agent to find problematic behaviors - Agent will scan user prompts for frustration signals - Agent will return structured findings To analyze conversation: Use the Task tool to launch conversation-analyzer agent:
Step 2: Present Findings to UserAfter gathering behaviors (from arguments or agent), present to user using AskUserQuestion: Question 1: Which behaviors to hookify? - Header: "Create Rules" - multiSelect: true - Options: List each detected behavior (max 4) - Label: Short description (e.g., "Block rm -rf") - Description: Why it's problematic Question 2: For each selected behavior, ask about action: - "Should this block the operation or just warn?" - Options: - "Just warn" (action: warn - shows message but allows) - "Block operation" (action: block - prevents execution) Question 3: Ask for example patterns: - "What patterns should trigger this rule?" - Show detected patterns - Allow user to refine or add more Step 3: Generate Rule FilesFor each confirmed behavior, create a Rule naming convention:
- Use kebab-case
- Be descriptive: File format:
Action values:
- For more complex rules (multiple conditions):
Step 4: Create Files and ConfirmIMPORTANT: Rule files must be created in the current working directory's Use the current working directory (where Claude Code was started) as the base path.
These rules will trigger on: - dangerous-rm: Bash commands matching "rm -rf" - console-log: Edits adding console.log statements - sensitive-files: Edits to .env or credentials files ```
The hookify hooks are already loaded and will read your new rules on the next tool use. Event Types Reference
Pattern Writing TipsBash patterns:
- Match dangerous commands: File patterns:
- Match code patterns: Stop patterns: - Check for missing steps: (check transcript or completion criteria) Example WorkflowUser says: "/hookify Don't use rm -rf without asking me first" Your response:
1. Analyze: User wants to prevent rm -rf commands
2. Ask: "Should I block this command or just warn you?"
3. User selects: "Just warn"
4. Create name: warn-dangerous-rm enabled: true event: bash pattern: rm\s+-rf ⚠️ Dangerous rm command detected You requested to be warned before using rm -rf. Please verify the path is correct. ``` 5. Confirm: "Created hookify rule. It's active immediately - try triggering it!" Important Notes
TroubleshootingIf rule file creation fails:
1. Check current working directory with pwd
2. Ensure If rule doesn't trigger after creation:
1. Verify file is in project If blocking seems too strict:
1. Change Use TodoWrite to track your progress through the steps. |
||||||
list |
List all configured hookify rules | |||||
List Hookify RulesLoad hookify:writing-rules skill first to understand rule format. Show all configured hookify rules in the project. Steps
If No Rules FoundIf no hookify rules exist:
/hookify Warn me when I use console.log |
||||||
Agents
| Name | Description | Model | |
|---|---|---|---|
conversation-analyzer |
|||
|
You are a conversation analysis specialist that identifies problematic behaviors in Claude Code sessions that could be prevented with hooks. Your Core Responsibilities: 1. Read and analyze user messages to find frustration signals 2. Identify specific tool usage patterns that caused issues 3. Extract actionable patterns that can be matched with regex 4. Categorize issues by severity and type 5. Provide structured findings for hook rule generation Analysis Process: 1. Search for User Messages Indicating IssuesRead through user messages in reverse chronological order (most recent first). Look for: Explicit correction requests: - "Don't use X" - "Stop doing Y" - "Please don't Z" - "Avoid..." - "Never..." Frustrated reactions: - "Why did you do X?" - "I didn't ask for that" - "That's not what I meant" - "That was wrong" Corrections and reversions: - User reverting changes Claude made - User fixing issues Claude created - User providing step-by-step corrections Repeated issues: - Same type of mistake multiple times - User having to remind multiple times - Pattern of similar problems 2. Identify Tool Usage PatternsFor each issue, determine: - Which tool: Bash, Edit, Write, MultiEdit - What action: Specific command or code pattern - When it happened: During what task/phase - Why problematic: User's stated reason or implicit concern Extract concrete examples: - For Bash: Actual command that was problematic - For Edit/Write: Code pattern that was added - For Stop: What was missing before stopping 3. Create Regex PatternsConvert behaviors into matchable patterns: Bash command patterns:
- Code patterns (Edit/Write):
- File path patterns:
- 4. Categorize SeverityHigh severity (should block in future): - Dangerous commands (rm -rf, chmod 777) - Security issues (hardcoded secrets, eval) - Data loss risks Medium severity (warn): - Style violations (console.log in production) - Wrong file types (editing generated files) - Missing best practices Low severity (optional): - Preferences (coding style) - Non-critical patterns 5. Output FormatReturn your findings as structured text in this format:
Quality Standards: - Be specific about patterns (don't be overly broad) - Include actual examples from conversation - Explain why each issue matters - Provide ready-to-use regex patterns - Don't false-positive on discussions about what NOT to do Edge Cases: User discussing hypotheticals: - "What would happen if I used rm -rf?" - Don't treat as problematic behavior Teaching moments: - "Here's what you shouldn't do: ..." - Context indicates explanation, not actual problem One-time accidents: - Single occurrence, already fixed - Mention but mark as low priority Subjective preferences: - "I prefer X over Y" - Mark as low severity, let user decide Return Results: Provide your analysis in the structured format above. The /hookify command will use this to: 1. Present findings to user 2. Ask which rules to create 3. Generate .local.md configuration files 4. Save rules to .claude directory |
|||
Hooks
| Event | Matcher | Type |
|---|---|---|
PreToolUse |
command | |
PostToolUse |
command | |
Stop |
command | |
UserPromptSubmit |
command |
README
Hookify Plugin
Easily create custom hooks to prevent unwanted behaviors by analyzing conversation patterns or from explicit instructions.
Overview
The hookify plugin makes it simple to create hooks without editing complex hooks.json files. Instead, you create lightweight markdown configuration files that define patterns to watch for and messages to show when those patterns match.
Key features: - 🎯 Analyze conversations to find unwanted behaviors automatically - 📝 Simple markdown configuration files with YAML frontmatter - 🔍 Regex pattern matching for powerful rules - 🚀 No coding required - just describe the behavior - 🔄 Easy enable/disable without restarting
Quick Start
1. Create Your First Rule
/hookify Warn me when I use rm -rf commands
This analyzes your request and creates .claude/hookify.warn-rm.local.md.
2. Test It Immediately
No restart needed! Rules take effect on the very next tool use.
Ask Claude to run a command that should trigger the rule:
Run rm -rf /tmp/test
You should see the warning message immediately!
Usage
Main Command: /hookify
With arguments:
/hookify Don't use console.log in TypeScript files
Creates a rule from your explicit instructions.
Without arguments:
/hookify
Analyzes recent conversation to find behaviors you've corrected or been frustrated by.
Helper Commands
List all rules:
/hookify:list
Configure rules interactively:
/hookify:configure
Enable/disable existing rules through an interactive interface.
Get help:
/hookify:help
Rule Configuration Format
Simple Rule (Single Pattern)
.claude/hookify.dangerous-rm.local.md:
---
name: block-dangerous-rm
enabled: true
event: bash
pattern: rm\s+-rf
action: block
---
⚠️ **Dangerous rm command detected!**
This command could delete important files. Please:
- Verify the path is correct
- Consider using a safer approach
- Make sure you have backups
Action field:
- warn: Shows warning but allows operation (default)
- block: Prevents operation from executing (PreToolUse) or stops session (Stop events)
Advanced Rule (Multiple Conditions)
.claude/hookify.sensitive-files.local.md:
---
name: warn-sensitive-files
enabled: true
event: file
action: warn
conditions:
- field: file_path
operator: regex_match
pattern: \.env$|credentials|secrets
- field: new_text
operator: contains
pattern: KEY
---
🔐 **Sensitive file edit detected!**
Ensure credentials are not hardcoded and file is in .gitignore.
All conditions must match for the rule to trigger.
Event Types
bash: Triggers on Bash tool commandsfile: Triggers on Edit, Write, MultiEdit toolsstop: Triggers when Claude wants to stop (for completion checks)prompt: Triggers on user prompt submissionall: Triggers on all events
Pattern Syntax
Use Python regex syntax:
| Pattern | Matches | Example |
|---|---|---|
rm\s+-rf |
rm -rf | rm -rf /tmp |
console\.log\( |
console.log( | console.log("test") |
(eval\|exec)\( |
eval( or exec( | eval("code") |
\.env$ |
files ending in .env | .env, .env.local |
chmod\s+777 |
chmod 777 | chmod 777 file.txt |
Tips:
- Use \s for whitespace
- Escape special chars: \. for literal dot
- Use | for OR: (foo|bar)
- Use .* to match anything
- Set action: block for dangerous operations
- Set action: warn (or omit) for informational warnings
Examples
Example 1: Block Dangerous Commands
---
name: block-destructive-ops
enabled: true
event: bash
pattern: rm\s+-rf|dd\s+if=|mkfs|format
action: block
---
🛑 **Destructive operation detected!**
This command can cause data loss. Operation blocked for safety.
Please verify the exact path and use a safer approach.
This rule blocks the operation - Claude will not be allowed to execute these commands.
Example 2: Warn About Debug Code
---
name: warn-debug-code
enabled: true
event: file
pattern: console\.log\(|debugger;|print\(
action: warn
---
🐛 **Debug code detected**
Remember to remove debugging statements before committing.
This rule warns but allows - Claude sees the message but can still proceed.
Example 3: Require Tests Before Stopping
---
name: require-tests-run
enabled: false
event: stop
action: block
conditions:
- field: transcript
operator: not_contains
pattern: npm test|pytest|cargo test
---
**Tests not detected in transcript!**
Before stopping, please run tests to verify your changes work correctly.
This blocks Claude from stopping if no test commands appear in the session transcript. Enable only when you want strict enforcement.
Advanced Usage
Multiple Conditions
Check multiple fields simultaneously:
---
name: api-key-in-typescript
enabled: true
event: file
conditions:
- field: file_path
operator: regex_match
pattern: \.tsx?$
- field: new_text
operator: regex_match
pattern: (API_KEY|SECRET|TOKEN)\s*=\s*["']
---
🔐 **Hardcoded credential in TypeScript!**
Use environment variables instead of hardcoded values.
Operators Reference
regex_match: Pattern must match (most common)contains: String must contain patternequals: Exact string matchnot_contains: String must NOT contain patternstarts_with: String starts with patternends_with: String ends with pattern
Field Reference
For bash events:
- command: The bash command string
For file events:
- file_path: Path to file being edited
- new_text: New content being added (Edit, Write)
- old_text: Old content being replaced (Edit only)
- content: File content (Write only)
For prompt events:
- user_prompt: The user's submitted prompt text
For stop events: - Use general matching on session state
Management
Enable/Disable Rules
Temporarily disable:
Edit the .local.md file and set enabled: false
Re-enable:
Set enabled: true
Or use interactive tool:
/hookify:configure
Delete Rules
Simply delete the .local.md file:
rm .claude/hookify.my-rule.local.md
View All Rules
/hookify:list
Installation
This plugin is part of the Claude Code Marketplace. It should be auto-discovered when the marketplace is installed.
Manual testing:
cc --plugin-dir /path/to/hookify
Requirements
- Python 3.7+
- No external dependencies (uses stdlib only)
Troubleshooting
Rule not triggering:
1. Check rule file exists in .claude/ directory (in project root, not plugin directory)
2. Verify enabled: true in frontmatter
3. Test regex pattern separately
4. Rules should work immediately - no restart needed
5. Try /hookify:list to see if rule is loaded
Import errors:
- Ensure Python 3 is available: python3 --version
- Check hookify plugin is installed
Pattern not matching:
- Test regex: python3 -c "import re; print(re.search(r'pattern', 'text'))"
- Use unquoted patterns in YAML to avoid escaping issues
- Start simple, then add complexity
Hook seems slow: - Keep patterns simple (avoid complex regex) - Use specific event types (bash, file) instead of "all" - Limit number of active rules
Contributing
Found a useful rule pattern? Consider sharing example files via PR!
Future Enhancements
- Severity levels (error/warning/info distinctions)
- Rule templates library
- Interactive pattern builder
- Hook testing utilities
- JSON format support (in addition to markdown)
License
MIT License
License
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
claude-plugins-official