v1.9.0 — Rock pinned. Rock verified. opencode rock work now.
- Repo-local config via .caveman/config.json or .caveman.json to pin per-project default mode
- Natural-language brevity triggers for caveman mode including "less tokens", "be brief", and "be terse"
- opencode plugin now loads correctly by evaluating shared config as CommonJS by hand
- Real lifecycle hooks implemented for opencode including event dispatcher for session init, chat.message for mode parsing, and experimental.chat.system.transform for per-turn reinforcement
- Session-init flag write no longer misses one-shot opencode run sessions
- caveman command works through both TUI command template expansion and quoted non-interactive run path
- caveman-compress command file now ships
- Copilot detection via extension directories
- npx skills add honors the agent profile
- Orphaned managed hooks pruned from settings.json
- No double hook-wiring when plugin manifest already wires them
- MCP-shrink is opt-in and requires an upstream
- opencode config directory corrected to ~/.config/opencode on Windows
- PowerShell $Args collision resolved
- cavecrew agent copies strip tools: prefix for opencode
- caveman-compress UTF-8 pinned subprocess to fix Windows cp1252 crash
- caveman-compress claude.cmd resolution on Windows
- caveman-compress YAML frontmatter preserved
- Installs now pinned and integrity-checked against the immutable v1.9.0 tag with SHA-256 verification of all hooks before execution
- Fixed reflected DOM XSS in docs site demo by building nodes with textContent instead of innerHTML
Security
-
Installs now pinned + integrity-checked (#261, #262)
curl|bashand detached installs no longer fetch hook files from the movingmainbranch — they download from the immutablev1.9.0tag and verify every hook againstsrc/hooks/checksums.sha256(SHA-256) before anything executes. Mismatch aborts the install. This is the first tag shipping the manifest, so enforcement is fully active as of this release. -
fix(docs): escape user input in the demo terminal (#438) The docs site demo interpolated user input viainnerHTML— a real reflected DOM XSS. Nodes are built withtextContentnow.
opencode actually works now
Smoke-tested against a real opencode runtime for the first time — and the
plugin turned out to never load: opencode runs plugins inside a compiled Bun
binary where both require() of on-disk files and await import() of CJS
silently fail. Fixed by evaluating the shared config as CommonJS by hand.
Also fixed in the same pass, all verified end-to-end against opencode 1.4.0:
- Real lifecycle hooks:
eventdispatcher for session init,chat.messagefor mode parsing,experimental.chat.system.transformfor per-turn reinforcement — the old hook keys never existed and were silently ignored (#418, #421) - Session-init flag write no longer misses one-shot
opencode runsessions /caveman <level>works both through the TUI command template expansion and the quoted non-interactiverunpath/caveman-compresscommand file now ships (was gitignored) (#398, #426, #451, #464)
Features
- Repo-local config (#429) — check in
.caveman/config.json(or.caveman.json) to pin a per-project default mode for the whole team. Resolution order: env var → repo config → user config →full. - Natural-language brevity triggers (#248) — "less tokens", "be brief", "be terse" now activate caveman mode.
Fixes
- Installer: Copilot detection via extension dirs (#437),
npx skills addhonors the agent profile again (#395), orphaned managed hooks pruned fromsettings.json(#472), no double hook-wiring when the plugin manifest already wires them (#393), MCP-shrink is opt-in and requires an upstream (#380), opencode config dir corrected to~/.config/opencodeon Windows (#376), PowerShell$Argscollision (#414), cavecrew agent copies striptools:for opencode (#443) - caveman-compress: UTF-8 pinned subprocess (fixes Windows cp1252 crash,
#388/#152),
claude.cmdresolution on Windows (#435), YAML frontmatter preserved (#424), backups written outside the source tree (#420) - Skill: replies preserve the user's language (#446), no self-reference (#469), full-mode output guardrails (#322), fixed corrupted wenyan example
- Stats: Opus 4.5+ output price corrected $75 → $25/M (#466), statusline pickaxe renders on Windows (#459)
- MCP-shrink:
npx/.cmdupstream resolution on Windows (#387)
Maintenance
- Sponsors section (welcome, Atlas Cloud), caveman-code + cavegemma in the
ecosystem table, stale pre-cleanup dotdir mirrors removed, init tests no
longer touch the developer's real
~/.openclawworkspace.
Upgrade
curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh | bash
Existing installs: re-run the same one-liner — idempotent. opencode users
should re-run with --force to pick up the fixed plugin:
npx -y github:JuliusBrussee/caveman -- --only opencode --force
🤖 Generated with Claude Code