Mirror of headroomlabs-ai/headroom (AI context compression proxy)
Find a file
dependabot[bot] 148d8605e2
deps: bump the cargo-minor-patch group across 1 directory with 22 updates (#2916)
Bumps the cargo-minor-patch group with 21 updates in the / directory:

| Package | From | To |
| --- | --- | --- |
| [serde_json](https://github.com/serde-rs/json) | `1.0.150` | `1.0.151`
|
| [thiserror](https://github.com/dtolnay/thiserror) | `2.0.18` |
`2.0.19` |
| [anyhow](https://github.com/dtolnay/anyhow) | `1.0.103` | `1.0.104` |
| [clap](https://github.com/clap-rs/clap) | `4.6.2` | `4.6.6` |
| [tokio](https://github.com/tokio-rs/tokio) | `1.52.3` | `1.53.1` |
| [pyo3](https://github.com/pyo3/pyo3) | `0.29.0` | `0.29.2` |
| [aws-config](https://github.com/smithy-lang/smithy-rs) | `1.9.0` |
`1.10.1` |
| [aws-smithy-runtime-api](https://github.com/smithy-lang/smithy-rs) |
`1.13.0` | `1.14.0` |
| [unidiff](https://github.com/messense/unidiff-rs) | `0.4.0` | `0.4.1`
|
| [aho-corasick](https://github.com/BurntSushi/aho-corasick) | `1.1.4` |
`1.1.5` |
| [toml](https://github.com/toml-rs/toml) | `1.1.3+spec-1.1.0` |
`1.1.4+spec-1.1.0` |
| [blake3](https://github.com/BLAKE3-team/BLAKE3) | `1.8.5` | `1.8.6` |
| [http](https://github.com/hyperium/http) | `1.4.2` | `1.5.0` |
| [futures](https://github.com/rust-lang/futures-rs) | `0.3.32` |
`0.3.33` |
| [hyper](https://github.com/hyperium/hyper) | `1.10.1` | `1.11.0` |
| [bytesize](https://github.com/bytesize-rs/bytesize) | `2.4.2` |
`2.7.0` |
| [tokio-util](https://github.com/tokio-rs/tokio) | `0.7.18` | `0.7.19`
|
| [lru](https://github.com/jeromefroe/lru-rs) | `0.18.1` | `0.18.2` |
| [async-trait](https://github.com/dtolnay/async-trait) | `0.1.89` |
`0.1.91` |
| [tokio-stream](https://github.com/tokio-rs/tokio) | `0.1.18` |
`0.1.19` |
| [cc](https://github.com/rust-lang/cc-rs) | `1.2.67` | `1.4.1` |


Updates `serde_json` from 1.0.150 to 1.0.151
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/serde-rs/json/releases">serde_json's
releases</a>.</em></p>
<blockquote>
<h2>v1.0.151</h2>
<ul>
<li>Add RawValue::from_string_unchecked (<a
href="https://redirect.github.com/serde-rs/json/issues/1331">#1331</a>,
thanks <a
href="https://github.com/WonderLawrence"><code>@​WonderLawrence</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="de8500740c"><code>de85007</code></a>
Release 1.0.151</li>
<li><a
href="3b2b3c5f28"><code>3b2b3c5</code></a>
Merge pull request <a
href="https://redirect.github.com/serde-rs/json/issues/1331">#1331</a>
from WonderLawrence/rawvalue-from-string-unchecked</li>
<li><a
href="0406d96860"><code>0406d96</code></a>
Debug-assert well-formedness and no-whitespace in
from_string_unchecked</li>
<li><a
href="cf16f75d81"><code>cf16f75</code></a>
Add RawValue::from_string_unchecked</li>
<li><a
href="827a315bf2"><code>827a315</code></a>
Update actions/upload-artifact@v6 -&gt; v7</li>
<li><a
href="cea36a5c01"><code>cea36a5</code></a>
Update actions/checkout@v6 -&gt; v7</li>
<li>See full diff in <a
href="https://github.com/serde-rs/json/compare/v1.0.150...v1.0.151">compare
view</a></li>
</ul>
</details>
<br />

Updates `thiserror` from 2.0.18 to 2.0.19
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/thiserror/releases">thiserror's
releases</a>.</em></p>
<blockquote>
<h2>2.0.19</h2>
<ul>
<li>Update to syn 3</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="e13a785433"><code>e13a785</code></a>
Release 2.0.19</li>
<li><a
href="0a0e76cc0f"><code>0a0e76c</code></a>
Update to syn 3</li>
<li><a
href="ec42ea7085"><code>ec42ea7</code></a>
Update actions/upload-artifact@v6 -&gt; v7</li>
<li><a
href="4178c4a0e1"><code>4178c4a</code></a>
Update actions/checkout@v6 -&gt; v7</li>
<li><a
href="7214e0e833"><code>7214e0e</code></a>
Ignore items_after_statements pedantic clippy lint in test</li>
<li><a
href="febcc0381f"><code>febcc03</code></a>
Merge pull request <a
href="https://redirect.github.com/dtolnay/thiserror/issues/451">#451</a>
from vip892766gma/maint/20260521171412</li>
<li><a
href="c50e38779d"><code>c50e387</code></a>
chore: improve thiserror maintenance path</li>
<li><a
href="d4a2507576"><code>d4a2507</code></a>
Raise minimum tested compiler to rust 1.85</li>
<li><a
href="99e8a6cd6a"><code>99e8a6c</code></a>
Unpin CI miri toolchain</li>
<li><a
href="9ac165c400"><code>9ac165c</code></a>
Pin CI miri to nightly-2026-02-11</li>
<li>Additional commits viewable in <a
href="https://github.com/dtolnay/thiserror/compare/2.0.18...2.0.19">compare
view</a></li>
</ul>
</details>
<br />

Updates `anyhow` from 1.0.103 to 1.0.104
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/dtolnay/anyhow/releases">anyhow's
releases</a>.</em></p>
<blockquote>
<h2>1.0.104</h2>
<ul>
<li>Update <code>syn</code> dev-dependency to version 3</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="1dbe1862aa"><code>1dbe186</code></a>
Release 1.0.104</li>
<li><a
href="f6479f8e5e"><code>f6479f8</code></a>
Update to syn 3</li>
<li>See full diff in <a
href="https://github.com/dtolnay/anyhow/compare/1.0.103...1.0.104">compare
view</a></li>
</ul>
</details>
<br />

Updates `clap` from 4.6.2 to 4.6.6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/releases">clap's
releases</a>.</em></p>
<blockquote>
<h2>v4.6.6</h2>
<h2>[4.6.6] - 2026-08-06</h2>
<h3>Features</h3>
<ul>
<li>Add <code>Command::get_overridden_usage</code></li>
</ul>
<h2>v4.6.5</h2>
<h2>[4.6.5] - 2026-07-31</h2>
<h3>Fixes</h3>
<ul>
<li><em>(help)</em> Correctly mark which <code>value_names</code> are
optional with <code>num_args</code></li>
</ul>
<h2>v4.6.4</h2>
<h2>[4.6.4] - 2026-07-21</h2>
<h3>Internal</h3>
<ul>
<li>Update to syn v3</li>
</ul>
<h2>v4.6.3</h2>
<h2>[4.6.3] - 2026-07-20</h2>
<h3>Fixes</h3>
<ul>
<li><em>(derive)</em> Allow <code>&quot;literal&quot;.function()</code>
as attribute values</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/clap-rs/clap/blob/master/CHANGELOG.md">clap's
changelog</a>.</em></p>
<blockquote>
<h2>[4.6.6] - 2026-08-06</h2>
<h3>Features</h3>
<ul>
<li>Add <code>Command::get_overridden_usage</code></li>
</ul>
<h2>[4.6.5] - 2026-07-31</h2>
<h3>Fixes</h3>
<ul>
<li><em>(help)</em> Correctly mark which <code>value_names</code> are
optional with <code>num_args</code></li>
</ul>
<h2>[4.6.4] - 2026-07-21</h2>
<h3>Internal</h3>
<ul>
<li>Update to syn v3</li>
</ul>
<h2>[4.6.3] - 2026-07-20</h2>
<h3>Fixes</h3>
<ul>
<li><em>(derive)</em> Allow <code>&quot;literal&quot;.function()</code>
as attribute values</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="348cff3fc4"><code>348cff3</code></a>
chore: Release</li>
<li><a
href="d4783779f8"><code>d478377</code></a>
docs: Update changelog</li>
<li><a
href="04b9fbb83a"><code>04b9fbb</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6414">#6414</a>
from koopatroopa787/fix-bash-completion-bracket-glob</li>
<li><a
href="70752392a8"><code>7075239</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6422">#6422</a>
from BaumiCoder/fix-fish-indentations</li>
<li><a
href="f90a96636a"><code>f90a966</code></a>
fix(complete): Use spaces for indentation in fish</li>
<li><a
href="dd4997ba2d"><code>dd4997b</code></a>
fix(complete): Don't glob-expand bash positionals</li>
<li><a
href="8387c812c4"><code>8387c81</code></a>
Merge pull request <a
href="https://redirect.github.com/clap-rs/clap/issues/6399">#6399</a>
from clap-rs/renovate/crate-ci-typos-1.x</li>
<li><a
href="8141e110ec"><code>8141e11</code></a>
chore(deps): Update compatible (dev) (<a
href="https://redirect.github.com/clap-rs/clap/issues/6398">#6398</a>)</li>
<li><a
href="8a6bd4e43e"><code>8a6bd4e</code></a>
chore(deps): Update pre-commit hook crate-ci/typos to v1.47.0</li>
<li><a
href="71a7213d6e"><code>71a7213</code></a>
chore(deps): Update Rust Stable to v1.96 (<a
href="https://redirect.github.com/clap-rs/clap/issues/6396">#6396</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/clap-rs/clap/compare/clap_complete-v4.6.2...clap_complete-v4.6.6">compare
view</a></li>
</ul>
</details>
<br />

Updates `tokio` from 1.52.3 to 1.53.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/tokio/releases">tokio's
releases</a>.</em></p>
<blockquote>
<h2>Tokio v1.53.1</h2>
<h1>1.53.1 (July 20th, 2026)</h1>
<h3>Fixed</h3>
<ul>
<li>signal: restore MSRV by removing <code>OnceLock::wait</code> from
the Windows handler (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8300">#8300</a>)</li>
</ul>
<h3>Fixed (unstable)</h3>
<ul>
<li>time: fix alt timer cancellation and insertion race (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8252">#8252</a>)</li>
</ul>
<h3>Documented</h3>
<ul>
<li>runtime: remove dead link definition in Runtime::block_on (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8301">#8301</a>)</li>
</ul>
<p><a
href="https://redirect.github.com/tokio-rs/tokio/issues/8252">#8252</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/8252">tokio-rs/tokio#8252</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8300">#8300</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/8300">tokio-rs/tokio#8300</a>
<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8301">#8301</a>:
<a
href="https://redirect.github.com/tokio-rs/tokio/pull/8301">tokio-rs/tokio#8301</a></p>
<h2>Tokio v1.53.0</h2>
<h1>1.53.0 (July 17th, 2026)</h1>
<h3>Added</h3>
<ul>
<li>fs: implement <code>From&lt;OwnedFd&gt;</code> and
<code>From&lt;OwnedHandle&gt;</code> for <code>File</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8266">#8266</a>)</li>
<li>metrics: add task schedule latency metric (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7986">#7986</a>)</li>
<li>net: add <code>SocketAddr</code> methods to Unix sockets (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8144">#8144</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>io: add <code>#[inline]</code> to IO trait impls for in-memory types
(<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8242">#8242</a>)</li>
<li>net: implement UCred::pid on FreeBSD (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8086">#8086</a>)</li>
<li>net: support Nuttx target os (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8259">#8259</a>)</li>
<li>signal: refactor global variables on Windows (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8231">#8231</a>)</li>
<li>sync: <code>mpsc::{Receiver,UnboundedReceiver}</code> now drops
waker on drop, even if there are still senders (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8095">#8095</a>)</li>
<li>taskdump: support taskdumps on s390x (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8192">#8192</a>)</li>
<li>time: add <code>#[track_caller]</code> to <code>timeout_at()</code>
(<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8077">#8077</a>)</li>
<li>time: consolidate mutex locks on spurious poll (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8124">#8124</a>)</li>
<li>time: defer waker clone on spurious poll (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8107">#8107</a>)</li>
<li>time: move lazy-registration state into <code>Sleep</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8132">#8132</a>)</li>
<li>tracing: remove unnecessary span clone (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8126">#8126</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>io: do not treat zero-length reads as EOF in <code>Chain</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8251">#8251</a>)</li>
<li>net: use getpeereid for QNX peer credentials (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8270">#8270</a>)</li>
<li>runtime: avoid illegal state in <code>FastRand</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8078">#8078</a>)</li>
<li>sync: wake mpsc receiver when a queued <code>reserve[_many]</code>
returns permits (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8260">#8260</a>)</li>
<li>taskdump: skip double wake on
<code>Trace::capture</code>/<code>Trace::trace_with</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8043">#8043</a>)</li>
<li>time: avoid stack overflow in runtime constructor (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8093">#8093</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="75fef53d0a"><code>75fef53</code></a>
chore: prepare Tokio v1.53.1 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8303">#8303</a>)</li>
<li><a
href="ae9d011213"><code>ae9d011</code></a>
signal: restore MSRV by removing OnceLock::wait from the Windows handler
(<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8300">#8300</a>)</li>
<li><a
href="eb4988dc2e"><code>eb4988d</code></a>
time: fix the loom test of the race between cancellation/insertion (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8302">#8302</a>)</li>
<li><a
href="91d3b4c0bc"><code>91d3b4c</code></a>
time: fix alt timer cancellation and insertion race (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8252">#8252</a>)</li>
<li><a
href="a46338401b"><code>a463384</code></a>
runtime: remove dead link definition in <code>Runtime::block_on</code>
(<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8301">#8301</a>)</li>
<li><a
href="be689a35f5"><code>be689a3</code></a>
chore: prepare Tokio v1.53.0 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8294">#8294</a>)</li>
<li><a
href="50f76c71ec"><code>50f76c7</code></a>
chore: prepare tokio-macros v2.7.1 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8295">#8295</a>)</li>
<li><a
href="f61fccad3c"><code>f61fcca</code></a>
Merge 'tokio-1.52.4' into 'master' (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8290">#8290</a>)</li>
<li><a
href="efdba5fcf0"><code>efdba5f</code></a>
chore: prepare Tokio v1.52.4 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8289">#8289</a>)</li>
<li><a
href="b0ba02e755"><code>b0ba02e</code></a>
Merge 'tokio-1.51.4' into 'tokio-1.52.x' (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8288">#8288</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tokio-rs/tokio/compare/tokio-1.52.3...tokio-1.53.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `pyo3` from 0.29.0 to 0.29.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pyo3/pyo3/releases">pyo3's
releases</a>.</em></p>
<blockquote>
<h2>PyO3 0.29.2</h2>
<p>This patch fixes a regression in PyO3 0.29.1 which broke PyPy 3.11
compatibility (<code>#[pyclass]</code> types would crash PyPy on
instance deletion).</p>
<p>A few further fixes have also landed with similar themes to PyO3
0.29.1: fixes to minor reference counting bugs, rough edges which would
cause crashes, issues which would cause failed builds, and fixes to
<code>experimental-inspect</code> type stub generation.</p>
<p>For a full list of the exact fixes please consult the CHANGELOG.</p>
<p>Thank you to the following contributors for the improvements:</p>
<p><a
href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a>
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
<a href="https://github.com/ImFeH2"><code>@​ImFeH2</code></a>
<a
href="https://github.com/musicinmybrain"><code>@​musicinmybrain</code></a>
<a href="https://github.com/Tpt"><code>@​Tpt</code></a>
<a
href="https://github.com/WaterWhisperer"><code>@​WaterWhisperer</code></a></p>
<h2>PyO3 0.29.1</h2>
<p>This patch is a stack of fixes for PyO3 0.29. Particular themes
include:</p>
<ul>
<li>Fixes addressing build failures with newer interpreters such as
GraalPy 3.13 and CPython 3.15</li>
<li>Fixes resolving potential memory leaks inside
<code>#[pyclass]</code> implementation internals</li>
<li>Fixes to the new <code>experimental-inspect</code> type stub
machinery</li>
</ul>
<p>For a full list of the fixes in these above themes and more, please
consult the CHANGELOG.</p>
<p>Thank you to the following contributors for the improvements:</p>
<p><a href="https://github.com/alex"><code>@​alex</code></a>
<a
href="https://github.com/bschoenmaeckers"><code>@​bschoenmaeckers</code></a>
<a href="https://github.com/chirizxc"><code>@​chirizxc</code></a>
<a href="https://github.com/davidhewitt"><code>@​davidhewitt</code></a>
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
<a href="https://github.com/exg"><code>@​exg</code></a>
<a href="https://github.com/ImFeH2"><code>@​ImFeH2</code></a>
<a
href="https://github.com/IvanIsCoding"><code>@​IvanIsCoding</code></a>
<a href="https://github.com/jonasdedden"><code>@​jonasdedden</code></a>
<a
href="https://github.com/MatthieuDartiailh"><code>@​MatthieuDartiailh</code></a>
<a href="https://github.com/msimacek"><code>@​msimacek</code></a>
<a href="https://github.com/ngoldbaum"><code>@​ngoldbaum</code></a>
<a href="https://github.com/Person-93"><code>@​Person-93</code></a>
<a href="https://github.com/ratazzi"><code>@​ratazzi</code></a>
<a href="https://github.com/rewitt94"><code>@​rewitt94</code></a>
<a
href="https://github.com/scott-griffiths"><code>@​scott-griffiths</code></a>
<a href="https://github.com/ShiroKSH"><code>@​ShiroKSH</code></a>
<a href="https://github.com/tobni"><code>@​tobni</code></a>
<a href="https://github.com/Tpt"><code>@​Tpt</code></a>
<a
href="https://github.com/WaterWhisperer"><code>@​WaterWhisperer</code></a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/PyO3/pyo3/blob/main/CHANGELOG.md">pyo3's
changelog</a>.</em></p>
<blockquote>
<h2>[0.29.2] - 2026-08-05</h2>
<h3>Packaging</h3>
<ul>
<li>Add <code>PYO3_USE_RAW_DYLIB=0</code> opt-out of
<code>raw-dylib</code> linking for Windows. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6185">#6185</a></li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fix PyO3 0.29 regression with failure to link under Cygwin / MSYS2.
<a href="https://redirect.github.com/PyO3/pyo3/pull/6185">#6185</a></li>
<li>Fix stubs generation for field getters (<code>#[pyo3(get)]</code>)
when <code>IntoPyObject</code> is only implemented on references of the
field type. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6276">#6276</a></li>
<li>Fix <code>#[classmethod]</code> magic methods receiving the instance
instead of its type when invoked through a type slot. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6283">#6283</a></li>
<li>Fix <code>pyo3_build_config::add_libpython_rpath_link_args</code>
emitting Unix-style rpath linker arguments on Windows and Cygwin. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6284">#6284</a></li>
<li>Fix PyO3 0.29.1 regression on PyPy causing crashes when deallocating
<code>#[pyclass]</code> instances. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6294">#6294</a></li>
<li>Fix missing trailing nul in Python 3.9 <code>#[pyclass]</code>
docstrings. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6296">#6296</a></li>
<li>Fix reference count leak of <code>#[classattr]</code> values created
from <code>fn</code> items. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6297">#6297</a></li>
</ul>
<h2>[0.29.1] - 2026-08-02</h2>
<h3>Changed</h3>
<ul>
<li>Use the inline definition of <code>Py_TYPE</code> in the unlimited
API on 3.14+ <a
href="https://redirect.github.com/PyO3/pyo3/pull/6179">#6179</a></li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Fix incorrect pointer arithmetic in FFI definitions
<code>PyObject_GET_WEAKREFS_LISTPTR</code> and
<code>PyHeapType_GET_MEMBERS</code>. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6145">#6145</a></li>
<li>Fix compilation error with <code>nightly</code> feature on PyPy and
GraalPy due to <code>!Ungil</code> implementations for FFI types not
available on those platforms. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6146">#6146</a></li>
<li>Fix <code>append_to_inittab</code> and
<code>PyInit_&lt;module&gt;</code> internal module definition corruption
on 32-bit and big-endian platforms on Python 3.15+. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6150">#6150</a></li>
<li>Fix return value of <code>PyClassGuardMutSuper::as_super</code>
being scoped to the full guard lifetime, now the <code>&amp;mut</code>
borrow of the <code>as_super()</code> call. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6181">#6181</a></li>
<li>Fix builds for free-threaded interpreters older than 3.15 erroring
with &quot;cannot set a minimum Python version&quot; when an
<code>abi3t-py3*</code> feature is enabled and the configuration comes
from <code>PYO3_CONFIG_FILE</code>, sysconfigdata or cross-compilation
defaults. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6192">#6192</a></li>
<li>Fix a memory leak when deallocating <code>#[pyclass(dict)]</code>
instances with a populated <code>__dict__</code>. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6198">#6198</a></li>
<li>Fix an abort inside a <code>#[pyclass]</code>'s GC traversal when
the traversal is stopped early. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6206">#6206</a></li>
<li>Fix reference cycles through the <code>__dict__</code> of a
<code>#[pyclass(dict)]</code> never being collected. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6206">#6206</a></li>
<li>Fix building on GraalPy 3.13. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6208">#6208</a></li>
<li>Fix reference count leak of references to <code>#[pyclass]</code>
type objects held by their instances on instance deallocation. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6224">#6224</a></li>
<li>Fix FFI definitions <code>PyByteArray_GET_SIZE</code>,
<code>PyList_GET_SIZE</code>, and <code>PySet_GET_SIZE</code> to use an
atomic load for free-threaded Python. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6230">#6230</a></li>
<li>Fix a memory leak on Python 3.11 and 3.12 where creating an instance
of a <code>#[pyclass(dict)]</code> class leaked one empty dict per
instance. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6234">#6234</a></li>
<li>Fix <code>experimental-inspect</code> type stubs to emit the
arguments of many magic methods as positional-only to match runtime
behavior, rather than positional-or-keyword. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6239">#6239</a></li>
<li>Fix <code>experimental-inspect</code> type stubs to emit the Python
name rather than the Rust name for <code>#[pyfunction(name =
&quot;...&quot;)]</code>. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6254">#6254</a></li>
<li>Fix <code>experimental-inspect</code> generating invalid internal
JSON when <code>#[pymodule]</code> members are gated by
<code>#[cfg]</code>. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6255">#6255</a></li>
<li>Fix <code>__inplace_concat__</code> and
<code>__inplace_repeat__</code> overriding <code>__concat__</code> and
<code>__repeat__</code> when both were defined. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6260">#6260</a></li>
<li>Fix conversion of out-of-range <code>time::Duration</code> values to
return <code>OverflowError</code> instead of panicking. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6266">#6266</a></li>
<li>Fix <code>experimental-inspect</code> type stubs padding blank lines
inside indented docstrings. <a
href="https://redirect.github.com/PyO3/pyo3/pull/6270">#6270</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a70d17f898"><code>a70d17f</code></a>
release: 0.29.2</li>
<li><a
href="bd00e11864"><code>bd00e11</code></a>
fix backports.zoneinfo for uv install</li>
<li><a
href="7cbd144fd9"><code>7cbd144</code></a>
fix double-decref in PyPy in instance dealloc (<a
href="https://redirect.github.com/pyo3/pyo3/issues/6294">#6294</a>)</li>
<li><a
href="e57fb6f5ac"><code>e57fb6f</code></a>
fix missing trailing nul on Python 3.9 <code>#[pyclass]</code>
docstrings (<a
href="https://redirect.github.com/pyo3/pyo3/issues/6296">#6296</a>)</li>
<li><a
href="d83693c7d7"><code>d83693c</code></a>
fix refcount leak in <code>initialize_tp_dict</code> (<a
href="https://redirect.github.com/pyo3/pyo3/issues/6297">#6297</a>)</li>
<li><a
href="48ebbd86a6"><code>48ebbd8</code></a>
fix: skip libpython rpath args on Windows and Cygwin (<a
href="https://redirect.github.com/pyo3/pyo3/issues/6284">#6284</a>)</li>
<li><a
href="bd73377d4f"><code>bd73377</code></a>
fix: pass class to classmethod magic methods (<a
href="https://redirect.github.com/pyo3/pyo3/issues/6283">#6283</a>)</li>
<li><a
href="af8d149449"><code>af8d149</code></a>
Restore pyo3-introspection license files (<a
href="https://redirect.github.com/pyo3/pyo3/issues/6289">#6289</a>)</li>
<li><a
href="0120c59140"><code>0120c59</code></a>
unblock CI via a uv constraint (<a
href="https://redirect.github.com/pyo3/pyo3/issues/6295">#6295</a>)</li>
<li><a
href="3161efcb22"><code>3161efc</code></a>
build(deps): bump CodSpeedHQ/action from 4 to 5.0.1 (<a
href="https://redirect.github.com/pyo3/pyo3/issues/6286">#6286</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/pyo3/pyo3/compare/v0.29.0...v0.29.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `aws-config` from 1.9.0 to 1.10.1
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithy-lang/smithy-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `aws-smithy-runtime-api` from 1.13.0 to 1.14.0
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/smithy-lang/smithy-rs/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `unidiff` from 0.4.0 to 0.4.1
<details>
<summary>Commits</summary>
<ul>
<li><a
href="61776005a3"><code>6177600</code></a>
Bump version to 0.4.1</li>
<li><a
href="e079b35791"><code>e079b35</code></a>
Fix hunk body lines being misparsed as file headers (<a
href="https://redirect.github.com/messense/unidiff-rs/issues/10">#10</a>)</li>
<li>See full diff in <a
href="https://github.com/messense/unidiff-rs/compare/v0.4.0...v0.4.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `aho-corasick` from 1.1.4 to 1.1.5
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5178060ce7"><code>5178060</code></a>
1.1.5</li>
<li><a
href="b68c8d507a"><code>b68c8d5</code></a>
api: check for overflow in <code>Match::offset</code> too</li>
<li><a
href="c82178696b"><code>c821786</code></a>
build(deps): bump actions/checkout in the actions group (<a
href="https://redirect.github.com/BurntSushi/aho-corasick/issues/171">#171</a>)</li>
<li><a
href="8209bb9d61"><code>8209bb9</code></a>
Hash-pin all actions, drop persisted credentials (<a
href="https://redirect.github.com/BurntSushi/aho-corasick/issues/170">#170</a>)</li>
<li><a
href="0f3f5da9bd"><code>0f3f5da</code></a>
api: document a couple panicking preconditions</li>
<li><a
href="e88e1fce8f"><code>e88e1fc</code></a>
benchmarks: bump dependencies</li>
<li><a
href="88e4966516"><code>88e4966</code></a>
ci: use older version of <code>log</code> on pinned build</li>
<li>See full diff in <a
href="https://github.com/BurntSushi/aho-corasick/compare/1.1.4...1.1.5">compare
view</a></li>
</ul>
</details>
<br />

Updates `toml` from 1.1.3+spec-1.1.0 to 1.1.4+spec-1.1.0
<details>
<summary>Commits</summary>
<ul>
<li><a
href="beee9fe5a9"><code>beee9fe</code></a>
chore: Release</li>
<li><a
href="16e2ac1598"><code>16e2ac1</code></a>
docs: Update changelog</li>
<li><a
href="89f55411d4"><code>89f5541</code></a>
fix(toml): preserve datetimes when deserializing Value (<a
href="https://redirect.github.com/toml-rs/toml/issues/1194">#1194</a>)</li>
<li><a
href="534039ccff"><code>534039c</code></a>
fix(serde): Deserialize Value datetimes into typed targets</li>
<li><a
href="6e45cef5d5"><code>6e45cef</code></a>
test(serde): Reproduce Value datetime deserialization error</li>
<li><a
href="4ec099fed5"><code>4ec099f</code></a>
chore: Release</li>
<li><a
href="5a47a5180e"><code>5a47a51</code></a>
docs: Update changelog</li>
<li><a
href="da0911f7e7"><code>da0911f</code></a>
perf(parser): Reduce over allocation by better tokens/byte ratio (<a
href="https://redirect.github.com/toml-rs/toml/issues/1193">#1193</a>)</li>
<li><a
href="26eb1571f2"><code>26eb157</code></a>
perf(parser): Reduce over allocation by better tokens/byte ratio</li>
<li><a
href="ca4c7bf420"><code>ca4c7bf</code></a>
chore(deps): Update Prek to v0.4.11 (<a
href="https://redirect.github.com/toml-rs/toml/issues/1191">#1191</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/toml-rs/toml/compare/toml-v1.1.3...toml-v1.1.4">compare
view</a></li>
</ul>
</details>
<br />

Updates `blake3` from 1.8.5 to 1.8.6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/BLAKE3-team/BLAKE3/releases">blake3's
releases</a>.</em></p>
<blockquote>
<h2>1.8.6</h2>
<p>version 1.8.6</p>
<p>Changes since 1.8.5:</p>
<ul>
<li><code>update_mmap</code> and <code>update_mmap_rayon</code> (and by
extension <code>b3sum</code>) now
use <code>seek</code> rather than <code>metadata</code> to get the
length of a file/mapping,
and they tolerate <code>mmap</code> failures. That means
<code>b3sum</code> will now memory
map e.g. Linux block devices, which support mapping despite reporting
length 0 in <code>metadata</code>. Hashing <code>NUL</code> files on
Windows also works now,
where previously it was an error unless you used <code>--no-mmap</code>
or <code>&lt;</code>.
This change was originally proposed by <a
href="https://github.com/nabijaczleweli"><code>@​nabijaczleweli</code></a>.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="77b257eee7"><code>77b257e</code></a>
version 1.8.6</li>
<li><a
href="83b1746e7c"><code>83b1746</code></a>
use <code>seek</code> instead of <code>metadata</code> to establish mmap
length (<a
href="https://redirect.github.com/BLAKE3-team/BLAKE3/issues/570">#570</a>)</li>
<li><a
href="9eac279fd7"><code>9eac279</code></a>
use vswhere to find Visual Studio in CI</li>
<li><a
href="fc3d0e98e8"><code>fc3d0e9</code></a>
Fix path to Visual Studio toolchain in CI</li>
<li><a
href="8aa5145039"><code>8aa5145</code></a>
a few more colons</li>
<li><a
href="6bb977357b"><code>6bb9773</code></a>
use cargo:: build script syntax</li>
<li><a
href="91f7308e12"><code>91f7308</code></a>
fix Mode docs</li>
<li><a
href="f3913d9531"><code>f3913d9</code></a>
typo fixes</li>
<li><a
href="f51e8226a2"><code>f51e822</code></a>
tweak release instructions</li>
<li>See full diff in <a
href="https://github.com/BLAKE3-team/BLAKE3/compare/1.8.5...1.8.6">compare
view</a></li>
</ul>
</details>
<br />

Updates `http` from 1.4.2 to 1.5.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/hyperium/http/releases">http's
releases</a>.</em></p>
<blockquote>
<h2>v1.5.0</h2>
<h2>What's Changed</h2>
<ul>
<li>feat(method): add QUERY method by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/http/pull/798">hyperium/http#798</a></li>
<li>fix(uri): allow empty paths in uri::Builder by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/http/pull/853">hyperium/http#853</a></li>
<li>perf(header,uri): faster value validation, URI parse/format, map
inserts by <a
href="https://github.com/geeknoid"><code>@​geeknoid</code></a> in <a
href="https://redirect.github.com/hyperium/http/pull/852">hyperium/http#852</a></li>
<li>fix(uri): enforce max length in PathAndQuery by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/http/pull/856">hyperium/http#856</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/geeknoid"><code>@​geeknoid</code></a>
made their first contribution in <a
href="https://redirect.github.com/hyperium/http/pull/852">hyperium/http#852</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/hyperium/http/compare/v1.4.2...v1.5.0">https://github.com/hyperium/http/compare/v1.4.2...v1.5.0</a></p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/hyperium/http/blob/master/CHANGELOG.md">http's
changelog</a>.</em></p>
<blockquote>
<h1>1.5.0 (July 29, 2026)</h1>
<ul>
<li>Add <code>Method::QUERY</code> constant for the new QUERY method
defined in RFC 10008.</li>
<li>Fix <code>uri::Builder::path_and_query()</code> to allow empty
strings to mean no path.</li>
<li>Fix <code>uri::PathAndQuery</code> parsing to enforce URI max
length.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="16fc9a7b84"><code>16fc9a7</code></a>
v1.5.0</li>
<li><a
href="e559023f67"><code>e559023</code></a>
fix(uri): enforce max length in PathAndQuery (<a
href="https://redirect.github.com/hyperium/http/issues/856">#856</a>)</li>
<li><a
href="2178e175c4"><code>2178e17</code></a>
perf(header,uri): faster value validation, URI parse/format, map inserts
(<a
href="https://redirect.github.com/hyperium/http/issues/852">#852</a>)</li>
<li><a
href="03c8cd7fae"><code>03c8cd7</code></a>
fix(uri): allow empty paths in uri::Builder (<a
href="https://redirect.github.com/hyperium/http/issues/853">#853</a>)</li>
<li><a
href="bb8705b25c"><code>bb8705b</code></a>
feat(method): add QUERY method (<a
href="https://redirect.github.com/hyperium/http/issues/798">#798</a>)</li>
<li>See full diff in <a
href="https://github.com/hyperium/http/compare/v1.4.2...v1.5.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `futures` from 0.3.32 to 0.3.33
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/futures-rs/releases">futures's
releases</a>.</em></p>
<blockquote>
<h2>0.3.33</h2>
<ul>
<li>Fix <code>ReadLine</code>'s soundness issue regarding to exception
safety. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3020">#3020</a>)</li>
<li>Fix unsound <code>Send</code> impl for <code>IterPinRef</code> and
<code>Iter</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3003">#3003</a>)</li>
<li>Fix stacked borrows violation in <code>compat01as03</code>
implementation. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3012">#3012</a>)</li>
<li>Fix memory leak in <code>FuturesUnordered::IntoIter</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3005">#3005</a>)</li>
<li>Add <code>portable-atomic-alloc</code> feature and use it in
<code>FuturesUnordered</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3007">#3007</a>)</li>
<li>Re-export <code>alloc::task::Wake</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3010">#3010</a>)</li>
<li>Update <code>spin</code> to 0.12. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3014">#3014</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/futures-rs/blob/main/CHANGELOG.md">futures's
changelog</a>.</em></p>
<blockquote>
<h1>0.3.33 - 2026-07-18</h1>
<ul>
<li>Fix <code>ReadLine</code>'s soundness issue regarding to exception
safety. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3020">#3020</a>)</li>
<li>Fix unsound <code>Send</code> impl for <code>IterPinRef</code> and
<code>Iter</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3003">#3003</a>)</li>
<li>Fix stacked borrows violation in <code>compat01as03</code>
implementation. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3012">#3012</a>)</li>
<li>Fix memory leak in <code>FuturesUnordered::IntoIter</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3005">#3005</a>)</li>
<li>Add <code>portable-atomic-alloc</code> feature and use it in
<code>FuturesUnordered</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3007">#3007</a>)</li>
<li>Re-export <code>alloc::task::Wake</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3010">#3010</a>)</li>
<li>Update <code>spin</code> to 0.12. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3014">#3014</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="89cc254cb8"><code>89cc254</code></a>
Release 0.3.33</li>
<li><a
href="cd9f5befe6"><code>cd9f5be</code></a>
ci: Update release workflow</li>
<li><a
href="d79a499c5f"><code>d79a499</code></a>
Resolve rustdoc::broken_intra_doc_links warning</li>
<li><a
href="95bbcf83be"><code>95bbcf8</code></a>
Resolve rustdoc ambiguous link error</li>
<li><a
href="303c1658dc"><code>303c165</code></a>
Resolve rustdoc::redundant_explicit_links warning</li>
<li><a
href="f34e3f5b9d"><code>f34e3f5</code></a>
ci: Cleanup</li>
<li><a
href="66591a2427"><code>66591a2</code></a>
Enable Miri for more tests</li>
<li><a
href="ab1072fec1"><code>ab1072f</code></a>
Simplify target_has_atomic cfg in utility crates</li>
<li><a
href="cf5d23b68b"><code>cf5d23b</code></a>
Fix unsound compat01as03 implementation (fixes <a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2514">#2514</a>)
(<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3012">#3012</a>)</li>
<li><a
href="8ae794faef"><code>8ae794f</code></a>
Add portable-atomic-alloc feature and use it in FuturesUnordered (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3007">#3007</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/futures-rs/compare/0.3.32...0.3.33">compare
view</a></li>
</ul>
</details>
<br />

Updates `futures-util` from 0.3.32 to 0.3.33
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/futures-rs/releases">futures-util's
releases</a>.</em></p>
<blockquote>
<h2>0.3.33</h2>
<ul>
<li>Fix <code>ReadLine</code>'s soundness issue regarding to exception
safety. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3020">#3020</a>)</li>
<li>Fix unsound <code>Send</code> impl for <code>IterPinRef</code> and
<code>Iter</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3003">#3003</a>)</li>
<li>Fix stacked borrows violation in <code>compat01as03</code>
implementation. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3012">#3012</a>)</li>
<li>Fix memory leak in <code>FuturesUnordered::IntoIter</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3005">#3005</a>)</li>
<li>Add <code>portable-atomic-alloc</code> feature and use it in
<code>FuturesUnordered</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3007">#3007</a>)</li>
<li>Re-export <code>alloc::task::Wake</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3010">#3010</a>)</li>
<li>Update <code>spin</code> to 0.12. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3014">#3014</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/rust-lang/futures-rs/blob/main/CHANGELOG.md">futures-util's
changelog</a>.</em></p>
<blockquote>
<h1>0.3.33 - 2026-07-18</h1>
<ul>
<li>Fix <code>ReadLine</code>'s soundness issue regarding to exception
safety. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3020">#3020</a>)</li>
<li>Fix unsound <code>Send</code> impl for <code>IterPinRef</code> and
<code>Iter</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3003">#3003</a>)</li>
<li>Fix stacked borrows violation in <code>compat01as03</code>
implementation. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3012">#3012</a>)</li>
<li>Fix memory leak in <code>FuturesUnordered::IntoIter</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3005">#3005</a>)</li>
<li>Add <code>portable-atomic-alloc</code> feature and use it in
<code>FuturesUnordered</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3007">#3007</a>)</li>
<li>Re-export <code>alloc::task::Wake</code>. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3010">#3010</a>)</li>
<li>Update <code>spin</code> to 0.12. (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3014">#3014</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="89cc254cb8"><code>89cc254</code></a>
Release 0.3.33</li>
<li><a
href="cd9f5befe6"><code>cd9f5be</code></a>
ci: Update release workflow</li>
<li><a
href="d79a499c5f"><code>d79a499</code></a>
Resolve rustdoc::broken_intra_doc_links warning</li>
<li><a
href="95bbcf83be"><code>95bbcf8</code></a>
Resolve rustdoc ambiguous link error</li>
<li><a
href="303c1658dc"><code>303c165</code></a>
Resolve rustdoc::redundant_explicit_links warning</li>
<li><a
href="f34e3f5b9d"><code>f34e3f5</code></a>
ci: Cleanup</li>
<li><a
href="66591a2427"><code>66591a2</code></a>
Enable Miri for more tests</li>
<li><a
href="ab1072fec1"><code>ab1072f</code></a>
Simplify target_has_atomic cfg in utility crates</li>
<li><a
href="cf5d23b68b"><code>cf5d23b</code></a>
Fix unsound compat01as03 implementation (fixes <a
href="https://redirect.github.com/rust-lang/futures-rs/issues/2514">#2514</a>)
(<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3012">#3012</a>)</li>
<li><a
href="8ae794faef"><code>8ae794f</code></a>
Add portable-atomic-alloc feature and use it in FuturesUnordered (<a
href="https://redirect.github.com/rust-lang/futures-rs/issues/3007">#3007</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/rust-lang/futures-rs/compare/0.3.32...0.3.33">compare
view</a></li>
</ul>
</details>
<br />

Updates `hyper` from 1.10.1 to 1.11.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/hyperium/hyper/releases">hyper's
releases</a>.</em></p>
<blockquote>
<h2>v1.11.0</h2>
<h2>Features</h2>
<ul>
<li><strong>rt:</strong> add
<code>ReadBufCursor::initialized_unfilled()</code> method (<a
href="https://redirect.github.com/hyperium/hyper/issues/4115">#4115</a>)
(<a
href="ccc1e850dc">ccc1e850</a>)</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li><strong>http1:</strong>
<ul>
<li>discard content-length header when received before transfer-encoding
(<a
href="https://redirect.github.com/hyperium/hyper/issues/4124">#4124</a>)
(<a
href="540fff9180">540fff91</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4123">#4123</a>)</li>
<li>use append for repeat trailer values in encoder (<a
href="https://redirect.github.com/hyperium/hyper/issues/4118">#4118</a>)
(<a
href="de1483d7db">de1483d7</a>)</li>
<li>allow up to max_headers trailers (<a
href="https://redirect.github.com/hyperium/hyper/issues/4108">#4108</a>)
(<a
href="f584091ac0">f584091a</a>)</li>
<li>use append for repeat trailers (<a
href="https://redirect.github.com/hyperium/hyper/issues/4107">#4107</a>)
(<a
href="876effe10f">876effe1</a>)</li>
<li>flush buffered data before shutdown (<a
href="https://redirect.github.com/hyperium/hyper/issues/4018">#4018</a>)
(<a
href="72046cc72e">72046cc7</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4022">#4022</a>)</li>
<li>more strictly enforce max_buf_size when parsing (<a
href="https://redirect.github.com/hyperium/hyper/issues/4093">#4093</a>)
(<a
href="90ede30747">90ede307</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4081">#4081</a>)</li>
</ul>
</li>
<li><strong>http2:</strong> avoid buffering <code>Upgraded</code> writes
without send capacity (<a
href="https://redirect.github.com/hyperium/hyper/issues/4102">#4102</a>)
(<a
href="aecf5abfbc">aecf5abf</a>)</li>
</ul>
<h2>All PRs</h2>
<ul>
<li>removing <code>cast_lossless</code> lint by <a
href="https://github.com/josetorrs"><code>@​josetorrs</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4087">hyperium/hyper#4087</a></li>
<li>Fix the borrow_as_ptr lint by <a
href="https://github.com/xd009642"><code>@​xd009642</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4082">hyperium/hyper#4082</a></li>
<li>removing <code>empty_structs_with_brackets</code> lint by <a
href="https://github.com/josetorrs"><code>@​josetorrs</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4088">hyperium/hyper#4088</a></li>
<li>style(proto): removing <code>explicit_iter_loop</code> lint by <a
href="https://github.com/josetorrs"><code>@​josetorrs</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4089">hyperium/hyper#4089</a></li>
<li>Fix the ptr_as_ptr lint by <a
href="https://github.com/nakaryo716"><code>@​nakaryo716</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4091">hyperium/hyper#4091</a></li>
<li>style(lib): remove <code>manual_assert_eq</code> lint by <a
href="https://github.com/josetorrs"><code>@​josetorrs</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4090">hyperium/hyper#4090</a></li>
<li>style(http2): allow an instance of large_enum_variant, deny
otherwise by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4092">hyperium/hyper#4092</a></li>
<li>Removing 'undocumented_unsafe_blocks' lint allowance by <a
href="https://github.com/Lori-Shu"><code>@​Lori-Shu</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4083">hyperium/hyper#4083</a></li>
<li>style(http2): use an enum instead of bool in
strip_connection_headers() by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4094">hyperium/hyper#4094</a></li>
<li>fix(http1): more strictly enforce max_buf_size when parsing by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4093">hyperium/hyper#4093</a></li>
<li>h1 servers can shutdown connections with pending buffered data on
filled sockets by <a
href="https://github.com/deven96"><code>@​deven96</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4018">hyperium/hyper#4018</a></li>
<li>refactor(http1): remove ref_option lint by <a
href="https://github.com/nakaryo716"><code>@​nakaryo716</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4101">hyperium/hyper#4101</a></li>
<li>style(lib): remove <code>unnecessary_semicolon</code> lint by <a
href="https://github.com/josetorrs"><code>@​josetorrs</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4103">hyperium/hyper#4103</a></li>
<li>style(lib): remove <code>uninlined_format_args</code> lint by <a
href="https://github.com/josetorrs"><code>@​josetorrs</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4104">hyperium/hyper#4104</a></li>
<li>style(lib): remove <code>semicolon_if_nothing_returned</code> lint
by <a href="https://github.com/MonkieeBoi"><code>@​MonkieeBoi</code></a>
in <a
href="https://redirect.github.com/hyperium/hyper/pull/4106">hyperium/hyper#4106</a></li>
<li>style(lib): remove <code> single_match_else</code> lint by <a
href="https://github.com/yunz-dev"><code>@​yunz-dev</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4105">hyperium/hyper#4105</a></li>
<li>style(lib): remove <code>default_trait_access</code> lint by <a
href="https://github.com/nakaryo716"><code>@​nakaryo716</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4111">hyperium/hyper#4111</a></li>
<li>fix(http1): use append for repeat trailers by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4107">hyperium/hyper#4107</a></li>
<li>fix(http1): allow up to max_headers trailers by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4108">hyperium/hyper#4108</a></li>
<li>fix(http2): avoid buffering <code>Upgraded</code> writes without
send capacity by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4102">hyperium/hyper#4102</a></li>
<li>style(headers): small refactor to remove <code>question_mark</code>
lint by <a
href="https://github.com/josetorrs"><code>@​josetorrs</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4116">hyperium/hyper#4116</a></li>
<li>fix(h1): append duplicate trailer values when encoding (match <a
href="https://redirect.github.com/hyperium/hyper/issues/4107">#4107</a>)
by <a
href="https://github.com/greymoth-jp"><code>@​greymoth-jp</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4118">hyperium/hyper#4118</a></li>
<li>style(proto): fix <code>decimal_literal_representation</code> lint
by <a href="https://github.com/josetorrs"><code>@​josetorrs</code></a>
in <a
href="https://redirect.github.com/hyperium/hyper/pull/4117">hyperium/hyper#4117</a></li>
<li>docs(governance): define Advisor role by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4098">hyperium/hyper#4098</a></li>
<li>docs(maintainers): move some collaborators to emeriti by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4125">hyperium/hyper#4125</a></li>
<li>feat: add initialized_unfilled to ReadBufCursor by <a
href="https://github.com/abh1nav10"><code>@​abh1nav10</code></a> in <a
href="https://redirect.github.com/hyperium/hyper/pull/4115">hyperium/hyper#4115</a></li>
<li>fix(http1): discard content-length header when received before
transfer-encoding by <a
href="https://github.com/seanmonstar"><code>@​seanmonstar</code></a> in
<a
href="https://redirect.github.com/hyperium/hyper/pull/4124">hyperium/hyper#4124</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/josetorrs"><code>@​josetorrs</code></a>
made their first contribution in <a
href="https://redirect.github.com/hyperium/hyper/pull/4087">hyperium/hyper#4087</a></li>
<li><a
href="https://github.com/nakaryo716"><code>@​nakaryo716</code></a> made
their first contribution in <a
href="https://redirect.github.com/hyperium/hyper/pull/4091">hyperium/hyper#4091</a></li>
<li><a href="https://github.com/deven96"><code>@​deven96</code></a> made
their first contribution in <a
href="https://redirect.github.com/hyperium/hyper/pull/4018">hyperium/hyper#4018</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/hyperium/hyper/blob/master/CHANGELOG.md">hyper's
changelog</a>.</em></p>
<blockquote>
<h2>v1.11.0 (2026-07-20)</h2>
<h4>Bug Fixes</h4>
<ul>
<li><strong>http1:</strong>
<ul>
<li>discard content-length header when received before transfer-encoding
(<a
href="https://redirect.github.com/hyperium/hyper/issues/4124">#4124</a>)
(<a
href="540fff9180">540fff91</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4123">#4123</a>)</li>
<li>use append for repeat trailer values in encoder (<a
href="https://redirect.github.com/hyperium/hyper/issues/4118">#4118</a>)
(<a
href="de1483d7db">de1483d7</a>)</li>
<li>allow up to max_headers trailers (<a
href="https://redirect.github.com/hyperium/hyper/issues/4108">#4108</a>)
(<a
href="f584091ac0">f584091a</a>)</li>
<li>use append for repeat trailers (<a
href="https://redirect.github.com/hyperium/hyper/issues/4107">#4107</a>)
(<a
href="876effe10f">876effe1</a>)</li>
<li>flush buffered data before shutdown (<a
href="https://redirect.github.com/hyperium/hyper/issues/4018">#4018</a>)
(<a
href="72046cc72e">72046cc7</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4022">#4022</a>)</li>
<li>more strictly enforce max_buf_size when parsing (<a
href="https://redirect.github.com/hyperium/hyper/issues/4093">#4093</a>)
(<a
href="90ede30747">90ede307</a>,
closes <a
href="https://redirect.github.com/hyperium/hyper/issues/4081">#4081</a>)</li>
</ul>
</li>
<li><strong>http2:</strong> avoid buffering <code>Upgraded</code> writes
without send capacity (<a
href="https://redirect.github.com/hyperium/hyper/issues/4102">#4102</a>)
(<a
href="aecf5abfbc">aecf5abf</a>)</li>
</ul>
<h4>Features</h4>
<ul>
<li><strong>rt:</strong> add
<code>ReadBufCursor::initialized_unfilled()</code> method (<a
href="https://redirect.github.com/hyperium/hyper/issues/4115">#4115</a>)
(<a
href="ccc1e850dc">ccc1e850</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="67ace6484d"><code>67ace64</code></a>
v1.11.0</li>
<li><a
href="540fff9180"><code>540fff9</code></a>
fix(http1): discard content-length header when received before
transfer-encod...</li>
<li><a
href="ccc1e850dc"><code>ccc1e85</code></a>
feat(rt): add <code>ReadBufCursor::initialized_unfilled()</code> method
(<a
href="https://redirect.github.com/hyperium/hyper/issues/4115">#4115</a>)</li>
<li><a
href="0ea8bc2772"><code>0ea8bc2</code></a>
docs(maintainers): move some collaborators to emeriti (<a
href="https://redirect.github.com/hyperium/hyper/issues/4125">#4125</a>)</li>
<li><a
href="2fc06fc772"><code>2fc06fc</code></a>
docs(governance): define Advisor role (<a
href="https://redirect.github.com/hyperium/hyper/issues/4098">#4098</a>)</li>
<li><a
href="e0d14d19a0"><code>e0d14d1</code></a>
style(proto): explicitly allow
<code>decimal_literal_representation</code> lint (<a
href="https://redirect.github.com/hyperium/hyper/issues/4117">#4117</a>)</li>
<li><a
href="de1483d7db"><code>de1483d</code></a>
fix(http1): use append for repeat trailer values in encoder (<a
href="https://redirect.github.com/hyperium/hyper/issues/4118">#4118</a>)</li>
<li><a
href="08c3416279"><code>08c3416</code></a>
style(headers): small refactor to remove question_mark lint (<a
href="https://redirect.github.com/hyperium/hyper/issues/4116">#4116</a>)</li>
<li><a
href="aecf5abfbc"><code>aecf5ab</code></a>
fix(http2): avoid buffering <code>Upgraded</code> writes without send
capacity (<a
href="https://redirect.github.com/hyperium/hyper/issues/4102">#4102</a>)</li>
<li><a
href="f584091ac0"><code>f584091</code></a>
fix(http1): allow up to max_headers trailers (<a
href="https://redirect.github.com/hyperium/hyper/issues/4108">#4108</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/hyperium/hyper/compare/v1.10.1...v1.11.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `bytesize` from 2.4.2 to 2.7.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/bytesize-rs/bytesize/releases">bytesize's
releases</a>.</em></p>
<blockquote>
<h2>bytesize: v2.7.0</h2>
<ul>
<li>Remove no-alloc support because it removed
<code>ByteSize::display()</code> when default features were
disabled.</li>
</ul>
<h2>bytesize: v2.6.0</h2>
<ul>
<li>Add display styles for IEC and SI bit units.</li>
</ul>
<p>(yanked)</p>
<h2>bytesize: v2.5.0</h2>
<ul>
<li>Honor precision when a width is set with formatting args.</li>
<li>Add <code>#[no_alloc]</code> support.</li>
</ul>
<p>(yanked)</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/bytesize-rs/bytesize/blob/master/CHANGELOG.md">bytesize's
changelog</a>.</em></p>
<blockquote>
<h2>2.7.0</h2>
<ul>
<li>Remove no-alloc support because it removed
<code>ByteSize::display()</code> when default features were
disabled.</li>
</ul>
<h2>2.6.0</h2>
<ul>
<li>Add display styles for IEC and SI bit units.</li>
</ul>
<h2>2.5.0</h2>
<ul>
<li>Honor precision when a width is set with formatting args.</li>
<li>Add <code>#[no_alloc]</code> support.</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li>...

_Description has been truncated_

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-12 16:35:19 -05:00
.claude-plugin chore: release main (#2679) 2026-08-04 19:39:34 -07:00
.codegraph perf(compression): take large cold-start contexts off the synchronous kompress path (#1171) (#1298) 2026-06-23 10:48:06 -05:00
.devcontainer fix(transforms): use thread-local tree-sitter parsers to prevent pyo3 Unsendable panic (#604) 2026-06-10 18:30:00 -05:00
.github fix: publish headroom-opencode in release workflow (#2372) 2026-08-11 23:56:40 -05:00
.serena fix(wrap/serena): stop creating serena_config.yml, unbricking Serena on fresh installs (#2676) 2026-07-30 20:55:47 -07:00
benchmarks fix: remove rtk and lean-ctx CLI context tools (#2677) 2026-07-30 22:59:41 -07:00
crates fix(proxy): port session-sticky beta headers to the Rust proxy (#2381) 2026-08-12 00:04:18 -05:00
deploy/beacon feat(beacon): hourly R2 compaction, per-strategy savings, and a stack that reports (#2853) 2026-08-09 15:42:12 -07:00
docker fix: remove rtk and lean-ctx CLI context tools (#2677) 2026-07-30 22:59:41 -07:00
docs fix(observability): aggregate tool savings in OTEL (#2936) 2026-08-11 22:54:55 -07:00
e2e feat(claude): support Claude Code in VS Code (#2752) 2026-08-03 20:14:13 -07:00
examples docs(metrics): ship an importable Grafana dashboard (#2168) 2026-07-14 16:07:25 -04:00
headroom fix(cache): enforce Anthropic's 1h-before-5m cache_control ordering before forwarding (#2941) 2026-08-12 16:32:12 -05:00
plugins fix: publish headroom-opencode in release workflow (#2372) 2026-08-11 23:56:40 -05:00
REALIGNMENT fix: remove rtk and lean-ctx CLI context tools (#2677) 2026-07-30 22:59:41 -07:00
sbom fix(deps): remediate dependency CVEs and publish SBOM (#1509) 2026-06-27 15:28:12 -07:00
scripts fix(install): don't crash the PowerShell installer when $PROFILE is unset (#2469) 2026-08-12 00:12:30 -05:00
sdk/typescript deps: bump postcss from 8.5.19 to 8.5.25 in /sdk/typescript (#2747) 2026-08-04 21:58:58 -05:00
sql feat(telemetry): add headroom_stack and install_mode identity fields 2026-04-17 17:12:38 +02:00
tests fix(cache): enforce Anthropic's 1h-before-5m cache_control ordering before forwarding (#2941) 2026-08-12 16:32:12 -05:00
wiki fix(compress): resolve the /v1/compress tokenizer per model, and document the real contract (#2743) 2026-08-03 12:20:33 -07:00
.actrc feat: add act testing config, fix gitignore, make workflow production-ready 2026-04-15 20:28:29 -05:00
.actrc.local.example feat: add act testing config, fix gitignore, make workflow production-ready 2026-04-15 20:28:29 -05:00
.changelog.md fix: use /tmp for changelog artifact to avoid . file matching issues 2026-04-15 22:54:34 -05:00
.commitlintrc.json ci: fix smart_crusher branch CI failures + add make ci-precheck pre-push gate 2026-04-27 11:13:47 -07:00
.dockerignore fix(docker): report source build version (#1862) 2026-07-08 13:32:04 -05:00
.env.act.example feat: add act testing config, fix gitignore, make workflow production-ready 2026-04-15 20:28:29 -05:00
.env.example fix(security): patch loopback guard, retry None raise, blocking subprocess, and cache stats race 2026-06-04 16:09:53 -04:00
.git-blame-ignore-revs chore: add .git-blame-ignore-revs 2026-04-24 15:35:29 +02:00
.gitattributes chore: union-merge CHANGELOG.md to stop cross-PR merge conflicts (#2118) 2026-07-13 10:18:04 -04:00
.gitguardian.yaml fix: harden Copilot API auth token handling (#557) 2026-06-11 12:57:48 -05:00
.gitignore feat(rust): port CodeCompressor AST compressor to Rust (parity-only) (#1154) 2026-07-27 09:21:57 -07:00
.gitleaks.toml fix(ci): extend gitleaks allowlist to cover test fixtures + verified examples (#1539) 2026-06-28 13:10:58 -07:00
.pre-commit-config.yaml deps: bump ruff from 0.15.17 to 0.15.22 in the pip-minor-patch group (#2501) 2026-08-10 17:31:36 -05:00
.release-please-config.json fix: publish headroom-opencode in release workflow (#2372) 2026-08-11 23:56:40 -05:00
.release-please-manifest.json chore: release main (#2679) 2026-08-04 19:39:34 -07:00
.releasemetadata chore: release main (#2679) 2026-08-04 19:39:34 -07:00
Cargo.lock deps: bump the cargo-minor-patch group across 1 directory with 22 updates (#2916) 2026-08-12 16:35:19 -05:00
Cargo.toml feat(simulators): add provider simulator service (#2014) 2026-07-11 09:41:49 -07:00
CHANGELOG.md chore: release main (#2679) 2026-08-04 19:39:34 -07:00
claude_analysis_ttl.py chore: add cache TTL cost analysis script 2026-05-13 10:49:17 -07:00
CODE_OF_CONDUCT.md chore(telemetry): remove Supabase anonymous beacon; fix contact domain to headroomlabs.ai (#1526) 2026-06-27 22:48:26 -07:00
codecov.yml fix(codex): poll /wham/usage for subscription limits (handshake no longer sends x-codex-* headers) (#924) 2026-06-12 17:03:14 -05:00
CONTRIBUTING.md ci(changelog): stop the CHANGELOG cascade — release-please owns it (#2329) 2026-07-16 14:28:57 -07:00
dashboard-cache-ttl-main.png perf(proxy): bound upstream calls and hot-path costs (#2852) 2026-08-09 16:24:33 -07:00
deny.toml feat(rust): scaffold workspace + parity harness (phase-0) 2026-04-24 13:39:48 -07:00
docker-bake.hcl refactor(docker): migrate to bake with multi-variant distroless images 2026-04-04 21:51:37 +05:30
docker-compose.yml fix: remove rtk and lean-ctx CLI context tools (#2677) 2026-07-30 22:59:41 -07:00
Dockerfile Fix Dockerfile (#2337) 2026-07-17 16:12:20 -07:00
Headroom-2.gif Add demo GIF to README 2026-01-20 18:57:17 -08:00
headroom-savings.png docs: rewrite README for clarity and highlight Kompress-base, leaderboard, RTK 2026-04-18 09:36:49 -07:00
headroom_learn.gif docs: add headroom learn demo GIF to README 2026-03-07 17:56:17 -08:00
HeadroomDemo-Fast.gif Replace demo GIF with HeadroomDemo-Fast.gif 2026-04-10 15:05:25 -07:00
LICENSE Prepare for OSS release v0.2.0 2026-01-07 11:36:44 -08:00
llms.txt feat(wrap): add omp target (Oh My Pi) with models.yml override and unwrap (#1811) 2026-07-15 19:30:19 +00:00
Makefile ci(parity): make the parity harness a real per-PR gate (#2567) 2026-07-26 11:00:14 -07:00
NOTICE fix(dashboard): serve tailwind/htmx/alpine locally instead of from CDNs (#2734) 2026-08-03 06:07:27 -07:00
pyproject.toml deps: bump ruff from 0.15.17 to 0.15.22 in the pip-minor-patch group (#2501) 2026-08-10 17:31:36 -05:00
README.md docs(readme): surface the Serena opt-out in the wrap quickstart (#2790) 2026-08-04 19:22:42 -07:00
run-all-plugins.sh perf(proxy): bound upstream calls and hot-path costs (#2852) 2026-08-09 16:24:33 -07:00
rust-toolchain.toml fix(rust): clippy 1.95 unnecessary_sort_by + pin toolchain 2026-04-27 12:11:49 -07:00
RUST_DEV.md chore: remove committed node_modules + stray/internal markdown (repo hygiene) (#1528) 2026-06-27 23:32:54 -07:00
SECURITY.md chore(telemetry): remove Supabase anonymous beacon; fix contact domain to headroomlabs.ai (#1526) 2026-06-27 22:48:26 -07:00
server.json chore: release main (#2679) 2026-08-04 19:39:34 -07:00
TESTING-copilot-subscription.md fix(copilot): restore generic endpoint for non-subscription OAuth (#610) (#612) 2026-06-04 16:27:54 -07:00
uv.lock deps: bump ruff from 0.15.17 to 0.15.22 in the pip-minor-patch group (#2501) 2026-08-10 17:31:36 -05:00

  ██╗  ██╗███████╗ █████╗ ██████╗ ██████╗  ██████╗  ██████╗ ███╗   ███╗
  ██║  ██║██╔════╝██╔══██╗██╔══██╗██╔══██╗██╔═══██╗██╔═══██╗████╗ ████║
  ███████║█████╗  ███████║██║  ██║██████╔╝██║   ██║██║   ██║██╔████╔██║
  ██╔══██║██╔══╝  ██╔══██║██║  ██║██╔══██╗██║   ██║██║   ██║██║╚██╔╝██║
  ██║  ██║███████╗██║  ██║██████╔╝██║  ██║╚██████╔╝╚██████╔╝██║ ╚═╝ ██║
  ╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝╚═════╝ ╚═╝  ╚═╝ ╚═════╝  ╚═════╝ ╚═╝     ╚═╝
              The context compression layer for AI agents

6095% fewer tokens (for JSON data), 15-20% fewer tokens (for coding agents) · library · proxy · MCP · content-aware compressors · local-first · reversible

CI codecov PyPI npm Model: Kompress-v2-base License: Apache 2.0 Docs

Docs · Install · Proof · Agents · Discord · llms.txt

AI agents / LLMs: read /llms.txt here, or fetch the live index / full docs blob.


chopratejas%2Fheadroom | Trendshift

Headroom compresses everything your AI agent reads — tool outputs, logs, RAG chunks, files, and conversation history — before it reaches the LLM. Same answers, fraction of the tokens.

Headroom in action
Live: 10,144 → 1,260 tokens — same FATAL found.

What it does

  • Librarycompress(messages) in Python or TypeScript, inline in any app
  • Proxyheadroom proxy --port 8787, zero code changes, any language
  • Agent wrapheadroom wrap claude|codex|grok|copilot|cursor|aider|opencode|cline|continue|goose|openhands|openclaw|vibe|omp|zcode in one command; undo with headroom unwrap <tool>
  • MCP serverheadroom_compress, headroom_retrieve, headroom_stats for any MCP client
  • Cross-agent memory — shared store across Claude, Codex, Gemini, Grok, auto-dedup
  • headroom learn — mines failed sessions, writes corrections to CLAUDE.local.md (default, gitignored) or CLAUDE.md / AGENTS.md / GEMINI.md / GROK.md
  • Output token reduction — trims what the model writes back (not just what you send): drops ceremony/restated code and skips deep "thinking" on routine steps. See Output token reduction.
  • Reversible (CCR) — originals are cached for retrieval on demand

How it works (30 seconds)

 Your agent / app
   (Claude Code, Cursor, Codex, LangChain, Agno, Strands, your own code…)
        │   prompts · tool outputs · logs · RAG results · files
        ▼
    ┌────────────────────────────────────────────────────┐
    │  Headroom   (runs locally — your data stays here)  │
    │  ────────────────────────────────────────────────  │
    │  CacheAligner  →  ContentRouter  →  CCR            │
    │                    ├─ SmartCrusher   (JSON)        │
    │                    ├─ CodeCompressor (AST)         │
    │                    └─ Kompress-v2-base (text, HF)  │
    │                                                    │
    │  Cross-agent memory  ·  headroom learn  ·  MCP     │
    └────────────────────────────────────────────────────┘
        │   compressed prompt  +  retrieval tool
        ▼
 LLM provider  (Anthropic · OpenAI · Bedrock · …)
  • ContentRouter — detects content type, selects the right compressor
  • SmartCrusher / CodeCompressor / Kompress-v2-base — compress JSON, AST, or prose
  • CacheAligner - detects and warns about volatile content that can bust provider KV cache prefixes; never rewrites prompts
  • CCR — stores originals locally; LLM calls headroom_retrieve if it needs them

Architecture · CCR reversible compression · Kompress-v2-base model card

Get started (60 seconds)

# 1 — Install
uv tool install --python 3.13 "headroom-ai[all]"  # CLI as a global tool in a self-contained virtual env
pip install "headroom-ai[all]"                    # Python — ships the `headroom` CLI
npm install headroom-ai                           # TypeScript SDK only — no `headroom` CLI

# 2 — Pick your mode  (the `headroom` commands below come from the uv or pip install)
headroom deploy                         # turnkey local deployment + agent config
headroom wrap claude                    # wrap a coding agent
headroom proxy --port 8787              # drop-in proxy, zero code changes
# or: from headroom import compress      # inline library

# 3 — Verify setup and see the savings
headroom doctor                         # health check — confirms routing is working
headroom perf
headroom dashboard                      # live savings dashboard (proxy must be running)

To use headroom, it is recommended you launch a wrapped agent session each time so that all necessary setup is completed. When wrapping a coding agent, headroom starts a local proxy, installs Serena for semantic code navigation, and launches a coding agent session configured to proxy requests through headroom.

Serena is registered at user scope (for Claude Code, in ~/.claude.json), so it stays available in your other projects until you run headroom unwrap. To skip it entirely, wrap with --code-memory none.

The headroom CLI ships only via the PyPI package. The npm headroom-ai is the TypeScript SDK — a library you import (import { compress } from 'headroom-ai'), not a CLI, so it provides no headroom command.

Granular extras: [proxy], [mcp], [ml], [code], [memory], [vector] (optional HNSW backend — needs a C++ toolchain, not in [all]), [relevance], [image], [agno], [langchain], [evals], [pytorch-mps] (Apple-GPU memory-embedder offload — set HEADROOM_EMBEDDER_RUNTIME=pytorch_mps). Requires Python 3.10+.

Codex / global install

If Codex or another MCP client cannot inherit a shell PATH reliably, install Headroom as a persistent uv tool and point the client at the absolute binary path:

uv tool install "headroom-ai[all]"
command -v headroom

Then use the returned path in MCP config:

[mcp_servers.headroom]
command = "/absolute/path/from/command-v/headroom"
args = ["mcp", "serve"]

command = "headroom" only works when the client starts with a PATH that already includes the uv tool directory.

Proof

Savings on real agent workloads:

Workload Before After Savings
Code search (100 results) 17,765 1,408 92%
SRE incident debugging 65,694 5,118 92%
GitHub issue triage 54,174 14,761 73%
Codebase exploration 78,502 41,254 47%

Accuracy preserved on standard benchmarks:

Benchmark Category N Baseline Headroom Delta
GSM8K Math 100 0.870 0.870 ±0.000
TruthfulQA Factual 100 0.530 0.560 +0.030
SQuAD v2 QA 100 97% 19% compression
BFCL Tools 100 97% 32% compression

Reproduce: python -m headroom.evals suite --tier 1 · Full benchmarks & methodology

Output token reduction (cut what the model writes back)

Everything above shrinks the prompt you send. But you also pay for every token the model writes back — and on Opus-class models output costs 5× input. A lot of that output is waste: "Great, let me…" preambles, re-printing code you just showed it, and deep "thinking" on routine steps like reading a file.

Headroom can trim that too, from the proxy, without you changing any code:

  • Verbosity steering — appends a short "be terse, don't restate context" note to the end of the system prompt (so your prompt cache still hits).
  • Effort routing — when a turn is just the model resuming after a tool result (a file read, a passing test), it dials the model's thinking effort down. New questions and errors keep full effort.

Applies to Anthropic /v1/messages and OpenAI-compatible endpoints (/v1/chat/completions, /v1/responses). Effort routing uses reasoning_effort on OpenAI, thinking.budget_tokens / output_config.effort on Anthropic — same clamp-only invariant on both paths, same output_shaper:* label vocabulary.

Turn it on:

export HEADROOM_OUTPUT_SHAPER=1     # off by default
headroom proxy --port 8787

Already running a proxy? These switches are read live on every request, so a proxy that headroom wrap reused (rather than started) would not see a value you export afterwards — its environment was snapshotted at launch. headroom wrap now hot-syncs your current settings to the running proxy via a loopback POST /admin/runtime-env, so they take effect immediately with no restart (no cold start, no dropped requests, no lost caches). Set them before you wrap. On a shared proxy these overrides are global — the last explicit setting wins.

Learn the right terseness for you. People don't say how terse they want answers — they show it (they interrupt long replies, or move on before they could have read them). headroom learn --verbosity reads your past sessions and picks the level automatically:

headroom learn --verbosity            # preview what it found (dry run)
headroom learn --verbosity --apply    # save it; the proxy uses it from now on

See how many output tokens you saved. Output savings are counterfactual — we never see what the model would have written — so Headroom reports an honest estimate with a confidence range, never a made-up number:

headroom output-savings
# Reduction: 31.7%  (95% CI 27.7% … 35.7%)   [estimated]

Want a measured number instead of an estimate? Leave 10% of conversations unshaped as a control group: export HEADROOM_OUTPUT_HOLDOUT=0.1. The dashboard shows an Output Tokens Saved card next to input compression, labelled measured or estimated with the confidence band.

→ Full write-up incl. the measurement methodology: Output token reduction

Star History Chart

Agent compatibility matrix

Agent headroom wrap Notes
Claude Code --memory · --code-graph · --1m · --tool-search
Codex shares memory with Claude
Grok CLI routes via GROK_MODELS_BASE_URL
Cursor Manual setup starts proxy and prints base URLs for Cursor settings
Aider starts proxy + launches
Copilot CLI starts proxy + launches
VS Code Copilot transparent proxy; preserves selected model
OpenClaw installs as ContextEngine plugin
OpenCode injects config · starts proxy + launches
Cline starts proxy + injects config
Continue starts proxy + injects config
Goose starts proxy + launches
OpenHands starts proxy + launches
Mistral Vibe starts proxy + launches
Oh My Pi injects config · starts proxy + launches
Cortex Code Library only 6065% savings (library mode; no wrap)
Kimi CLI OAuth bearer forwarded — log in once
ZCode starts proxy and prints base URLs for ZCode settings

Any OpenAI-compatible client works via headroom proxy. MCP-native: headroom mcp install. Undo durable wrapping with headroom unwrap <tool> (supports: claude, copilot, codex, grok, kimi, omp, opencode, openclaw, zcode). Registry authors can use the canonical server.json in the repo root instead of reconstructing the headroom mcp serve contract from prose.

GitHub Copilot CLI subscription mode

Headroom can route GitHub Copilot CLI subscription traffic through the local proxy:

headroom copilot-auth login
headroom wrap copilot --subscription -- --model gpt-4o

This lets Headroom intercept OpenAI-compatible Copilot CLI requests and apply the same proxy compression pipeline before forwarding to GitHub Copilot's hosted API. The wrapper exchanges Headroom's reusable GitHub OAuth token for Copilot's short-lived API token and prints the upstream endpoint as COPILOT_PROVIDER_API_URL=... during launch.

headroom copilot-auth login stores a Headroom-specific Copilot OAuth token. This avoids relying on generic GitHub or Copilot CLI tokens that can read Copilot account metadata but may still be rejected by Copilot's token-exchange endpoint.

For GitHub Enterprise Server or custom-domain Copilot deployments, set one of these before launching:

export GITHUB_COPILOT_ENTERPRISE_DOMAIN=ghe.example.com
# or
export GITHUB_COPILOT_ENTERPRISE_URL=https://ghe.example.com

Both variables are supported. If both are set, GITHUB_COPILOT_ENTERPRISE_URL takes precedence.

For GitHub.com Enterprise Cloud URLs such as github.com/enterprises/your-enterprise, do not set an enterprise-domain override. Headroom uses GitHub's normal token-exchange endpoint and the Copilot API endpoint advertised for the signed-in account.

Platform support note: macOS auth reuse via Copilot CLI Keychain storage has been smoke-tested. Windows Credential Manager, Linux Secret Service / secret-tool, and Docker/CI token-injection paths are implemented or planned as auth-discovery paths, but still need real OS validation before they should be considered fully vetted. For Docker and CI, prefer passing an explicit GITHUB_COPILOT_TOKEN or GITHUB_COPILOT_GITHUB_TOKEN rather than relying on host keychain access.

GitHub Copilot in Visual Studio Code

Headroom transparently overrides Copilot's API proxy endpoint, so the normal VS Code model picker remains authoritative. GPT-5.5, GPT-5.6 Luna/Sol/Terra, Claude Sonnet/Opus, and other Copilot models keep their original model IDs while traffic passes through the local compression proxy. Headroom does not patch VS Code or change Codex settings:

headroom copilot-auth login
headroom wrap vscode

Keep the command running and use Copilot normally. Headroom holds the short-lived upstream Copilot token only in the proxy process. See the cross-platform VS Code Copilot guide for paths, credential flow, remote-development notes, undo steps, and troubleshooting.

Claude Code in Visual Studio Code

The official Claude Code extension embeds Claude Code and reads the same user settings as the CLI. Install Headroom's proxy dependencies, then run the wrapper from the project you plan to open in VS Code:

pip install "headroom-ai[proxy]"
headroom wrap vscode-claude

On the first run, reload the VS Code window. Keep the wrapper terminal running while you use the Claude Code panel; inspect the dashboard or proxy log printed at startup to see requests and savings. Headroom preserves your Anthropic authentication and selected model.

Press Ctrl+C to stop the proxy. Restart the same command before using Claude Code again, or completely restore the settings that existed before setup:

headroom unwrap vscode-claude

See the VS Code Claude Code guide for verification, configuration paths, custom profiles, remote development, and troubleshooting.

When to use · When to skip

Great fit if you…

  • run AI coding agents daily and want savings without changing your code
  • work across multiple agents and want shared memory
  • need reversible compression — originals are retrievable via CCR within the configured TTL

Skip it if you…

  • only use a single provider's native compaction and don't need cross-agent memory
  • work in a sandboxed environment where local processes can't run
Integrations — drop Headroom into any stack
Your setup Hook in with
Any Python app compress(messages, model=…)
Any TypeScript app await compress(messages, { model })
Anthropic / OpenAI SDK withHeadroom(new Anthropic()) · withHeadroom(new OpenAI())
Vercel AI SDK wrapLanguageModel({ model, middleware: headroomMiddleware() })
LiteLLM litellm.callbacks = [HeadroomCallback()]
LangChain HeadroomChatModel(your_llm)
Agno HeadroomAgnoModel(your_model)
Strands Strands guide
ASGI apps app.add_middleware(CompressionMiddleware)
Multi-agent SharedContext().put / .get
MCP clients headroom mcp install
What's inside
  • SmartCrusher — universal JSON: arrays of dicts, nested objects, mixed types.
  • CodeCompressor — AST-aware for Python, JS/TS, Go, Rust, Java, C/C++, Perl.
  • Kompress-v2-base — our HuggingFace model, trained on agentic traces.
  • Image compression — 4090% reduction via trained ML router.
  • CacheAligner - detects and warns about volatile content that can bust provider KV cache prefixes; never rewrites prompts.
  • Live-zone compression — compresses only new bytes (fresh tool output, latest turn); frozen prefix stays byte-identical so provider cache is not busted. History is never dropped.
  • CCR — reversible compression; LLM retrieves originals on demand.
  • Cross-agent memory — shared store, agent provenance, auto-dedup.
  • SharedContext — compressed context passing across multi-agent workflows.
  • headroom learn — plugin-based failure mining for Claude, Codex, Gemini.
Pipeline internals

Headroom exposes one stable request lifecycle across compress(), the SDK, and the proxy:

SetupPre-StartPost-StartInput ReceivedInput CachedInput RoutedInput CompressedInput RememberedPre-SendPost-SendResponse Received

  • Transforms do the work: CacheAligner → ContentRouter → SmartCrusher / CodeCompressor / Kompress-base (live-zone only; IntelligentContext and RollingWindow were retired in PR-B1).
  • Pipeline extensions observe or customize lifecycle stages via on_pipeline_event(...).
  • Compression hooks sit alongside the canonical lifecycle as an additional extension seam.
  • Proxy extensions remain the server/app integration seam for ASGI middleware, routes, and startup policy.

Provider and tool-specific behavior lives under headroom/providers/ so core orchestration stays focused on lifecycle, sequencing, and policy.

  • CLI/tool slices: headroom/providers/claude, copilot, codex, grok, openclaw
  • Provider runtime slices: headroom/providers/claude, gemini, plus shared backend/runtime dispatch in headroom/providers/registry.py
  • Core files stay orchestration-first: wrap.py, client.py, cli/proxy.py, and proxy/server.py delegate provider-specific env shaping, API target normalization, backend selection, and transport dispatch.

Headroom for teams

Headroom OSS is built for individual developers: run headroom proxy or headroom wrap on your laptop and start cutting tokens in minutes — free, local-first, your data never leaves your machine.

Running it across a whole engineering org is a different job: a shared, always-on deployment; centralized config and version rollout; org-wide savings dashboards; SSO and access controls; air-gapped / VPC installs; and someone to call when it matters. That's what we help companies with — self-hosted with support, or fully managed.

If your team is spending real money on LLM tokens — Claude Code, Codex, Cursor, or agents running in CI — and you want those savings across everyone, not just one laptop:

→ Email hello@headroomlabs.ai with your stack and rough monthly LLM spend, and we'll help you roll Headroom out across your organization.

Everything in this repo stays open source (Apache 2.0). The managed offering is simply for teams that would rather have it deployed, supported, and scaled for them.

Install

uv tool install --python 3.13 "headroom-ai[all]"  # CLI, isolated app env
pip install "headroom-ai[all]"                    # Python, everything — includes the `headroom` CLI
npm install headroom-ai                           # TypeScript SDK (library only — no `headroom` CLI)
docker pull ghcr.io/chopratejas/headroom:latest

Granular extras: [proxy], [mcp], [ml] (Kompress-v2-base), [code], [memory], [vector] (optional HNSW backend — needs a C++ toolchain, not in [all]), [relevance], [image], [agno], [langchain], [evals], [pytorch-mps] (Apple-GPU memory-embedder offload — set HEADROOM_EMBEDDER_RUNTIME=pytorch_mps). Requires Python 3.10+.

Note

: [all] covers the core stack but excludes framework adapters. Install them separately: pip install "headroom-ai[langchain]" (also [agno], [strands], [anyllm], [bedrock]).

Using uv for the headroom CLI? Prefer uv tool install so the command lives in an isolated app environment. On macOS, pass --python 3.13 if your default python3 is newer than the current wheel set:

brew install python@3.13  # if Python 3.13 is not already available
uv tool install --python 3.13 "headroom-ai[all]"
uv tool update-shell      # if ~/.local/bin is not already on PATH
headroom --version

For MCP clients such as Codex that do not inherit your interactive shell PATH, configure the absolute executable path returned by command -v headroom:

[mcp_servers.headroom]
command = "/Users/you/.local/bin/headroom"
args = ["mcp", "serve"]

Current native wheels cover macOS Apple Silicon and Linux. On Intel macOS, use Docker-native install until native wheel support lands.

Using pipx? Choose a supported interpreter explicitly:

pipx install --python python3.13 "headroom-ai[all]"

Pick 3.13 if you want dollar savings. The dashboard's Proxy $ Saved tile prices compression with LiteLLM, and LiteLLM can't be installed on Python 3.14+. On 3.14 token savings still track, but the dollar figure stays $0.00. If you already installed on 3.14, switch with pipx reinstall headroom-ai --python python3.13 and restart the proxy.

Installation guide — Docker tags, persistent service, PowerShell, devcontainers.

CPU requirement (x86/x86_64): the ONNX-backed features — Magika content detection and embedding relevance — use a precompiled ONNX Runtime that needs AVX2. On x86 hosts without AVX2 (some Docker/QEMU setups and older cloud VMs) Headroom automatically falls back to its non-ONNX paths (BM25 relevance, heuristic detection) rather than crashing. arm64/Apple Silicon needs no AVX2.

Updating

headroom update          # detects pip / pipx / uv tool and upgrades in place
headroom update --check  # report the latest release without upgrading
headroom update --pre    # include pre-releases

headroom update figures out how Headroom was installed (pip/venv, pip --user, pipx, uv tool) and runs the matching upgrade across macOS, Linux, and Windows. For git checkouts, editable installs, Docker images, and externally-managed system Pythons (PEP 668) it prints the correct manual step instead of guessing.

The proxy also shows a one-line "update available" notice on startup. It checks PyPI at most once a day, in the background, and never blocks. Opt out with HEADROOM_UPDATE_CHECK=off (also skipped in --stateless mode and CI).

Corporate / SSL-inspection environments

If pip install "headroom-ai[all]" fails with CERTIFICATE_VERIFY_FAILED (unable to get local issuer certificate), your network uses SSL inspection — a MITM proxy presenting a company-issued CA. The build backend (maturin) downloads rustup over a connection your TLS stack doesn't trust. Install Rust first so the build doesn't fetch it:

# macOS / Linux
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh && rustup default stable
# Windows
winget install Rustlang.Rustup && rustup default stable

Restart your shell, then pip install "headroom-ai[all]". A prebuilt wheel avoids the Rust build entirely where available: pip install --only-binary headroom-ai headroom-ai. Prebuilt wheels are published for Windows (win_amd64), Linux (x86_64 / aarch64), and macOS (Apple Silicon and Intel), so installs on those platforms never need a local Rust toolchain — the Rust-first dance above is only for the platform-independent sdist fallback when no wheel matches.

Two runtime assets are fetched over TLS; if they are blocked, trust your corporate CA via REQUESTS_CA_BUNDLE / SSL_CERT_FILE / CURL_CA_BUNDLE:

  • cdn.pyke.io — the ONNX Runtime for the Rust core. Alternatively pre-provide it with ORT_STRATEGY=system and ORT_LIB_LOCATION=/path/to/onnxruntime.
  • huggingface.co — the kompress-base compression model. Pre-download it and run with HF_HUB_OFFLINE=1, or set HF_ENDPOINT to a trusted mirror.

Running with compression disabled (pure gateway) requires neither asset.

Intel macOS (x86_64-apple-darwin): no prebuilt ONNX Runtime binary (#941)

ort-sys ships no prebuilt ONNX Runtime binary for Intel macOS, so a source build fails by default even outside a corporate-proxy environment. The same ORT_STRATEGY=system mechanism above fixes it — point it at a system ONNX Runtime instead:

brew install onnxruntime
ORT_STRATEGY=system \
ORT_LIB_LOCATION="$(brew --prefix onnxruntime)/lib" \
ORT_PREFER_DYNAMIC_LINK=1 \
  pip install "headroom-ai[all]"

# ORT is dlopen'd at runtime too:
export ORT_DYLIB_PATH="$(brew --prefix onnxruntime)/lib/libonnxruntime.dylib"

ORT_LIB_LOCATION must point at lib/ (not the bare prefix) and ORT_PREFER_DYNAMIC_LINK=1 is required, or ORT_STRATEGY=system still attempts static linking, which the Homebrew keg doesn't provide.

"Basic Constraints of CA cert not marked critical" (Python 3.13+ strict mode)

A different failure from the one above. If TLS fails with:

[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed:
Basic Constraints of CA cert not marked critical

then the corporate CA is found and trusted — adding it to a CA bundle changes nothing. Python 3.13 + OpenSSL 3.x enable VERIFY_X509_STRICT by default, which enforces RFC 5280 §4.2.1.9: a CA cert's basicConstraints must be marked critical. Inspection roots like Zscaler set CA:TRUE without the critical bit, so the chain is rejected.

Set HEADROOM_TLS_STRICT=0 to clear only the strict flag from every TLS context Headroom controls — the proxy's httpx upstream client and the urllib3/huggingface_hub path used for model downloads. Chain validation, signature, expiry, and hostname checks all stay on; this is strictly narrower than disabling verification.

HEADROOM_TLS_STRICT=0 headroom proxy --port 8787

The Rust core's ONNX download (cdn.pyke.io) uses a separate TLS stack (rustls / OS trust store), unaffected by HEADROOM_TLS_STRICT. On Windows the corporate root must be in the machine certificate store (browsers already trust it there); or pre-provision ONNX Runtime with ORT_STRATEGY=system + ORT_LIB_LOCATION=/path/to/onnxruntime to skip the download entirely.

headroom learn

headroom learn in action

headroom learn — mines failed sessions, writes corrections to CLAUDE.local.md (default, gitignored; use --target CLAUDE.md for the shared team file) / AGENTS.md / GEMINI.md.

Documentation

Start here Go deeper
Quickstart Architecture
Proxy How compression works
MCP tools CCR — reversible compression
Memory Cache optimization
Failure learning Benchmarks
Configuration Limitations
Persistent installs (headroom init / headroom install apply) Savings analytics (headroom savings / headroom perf / headroom doctor)

Compared to

Headroom runs locally, covers every content type, works with every major framework, and is reversible.

Scope Deploy Local Reversible
Headroom All context — tools, RAG, logs, files, history Proxy · library · middleware · MCP Yes Yes
Compresr, Token Co. Text sent to their API Hosted API call No No
OpenAI Compaction Conversation history Provider-native No No

Stack & integrations. Headroom is the proxy — that's what we build and offer, and it compresses everything flowing through it no matter what sits upstream. Our recommended companion is Serena (installed by default when you wrap an agent) for semantic code navigation — plus Ponytail if you want leaner model output. Everything else is your call: you're free to attach your own tooling — code-memory MCP, Graphify, Caveman, or any MCP server — and Headroom compresses downstream of all of it.

Contributing

git clone https://github.com/chopratejas/headroom.git && cd headroom
uv sync --extra dev && uv run pytest

Devcontainers in .devcontainer/ (default + memory-stack with Qdrant & Neo4j). See CONTRIBUTING.md.

Community

Community projects

  • Claude Code status-line indicator — a Claude Code plugin that shows live Headroom usage in your status line: idle until headroom_compress fires, then the running total of tokens saved.

License

Apache 2.0 — see LICENSE.