Imported from oimiragieo/agent-studio (
.claude/skills/tool-updater/SKILL.md). Install upstream withnpx skills add oimiragieo/agent-studio --skill tool-updater. Copyright stays with the author.
Tool Updater
Overview
Use this skill to refresh an existing CLI tool safely: research current best practices, compare against current implementation, generate a TDD patch backlog, apply updates, and verify CLI invocation.
When to Use
- Tool has broken require() paths or runtime errors
- Tool's CLI interface needs updating (new flags, changed behavior)
- Reflection flags stale or low-performing tool
- User asks to audit/refresh an existing tool
The Iron Law
Never update a tool blindly. Every refresh must be evidence-backed, TDD-gated, and integration-validated.
Workflow
Step 0: Evaluate Current State
- Read the tool file and understand its purpose
- Check if it's registered in package.json scripts
- Test
node <tool-path> --helpfor CLI interface - Identify issues: broken requires, missing error handling, stale logic
Step 1: Research Best Practices
- Read
.claude/tools/cli/CLAUDE.mdfor tool conventions - Review similar tools for patterns (especially
cli-wrapper.cjsusage) - Check if tool uses
wrapCLITool()from../../lib/utils/cli-wrapper.cjs - Use
Skill({ skill: 'research-synthesis' })if external research needed
Step 2: Generate Patch Backlog
- List specific changes needed
- Prioritize: broken requires > CLI interface > error handling > logic
- Estimate scope: <30 lines = auto-apply, >30 lines = plan mode
Step 3: Apply Updates
- Write or update tests first (RED phase)
- Apply tool changes (GREEN phase)
- Refactor for clarity (REFACTOR phase)
- Use
Edittool — never rewrite the entire file
Step 4: Verify Integration
- Verify tool loads without MODULE_NOT_FOUND errors
- Verify
--helpoutput is correct and complete - Verify tool handles missing args gracefully (exit 1 with usage)
- If CLI tool, verify package.json script entry exists or add one
- Run
pnpm lint:fix && pnpm format - Run tool-specific tests
Step 5: Record
- Log changes via
MemoryRecordif significant - Update CHANGELOG.md entry
Domain-Specific Validation
- Tool MUST load without MODULE_NOT_FOUND errors
- Tool MUST handle
--helpflag and missing arguments gracefully - Tool require() paths MUST be file-relative, not CWD-relative
- Tool MUST use
shell: falsefor any child process spawning (SE security rule) - Tool SHOULD use
wrapCLITool()for consistent CLI behavior - Tool SHOULD be registered in package.json if user-facing
Anti-Patterns
- Using CWD-relative requires (
./.claude/lib/...) instead of file-relative (../../lib/...) - Swallowing errors silently in catch blocks
- Hardcoding paths that should be computed from
__dirname - Using
shell: truein spawn/exec calls