Skip to content

Releases: headroomlabs-ai/headroom

Release v0.31.0

Choose a tag to compare

@chopratejas chopratejas released this 09 Jul 15:19
55efb1c

What's Changed

  • fix(dashboard): price proxy savings without litellm by @rodboev in #1728
  • fix(proxy): surface codex websocket loop failures in livez by @rodboev in #1727
  • fix(savings): guard non-finite numeric coercion by @inix-x in #1769
  • feat(content-router): accept any real compression (remove min-savings floor) by @chopratejas in #1771
  • fix(content-router): token-measure lossless folds at the acceptance gate by @chopratejas in #1772
  • fix(opencode): expose headroom/* models in injected provider config by @Parideboy in #1716
  • Wire OpenAI Responses output shaping by @amcfague in #1438
  • perf(proxy): cap compression workers to CPU count by @rodboev in #1803
  • fix(proxy): bound Codex WS compression fallback latency by @rodboev in #1802
  • fix(transforms): normalize diff compressor context by @rodboev in #1801
  • feat(proxy): add provider-only HTTP proxy by @amcfague in #1807
  • perf(savings): batch tracker persistence off the request hot path by @inix-x in #1817
  • fix(dashboard): deduplicate repeated savings metrics by @rodboev in #1804
  • fix(opencode): use local MCP config by @rudironsoni in #1383
  • fix(copilot): normalize subscription routing host by @rodboev in #1836
  • fix(proxy): cancel retry backoff on shutdown by @rodboev in #1834
  • feat(content-router): lossless-first dispatch, cross-turn dedup, and A7 lossy-after-fold by @chopratejas in #1818
  • fix(proxy): strip 1m model suffix before upstream forwarding by @aivinay in #1840
  • fix(docker): persist headroom workspace in compose by @aivinay in #1839
  • fix: detect and clear stale ANTHROPIC_BASE_URL from crashed wrap sessions (#1768) by @Parideboy in #1837
  • fix(proxy): freeze must forward cached (compressed) prefix byte-identical — stop token-mode cache busting by @chopratejas in #1850
  • fix(build): enable Intel macOS pip installs via ort-load-dynamic by @2rob in #1538
  • fix(proxy): retry passthrough on transient upstream connection close by @gaurav0107 in #1513
  • fix(proxy): keep cache_control bounded + stable so the freeze overlay stops busting by @chopratejas in #1852
  • fix(proxy/openai): thread savings-profile kwargs into chat completions by @abhay-codes07 in #1606
  • fix(proxy): retry HTTP/2 stream resets instead of 502ing by @tenderdeve in #1645
  • fix(codex): OpenCode Zen telemetry attribution by @aivinay in #1648
  • fix(proxy): persist lifetime cache-read savings across restarts by @inix-x in #1665
  • fix: correct Go AST compression bugs and CODE_AWARE token accounting by @shekharcharles in #1668
  • fix(install): persist --no-http2 override through install apply by @rodboev in #1676
  • fix(wrap): replace stale-proxy detection with Vite-style port fallback by @lennney in #1406
  • fix(proxy): stop rtk stat failures from corrupting session baseline by @inix-x in #1693
  • fix(rtk): link managed rtk onto PATH instead of mutating the hook by @tenderdeve in #1698
  • fix(install): pass sc.exe create as raw command line so binPath= quoting survives (#1654) by @Parideboy in #1702
  • docs: add pipeline-extension recipe and x-headroom-base-url routing docs by @Parideboy in #1712
  • fix(transforms): pass through ragged tables instead of misaligning columns by @Parideboy in #1713
  • fix(proxy): bound HF tokenizer load and offload token counting off event loop by @Parideboy in #1738
  • fix(content-detector): detect and compress space-separated JSON objects by @rohanprichard in #1742
  • fix(code-compressor): CJK-aware relevance-query symbol matching by @lifeodyssey in #1747
  • docs(readme): correct lean-ctx comparison row by @ketpatil77 in #1754
  • [codex] docs: remove retired IntelligentContext copy by @ketpatil77 in #1756
  • [codex] docs: add Codex install note by @ketpatil77 in #1757
  • docs(readme): update lean-ctx comparison row by @Parideboy in #1711
  • [codex] docs: add pipeline extension recipe by @ketpatil77 in #1758
  • fix(proxy/openai): translate max_tokens -> max_completion_tokens on chat path by @chopratejas in #1774
  • fix(ccr): make expired retrieve misses terminal by @rodboev in #1781
  • fix(toin): publish skip compression recommendations by @rodboev in #1782
  • fix(proxy): preserve streaming passthrough beta headers by @rodboev in #1783
  • fix(mcp): surface dead proxy state by @rodboev in #1786
  • fix(proxy): subtract cache write premiums from net savings by @rodboev in #1800
  • fix(streaming): preserve server_tool_use sse blocks by @rodboev in #1826
  • fix(cache): avoid fallback session collisions by @rodboev in #1827
  • Install using uv tool globally by @burkestar in #1829
  • agent_savings: don't crash the proxy on an unknown savings profile by @gglucass in #1830
  • fix: use rtk native Cursor hook instead of injecting .cursorrules (#756) by @Parideboy in #1846
  • fix(proxy): serve /favicon.ico locally instead of tunneling upstream (#1787) by @Parideboy in #1847
  • fix(proxy): release _active_streams session lock on setup-phase errors by @orty in #1864
  • fix(router): honor MCP aliases in excluded tools (#1822) by @aivinay in #1863
  • fix(learn): decode Windows drive-style project dirs with dotted usernames by @Parideboy in #1855
  • docs(orchestration): guide repeated agent wakes with CCR by @rodboev in #1871
  • docs: retire IntelligentContext from README and installation guide by @bhavyachopra99 in #1445
  • fix(proxy): fsync savings dir after atomic rename by @inix-x in #1764
  • fix(copilot): route mixed-model requests per model by @rodboev in #1785
  • fix(docker): report source build version by @aivinay in #1862
  • feat(cache): provider-agnostic cache-mode delta + cc-agnostic prefix comparison by @chopratejas in #1868
  • Tejas/tool search deferral by @chopratejas in #1885
  • fix(proxy): route Foundry Anthropic messages by @aivinay in #1878
  • fix(proxy): compress Anthropic user text blocks when enabled by @julienguarino in #1875
  • fix(codex): discover updated Codex state stores by @rodboev in #1889
  • fix(mcp): isolate ClaudeRegistrar CLI config env by @rodboev in #1888
  • fix(memory): resolve Trae cwd metadata from user reminders (#1737) by @rodboev in #1887
  • feat(proxy): add turn-hook extension point for buffered model turns by @chopratejas in #1891
  • fix(dashboard): distinguish unavailable RTK from zero stats in Docker by @rodboev in #1900
  • fix(ccr): preserve thinking blocks in buffered stream re-synthesis by @rodboev in #1897
  • fix(ccr): preserve Anthropic re-stream shape by @eggrollofchaos in #1854
  • fix(evals): default unparseable judge sco...
Read more

Release v0.30.0

Choose a tag to compare

@chopratejas chopratejas released this 03 Jul 19:22
728b330

What's Changed

  • feat(agent-savings): land coding + general workload personas on main by @chopratejas in #1732
  • feat(content-router): lossless-excluded compaction (grep/log/json) + enable in coding/general personas by @chopratejas in #1762
  • feat(anthropic): add Claude 5 family pricing & align current rates by @KennethWKZ in #1767
  • fix(relevance): gate ONNX embedding backend behind AVX2 to avoid SIGILL (#1723) by @Parideboy in #1765

Full Changelog: v0.29.0...v0.30.0

Release v0.29.0

Choose a tag to compare

@chopratejas chopratejas released this 03 Jul 06:30
660fa8c

What's Changed

  • fix(opencode): route native providers + load transport plugin, fix Serena context by @chopratejas in #1573
  • fix(pricing): resolve MiniMax-M3 (provider prefix + pre-registration) by @shreyassks in #1186
  • fix(learn): aggregate verbosity baselines across projects instead of overwriting by @gglucass in #1288
  • fix: preserve anthropic passthrough tool order by @aivinay in #1427
  • fix(mcp): show lifetime totals and label rolling session scope in headroom_stats by @rodboev in #1428
  • fix(opencode): preserve custom OpenAI gateway paths by @rodboev in #1596
  • docs: clarify the headroom CLI is pip-only; npm headroom-ai is the TS SDK by @tenderdeve in #1585
  • fix: skip Magika backend on x86 CPUs without AVX2 by @dwizzle204 in #1162
  • fix(savings): count cache-read tokens in input cost estimate by @gglucass in #1429
  • fix(proxy): fail open when kompress saturation would exhaust pre-upstream budget by @rodboev in #1430
  • fix(codex): avoid duplicate headroom provider config by @rudironsoni in #1431
  • fix(proxy): handle streaming CCR retrieval by @aivinay in #1451
  • fix(wrap): detach the shared proxy on Windows so it survives an ungraceful agent close by @quentinmaisonneuve in #1464
  • fix(cortex-code): migrate to current Cortex REST API endpoints + add e2e benchmarks by @sfc-gh-nashukla in #1474
  • fix(wrap): preserve custom Vertex base URL by @aivinay in #1477
  • fix(openclaw): detect uv-installed headroom binary in ~/.local/bin by @Ru0k3 in #1459
  • ci: guard against committed merge-conflict markers by @wolph in #1505
  • fix(dashboard): derive per-project setup URL from live origin by @rodboev in #1511
  • fix(evals): CJK-aware F1 tokenization + token estimation by @lifeodyssey in #1527
  • fix(proxy): preserve Responses passthrough bytes by @aivinay in #1598
  • fix(proxy): include system/tools/sampling in cache key by @inix-x in #1473
  • fix(compression): reject lossy unmarked tool output in unit router path by @rodboev in #1479
  • feat(proxy): add --force-kompress-all to route all content through kompress-v2-base by @chopratejas in #1613
  • chore: add CODEOWNERS with maintainer catch-all by @chopratejas in #1622
  • fix(detection): contain unidiff panic on orphaned +++ target line by @tenderdeve in #1548
  • fix(memory): cap local embedder CPU thread oversubscription (#198) by @Krishnachaitanyakc in #1559
  • fix(install): use Windows-safe PID liveness probe in runtime_status (#1544) by @Parideboy in #1560
  • chore(deps): bump transformers from 5.0.0 to 5.3.0 in the uv group across 1 directory by @dependabot[bot] in #1662
  • fix(ccr): honor workspace dir for sqlite store by @rodboev in #1564
  • fix(transforms): bound native content detection with a Windows watchdog (#575) by @Parideboy in #1563
  • fix(bedrock): fail fast when session-token auth lacks botocore by @tenderdeve in #1553
  • fix: Vertex AI support for Claude Code with ANTHROPIC_VERTEX_BASE_URL by @vladgrish in #1393
  • fix(proxy): honor x-headroom-base-url in dedicated OpenAI handlers by @ShutovKS in #1502
  • fix(install): close parent log fd in start_detached_agent by @abhay-codes07 in #1576
  • fix(claude): surface Remote Control proxy incompatibility by @rodboev in #1610
  • fix(proxy): wire --compression-max-workers / HEADROOM_COMPRESSION_MAX_WORKERS by @gglucass in #1632
  • fix(cli): stop advertising unwired compression tuning env vars in banner by @gglucass in #1634
  • fix(learn): honor CLAUDE_CONFIG_DIR when locating Claude logs and memory by @tenderdeve in #1642
  • fix(proxy): expose persistent savings metrics by @aivinay in #1647
  • fix(dashboard): align token savings headline denominator by @chris-yyau in #1653
  • fix(proxy): strip Codex lite header on the HTTP /responses path by @gglucass in #1663
  • docs(proxy): correct --code-aware default to disabled by @Parideboy in #1710
  • feat(stats): surface Codex WS compression counters in /stats summary by @gglucass in #1680
  • fix(proxy/auth): match real Anthropic OAuth token prefix (sk-ant-oat) by @abhay-codes07 in #1672
  • fix(transforms/content-router): detect on inner tool-output payload by @chopratejas in #1717
  • fix(memory): singleflight LocalBackend init to stop cold-start races by @tenderdeve in #1691
  • fix(transforms/content-router): route grep/log output away from HTML extractor by @chopratejas in #1719
  • feat(proxy): add --lossless no-CCR mode with format-native compaction by @chopratejas in #1721
  • fix(bedrock): route ARNs via converse, named AWS profiles, and au. re… by @mhaitana in #1456
  • perf(proxy): offload image compression off event loop by @inix-x in #1612
  • fix(wrap): remove rtk instructions from Codex AGENTS.md on unwrap by @abhay-codes07 in #1604
  • feat(transforms): adaptive Otsu KEEP/DROP threshold (+ land relevance split on main) by @chopratejas in #1726
  • chore: release main by @github-actions[bot] in #1574

New Contributors

Full Changelog: v0.28.0...v0.29.0

Release v0.28.0

Choose a tag to compare

@DevanshiVyas DevanshiVyas released this 29 Jun 21:31
aea3c35

0.28.0 (2026-06-29)

Features

  • add --disable-kompress-fallback to restore legacy PASSTHROUGH fallback (#1185) (f309244)
  • add first-class OpenCode support (wrap, learn, mcp install) (#559) (91cd210)
  • add HEADROOM_KEEPALIVE_EXPIRY to keep upstream connections warm (#1124) (85786b3)
  • azure-foundry: derive upstream URL from ANTHROPIC_FOUNDRY_RESOURCE (#1138) (e5031b0)
  • cache: attribute prompt-cache misses to TTL lapse vs prefix change (#1313) (#1343) (4658721)
  • code: add Perl support to code-aware compressor (#1125) (f39858c)
  • headroom wrap opencode / unwrap opencode CLI (#1105) (b4571cc)
  • learn: weight loops in Headroom Learn + RTK-loop eval (#1160) (14e8dc4)
  • learn: write per-project learnings to CLAUDE.local.md by default (#1115) (ced75e4)
  • proxy: add request timeout config (#738) (c0745d4)
  • proxy: pilot hardening — inbound auth, security headers, audit log, air-gap switch (#1537) (546ab55)
  • proxy: support glob patterns in exclude_tools (#870) (#1259) (a2159c0)
  • read-maturation: activity-based hold-back Read maturation (Mechanism B) (#1068) (723b80c)
  • savings: durable savings ledger + headroom savings command (#1127) (978ffa0)
  • wrap: add --1m to preserve the 1M context window on wrap claude (#1158) (#1351) (b50d9c1)
  • wrap: make tokensave the primary coding-task compressor, Serena the backup (#1230) (dca9853)

Bug Fixes

  • agent-evals: Phase 0 — coding-agent accuracy A/B framework (#1037) (84f9871)
  • agno: tolerate streaming tool-call SDK objects in parser (#1312) (#1336) (5986c22)
  • bedrock: add boto3 1.41 + CRT for aws login credentials (#1486) (4db3bc9)
  • bump codebase-memory-mcp to v0.8.1 (#1284) (530318b)
  • ccr: make headroom_retrieve a hash-only full-content lookup (#1532) (c2fc4d3)
  • ccr: propagate --no-ccr-marker flag to all compressors (#1022) (#1197) (0c9b42a)
  • ccr: skip Anthropic marker emission when tool injection is deferred (#1273) (2cae13d)
  • ci: extend gitleaks allowlist to cover test fixtures + verified examples (#1539) (d2565a6)
  • ci: guarantee model present in test shards to end cache-miss flakiness (#1399) (2e29c72)
  • ci: normalize Windows CRLF line endings in PR governance script (#1012) (5194388)
  • cli: add explicit UTF-8 encoding to file I/O in wrap commands (#1126) (#1164) (a0cb798)
  • cli: fall back gracefully when embedding-server sidecar is absent (#1206) (38f1404)
  • cli: harden all CLI surfaces + fix docs accuracy (#1491) (bd76235)
  • cli: wire --http2/--no-http2 (HEADROOM_HTTP2) into proxy command (#1373) (e06b616)
  • cli: wire --rpm/--tpm and HEADROOM_RPM/HEADROOM_TPM to the Click proxy command (#1375) (8aab8f2)
  • code: slice tree-sitter byte offsets as UTF-8 (#1332) (8238402)
  • code: validate Python compressed syntax (#1302) (cbd361d)
  • code: verify a real parse in tree-sitter availability check (#1231) (#1299) (5e0bb69)
  • codex: retag threads on init so Codex Desktop history stays visible (#961) (#1349) (e6bbc40)
  • codex: stop pinning Codex memory MCP to one project db (#1269) (ad7993b)
  • dashboard: include RTK stats in the historical tab (#1324) (35939c3)
  • deps: remediate dependency CVEs and publish SBOM (#1509) (5771a80)
  • docker: persist session history across container revisions (#1118) (5912d65)
  • gemini: offload compression to the executor ([#1382](https://github.com/headroomlabs-ai/hea...
Read more

Release v0.27.0

Choose a tag to compare

@chopratejas chopratejas released this 22 Jun 05:57
95b2333

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 --memory sync (#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)

Release v0.26.0

Choose a tag to compare

@chopratejas chopratejas released this 16 Jun 23:13
b81a4a7

0.26.0 (2026-06-16)

Features

  • add Copilot BYOK provider wrapper utilities and CLI support (#1041) (e67ee2a)
  • add dashboard agent usage stats (#814) (6d3f39f)
  • Add support for Mistral Vibe CLI (#935) (0932b8b)
  • attribute reread waste to over-compression via marker check (#901) (f928576)
  • bedrock: cross-region + Converse compression; bundle proxy binary in images (#999) (0dc2e1c)
  • dashboard: surface compression-vs-cache net impact in Prefix Cache panel (#913) (2a4d300)
  • evals: adversarial-input robustness grid for compressors (#918) (5939004)
  • parser: detect re-issued identical tool calls as reread waste (#909) (7d4ae86)
  • policy: batch deep edits through one cache-bust (#856 P3a) (#1015) (c2e52fe)
  • policy: consume net-cost mutation gate in ContentRouter (#856 P2) (#905) (553ade4)
  • proxy: compress AWS Bedrock InvokeModel requests via configurable upstream (#720) (7edb27a)

Bug Fixes

  • anthropic: strip styled Claude model ids (#651) (0c5c89d)
  • anyllm: forward openai api_base/api_key to the any-llm backend (#942) (#954) (a7ee8a6)
  • cache: guard None exemplar embeddings in dynamic detector (#950) (1ec9320)
  • cache: name the missing piece in semantic detector guard (#1018) (3b0bcee)
  • ci: check out repo in PR Governance label job (#1021) (4558bc2)
  • ci: make PR governance advisory (#1047) (74dff94)
  • codex: compute waste signals on the OpenAI Responses path (#898) (b9e2761)
  • codex: poll /wham/usage for subscription limits (handshake no longer sends x-codex-* headers) (#924) (8c00f71)
  • codex: PR health label check state (#986) (99c874d)
  • codex: retag thread providers so history menu stays whole across the proxy boundary (#1034) (74ae781)
  • codex: write canonical hooks feature flag and migrate deprecated codex_hooks (#743) (dff6a19)
  • compression: convert tree-sitter byte offsets to char offsets (#892) (b1f700f)
  • compression: correct JSON array item counting and entropy gate (#887) (d6f0f0f)
  • compression: keep container bodies compressible in code handler (#890) (16ed73b)
  • compression: measure short-value threshold on payload, not token (#889) (65b0e8c)
  • compression: use thread-local tree-sitter parsers in code handler (#893) (6cdb846)
  • gemini: surface functionResponse payloads to waste-signal detection (#897) (9b0c840)
  • learn: decode directory names with spaces in Windows project paths (#997) (#1027) (2d3701b)
  • learn: scan subagent and workflow transcripts (#1045) (0ddd4ed)
  • openclaw: declare headroom_retrieve tool contract (#947) (7c8c909)
  • policy: correct warm-cache penalty in net_mutation_gain to (S + dT) (#903) (0632eba)
  • proxy: add native Bedrock converse-stream route (#917) (b08ec15)
  • proxy: keep codex image-generation WS turns alive through the relay (#1000) (7dbbb40)
  • proxy: make budget enforcement actually work (#885) (a14ab45)
  • proxy: read RTK gain stats globally by default (#957) (b70fccb)
  • route v1internal code assist requests to cloudcode-pa.googleapis… (#821) (e20f16b)
  • serena: stop the Serena dashboard popup and make --no-serena actually disable Serena (#1003) (919379a)
  • support Copilot Business subscription auth (#641) (0b4a4bd)
  • wire HEADROOM_EXCLUDE_TOOLS / HEADROOM_TOOL_PROFILES into Click proxy entrypoint (#943) (9b7b436)
  • wrap: avoid duplicate top-level keys when injecting codex provider (#884) (dd22cfd)

Code Refactoring

  • DRY cache logic, add thread safety, fix Bash exclusion (#704) (e36fccd)

Release v0.25.0

Choose a tag to compare

@chopratejas chopratejas released this 12 Jun 06:29
8a53c8e

0.25.0 (2026-06-12)

Features

  • add differential network capture harness (#761) (11ab5f8)
  • add light mode for dashboard (#834) (c425893)
  • add OAuth2 client-credentials upstream-auth proxy extension (#778) (#784) (eb2e50f)
  • add Vertex AI proxy routing (#793) (3c77e52)
  • cli: comprehensive help text, validation, and exception handling improvements (#640) (028efab)
  • compression safety rails — error-output protection, pipeline circuit breaker, library inflation guard (#851) (c0cadcc)
  • dashboard: per-model savings breakdown and expected-vs-actual cost on historical charts (#807) (34dafe6)
  • detect re-served tool results as over-compression waste signal (#854) (5f1d88a)
  • evals: add zero-cost tool schema compaction integrity eval (#817) (53a08c6)
  • gated Markdown-KV compaction formatter (serialization-aware output) (#859) (06b2625)
  • kompress: warn on unrecognized HEADROOM_KOMPRESS_BACKEND + document backend selection (#204) (6367d0b)
  • memory: add opt-in Apple-GPU (MPS) embedding runtime (#766) (c71592d)
  • net-cost cache mutation formula on CompressionPolicy (#856 P1) (#857) (d5f5802)
  • plugins: Hermes agent headroom_retrieve plugin (#824) (058bced)
  • probe-based retention scoring of recorded compression events (#862) (c2106cb)
  • proxy: add CLI opt-outs for CCR injection (compression-only mode) (#823) (693d9d2)
  • proxy: attribute savings history rollups per provider (#791) (0b8b8d9)
  • proxy: log compressed messages alongside original request (#261) (2269e40)
  • proxy: per-project savings breakdown on the dashboard (claude, codex, aider, copilot, cursor) (#803) (914a60a)
  • support Python 3.14+ via pyo3 abi3 stable ABI (#516) (19eac8e)
  • switch Kompress default to kompress-v2-base with weight-only int8 ONNX (#799) (74392b2)
  • transforms: attribute read_lifecycle + smart_crush tags (#249) (8f37426)

Bug Fixes

  • anthropic: CCR exception must re-raise, not silently swallow (#838) (8db5efc)
  • ccr: key Rust search/diff/log markers with explicit_hash (#852) (bfcb07d)
  • ccr: make retrieval TTL configurable (#715) (2533f77)
  • ccr: skip CCR when model calls headroom_retrieve alongside user tools (#839) (30078f8)
  • ccr: use shared compression store (#875) (249af6c)
  • ci: correct comments, timeouts, and pip reliability in native e2e workflows (#878) (b716c8c)
  • ci: pin cosign-installer to v3 (v4 does not exist) (#774) (199d693)
  • codex: respect CODEX_HOME for wrap config (#731) (96abf38)
  • content_router: guard against empty compression output causing Anthropic 400 (#771) (2f9ff07)
  • copilot: use responses API for subscription reasoning models (#647) (84ac332)
  • correct preserved-entry index mapping in Gemini content round-trip (#836) (0ffe2b6)
  • dashboard: stable 'Proxy $ Saved' hero tile under --workers > 1 (#481) (fd73b88)
  • don't inject empty tools:[] when client omitted the tools field (#772) (574bbae)
  • harden Copilot API auth token handling (#557) (6b0c09f)
  • health: readyz verifies upstream connectivity, not just process liveness (#744) (5dfb446)
  • init: guard persistent task startup (#616) (9252d85)
  • init: normalize Windows hook paths to forward slashes (#788) (6ea6e31)
  • init: suppress hook recovery output (#760) (b439599)
  • learn: claude-cli streams output with idle timeout (#373) (9bff575)
  • make headroom wrap readiness probe timeout configurable for slow ML imports (#581) (163677b)
  • parser: detect waste signals in Anthropic tool_result content blocks (#815) (929698a)
  • proxy: F4 — trust ...
Read more

Release v0.24.0

Choose a tag to compare

@chopratejas chopratejas released this 09 Jun 04:57
01762b1

0.24.0 (2026-06-08)

Features

  • perf: add --format {text,json,csv} to headroom perf (#648) (9fe4886)
  • proxy: show resolved upstream API targets in startup banner (#586) (8dbe7ad), closes #583
  • relevance: weight BM25 score_batch by corpus IDF (#646) (88177bd)
  • support CLAUDE_CODE_USE_FOUNDRY and custom upstream gateways (#726) (d90cdce)

Bug Fixes

  • ci: restore green lint gate on main (fe50f9d)
  • codex: auto-enable fail-open on compression timeout in headroom wrap codex (#531) (5f5f261)
  • copilot: restore generic endpoint for non-subscription OAuth (#610) (#612) (18925b8)
  • deps: move gunicorn to [proxy-prod] extra, add Windows guard (#537) (fa558c5)
  • proxy: fail-open on corrupt golden bytes instead of RuntimeError (#603) (2170a1b)
  • proxy: route Claude Code model metadata to Anthropic (#627) (30c1ac8)
  • security: patch loopback guard, retry None raise, async subprocess, and cache race (06d7cb9)
  • security: patch loopback guard, retry None raise, blocking subprocess, and cache stats race (78f3a4d)
  • startup: move HF/httpx log suppression before sentence_transformers init (#622) (176d4c7)
  • startup: suppress proxy startup log noise (#619) (4555901)
  • wrap: report unbindable proxy ports (#602) (6dfcaa8)

[Unreleased]

Bug Fixes

  • deps: move gunicorn to [proxy-prod] extra with sys_platform != 'win32' guard; removed from [proxy] to avoid forcing a Unix-only package on dev, CI, and Windows users (#537)
  • startup: suppress proxy startup log noise — litellm banner, trafilatura parse errors, HuggingFace Hub unauthenticated warnings, tiktoken fallback warning, and httpx INFO lines from sentence_transformers HEAD checks. Affected files: headroom/providers/litellm.py, headroom/transforms/html_extractor.py, headroom/memory/adapters/embedders.py, headroom/providers/anthropic.py, headroom/providers/registry.py, headroom/image/onnx_router.py, headroom/transforms/kompress_compressor.py.

Release v0.23.0

Choose a tag to compare

@chopratejas chopratejas released this 04 Jun 14:21
8006293

0.23.0 (2026-06-04)

Features

  • copilot: GitHub Copilot subscription mode through Headroom (f4dff9b)

Bug Fixes

  • ccr: scope proactive expansion by workspace (cross-project leak) (197601b)
  • ccr: scope proactive expansion by workspace (cross-project leak) (1bc163f)
  • codex: keep init model_provider at config root (#260) (304dcc7)
  • codex: keep init model_provider at config root (#260) (849b46d)
  • copilot: deterministic subscription token handoff to the proxy (72da461)
  • copilot: support subscription auth through Headroom (ff4a0c6)
  • correct tiktoken encoding for unknown gpt-4 model snapshots (#552) (0e551de)
  • decode/encode owned config, state and template assets as UTF-8 (2f1538a)
  • decode/encode owned config, state and template assets as UTF-8 (fixes #533) (92075b9)
  • docker: upgrade base images to Python 3.13 / debian13 (e6bf7a0)
  • docker: upgrade base images to Python 3.13 / debian13, drop digest pinning (08a2197)
  • docs: bump next.js to 16.2.6 for GHSA-h64f-5h5j-jqjh (CVE-2026-44577) (a6a09e6)
  • docs: mkdocs configuration to build with correct folder (#543) (5557944)
  • docs: update brace-expansion to 5.0.6 to remediate GHSA-jxxr-4gwj-5jf2 (CVE-2026-45149) (6eb6fb5)
  • docs: update bun.lock to next 16.2.6 for GHSA-h64f-5h5j-jqjh (CVE-2026-44577) (91e0937)
  • ignore brackets inside JSON strings when splitting mixed content (#553) (bdcfc32)
  • learn: decode Unix home dirs whose username contains '.', '-' or '_' (211daae)
  • learn: decode Unix home dirs whose username contains '.', '-' or '_' (491a8b3)
  • learn: finish gemini-flash-latest default model sweep (982d01b)
  • learn: finish gemini-flash-latest default model sweep (#532) (d797366)
  • memory: READ-ONLY framing + fail-closed unresolved-project fallback (a178249)
  • memory: READ-ONLY framing + fail-closed unresolved-project fallback (482f80e)
  • update dashboard doc link (#544) (378d77e)
  • Update Next.js to 16.2.4 in docs/bun.lock to address GHSA-gx5p-jg67-6x7h (CVE-2026-44580) (0b9f11a)
  • Update Next.js to 16.2.6 in docs/package.json and package-lock.json to address GHSA-h64f-5h5j-jqjh (CVE-2026-44577) (db5d15f)
  • Upgrade litellm to 1.86.2 to remediate CVE-2026-42271 (07581b9)

Code Refactoring

  • cli: factor shared wrap-subcommand scaffolding (8eeb926)
  • cli: factor shared wrap-subcommand scaffolding (c74ad11)

Release v0.22.4

Choose a tag to compare

@chopratejas chopratejas released this 01 Jun 22:38
cc71e07

What's Changed

  • fix(cli): wrap CLI breadth — cline, continue, goose, openhands by @chopratejas in #492
  • fix(subscription): wire tokens_saved_rtk data plane by @chopratejas in #493
  • fix(observability): RTK metrics + Rust observability (Phase H blocker) by @chopratejas in #494
  • ci(release): adopt release-please for gated publishes by @chopratejas in #495
  • fix(release): tag format vX.Y.Z (drop release-please component prefix) by @chopratejas in #497

Full Changelog: v0.22.3...v0.22.4