Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Nelson 2.0.0 fails to execute in Claude Code #99

Description

@JG1995

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

  1. Install Nelson plugin: /plugin install nelson@nelson-marketplace
  2. Reload plugins: /reload-plugins
  3. Invoke Nelson: /nelson test mission
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions