spec-review: Multi-model review of spec-kit artifacts using orch - SKILL.md with progressive disclosure pattern - Review processes: spec, plan, tasks, gate-check - Prompts for critique, review, and go/no-go decisions ai-tools-doctor: RFC and implementation report for diagnostics skill 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
4.3 KiB
RFC: AI Tools Doctor - Unified Version Management
Status: Draft Author: dotfiles team Date: 2025-12-01 Related: dotfiles-6l8
Problem
Multiple AI coding tools (claude-code, codex, opencode, beads) with mixed management approaches:
- NPM tools want to self-update, drift from known state
- Nix tools are declarative but version info scattered
- No unified view for agents to report tool status
- Current
ai-tools-sync.shonly handles npm tools
Goals
- Unified view - Single tool to check all AI tools regardless of source
- Declarative - Pin versions in manifest, updates are explicit
- Agent-first - JSON output, exit codes, fast for hooks
- Nix-ian - Reproducible, version-controlled, git-trackable
Design
Manifest: config/ai-tools/tools.json
{
"tools": {
"claude-code": {
"source": "npm",
"npm_package": "@anthropic-ai/claude-code",
"version": "2.0.55",
"install_dir": "~/.local/share/claude-code",
"binary": "claude"
},
"openai-codex": {
"source": "npm",
"npm_package": "@openai/codex",
"version": "0.63.0",
"install_dir": "~/.local/share/openai-codex",
"binary": "codex"
},
"opencode": {
"source": "nix",
"expected_version": "0.2.1",
"binary": "opencode"
},
"beads": {
"source": "nix",
"expected_version": "0.26.0",
"binary": "bd"
}
}
}
CLI: ai-tools-doctor
# Check all tools (human-readable)
ai-tools-doctor check
# Check all tools (machine-readable for agents)
ai-tools-doctor check --json
# Exit code only (for hooks)
ai-tools-doctor check --quiet
# Sync npm tools to declared versions
ai-tools-doctor sync
# Update manifest to latest, then sync
ai-tools-doctor bump [tool]
ai-tools-doctor bump --all
Exit Codes
0- All tools match declared versions1- Updates available (informational, not error)2- Error (missing tools, network failure, etc.)
JSON Output Schema
{
"status": "updates_available",
"updates_count": 1,
"tools": {
"claude-code": {
"source": "npm",
"installed": "2.0.55",
"declared": "2.0.55",
"available": "2.0.56",
"status": "update_available"
},
"beads": {
"source": "nix",
"installed": "0.26.0",
"declared": "0.26.0",
"status": "ok"
}
}
}
Shared Skill: claude/skills/ai-tools-doctor/
Following existing skills pattern, deployed to both Claude and OpenCode:
claude/skills/ai-tools-doctor/
├── SKILL.md # Agent invocation description
├── README.md # Documentation
└── scripts/
└── check.sh # Wrapper calling bin/ai-tools-doctor.sh
Replaces: .claude/skills/update-claude/ (Claude-only, obsolete)
Agent Integration
Session start hook or skill can run:
result=$(ai-tools-doctor check --json 2>/dev/null)
if [[ $? -eq 1 ]]; then
# Agent parses JSON, mentions updates to user
fi
Key Decisions
Version Pinning (chosen over "latest")
Why: Aligns with Nix philosophy. Updates are intentional, tracked in git. Can review changelogs before bumping. Reproducible: same manifest = same tools.
Tradeoff: Requires manual bump command. Mitigated by agent visibility.
Nix Tools as Read-Only
Why: Nix tools are managed by nix flake update, not this tool. Doctor reports their status but doesn't manage them.
Behavior: Shows installed vs declared. No "available" check - that's nix territory.
Shared Skill (not Claude-only)
Why: Both Claude and OpenCode use these tools. Unified skill works for both agents via existing Home Manager deployment pattern.
Files to Modify
config/ai-tools/tools.json- Add source types, pin versions, add nix toolsbin/ai-tools-sync.sh→bin/ai-tools-doctor.sh- Rename, add JSON/exit codesclaude/skills/ai-tools-doctor/- New shared skillhome/claude.nix- Deploy shared skill- Delete
.claude/skills/update-claude/- Replaced
Open Questions
- Cache npm registry responses for faster checks?
- Session start hook integration - automatic or manual trigger?
- Should
bumpauto-commit the manifest change?
Out of Scope
- Managing nix tool versions (use
nix flake update) - Auto-updating during sessions (agent reports, human decides)
- Other non-AI tools