This release includes 2 security fixes for security teams reviewing exposed deployments.
Topics
+4 more
Affected surfaces
ReleasePort's take
Moderate signalThe install script is now pinned to the immutable v1.9.0 tag and verified with SHA‑256, eliminating execution risks; the docs demo terminal now escapes user input to prevent reflected DOM XSS.
Why it matters: Immutable version pinning with SHA‑256 integrity checking blocks malicious code injection during installation; fixing reflected DOM XSS in the demo terminal protects users from script execution attacks when viewing documentation.
Summary
AI summaryInstalls now pinned to v1.9.0 and integrity‑checked via SHA‑256, fixing a reflected DOM XSS in the docs demo.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Critical |
Installs now pinned to immutable v1.9.0 tag and integrity‑checked via SHA‑256 before execution. Installs now pinned to immutable v1.9.0 tag and integrity‑checked via SHA‑256 before execution. Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Security | High |
Docs site demo terminal now escapes user input, preventing reflected DOM XSS. Docs site demo terminal now escapes user input, preventing reflected DOM XSS. Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Feature | Medium |
Adds repo‑local config support via `.caveman/config.json` or `.caveman.json`. Adds repo‑local config support via `.caveman/config.json` or `.caveman.json`. Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Feature | Medium |
Adds natural‑language brevity triggers like "less tokens", "be brief", and "be terse". Adds natural‑language brevity triggers like "less tokens", "be brief", and "be terse". Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Bugfix | Medium |
Fixes opencode plugin loading by evaluating shared config as CommonJS manually. Fixes opencode plugin loading by evaluating shared config as CommonJS manually. Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Bugfix | Medium |
Implements real lifecycle hooks: session init, chat message parsing, and reinforcement transformation. Implements real lifecycle hooks: session init, chat message parsing, and reinforcement transformation. Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Bugfix | Medium |
Ensures `/caveman <level>` works in both TUI command expansion and non‑interactive `run` path. Ensures `/caveman <level>` works in both TUI command expansion and non‑interactive `run` path. Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Bugfix | Medium |
Ships missing `/caveman-compress` command file (previously gitignored). Ships missing `/caveman-compress` command file (previously gitignored). Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Bugfix | Low |
Fixes caveman‑compress UTF‑8 subprocess crash on Windows. Fixes caveman‑compress UTF‑8 subprocess crash on Windows. Source: llm_adapter@2026-06-12 Confidence: high |
— |
| Bugfix | Low |
Corrects Opus 4.5+ output price from $75 to $25 per million. Corrects Opus 4.5+ output price from $75 to $25 per million. Source: llm_adapter@2026-06-12 Confidence: high |
— |
Full changelog
Security
-
Installs now pinned + integrity-checked (#261, #262)
curl|bashand detached installs no longer fetch hook files from the moving
mainbranch — 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.message
for 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 add
honors the agent profile again (#395), orphaned managed hooks pruned from
settings.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 strip
tools: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
Security Fixes
- Reflected DOM XSS in demo terminal fixed by using textContent instead of innerHTML (#438)
- Installs now pinned to immutable v1.9.0 tag with SHA‑256 integrity verification (#261, #262)
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About caveman
🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman
Related context
Related tools
Beta — feedback welcome: [email protected]