Skill loading executes inline bash patterns from documentation examples
Bug Description
When loading a skill via the Skill tool, inline bash execution patterns (` !... `) within the skill's markdown content are being executed, even when they appear inside fenced code blocks as documentation examples.
Steps to Reproduce
- Create or use a skill that contains example command documentation with inline bash patterns
- Load the skill using the Skill tool
- Observe that bash patterns in code examples are executed
Example
The plugin-dev:command-development skill contains this documentation example in SKILL.md at line 496:
~~~markdown
Workflow Pattern
---
description: Complete PR workflow
argument-hint: [pr-number]
allowed-tools: Bash(gh:*), Read
---
PR #$1 Workflow:
1. Fetch PR: !`gh pr view $1`
~~~
When this skill is loaded, the ` !gh pr view $1 ` pattern executes despite being:
- Inside a fenced code block (meant as documentation)
- Containing an unsubstituted
$1placeholder
Actual Behavior
Error: Bash command failed for pattern "!`gh pr view $1`": [stderr]
no pull requests found for branch "main"
The skill partially loads but errors because the example bash pattern executed.
Expected Behavior
Inline bash patterns (` !... `) inside fenced code blocks should NOT be executed when loading skills. They are documentation examples, not executable instructions.
Affected Files
/plugins/plugin-dev/skills/command-development/SKILL.md(line 496)/plugins/plugin-dev/skills/command-development/references/advanced-workflows.md(line 25)
Workaround
Escape the patterns in documentation using backslashes or alternative formatting to prevent execution during skill loading.
Environment
- Claude Code CLI
- macOS
🤖 Generated with Claude Code
11 Comments
Still occurring as of v2.x (Dec 2025). The command-development skill hits multiple patterns during activation:
Error: Bash command failed for pattern "!
npm test $1"Error: Bash command failed for pattern "!
bash ${CLAUDE_PLUGIN_ROOT}/scripts/script.sh"This creates a catch-22 for skill authors: skills teaching command syntax cannot show the real !
cmdpattern without triggering execution. Escaping the examples would cause LLMs to learn incorrect syntax from the skill's own documentation.The parser should respect markdown code fence boundaries when scanning for executable patterns.
Workaround: Use
[BANG]placeholder in skill documentationFor plugin developers experiencing this issue with skill files, here's a workaround:
Problem: Skill files containing
!followed by backticks (the pre-execution syntax for slash commands) trigger bash execution errors when the skill content is loaded into Claude's context.Solution: Replace
!with a placeholder like[BANG]in your skill documentation:When Claude explains the concept to users, it correctly interprets and renders the actual
!syntax they should use in their command files.Example PR: https://github.com/sjnims/plugin-dev/pull/142
Thanks - I was going to raise this but see you've done so already. The state of the official plugins are shocking eh, so many errors. Tangentially related:
This issue has been inactive for 30 days. If the issue is still occurring, please comment to let us know. Otherwise, this issue will be automatically closed in 30 days for housekeeping purposes.
Yes still happening
still happening - #97
@github-actions this isn’t a stale issue, Anthropic just hasn’t gotten to it yet…
@claude take a look
Still hitting this as of 2026-03. Here's some additional context from my experience that may be useful:
How I encountered it
I customized the
skill-creatorplugin's SKILL.md to document the Dynamic Context Injection feature, including examples like!gh pr diff`inside fenced code blocks. Then I copied the modified skill to~/.claude/skills/skill-creator/` as a personal skill.Since personal skills take priority over plugin skills, every invocation of
/skill-creatorloaded my version — which executed the documentation examples as real shell commands.What made debugging difficult
The error message gives no indication of which file caused the failure:
It took a long investigation (checking hooks, OMC plugin scripts, plugin cache states) before tracing it back to
~/.claude/skills/skill-creator/SKILL.md. Including the file path and line number in the error message would have made this a 1-minute fix instead of a multi-hour debug session.Additional finding: String Substitution also affected
Beyond the
!command`issue, **$ARGUMENTS,${CLAUDE_SKILL_DIR},$0,$1` etc. are also substituted inside code blocks**. When trying to document these variables as examples, they get replaced with actual values (empty strings, session IDs, directory paths). This makes it impossible to show the intended syntax in documentation.Suggested priorities
!command`execution and$VARIABLE` substitution\!command``) for cases outside code blocksExpected impact if fixed
skill-creatorplugin can be more complete. The plugin's SKILL.md currently omits documentation for Dynamic Context Injection entirely — likely because including examples would trigger this exact issue. Fixing this would unblock the official tooling from being self-documenting.[BANG]placeholders.Closing for now — inactive for too long. Please open a new issue if this is still relevant.
This issue has been automatically locked since it was closed and has not had any activity for 7 days. If you're experiencing a similar issue, please file a new issue and reference this one if it's relevant.