v1.4.1 — fix model-invoked skill-wrapper infinite loop
Fixed
Infinite Skill-invocation loop when a brooks-lint skill is model-invoked (#21)
The commands/brooks-*.md wrappers were purely self-referential — "Use the Skill tool to invoke brooks-lint:brooks-review". Combined with an upstream Claude Code bug (anthropics/claude-code#54535, closed NOT_PLANNED) that re-injects a command body without its <command-name> tag after a model-invoked Skill call, the agent could loop: call Skill → body re-injected → call Skill again, never running the skill.
Each wrapper now reads its skill's SKILL.md directly instead of calling the Skill tool, so the re-injection path is never triggered and the skill runs once. The session-start hook bakes the absolute ${CLAUDE_PLUGIN_ROOT} path into the installed short forms, since that variable does not expand in user commands under ~/.claude/commands/.
Cross-platform safe: commands/ is still consumed as-is by the Gemini extension, and Codex loads skills/ only.
Thanks to @madjidsun for the exceptionally thorough report and root-cause trace.
Upgrade
/plugin marketplace update
/plugin install brooks-lint@brooks-lint-marketplace
Full changelog: https://github.com/hyhmrright/brooks-lint/blob/main/CHANGELOG.md