So I decided to try this out after seeing you release 2.0.0, but unfortunately, I simply cannot get it to work - It simply fails to invoke.
FULL DISCLAIMER: I used Claude Code itself to write this report, as I figured it it had a better understanding of what information was required than I do. I do apologize if it makes some false assumptions, or if something about this is user error.
Summary
The Nelson plugin fails to invoke when triggered via the /nelson slash command or via the nelson:nelson agent subtype. The root cause is the auto-executed shell command block in SKILL.md which uses an unsupported placeholder variable and complex shell syntax that Claude Code's permission check system cannot parse.
Environment
- Claude Code: Latest (as of 2026-04-14)
- Nelson Plugin: v2.0.0
- Model: Tested with multiple models (glm-4.5-air, glm-4.7, glm-5.1)
- Platform: Linux (WSL2)
- Installation: Via marketplace (
/plugin install nelson@nelson-marketplace)
Steps to Reproduce
- Install Nelson plugin:
/plugin install nelson@nelson-marketplace
- Reload plugins:
/reload-plugins
- Invoke Nelson:
/nelson test mission
- Observe error (see below)
Alternatively, invoke via the agent system with subagent_type: "nelson:nelson" — same error.
Error Message
Shell command permission check failed for pattern "```!
python3 "{skill-dir}/scripts/nelson-data.py" status --mission-dir "$(ls -td .nelson/missions/*/ 2>/dev/null | head -1)" || echo "No active missions"
```": Unhandled node type: string
Root Cause Analysis
Problem 1: {skill-dir} is not a recognized placeholder
The Nelson skill uses {skill-dir} (curly braces) as a placeholder in its auto-executed shell command:
python3 "{skill-dir}/scripts/nelson-data.py" status --mission-dir "$(ls -td .nelson/missions/*/ 2>/dev/null | head -1)" || echo "No active missions"
This placeholder is not recognized by Claude Code. The documented and supported variable for referencing plugin files is ${CLAUDE_PLUGIN_ROOT} — an environment variable that Claude Code resolves to the plugin's absolute path.
Evidence:
- The official
plugin-dev documentation (skills/command-development/SKILL.md, line 562-564) documents only ${CLAUDE_PLUGIN_ROOT}:
"Plugin commands have access to ${CLAUDE_PLUGIN_ROOT}, an environment variable that resolves to the plugin's absolute path."
- The official
ralph-loop command (the only other plugin using ```! auto-execution) uses ${CLAUDE_PLUGIN_ROOT} successfully:
"${CLAUDE_PLUGIN_ROOT}/scripts/setup-ralph-loop.sh" $ARGUMENTS
- The
session-report skill uses <skill-dir> (angle brackets) in documentation-only sh blocks, but never in auto-executed ```! blocks.
- A search across all official
claude-plugins-official marketplace plugins shows zero instances of {skill-dir} being used.
Problem 2: Complex shell syntax in ```! block
Even if the placeholder were correct, the command contains shell constructs that may exceed what Claude Code's permission check parser can handle:
python3 "{skill-dir}/scripts/nelson-data.py" status \
--mission-dir "$(ls -td .nelson/missions/*/ 2>/dev/null | head -1)" \
|| echo "No active missions"
Specific constructs:
$(...) — Command substitution with nested glob patterns
2>/dev/null — Stderr redirection
| head -1 — Pipe to another command
|| echo "..." — Logical OR fallback
The error "Unhandled node type: string" from Claude Code's permission check system suggests the parser fails on one or more of these constructs. The working ralph-loop example uses only simple variable expansion and no pipes/subshells.
So I decided to try this out after seeing you release 2.0.0, but unfortunately, I simply cannot get it to work - It simply fails to invoke.
FULL DISCLAIMER: I used Claude Code itself to write this report, as I figured it it had a better understanding of what information was required than I do. I do apologize if it makes some false assumptions, or if something about this is user error.
Summary
The Nelson plugin fails to invoke when triggered via the
/nelsonslash command or via thenelson:nelsonagent subtype. The root cause is the auto-executed shell command block inSKILL.mdwhich uses an unsupported placeholder variable and complex shell syntax that Claude Code's permission check system cannot parse.Environment
/plugin install nelson@nelson-marketplace)Steps to Reproduce
/plugin install nelson@nelson-marketplace/reload-plugins/nelson test missionAlternatively, invoke via the agent system with
subagent_type: "nelson:nelson"— same error.Error Message
Root Cause Analysis
Problem 1:
{skill-dir}is not a recognized placeholderThe Nelson skill uses
{skill-dir}(curly braces) as a placeholder in its auto-executed shell command:python3 "{skill-dir}/scripts/nelson-data.py" status --mission-dir "$(ls -td .nelson/missions/*/ 2>/dev/null | head -1)" || echo "No active missions"This placeholder is not recognized by Claude Code. The documented and supported variable for referencing plugin files is
${CLAUDE_PLUGIN_ROOT}— an environment variable that Claude Code resolves to the plugin's absolute path.Evidence:
plugin-devdocumentation (skills/command-development/SKILL.md, line 562-564) documents only${CLAUDE_PLUGIN_ROOT}:ralph-loopcommand (the only other plugin using```!auto-execution) uses${CLAUDE_PLUGIN_ROOT}successfully:"${CLAUDE_PLUGIN_ROOT}/scripts/setup-ralph-loop.sh" $ARGUMENTSsession-reportskill uses<skill-dir>(angle brackets) in documentation-onlyshblocks, but never in auto-executed```!blocks.claude-plugins-officialmarketplace plugins shows zero instances of{skill-dir}being used.Problem 2: Complex shell syntax in
```!blockEven if the placeholder were correct, the command contains shell constructs that may exceed what Claude Code's permission check parser can handle:
Specific constructs:
$(...)— Command substitution with nested glob patterns2>/dev/null— Stderr redirection| head -1— Pipe to another command|| echo "..."— Logical OR fallbackThe error
"Unhandled node type: string"from Claude Code's permission check system suggests the parser fails on one or more of these constructs. The workingralph-loopexample uses only simple variable expansion and no pipes/subshells.