A maintenance + honesty release. 50 changes since v1.9.0, mostly hook, installer, and integration hardening, plus a full pass on how caveman states its savings number. Installs stay pinned + integrity-checked; this tag now ships cavecrew-model-overrides.js in the hook manifest so the curl|bash fallback path installs cleanly.
Honest numbers, one number
- Headline savings is now a flat
65%everywhere (#234). We retired the~50-65%range and the~75%claim that still lived on the docs site.65%is the measured average output-token reduction vs default verbose replies across the committed 10-prompt benchmark (range 22–87%) — output tokens only. README, all plugin/extension manifests, the skill descriptions, the per-repo rule frontmatter, and the GitHub Pages site now agree. /caveman-statsstops mislabeling savings (#601, and the budget-% fix). Session token stats are now attributed to the mode that was active when each message happened, so a mid-session/caveman ultrano longer rewrites the whole session's math. The output-reduction line is labeled as output reduction — not as a share of your usage/quota.- New limit-headroom meter in
/caveman-statsfor subscription users — session budget saved at a glance. docs/HONEST-NUMBERS.mddocuments exactly when caveman saves tokens and when it costs them (#145, #550, #506). If caveman is net-negative for your workload, that page tells you to turn it off.
Hooks
- Natural-language triggers stop misfiring and one-shot modes stay one-shot (#598, #599).
/caveman-commit/-review/-compressno longer stick as a persistent mode. mode-trackersurvives a broken stdin — anerroron the stdin stream no longer hangs or crashes the hook (#538).- SessionStart SKILL.md path off-by-one fixed (#587, #589) so the ruleset injects reliably.
Installer
- Hermes Agent support — install/uninstall are symmetric and verified against a real Hermes install (#524).
- Per-agent Cavecrew model overrides (#521) — pin each cavecrew subagent to the model you want.
spawnENOENTis now treated as a failure, not a success (#592) — a missing binary no longer reports a fake successful install.- No more
EXDEVcrash installing the Claude plugin across devices/filesystems — falls back to copy whenrenamecan't cross a mount (#585). - JSONC
settings.jsonreader is string-aware (#595) — a trailing comma inside a string value is no longer mangled during the merge. install.ps1works when piped toiex(#565), and uninstall matches managed hook basenames instead of a loose substring so it can't strip the wrong entry (#593).- Claude Code discovers the slash commands —
commands/*.mdandcaveman-stats.tomlnow ship so/caveman,/caveman-stats, etc. register (#571, #470). caveman-initno longer needs a caveman checkout — the per-repo rule writer runs standalone (#603).
Integrations
- opencode
--forcemigrates a legacyAGENTS.mdinstead of wiping it (#594). - OpenClaw SOUL.md data-loss fixed — a stray or half-present caveman marker can no longer chain into deleting user content on the next install/uninstall (#596).
caveman-shrink (npm MCP middleware)
spawn-options.jsnow ships in the published tarball (#597) — the package was importing a file it didn't include.- Nested protected-segment sentinels restored (#444) — documents with adjacent/nested protected regions round-trip through compress without losing or duplicating content.
/caveman-compress
- Build files and scripts are never classified as prose (#600) —
package.json,Makefile, and shebang scripts won't get rewritten into caveman prose.
Repo standards & docs
- Added
SECURITY.md,CODE_OF_CONDUCT.md,.editorconfig. - Security/privacy docs: an explicit no-telemetry statement and notes on scanner warnings (#347, #504, #383, #28).
benchmarks/run.pyreads onlyANTHROPIC_API_KEYfrom.env.local(#528).
Known follow-ups (non-blocking, tracked for a later release)
- NL activation: a negated phrase like "I don't want caveman" can still toggle the mode on; self-correcting with "stop caveman."
/caveman-statssavings estimate can skew when two Claude Code sessions run in different modes under the same config dir (shared mode log)./caveman-compressshebang guard doesn't catch a shebang script that also carries a.txt/.rstextension.- The
ultra-mode examples inskills/caveman/README.mdstill show abbreviations/arrows that the currentultrarule drops — cosmetic doc drift.
Full changelog: v1.9.0...v1.9.1