v2.0.0
Full port of every script and hook from bash + python3 to pure Node.js, so
the plugin runs identically on Linux, macOS, and Windows. No /bin/sh, no
bash, no python3, no GNU find — only node (already required by Claude
Code) plus bunx/npx for the one ccusage network call.
Changed (breaking — implementation only; commands & output are unchanged)
- All four scripts are now
.mjs.scripts/probe.sh→probe.mjs,
scripts/usage-snapshot.sh→usage-snapshot.mjs,scripts/setup.sh→
setup.mjs,skills/usage/usage.sh→usage.mjs. The old.shfiles are
removed. Shared cross-platform helpers live inscripts/lib/mc.mjs(a
PATHEXT-awarewhich, shell-freerun, recursivenewestFile, duration/bar
formatting) and the wallet readers inscripts/lib/wallets.mjs(one source of
truth for Codex / Claude / AGY data, used by both the full readout and the
hook snapshot). - Hooks switched to exec form.
hooks/hooks.jsonnow uses
"command": "node"+"args": [...](spawned directly, no shell) instead of
"shell": "bash"with a$(find …)fallback — the documented cross-platform
pattern.${CLAUDE_PLUGIN_ROOT}is still substituted by Claude Code. /multiclaude:setupgained an idempotentapplymode.check(default)
verifies and changes nothing;applydeep-merges the desired-state template
into~/.claude/settings.json(backing up to.bak, never clobbering keys it
doesn't manage), with--full,--set dotted.key=value,--ttl,--model,
and--dry-run. The JSON merge is native JS — the python3 heredoc is gone.
Removed
python3, GNUfind, andbashas dependencies. The usage readout's
Codex and AGY sections read local files directly and now work fully offline;
only the Claude block still needs the network (ccusageviabunx/npx).