Commit b88b907
chore: release 0.36.0 (headroomlabs-ai#3067)
🤖 I have created a release *beep* *boop*
---
##
[0.36.0](headroomlabs-ai/headroom@v0.35.0...v0.36.0)
(2026-08-20)
### Features
* add deterministic runtime rollout controls
([headroomlabs-ai#1490](headroomlabs-ai#1490))
([3077ac8](headroomlabs-ai@3077ac8))
* **proxy:** let extensions report cost savings and their own latency
([headroomlabs-ai#3051](headroomlabs-ai#3051))
([f9807fd](headroomlabs-ai@f9807fd))
* **proxy:** unify savings attribution across stats, perf, metrics, and
dashboard
([1b0b0b8](headroomlabs-ai@1b0b0b8)),
closes [headroomlabs-ai#2976](headroomlabs-ai#2976)
* **wrap/claude:** make the --1m fallback model configurable via
HEADROOM_1M_MODEL
([headroomlabs-ai#2983](headroomlabs-ai#2983))
([2a84725](headroomlabs-ai@2a84725))
### Bug Fixes
* **anthropic:** honor the [1m] 1M-context tier, and price it correctly
([headroomlabs-ai#3073](headroomlabs-ai#3073))
([6d2254d](headroomlabs-ai@6d2254d))
* **ccr:** make --no-ccr disable server-side response handling too
([headroomlabs-ai#3101](headroomlabs-ai#3101))
([131b119](headroomlabs-ai@131b119)),
closes [headroomlabs-ai#3082](headroomlabs-ai#3082)
* **ccr:** make StreamingCCRHandler work on OpenAI streams
([headroomlabs-ai#3069](headroomlabs-ai#3069))
([7ef736f](headroomlabs-ai@7ef736f))
* **ccr:** only buffer a stream when a marker is actually redeemable
([headroomlabs-ai#3092](headroomlabs-ai#3092))
([c502087](headroomlabs-ai@c502087))
* **ccr:** re-inject headroom_retrieve when history references it on the
sessionless path
([942af56](headroomlabs-ai@942af56))
* **ccr:** relay a successful upstream turn when post-processing fails
([headroomlabs-ai#3094](headroomlabs-ai#3094))
([0ec73fa](headroomlabs-ai@0ec73fa))
* **ccr:** send Accept: application/json on a buffered stream:false turn
([headroomlabs-ai#3102](headroomlabs-ai#3102))
([139c7cb](headroomlabs-ai@139c7cb)),
closes [headroomlabs-ai#3078](headroomlabs-ai#3078)
* **ccr:** verify a scanned marker's hash before advertising it
([headroomlabs-ai#2908](headroomlabs-ai#2908))
([41dab2d](headroomlabs-ai@41dab2d))
* **ci:** prevent native detector from hanging test shards
([headroomlabs-ai#2996](headroomlabs-ai#2996))
([a708c05](headroomlabs-ai@a708c05))
* **ci:** scope the release credential and stop persisting it to disk
([headroomlabs-ai#3062](headroomlabs-ai#3062))
([ac8646a](headroomlabs-ai@ac8646a))
* **ci:** unjam release and Docker publishing
([headroomlabs-ai#2958](headroomlabs-ai#2958))
([e269afb](headroomlabs-ai@e269afb))
* **claude:** reject conflicting auth before proxy startup
([headroomlabs-ai#2993](headroomlabs-ai#2993))
([2d88e31](headroomlabs-ai@2d88e31))
* **cli/install:** resolve the deployment profile instead of dead-ending
on default
([headroomlabs-ai#2832](headroomlabs-ai#2832))
([8252619](headroomlabs-ai@8252619))
* **cli:** stop the macOS malloc re-exec replacing an embedder's process
([headroomlabs-ai#3064](headroomlabs-ai#3064))
([96c25f5](headroomlabs-ai@96c25f5))
* **copilot:** route VS Code inline completions to Copilot, not OpenAI
([headroomlabs-ai#3077](headroomlabs-ai#3077))
([204e751](headroomlabs-ai@204e751))
* **copilot:** send VS Code inline completions to the host that serves
them ([headroomlabs-ai#3112](headroomlabs-ai#3112))
([b77d612](headroomlabs-ai@b77d612))
* **deps:** bump datasets past PYSEC-2026-3716
([headroomlabs-ai#3136](headroomlabs-ai#3136))
([df6ff6b](headroomlabs-ai@df6ff6b))
* **deps:** clear the two Rust advisories and make cargo audit blocking
([headroomlabs-ai#3121](headroomlabs-ai#3121))
([93c474e](headroomlabs-ai@93c474e))
* **deps:** raise the GitPython floor to 3.1.58 to clear 9 open
advisories
([headroomlabs-ai#3120](headroomlabs-ai#3120))
([8156d4d](headroomlabs-ai@8156d4d))
* **docker:** publish compose ports on loopback only
([headroomlabs-ai#3061](headroomlabs-ai#3061))
([481e0b8](headroomlabs-ai@481e0b8))
* **docker:** ship Bedrock auth and current registry
([headroomlabs-ai#2982](headroomlabs-ai#2982))
([eafdf11](headroomlabs-ai@eafdf11))
* **doctor:** surface that Claude Desktop agent sessions bypass the
proxy ([headroomlabs-ai#2987](headroomlabs-ai#2987))
([be5b26d](headroomlabs-ai@be5b26d))
* **install:** consolidate Windows fallback and cleanup safety
([headroomlabs-ai#2980](headroomlabs-ai#2980))
([ddd2a25](headroomlabs-ai@ddd2a25))
* **install:** honor HEADROOM_PORT in install apply and deploy
([headroomlabs-ai#3085](headroomlabs-ai#3085))
([58f28dc](headroomlabs-ai@58f28dc))
* **install:** stop the PowerShell installer leaking temp dirs into the
real user PATH
([headroomlabs-ai#2985](headroomlabs-ai#2985))
([ddd9f76](headroomlabs-ai@ddd9f76))
* **learn:** include stdout in CLI failure messages, not just stderr
([headroomlabs-ai#3080](headroomlabs-ai#3080))
([c5563d3](headroomlabs-ai@c5563d3))
* **mcp:** restore SDK v1 compatibility cap
([headroomlabs-ai#2978](headroomlabs-ai#2978))
([6077e5a](headroomlabs-ai@6077e5a))
* **memory:** sanitize entity_refs to prevent dict-shaped entries
crashing search
([headroomlabs-ai#2951](headroomlabs-ai#2951))
([2d1e96b](headroomlabs-ai@2d1e96b))
* **onnx:** enforce Rust API-24 runtime compatibility
([headroomlabs-ai#2979](headroomlabs-ai#2979))
([a3fe5cb](headroomlabs-ai@a3fe5cb))
* **openclaw-plugin:** circuit breaker + per-request timeout for proxy
resilience
([headroomlabs-ai#639](headroomlabs-ai#639))
([6576ef6](headroomlabs-ai@6576ef6))
* **opencode:** send x-headroom-project header on all proxied requests
([headroomlabs-ai#2868](headroomlabs-ai#2868))
([eeb038b](headroomlabs-ai@eeb038b))
* **policy:** price net-cost mutations with the 1h cache-write tier
([headroomlabs-ai#2780](headroomlabs-ai#2780))
([ef7e07e](headroomlabs-ai@ef7e07e))
* **providers:** don't crash on a non-object HEADROOM_MODEL_LIMITS /
models.json
([headroomlabs-ai#3089](headroomlabs-ai#3089))
([3ed8f76](headroomlabs-ai@3ed8f76))
* **proxy/anthropic:** don't buffer a CCR stream when passthrough
discards the stream flip
([headroomlabs-ai#2953](headroomlabs-ai#2953))
([f1c34d3](headroomlabs-ai@f1c34d3))
* **proxy/anthropic:** don't replay recorded prefix over live history
([headroomlabs-ai#3026](headroomlabs-ai#3026))
([headroomlabs-ai#3052](headroomlabs-ai#3052))
([c16be9b](headroomlabs-ai@c16be9b))
* **proxy/anthropic:** repair headroom_retrieve history references the
tools array cannot support
([headroomlabs-ai#2876](headroomlabs-ai#2876))
([7de3573](headroomlabs-ai@7de3573))
* **proxy/anthropic:** stop answering a non-streaming turn with an event
stream
([headroomlabs-ai#3142](headroomlabs-ai#3142))
([0e26fb8](headroomlabs-ai@0e26fb8))
* **proxy/cache:** strip cache_control from messages in the semantic
cache key
([headroomlabs-ai#3086](headroomlabs-ai#3086))
([2cae0f8](headroomlabs-ai@2cae0f8))
* **proxy/gemini:** guard CCR continuation usage against present-null
counts
([headroomlabs-ai#3035](headroomlabs-ai#3035))
([a01897c](headroomlabs-ai@a01897c))
* **proxy/openai:** propagate provider usage on the Responses
WS->HTTP fallback
([headroomlabs-ai#2988](headroomlabs-ai#2988))
([536c949](headroomlabs-ai@536c949))
* **proxy:** adapt 200 SSE upstream replies on buffered /v1/responses
instead of 502
([headroomlabs-ai#2622](headroomlabs-ai#2622))
([d76fce0](headroomlabs-ai@d76fce0))
* **proxy:** align signed-thinking wire accounting
([headroomlabs-ai#3015](headroomlabs-ai#3015))
([b3f4436](headroomlabs-ai@b3f4436))
* **proxy:** complete stateless Responses and buffered CCR lifecycle
([headroomlabs-ai#2997](headroomlabs-ai#2997))
([8a1d38b](headroomlabs-ai@8a1d38b))
* **proxy:** guard feedback endpoints and add CSRF checks to loopback
writes
([headroomlabs-ai#3060](headroomlabs-ai#3060))
([a6ab359](headroomlabs-ai@a6ab359))
* **proxy:** keep prefixed core tools resident
([headroomlabs-ai#3046](headroomlabs-ai#3046))
([2f4d001](headroomlabs-ai@2f4d001))
* **proxy:** preserve Codex WebSocket model attribution
([headroomlabs-ai#3029](headroomlabs-ai#3029))
([a06a51e](headroomlabs-ai@a06a51e))
* **proxy:** relocate stray system-role messages to the top-level system
param ([headroomlabs-ai#765](headroomlabs-ai#765))
([headroomlabs-ai#1357](headroomlabs-ai#1357))
([9fde127](headroomlabs-ai@9fde127))
* **proxy:** restore the buffered-CCR heartbeat behind a grace window
([headroomlabs-ai#3091](headroomlabs-ai#3091))
([a29d201](headroomlabs-ai@a29d201))
* **proxy:** scope the signed-thinking lock to blocks that actually
changed
([headroomlabs-ai#3124](headroomlabs-ai#3124))
([17522fb](headroomlabs-ai@17522fb))
* **proxy:** stop a lone surrogate turning a thinking body into a 500
([headroomlabs-ai#3134](headroomlabs-ai#3134))
([284ff31](headroomlabs-ai@284ff31))
* **proxy:** stop cached responses replaying the producing turn's wire
framing
([headroomlabs-ai#3024](headroomlabs-ai#3024))
([9d37059](headroomlabs-ai@9d37059))
* **proxy:** stop operator secrets following a client-chosen upstream
([headroomlabs-ai#3122](headroomlabs-ai#3122))
([05f5ef4](headroomlabs-ai@05f5ef4))
* **proxy:** tune macOS libmalloc and trim allocator pages so long-lived
RSS stays bounded
([headroomlabs-ai#2879](headroomlabs-ai#2879))
([6d87825](headroomlabs-ai@6d87825))
* **reporting:** show net vs gross savings, real skip thresholds, and
the effective profile
([headroomlabs-ai#3123](headroomlabs-ai#3123))
([250ede2](headroomlabs-ai@250ede2))
* tool_search_tool_regex deferred and falsely resolved on
direct-Anthropic path
([headroomlabs-ai#2971](headroomlabs-ai#2971))
([8ea87e7](headroomlabs-ai@8ea87e7))
* **vscode:** persist compatible Claude modes and route Copilot CAPI
([headroomlabs-ai#2986](headroomlabs-ai#2986))
([1aa701a](headroomlabs-ai@1aa701a))
* **wrap:** set xAI upstream for grok-build proxy
([headroomlabs-ai#2772](headroomlabs-ai#2772))
([c831081](headroomlabs-ai@c831081))
* **wrap:** stop the Serena pre-index stalling the launch path for 300s
([headroomlabs-ai#2945](headroomlabs-ai#2945))
([6147883](headroomlabs-ai@6147883))
* **wrap:** verify proxy deps before mutating Codex config
([headroomlabs-ai#1628](headroomlabs-ai#1628))
([b7f342c](headroomlabs-ai@b7f342c))
### Performance Improvements
* **perf:** skip rotated logs outside the requested window
([headroomlabs-ai#3081](headroomlabs-ai#3081))
([6c9f41e](headroomlabs-ai@6c9f41e))
### Dependencies
* bump axum from 0.7.9 to 0.8.9
([headroomlabs-ai#2966](headroomlabs-ai#2966))
([5731be7](headroomlabs-ai@5731be7))
* bump criterion from 0.5.1 to 0.8.2
([headroomlabs-ai#2965](headroomlabs-ai#2965))
([b30f339](headroomlabs-ai@b30f339))
* bump ruff from 0.15.22 to 0.16.2 in the pip-minor-patch group across 1
directory
([headroomlabs-ai#2962](headroomlabs-ai#2962))
([ff17961](headroomlabs-ai@ff17961))
* bump sha2 from 0.10.9 to 0.11.0
([headroomlabs-ai#2288](headroomlabs-ai#2288))
([322425c](headroomlabs-ai@322425c))
* bump the cargo-minor-patch group across 1 directory with 4 updates
([headroomlabs-ai#2964](headroomlabs-ai#2964))
([888a9f4](headroomlabs-ai@888a9f4))
* bump tokio-tungstenite from 0.24.0 to 0.30.0
([headroomlabs-ai#2967](headroomlabs-ai#2967))
([bbe9013](headroomlabs-ai@bbe9013))
* update mcp requirement from <2.0.0,>=1.28.1 to
>=1.28.1,<3.0.0
([headroomlabs-ai#2963](headroomlabs-ai#2963))
([d6fb536](headroomlabs-ai@d6fb536))
---
This PR was generated with [Release
Please](https://github.com/googleapis/release-please). See
[documentation](https://github.com/googleapis/release-please#release-please).
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>1 parent 0e26fb8 commit b88b907
12 files changed
Lines changed: 108 additions & 19 deletions
File tree
- .claude-plugin
- .github/plugin
- plugins
- headroom-agent-hooks
- .claude-plugin
- .github/plugin
- openclaw
- opencode
- sdk/typescript
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
| 8 | + | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5 | 5 | | |
6 | 6 | | |
7 | 7 | | |
8 | | - | |
| 8 | + | |
9 | 9 | | |
10 | 10 | | |
11 | 11 | | |
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | | - | |
5 | | - | |
6 | | - | |
7 | | - | |
8 | | - | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
9 | 9 | | |
10 | 10 | | |
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
0 commit comments