0.27.0 (2026-06-22)
Features
- cli: add headroom doctor setup diagnostics (#926) (e45cf4e)
- cli: add headroom update command and release banner (#1088) (26be2c3)
- compression extraction — Rust knob exposure, CCR hardening, traffic audits (#818) (b7be381)
- measure and surface token throughput (tokens/sec) through the proxy (#983) (0d89c67)
- output-token reduction — verbosity shaper, per-user learning, counterfactual savings (#965) (a99dc61)
- policy: decay P_alive from idle time near cache TTL (#856 P3b) (#1028) (fe4f9ee)
- providers: add Cortex Code (Snowflake CoCo) as a supported agent (#1190) (d9d0bf4)
- proxy: cc-switch reconciler — keep Headroom in the request path alongside cc-switch (#1030) (e8fc8a0)
- proxy: hot-reload live env knobs so a reused proxy picks them up without a restart (#1090) (6904d47)
- proxy: make COMPRESSION_TIMEOUT_SECONDS configurable via env (#946) (#991) (addebdb)
- transforms: tabular + spreadsheet (.xlsx/.xls) compression (#1128) (d789a7c)
- vertex: turnkey Claude Code + Vertex compression (+ fixes from the Vertex review) (#1113) (0e05915)
Bug Fixes
- ccr: accept 12-char SmartCrusher hashes in tool injection (#1095) (#1141) (9f7f3ad)
- ccr: return stored content when headroom_retrieve query matches nothing (#1213) (#1236) (08fb845)
- content-router: honor target_ratio in compression cache + add proxy --target-ratio flag (#1108) (8894ee0)
- dashboard: light-mode backgrounds + aligned savings tables (#1064) (5eae32b)
- deps: make litellm optional on Python 3.14 (#956) (#993) (b2f04e4)
- e2e: align Codex wrap e2e with global-only RTK guidance (#1240) (#1254) (bc12ace)
- init: set ENABLE_TOOL_SEARCH=true so Claude Code keeps deferring tools (#746) (#995) (500ec2b)
- kompress: never block the request path on the cold-cache model download (#1161) (3fc2a78)
- memory: use ONNX embedder for
wrap --memorysync (#1092) (#1262) (4f9feda) - openclaw: wrap plugin export as {register} object for OpenClaw 2026.x compatibility (#1218) (2e6c442)
- providers: update DeepSeek V3 context limit from 128K to 1M (#1038) (#1137) (bcabc5c)
- proxy: allow disabling periodic TOIN stats logging (#1265) (b5f63d8)
- proxy: honor HEADROOM_EXCLUDE_TOOLS for Codex /v1/responses tool outputs (#940) (#1053) (f03e77b)
- proxy: preserve byte-faithful Anthropic tool forwarding (#1222) (1f18d59)
- proxy: route Codex OAuth image requests (#1215) (381d771)
- proxy: scope CORS to loopback + gate operator/content endpoints (#1226) (bd55a42)
- proxy: stamp X-Client: codex on Responses endpoint for unidentified callers (#1036) (b0cd032)
- proxy: treat NODE_EXTRA_CA_CERTS as additive, not replacement (#998) (#1031) (c987283)
- telemetry: switch anonymous telemetry to opt-in (off by default) (#1223) (b998697)
- tokenizers: bound tiktoken vocab load so a stalled download cannot hang requests (#956) (#994) (7e86baf)
- unwrap: remove ANTHROPIC_BASE_URL + ENABLE_TOOL_SEARCH and init hooks on unwrap (#992) (5b84691)
- wrap: keep Codex RTK guidance global (#1240) (7c26a54)
- wrap: percent-encode non-ASCII cwd names in X-Headroom-Project header (#1071) (9f712cc)
- wrap: write env.ANTHROPIC_BASE_URL to settings.json so daemon-spawned conversations inherit proxy (#951) (#1078) (a554c3a)