| name | toolshed-doctor |
| description | Run a read-only health check for Quartermaster and installed Toolshed plugins. Use to diagnose Toolshed, check workspace health, or troubleshoot stale plugins. |
Toolshed Doctor
Run the updater in check mode first. It only reads the installed-plugin registry and runs the Codex gateway
health check when that plugin is installed:
node "${CLAUDE_PLUGIN_ROOT}/bin/update-toolshed.js" --check
Then run the same read-only session health audit used at startup:
node -e "const { audit } = require(process.env.CLAUDE_PLUGIN_ROOT + '/hooks/session-start-freshness.js'); const result = audit({ currentProject: process.cwd() }); console.log(JSON.stringify({ problems: result.problems, boards: result.mappings, staleProcesses: result.staleProcesses }, null, 2));"
An enabledPlugins entry only selects an installed plugin. If the audit says a plugin's hooks are not running,
that settings file enables a plugin with no matching install row. Offer to install it at the reported project or
user scope, or remove the dead enabledPlugins entry from the named file. Do not call that plugin configured or
healthy until one of those actions is complete.
When staleProcesses has rows, report each PID, start time, and stale worktree path. They are read-only findings: do not kill any process from the doctor.
Observability, when that plugin is installed
Telemetry lives in the separate Observability plugin. Its files are under a different plugin root, so resolve
that root first and skip this whole section when the plugin is absent:
node -e "const fs=require('node:fs'),os=require('node:os'),path=require('node:path');const reg=JSON.parse(fs.readFileSync(path.join(os.homedir(),'.claude','plugins','installed_plugins.json'),'utf8'));const installs=reg?.plugins?.['observability@eigenwise-toolshed']||[];const hit=installs.map(i=>i?.installPath).filter(Boolean).find(p=>fs.existsSync(path.join(p,'bin','setup-observability.js')));console.log(hit||'');"