Skip to content

claude-memory: audit context/audit.md commands use ${CLAUDE_PLUGIN_ROOT}, which is unset when the model runs them #4613

Description

@kyle-sexton

Problem

skills/audit/context/audit.md (claude-memory 0.13.3) gives its discovery and check commands as
bash "${CLAUDE_PLUGIN_ROOT}/skills/audit/scripts/<script>.sh" (7 occurrences). The harness
substitutes ${CLAUDE_PLUGIN_ROOT} in the SKILL.md body it renders, but context/audit.md is read
later with the Read tool, so the literal variable reaches the Bash tool. There it is unset:

$ echo "root=[${CLAUDE_PLUGIN_ROOT:-unset}]"
root=[unset]

Run as written, each command resolves to /skills/audit/scripts/... and fails. In the run that
found this, discovery only worked after the model set the variable by hand. A less careful run
would skip discovery, M2, RD1, or N1, or fall back to a bare find ., which the file itself warns
misses user-scope surfaces.

Where seen

/playbooks:repo-sweep next, claude-memory step, against melodic-software/.github
(sweep PR melodic-software/.github#153), Claude Code on WSL2.

Suggested fix

Have the spoke files avoid the variable: either give the script paths relative to the skill
directory and state in SKILL.md (where substitution runs) the absolute directory they resolve
against, or route every check through audit-spine.sh, whose path SKILL.md already renders
substituted. Worth checking the plugin's other spoke files for the same pattern.

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions