0.41.0 (2026-10-13)
Features
- antigravity: add native Google Antigravity IDE integration (#3817) (cd4367b)
- opencode: support the OpenCode 2.x plugin API (#3999) (1d4b357)
- plugins: add headroom-snip Claude Code mod that animates compression (#3980) (17abee2)
- proxy: native spend/savings stats + dashboard for the Rust proxy (#2321) (70b21c1)
- router: add max_output_tokens condition to ModelRoute (#3898) (01185e3)
- savings: per-agent attribution in history checkpoints and rollups (#2627) (489de46)
- show the Headroom for Teams offer in the dashboard, docs, llms.txt and release notes (#3991) (1ad92f0)
Bug Fixes
- anthropic: route /api/hello connectivity probes to Anthropic (#3336) (#4059) (931e5b9)
- beacon: stop Cloudflare logging senders' IP addresses (#4018) (db983ba)
- cache: keep cache mode when Claude Code re-serializes its last reply (#4003) (aeb09f8)
- cache: retain prefix trackers for the provider cache lifetime (#4023) (9553d42)
- cache: stop Claude Code forks from cold-starting the conversation's lineage (#4043) (1cf4d05)
- ccr: serve headroom_retrieve when the model calls it alongside client tools (#4034) (01d9194)
- cli: name the broken Codex config, write init configs atomically, keep the identity check (#4129) (976aa71)
- cli: pass configured SSL context to stdlib urlopen calls (#4011) (22d0905)
- cli: say why the proxy failed to start (#4120) (f3d240b)
- codex: make unwrap codex remove headroom init routing (#3920) (3260795)
- codex: preserve auth.json API keys through Headroom (#3355) (a6523b1)
- copilot: honour GitHub's advertised Business/Enterprise host by default (#4155) (1dc7a18)
- copilot: send VS Code next-edit requests to the completions host (#4188) (22a1296)
- dashboard: keep savings profile visible in light mode (#2544) (4e4f49d)
- dashboard: show the effective value in settings enum selects (#4032) (20ce054)
- deps: bump quinn-proto to 0.11.19 for RUSTSEC-2026-0338..0342 (#4178) (49751ec)
- deps: clear the two high npm advisories failing the Security workflow (#4004) (5a516b5)
- deps: recommend headroom-ai for optional extras (#4046) (f1bc260)
- deps: support Intel macOS ONNX Runtime resolution (#3823) (51ec6e8)
- docker: adds mount for the litellm config dir (#2454) (64a661d)
- gateway: report why /v1/compress/response rejected a body (#4081) (5cac7ab)
- grok: attribute api.x.ai chat outcomes as provider xai, recognize grok-shell UA (#2626) (b1fb162)
- install/windows: back persistent-service with an always-on task (#1866) (#2460) (5682883)
- install: distinguish protocol targets in status (#4040) (79f2c27)
- install: keep an explicitly empty dashboard allowlist on Windows PowerShell 5.1 (#4012) (c195a12)
- install: preserve OpenCode edits during reactivation (#4022) (40955b0)
- learn: decode sanitized pattern-id markers and keep visible-text dedup keys (#3956) (ec1ba70)
- learn: make live traffic learning use the shared error classifier (#4110) (e6eaa41)
- learn: pin the learned verbosity level on a cache-mode proxy (#4033) (71663b4)
- logging: add payload-safe helpers for exceptions, URLs, ids and repeat warnings (#4138) (bebe559)
- onnx: stop magika's ORT intra-op pool from spinning idle cores (#4189) (2016dc6)
- openclaw: preserve tool-call thought signatures (#4038) (37f3f9e)
- plugins/openclaw: keep compression system-prompt notice cache-stable (#3811) (f885187)
- pricing: reconcile cache billing with model-specific LiteLLM rates (#3033) (463c1a4)
- providers: drop the shadowed POST /v1/messages route spec (#4075) (69a16cb)
- proxy/bedrock: record the real upstream status on InvokeModel outcomes (#4025) (159daa2)
- proxy/streaming: tolerate malformed upstream SSE events (#2558) (d091fbd)
- proxy: astgrep disk verify truncation (#3192) (1fb4cba)
- proxy: break the compact-every-turn loop near the real context window (#2942) (76cceeb)
- proxy: classify failed streams as failed requests (#3747) (42d4f58)
- proxy: don't retry a 429/529 that cannot succeed within the backoff cap (#3992) (a961a6f)
- proxy: don't send a memory continuation with unanswered client tool calls (#4009) (#4013) (87e05b6)
- proxy: forward x-litellm-key-* headers on streaming path (#2532) (33ade5b)
- proxy: ignore defer_loading when measuring a turn hook's tool delta (#4056) (f8212a3)
- proxy: keep Claude Haiku 5.5 mid-conversation system messages in place (#4153) (a9eb2a7)
- proxy: keep leading Anthropic system payloads valid (#3671) (d9e29bb)
- proxy: log the savings and metrics failures that currently vanish (#4084) (2800932)
- proxy: read stream cache usage from message_delta; keep Fireworks sessions on one replica (#4174) (30b22df)
- proxy: record the provider's billed input count on streamed turns (#4052) (a9815bb)
- proxy: say why proxy.log is missing and why a knob or extension was ignored (#4088) (72302a3)
- release: synchronize editable uv lock version (#4054) (3f99066)
- router: bound ML compression per request, not just per block (#3721) (f37980f)
- router: preserve nested JSON records through compression (#3680) (fd06703)
- savings,ccr: log the ledger and MCP failures that are swallowed silently (#4105) (97680e7)
- savings: don't let a thin holdout arm decide the headline number (#3127) (2a12e03)
- security: resolve 23 open CodeQL alerts (#4045) (a88e2d5)
- security: resolve high-severity CodeQL alerts (#4005) (dea9092)
- smart-crusher: preserve wrapped retrieval results in apply (#4149) (9762a14)
- subscription: log a failed OTEL window update instead of passing silently (#4131) (7d9dd55)
- toin: make diagnostic pattern identifiers addressable (#4021) (def6d41)
- transforms: log failed transforms with tracebacks (#3981) (a654558)
- wrap: carry the shared proxy's extensions over to a dedicated Copilot proxy (#4154) (feea130)
- wrap: let
wrap opencodetarget a third-party OpenAI-compatible upstream (#3125) (0d7d61d) - wrap: reject saved bob gateway URLs the proxy would not route (#3975) (944eafc)
- wrap: trim the wrap claude startup banner (#3900) (aba75cb)
- wrap: warn when reused proxy ignores compression settings (#4019) (278bbc8)
Performance Improvements
Code Refactoring
- backends: reuse the LiteLLM tool converters in the any-llm backend (#4076) (03538f2)
- cli: one missing-binary error for every wrap command (#4122) (2c2357a)
- cli: remove test-only and dead helpers from wrap, proxy and mcp (#4118) (73f59a3)
- compression: deprecate the test-only UniversalCompressor package (#4095) (fc8ff5a)
- core: remove unreferenced helpers, attributes and a shadowed module (#4091) (08fce18)
- graph: drop the bespoke codebase-memory-mcp downloader nothing calls (#4102) (30d23fb)
- mcp_registry: share spec helpers and fold GrokRegistrar onto the Codex TOML registrar (#4121) (6e14ee0)
- memory,learn,cache: remove unreferenced classes, methods and constants (#4112) (abbf36f)
- memory: deprecate the never-wired agent memory writers (#4101) (2e497cb)
- memory: deprecate the orphaned Mem0SystemAdapter (#4114) (7387b8c)
- memory: drop the unused extraction prompts and tool schemas (#4100) (6d23895)
- memory: remove the unused memory budget manager (#4099) (e7ac6ca)
- proxy: delete the unused memory_tool_adapter module (#4071) (7e5d97f)
- proxy: drop the test-only memory ranker and file-backed native memory ops (#4072) (fc5ac70)
- proxy: parse HEADROOM_OUTPUT_HOLDOUT in one place (#4082) (1a4e419)
- proxy: remove dead aliases and wrappers from helpers, body_forwarding, forwarded_headers (#4080) (63cc9af)
- proxy: remove dead wiring and unused re-exports from server.py (#4073) (58387c1)
- proxy: remove test-only and dead helpers from the handlers (#4117) (31d378b)
- proxy: remove the unreachable debug branches from the Responses payload compressor (#4116) (132cd58)
- proxy: remove the unreachable debug branches from the Responses unit router (#4115) (25cc2d5)
- proxy: remove unreferenced and test-only helpers (#4074) (e5cbec5)
- remove test-only compatibility helpers in rollout and agent_savings (#4089) (310c108)
- remove write-only and test-only code in subscription and install (#4123) (c191bee)
- transforms: deprecate the unused Python AnchorSelector port (#4104) (9b1971d)
- transforms: deprecate unused compress_with_stats, extract_batch and align_for_cache (#4098) (e4a1ec1)
- transforms: drop the Python mirror of the Rust log selector (#4096) (a20c76c)
- transforms: drop the Python mirror of the Rust search selector (#4103) (47f8710)
- transforms: remove the unused summarize_dropped_items (#4093) (eaa7308)
- transforms: remove unused convenience wrappers and helpers (#4097) (5c72d82)
Headroom for Teams: 3 months of Headroom Enterprise free with a 12-month plan. Claim the perk →