v1.9.1
v1.9.1 — 65%, honestly
Added
- New limit-headroom meter in /caveman-stats for subscription users to view session budget saved at a glance
- Documentation in docs/HONEST-NUMBERS.md explaining exactly when caveman saves tokens and when it costs them
- Hermes Agent support with symmetric install/uninstall operations verified against real Hermes installs
- Per-agent Cavecrew model overrides to pin each cavecrew subagent to the desired model
- Claude Code now discovers slash commands via shipped commands/*.md and caveman-stats.toml files
Changed
- Headline savings is now a flat 65% everywhere, measured as average output-token reduction vs default verbose replies across a 10-prompt benchmark
- Output-reduction line in /caveman-stats is now labeled as output reduction instead of as a share of usage/quota
Fixed
- Session token stats in /caveman-stats are now attributed to the mode that was active when each message happened, preventing mid-session mode changes from rewriting historical session math
- Natural-language triggers no longer misfire and one-shot modes stay one-shot
- mode-tracker now survives a broken stdin instead of hanging or crashing
- SessionStart SKILL.md path off-by-one error fixed so the ruleset injects reliably
- spawn ENOENT is now treated as a failure instead of reporting a fake successful install
- No more EXDEV crash installing the Claude plugin across devices/filesystems by falling back to copy when rename cannot cross a mount
- JSONC settings.json reader is now string-aware and no longer mangles trailing commas inside string values
- install.ps1 now works when piped to iex
- Uninstall now matches managed hook basenames instead of a loose substring to prevent stripping the wrong entry
- caveman-init no longer requires a caveman checkout and runs standalone
- opencode --force now migrates a legacy AGENTS.md instead of wiping it
- OpenClaw SOUL.md data-loss issue fixed where a stray or half-present caveman marker could delete user content on next install/uninstall
- caveman-shrink spawn-options.js now ships in the published tarball
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: https://github.com/JuliusBrussee/caveman/compare/v1.9.0...v1.9.1