<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Cost Optimization on Producthunt daily</title>
        <link>https://producthunt.programnotes.cn/en/tags/cost-optimization/</link>
        <description>Recent content in Cost Optimization on Producthunt daily</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Fri, 02 Oct 2026 21:53:33 +0800</lastBuildDate><atom:link href="https://producthunt.programnotes.cn/en/tags/cost-optimization/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>caveman</title>
        <link>https://producthunt.programnotes.cn/en/p/caveman/</link>
        <pubDate>Fri, 02 Oct 2026 21:53:33 +0800</pubDate>
        
        <guid>https://producthunt.programnotes.cn/en/p/caveman/</guid>
        <description>&lt;img src="https://images.unsplash.com/photo-1600884877875-065ed42abbd1?ixid=M3w0NjAwMjJ8MHwxfHJhbmRvbXx8fHx8fHx8fDE3OTA5NDkxNjd8&amp;ixlib=rb-4.1.0" alt="Featured image of post caveman" /&gt;&lt;h1 id=&#34;juliusbrusseecaveman&#34;&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/JuliusBrussee/caveman&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;JuliusBrussee/caveman&lt;/a&gt;
&lt;/h1&gt;&lt;div align=&#34;center&#34;&gt;
&lt;img src=&#34;docs/assets/caveman-logo-banner.png&#34; alt=&#34;Caveman&#34; width=&#34;720&#34;&gt;
&lt;h1 id=&#34;why-use-many-token-when-few-do-trick&#34;&gt;why use many token when few do trick
&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;Your AI coding agent bills by the word and writes like it knows that. Caveman make it stop.&lt;/strong&gt;&lt;/p&gt;
&lt;a href=&#34;https://www.youtube.com/watch?v=L29q2LRiMRc&#34;&gt;
  &lt;img src=&#34;https://img.youtube.com/vi/L29q2LRiMRc/hqdefault.jpg&#34; alt=&#34;ThePrimeagen reacts to Caveman: No way this actually works&#34; width=&#34;360&#34;&gt;
&lt;/a&gt;
&lt;p&gt;▶️ &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.youtube.com/watch?v=L29q2LRiMRc&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;ThePrimeagen reacts: &amp;ldquo;No way this actually works&amp;rdquo;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/JuliusBrussee/caveman/stargazers&#34;&gt;&lt;img src=&#34;https://img.shields.io/github/stars/JuliusBrussee/caveman?style=flat-square&amp;color=F0A63C&amp;label=stars&#34; alt=&#34;GitHub stars&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://www.npmjs.com/package/@caveman-ai/cli&#34;&gt;&lt;img src=&#34;https://img.shields.io/npm/dm/@caveman-ai/cli?style=flat-square&amp;color=F0A63C&amp;label=cli%20downloads&#34; alt=&#34;npm downloads&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://www.npmjs.com/package/@caveman-ai/middleware&#34;&gt;&lt;img src=&#34;https://img.shields.io/npm/v/@caveman-ai/middleware?style=flat-square&amp;color=F0A63C&amp;label=middleware%20npm&#34; alt=&#34;middleware on npm&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://pypi.org/project/caveman-middleware/&#34;&gt;&lt;img src=&#34;https://img.shields.io/pypi/v/caveman-middleware?style=flat-square&amp;color=F0A63C&amp;label=middleware%20pypi&#34; alt=&#34;middleware on PyPI&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;./INSTALL.md&#34;&gt;&lt;img src=&#34;https://img.shields.io/badge/works_with-30%2B_agents-orange?style=flat-square&#34; alt=&#34;30+ agents&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;#wrap-any-agent&#34;&gt;&lt;img src=&#34;https://img.shields.io/badge/wraps-10_agents_natively-blue?style=flat-square&#34; alt=&#34;10 native wrap profiles&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;#-license&#34;&gt;&lt;img src=&#34;https://img.shields.io/badge/license-Apache--2.0-green?style=flat-square&#34; alt=&#34;License&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://skills.sh/JuliusBrussee/caveman&#34;&gt;&lt;img src=&#34;https://skills.sh/b/JuliusBrussee/caveman&#34; alt=&#34;skills.sh&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;🏆 &lt;strong&gt;#1 on GitHub Trending · July 2026&lt;/strong&gt;  ·  🥇 &lt;strong&gt;#1 Repository of the Day on &lt;a class=&#34;link&#34; href=&#34;https://trendshift.io/repositories/25391&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Trendshift&lt;/a&gt; · April 2026&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://news.ycombinator.com/item?id=47647455&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;#1 on Hacker News&lt;/a&gt;&lt;/strong&gt;  ·  &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://www.producthunt.com/products/caveman&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;#8 Product of the Day&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;📄 Cited in &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://arxiv.org/abs/2606.24083&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CAVEWOMAN&lt;/a&gt;&lt;/strong&gt;, an Adobe Research paper that measured caveman-style output cutting cost &lt;strong&gt;1.4 to 2.4×, up to 3×&lt;/strong&gt;  ·  🧪 Tested by &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.jetbrains.com/ai/2026/07/speak-to-ai-agents-like-cavemen-tosave-tokens/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;JetBrains&lt;/a&gt;&lt;/strong&gt; on 86 real coding tasks: &lt;em&gt;&amp;ldquo;costs you nothing measurable in quality&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.producthunt.com/products/caveman?embed=true&amp;amp;utm_source=badge-featured&amp;amp;utm_medium=badge&amp;amp;utm_campaign=badge-caveman-2&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1220849&amp;amp;theme=light&amp;amp;t=1786634691828&#34; alt=&#34;Caveman - why use many token when few do trick | Product Hunt&#34; width=&#34;250&#34; height=&#34;54&#34;/&gt;&lt;/a&gt;
&lt;a href=&#34;https://trendshift.io/repositories/25391?utm_source=repository-badge&amp;amp;utm_medium=badge&amp;amp;utm_campaign=badge-repository-25391&#34; target=&#34;_blank&#34; rel=&#34;noopener noreferrer&#34;&gt;&lt;img src=&#34;https://trendshift.io/api/badge/repositories/25391&#34; alt=&#34;JuliusBrussee%2Fcaveman | Trendshift&#34; width=&#34;250&#34; height=&#34;55&#34;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;⚡ &lt;strong&gt;One command, no account, no API key.&lt;/strong&gt; &lt;code&gt;npx skills add JuliusBrussee/caveman -g&lt;/code&gt; &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;#-quick-start&#34; &gt;→ Quick Start&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;div align=&#34;center&#34;&gt;
&lt;p&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;#-see-it&#34; &gt;See it&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#-quick-start&#34; &gt;Quick Start&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#-the-numbers&#34; &gt;The Numbers&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#-how-it-compares&#34; &gt;How it compares&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#-in-the-wild&#34; &gt;In the Wild&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#-the-skill-unpacked&#34; &gt;The Skill&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#-the-proxy-unpacked&#34; &gt;The Proxy&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#wrap-any-agent&#34; &gt;Wrap&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#-caveman-in-your-own-app&#34; &gt;Your own app&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;#-when-to-use--when-to-skip&#34; &gt;When to Skip&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;./docs/README.md&#34; &gt;Docs&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-see-it&#34;&gt;🪨 See it
&lt;/h2&gt;&lt;table&gt;
&lt;tr&gt;
&lt;th width=&#34;50%&#34;&gt;🗣️ Normal agent · 69 tokens&lt;/th&gt;
&lt;th width=&#34;50%&#34;&gt;&lt;img src=&#34;docs/assets/dancing-rock.svg&#34; width=&#34;18&#34; height=&#34;18&#34; alt=&#34;&#34;&gt; Caveman agent · 19 tokens&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign=&#34;top&#34;&gt;
&lt;blockquote&gt;
&lt;p&gt;The reason your React component is re-rendering is likely because you&amp;rsquo;re creating a new object reference on each render cycle. When you pass an inline object as a prop, React&amp;rsquo;s shallow comparison sees it as a different object every time, which triggers a re-render. I&amp;rsquo;d recommend using useMemo to memoize the object.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;td valign=&#34;top&#34;&gt;
&lt;blockquote&gt;
&lt;p&gt;New object ref each render. Inline object prop = new ref = re-render. Wrap in &lt;code&gt;useMemo&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;Same diagnosis. Same fix. Same &lt;code&gt;useMemo&lt;/code&gt;. The only thing that died was the throat-clearing.&lt;/p&gt;
&lt;p&gt;Code, commands, file paths, and exact error messages never get cavemanned. Only the prose around them does. Security warnings and &amp;ldquo;are you sure?&amp;rdquo; confirmations come back in full sentences on their own, then caveman resumes.&lt;/p&gt;
&lt;p&gt;Caveman no make brain smaller. Caveman make &lt;em&gt;mouth&lt;/em&gt; smaller.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Half the fun is that your agent talks like it just discovered fire. The other half is that it is still right.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-why-this-exists&#34;&gt;🌍 Why this exists
&lt;/h2&gt;&lt;p&gt;A token is what AI billing counts, roughly three quarters of a word. Your agent pays for every token it &lt;strong&gt;writes&lt;/strong&gt; and every token it &lt;strong&gt;reads&lt;/strong&gt;. Most agents write like a cover letter and read like a firehose.&lt;/p&gt;
&lt;p&gt;Caveman attacks both ends, in the agent you run and in the one you build:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The skill&lt;/strong&gt; shrinks what the agent &lt;em&gt;says&lt;/em&gt;. One rule file. Free forever. Works in 30+ agents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The proxy&lt;/strong&gt; shrinks what the agent &lt;em&gt;reads&lt;/em&gt;: logs, test output, JSON, diffs, search results. Runs on your machine. Every squeezed byte gets a backup, so the agent can always pull the original back.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The middleware&lt;/strong&gt; does the same inside &lt;em&gt;your own code&lt;/em&gt;: one wrapper around the LangChain, Vercel AI SDK, OpenAI, or Anthropic call you already make. Tool results get shrunk before the model sees them, the original stays in your history, and the model can fetch it back.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Started as a joke on a Friday in April 2026. Hit 4,000 stars in a week. Now past 100,000, with a research paper, a JetBrains lab test, and a Primeagen reaction video. The joke got serious. The voice did not.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-quick-start&#34;&gt;⚡ Quick Start
&lt;/h2&gt;&lt;p&gt;Caveman come in two sizes. Start small.&lt;/p&gt;
&lt;h3 id=&#34;small-rock-the-skill&#34;&gt;Small rock: the skill
&lt;/h3&gt;&lt;p&gt;A rule file that makes your agent answer in caveman. Apache-2.0, free forever, works in &lt;a class=&#34;link&#34; href=&#34;./INSTALL.md&#34; &gt;30+ agents&lt;/a&gt; (Claude Code, Codex, Gemini, Cursor, Windsurf, Cline, Copilot, more). One command:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx skills add JuliusBrussee/caveman -g
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Type &lt;code&gt;/caveman&lt;/code&gt; if your agent doesn&amp;rsquo;t wake up on its own. That the whole install. One rock.&lt;/p&gt;
&lt;h3 id=&#34;big-rock-the-proxy&#34;&gt;Big rock: the proxy
&lt;/h3&gt;&lt;p&gt;Runs on your machine, between your agent and the AI provider, and shrinks what the agent &lt;em&gt;reads&lt;/em&gt; before every call. Apache-2.0, CLI and runtime both:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g @caveman-ai/cli &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; caveman setup --install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman claude        &lt;span class=&#34;c1&#34;&gt;# or codex · gemini · aider · kilo · qwen · opencode · hermes · openclaw · pi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;your-own-app-the-middleware&#34;&gt;Your own app: the middleware
&lt;/h3&gt;&lt;p&gt;Building an agent in code instead of running one in a terminal? Same shrinking, one wrapper around the call you already make. Apache-2.0 client, stable 1.0:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install @caveman-ai/middleware @caveman-ai/sdk        &lt;span class=&#34;c1&#34;&gt;# TypeScript, plus your framework (ai, openai, …)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install &lt;span class=&#34;s1&#34;&gt;&amp;#39;caveman-middleware[langchain]&amp;#39;&lt;/span&gt; caveman-sdk   &lt;span class=&#34;c1&#34;&gt;# Python 3.11+, swap the extra for your framework&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Six lines of code and a local runtime. &lt;a class=&#34;link&#34; href=&#34;#-caveman-in-your-own-app&#34; &gt;Full walkthrough below&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;They stack. Most people start with the small rock and graduate.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;More doors into the cave&lt;/strong&gt; · full installer, Windows, single agents, uninstall&lt;/summary&gt;
&lt;br&gt;
&lt;p&gt;The full installer wires up Claude Code hooks and the statusline badge, finds every supported agent on your machine, and skips agents you no have. Safe to re-run. Needs Node.js 22.13+.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/v3.0.0/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Windows, PowerShell 5.1+:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-powershell&#34; data-lang=&#34;powershell&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;irm &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;raw&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;githubusercontent&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;com&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;JuliusBrussee&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;caveman&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;v3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;install&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;py&#34;&gt;ps1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;iex
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Just one agent:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Claude Code&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;claude plugin marketplace add JuliusBrussee/caveman &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; claude plugin install caveman@caveman
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Gemini CLI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gemini extensions install https://github.com/JuliusBrussee/caveman
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Oh My Pi (OMP)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx -y github:JuliusBrussee/caveman -- --only omp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Qwen Code CLI, then its Caveman wrapper&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm i -g @qwen-code/qwen-code
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman qwen
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Codex, Cursor, Windsurf, Cline, and other skills-compatible agents&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npx skills add JuliusBrussee/caveman --skill &lt;span class=&#34;s1&#34;&gt;&amp;#39;*&amp;#39;&lt;/span&gt; -a codex --yes -g  &lt;span class=&#34;c1&#34;&gt;# replace codex with your agent profile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Install broke?&lt;/strong&gt; Open your agent in this repo and say: &lt;em&gt;&amp;ldquo;Read CLAUDE.md and INSTALL.md, install caveman for me.&amp;rdquo;&lt;/em&gt; Agent read repo, agent fix own brain. Snake eat tail.&lt;/p&gt;
&lt;p&gt;Changed your mind: &lt;code&gt;npx -y github:JuliusBrussee/caveman -- --uninstall&lt;/code&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;p&gt;The full 30+ agent matrix, dry runs, flags, and verification live in &lt;a class=&#34;link&#34; href=&#34;./INSTALL.md&#34; &gt;INSTALL.md&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;-the-first-five-minutes&#34;&gt;🕐 The first five minutes
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Small rock.&lt;/strong&gt; The skill, right after &lt;code&gt;npx skills add&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Ask it something.&lt;/strong&gt; Any coding question. Watch the preamble vanish and the answer stay.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Turn the dial.&lt;/strong&gt; &lt;code&gt;/caveman lite&lt;/code&gt; for tight-but-polite. &lt;code&gt;/caveman ultra&lt;/code&gt; for grunts. &lt;code&gt;/caveman wenyan&lt;/code&gt; for classical Chinese, because someone asked.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commit like a caveman.&lt;/strong&gt; &lt;code&gt;/caveman-commit&lt;/code&gt; writes a Conventional Commit in one line.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Review like a caveman.&lt;/strong&gt; &lt;code&gt;/caveman-review&lt;/code&gt; gives one finding per line: &lt;code&gt;L42: 🔴 null deref. Guard it.&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shrink your memory files.&lt;/strong&gt; &lt;code&gt;/caveman-compress CLAUDE.md&lt;/code&gt; cuts the prose, keeps every heading, path, and command, and backs up the original.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Come home.&lt;/strong&gt; Say &lt;code&gt;stop caveman&lt;/code&gt;. Normal prose returns. No hard feelings.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Big rock.&lt;/strong&gt; The proxy, right after &lt;code&gt;npm install -g @caveman-ai/cli&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Find out where your tokens go.&lt;/strong&gt; &lt;code&gt;caveman learn&lt;/code&gt; reads months of agent history already on your disk, locally, and ranks the places your tokens go, biggest first, with a one-line fix behind each. Do this before anything else. It is the most useful five minutes in this README. After step 3 it keeps watching by itself and speaks up only when something new appears.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Let it fix them.&lt;/strong&gt; &lt;code&gt;caveman learn implement&lt;/code&gt; hands each fix to Claude Code or Codex one diff at a time, applied only on your yes, and undoes anything that did not make each message smaller.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wrap your agent.&lt;/strong&gt; &lt;code&gt;caveman claude&lt;/code&gt; (or &lt;code&gt;codex&lt;/code&gt;, &lt;code&gt;gemini&lt;/code&gt;, &lt;code&gt;aider&lt;/code&gt;, &lt;code&gt;opencode&lt;/code&gt;, &lt;code&gt;pi&lt;/code&gt;, …) puts the proxy in front of it. Logs, test output, JSON, and diffs get shrunk before the provider sees them. Originals stay on disk, and the agent can pull any of them back.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shrink the noisy stuff.&lt;/strong&gt; &lt;code&gt;caveman shrink -- pnpm test&lt;/code&gt; compresses command output. &lt;code&gt;caveman browse &amp;lt;url&amp;gt;&lt;/code&gt; gives the agent a compressed view of a web page instead of a 15,000-token accessibility dump.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Prove it on your own work.&lt;/strong&gt; &lt;code&gt;caveman trial -- claude&lt;/code&gt; runs a real session with and without caveman, then &lt;code&gt;caveman trial report&lt;/code&gt; shows the difference. That A/B outranks every number on this page. A trial needs its own proxy, so if you already did step 3 it will tell you to run &lt;code&gt;caveman disable claude&lt;/code&gt; first, and &lt;code&gt;caveman enable claude&lt;/code&gt; after. Caveman rather say &amp;ldquo;cannot measure this&amp;rdquo; than hand you a report full of zeros.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shrink caveman itself.&lt;/strong&gt; &lt;code&gt;caveman convert --dry-run&lt;/code&gt; shows which installed skills get cheaper as PNG pages the model reads as an image. Convert the profitable ones, revert byte-for-byte any time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch the bill.&lt;/strong&gt; &lt;code&gt;caveman stats&lt;/code&gt; for history and estimates. &lt;code&gt;/caveman-stats&lt;/code&gt; inside Claude Code for that session.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-the-numbers&#34;&gt;📊 The Numbers
&lt;/h2&gt;&lt;p&gt;Every number below is either from a committed run in this repo or from a named third party. Nothing rounded up. Where a number is small, it says so. Where a row is red, it stays red.&lt;/p&gt;
&lt;h3 id=&#34;what-the-skill-saves-writing-less&#34;&gt;What the skill saves (writing less)
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Who measured&lt;/th&gt;
					&lt;th&gt;What they measured&lt;/th&gt;
					&lt;th&gt;Result&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://arxiv.org/abs/2606.24083&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Adobe Research&lt;/a&gt;&lt;/strong&gt; (CAVEWOMAN, arXiv 2606.24083)&lt;/td&gt;
					&lt;td&gt;Eight models, five datasets, five compression levels&lt;/td&gt;
					&lt;td&gt;Output-side caveman style cuts realized cost &lt;strong&gt;1.4 to 2.4× per model, up to 3×&lt;/strong&gt; in the best case&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.jetbrains.com/ai/2026/07/speak-to-ai-agents-like-cavemen-tosave-tokens/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;JetBrains&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;86 real coding tasks, paired A/B, Claude Code 2.1.200. &lt;strong&gt;Skill only, no proxy&lt;/strong&gt; (July 2026, before the proxy existed)&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;8.5% fewer output tokens&lt;/strong&gt;, about 10% cost. &lt;strong&gt;No detectable quality change&lt;/strong&gt; (sign test p = 0.82)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;This repo&lt;/strong&gt; (&lt;a class=&#34;link&#34; href=&#34;./evals/README.md&#34; &gt;committed eval snapshot&lt;/a&gt;)&lt;/td&gt;
					&lt;td&gt;Ten dev questions, skill vs a plain &lt;code&gt;Answer concisely.&lt;/code&gt; control, claude-opus-4-6&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;50% fewer output tokens at the median&lt;/strong&gt; on top of the terse control. Length only, not correctness&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Read those three together and you get the honest picture. Chat-style Q&amp;amp;A: big cut. Agentic coding sessions, where most tokens are code and tool calls that the skill never touches: high single digits on output, quality flat.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The JetBrains number is why the proxy exists.&lt;/strong&gt; They measured the skill alone, in July 2026, before the proxy shipped. Their finding was that an agent&amp;rsquo;s bill is mostly &lt;em&gt;reading&lt;/em&gt;, not writing, and no talking style fixes that. So we built the thing that shrinks the reading. The table below is what that changed.&lt;/p&gt;
&lt;p&gt;The Adobe paper&amp;rsquo;s other finding matters too: compressing the &lt;em&gt;human&amp;rsquo;s&lt;/em&gt; prompt into caveman-speak makes models answer longer and worse. Caveman never rewrites your prompts. Only the agent&amp;rsquo;s mouth.&lt;/p&gt;
&lt;p&gt;The rules add input tokens on every call, and whether shorter output pays for them depends on your agent, caching, and billing. Full accounting: &lt;a class=&#34;link&#34; href=&#34;./docs/HONEST-NUMBERS.md&#34; &gt;docs/HONEST-NUMBERS.md&lt;/a&gt;.&lt;/p&gt;
&lt;!-- BENCHMARK-TABLE-START --&gt;
&lt;p&gt;No reviewed API benchmark result is published here yet. Run
&lt;code&gt;uv run python benchmarks/run.py&lt;/code&gt; to generate a new result, then review its raw
response pairs and quality before publishing the generated table.&lt;/p&gt;
&lt;!-- BENCHMARK-TABLE-END --&gt;
&lt;h3 id=&#34;what-the-proxy-saves-reading-less&#34;&gt;What the proxy saves (reading less)
&lt;/h3&gt;&lt;p&gt;Your agent rereads logs, test output, diffs, and half your repo all day. The proxy shrinks that stream before it reaches the provider. Pinned 54-run Claude Code benchmark, provider-reported input tokens, three runs per case, every answer checked against an exact oracle:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Case&lt;/th&gt;
					&lt;th style=&#34;text-align: right&#34;&gt;Direct Claude Code&lt;/th&gt;
					&lt;th style=&#34;text-align: right&#34;&gt;Through caveman&lt;/th&gt;
					&lt;th style=&#34;text-align: right&#34;&gt;Change&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CSV outlier hunt&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;165,823&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;74,484&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;-55.1%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Log needle in haystack&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;148,807&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;74,068&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;-50.2%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;YAML config drift&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;132,124&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;71,027&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;-46.2%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Test output failure&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;150,377&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;108,514&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;-27.8%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Deployment JSON drift&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;147,975&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;108,939&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;-26.4%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Dashboard HTML alert&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;140,687&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;154,641&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;+9.9%&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;885,793&lt;/strong&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;591,673&lt;/strong&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;-33.2%&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;18 of 18 answer checks passed.&lt;/strong&gt; Case-clustered 95% interval: 14.6% to 48.5%. In the same suite, Headroom&amp;rsquo;s wrap saved 6.7% and failed 3 of 18 checks. Method, provenance hashes, and limits: &lt;a class=&#34;link&#34; href=&#34;./docs/WRAP-BENCHMARK.md&#34; &gt;docs/WRAP-BENCHMARK.md&lt;/a&gt;. Raw harness artifacts are not in this checkout, so treat it as a pinned report, not a public reproduction.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Maintainer note.&lt;/strong&gt; The HTML row is red and it stays red. That case had no compression transform, so caveman paid its own overhead and won nothing back. The day I hide a red row is the day you should stop trusting the green ones.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;everything-else-caveman-shrinks&#34;&gt;Everything else caveman shrinks
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Surface&lt;/th&gt;
					&lt;th&gt;Measured&lt;/th&gt;
					&lt;th&gt;Number&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Browser pages&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Focused question against a 200-row table, vs the Playwright ARIA snapshot&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;121 tokens vs 15,704. 129.8× smaller.&lt;/strong&gt; Tiny forms lose 2.3×; the &lt;a class=&#34;link&#34; href=&#34;./browse/BENCHMARK.md&#34; &gt;benchmark&lt;/a&gt; says so&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Memory files&lt;/strong&gt; (&lt;code&gt;/caveman-compress&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;Five real &lt;code&gt;CLAUDE.md&lt;/code&gt;-style fixtures&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;46% smaller on average&lt;/strong&gt;, headings, code, paths, and URLs verified intact&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;The skill itself&lt;/strong&gt; (pixel mode)&lt;/td&gt;
					&lt;td&gt;Rendered to PNG pages the model reads as an image&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;1,069 to 415 estimated tokens, a 61% cut&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Your harness prefix&lt;/strong&gt; (&lt;code&gt;subagent-tax&lt;/code&gt;)&lt;/td&gt;
					&lt;td&gt;What every subagent re-sends before doing any work&lt;/td&gt;
					&lt;td&gt;On one real machine, &lt;strong&gt;219k of a 267k-char request was tool schemas&lt;/strong&gt;. Run it on yours&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-how-it-compares&#34;&gt;🧮 How it compares
&lt;/h2&gt;&lt;p&gt;Many tool in valley promise small token. They work at different layers, so first what each one touches, then what got measured. Every quote below is from that tool&amp;rsquo;s own README or GitHub page on 2026-09-19.&lt;/p&gt;
&lt;h3 id=&#34;what-each-one-touches&#34;&gt;What each one touches
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Tool&lt;/th&gt;
					&lt;th&gt;What it shrinks&lt;/th&gt;
					&lt;th&gt;Get the original back?&lt;/th&gt;
					&lt;th&gt;Phones home&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Caveman&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;What the agent &lt;strong&gt;says&lt;/strong&gt; (skill) and what it &lt;strong&gt;reads&lt;/strong&gt;: tool output, logs, JSON, diffs, test output, web pages (proxy)&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;Always.&lt;/strong&gt; Byte-exact original in local SQLite, one recovery handle&lt;/td&gt;
					&lt;td&gt;CLI and its agent hooks: usage stats with a random install ID and your IP, on by default, &lt;code&gt;caveman telemetry off&lt;/code&gt;. Skill alone: never&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/rtk-ai/rtk&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;RTK&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Shell command output only: &lt;code&gt;ls&lt;/code&gt;, &lt;code&gt;cat&lt;/code&gt;, &lt;code&gt;grep&lt;/code&gt;, &lt;code&gt;git&lt;/code&gt;, test runners. &lt;code&gt;Read&lt;/code&gt; and &lt;code&gt;Grep&lt;/code&gt; tool calls bypass it&lt;/td&gt;
					&lt;td&gt;When a command fails or gets cut short, or opt-in for successful runs&lt;/td&gt;
					&lt;td&gt;Off by default, opt-in&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/headroomlabs-ai/headroom&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Headroom&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Tool output, logs, files, and history, through a local proxy&lt;/td&gt;
					&lt;td&gt;Yes, reversible cache&lt;/td&gt;
					&lt;td&gt;On by default, &lt;code&gt;HEADROOM_BEACON=off&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/mksglu/context-mode&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;context-mode&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Tool output, run in a sandbox so raw data never enters context&lt;/td&gt;
					&lt;td&gt;Matching sections from a searchable index, not the whole thing back&lt;/td&gt;
					&lt;td&gt;Never&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/teamchong/pxpipe&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;pxpipe&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Text context, re-rendered as images the model reads&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;No.&lt;/strong&gt; &amp;ldquo;It is lossy.&amp;rdquo; Misses are silent&lt;/td&gt;
					&lt;td&gt;Local log only&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;what-the-tin-says-and-who-checked&#34;&gt;What the tin says, and who checked
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Tool&lt;/th&gt;
					&lt;th&gt;Says on the tin&lt;/th&gt;
					&lt;th&gt;Who checked, on what&lt;/th&gt;
					&lt;th&gt;Found&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Caveman&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Only what this page measures&lt;/td&gt;
					&lt;td&gt;This repo, pinned 54-run Claude Code suite, every answer checked against a known-right answer&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;33.2% fewer input tokens, 18/18 answers right&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Caveman&lt;/strong&gt;, skill only&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;JetBrains, 86 real coding tasks, paired A/B&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;8.5% fewer output tokens, quality flat&lt;/strong&gt; (sign test p = 0.82)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;RTK&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;cuts up to 90% of the bash output your agent reads&amp;rdquo;. Their README adds: &amp;ldquo;it is not the same as cutting your bill by 90%&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;JetBrains, same lab, same method, 86 tasks, 425 billed trials&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;+7.6% median cost per task&lt;/strong&gt; at low reasoning effort (p = 0.004), +0.1% at high. Quality tie&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Headroom&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;20% fewer tokens for coding agents, 60-95% fewer tokens for JSON&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;This repo, same 54-run suite as above&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;6.7% fewer input tokens, 15/18 answers right&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;context-mode&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;315 KB becomes 5.4 KB. 98% reduction.&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;Own size numbers only. No quality check published&lt;/td&gt;
					&lt;td&gt;—&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;pxpipe&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&amp;ldquo;~59–70% lower end-to-end bill&amp;rdquo;&lt;/td&gt;
					&lt;td&gt;Own SWE-bench runs&lt;/td&gt;
					&lt;td&gt;Lite 10/10 both arms. Pro 14/19 with, 15/19 without, and their rerun of the one split says run-to-run variance&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;same-suite-same-model-same-questions&#34;&gt;Same suite, same model, same questions
&lt;/h3&gt;&lt;p&gt;The one place two of these tools ran side by side against the same known-right answers. Claude Code 2.1.223, claude-sonnet-5, Headroom 0.33.0, six agent-shaped workloads, three runs each, provider-reported input tokens:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Arm&lt;/th&gt;
					&lt;th style=&#34;text-align: right&#34;&gt;Answers right&lt;/th&gt;
					&lt;th style=&#34;text-align: right&#34;&gt;Provider input tokens&lt;/th&gt;
					&lt;th style=&#34;text-align: right&#34;&gt;vs direct&lt;/th&gt;
					&lt;th style=&#34;text-align: right&#34;&gt;95% interval&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Direct Claude Code&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;18/18&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;885,793&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;baseline&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Caveman wrap + skill&lt;/strong&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;18/18&lt;/strong&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;591,673&lt;/strong&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;-33.2%&lt;/strong&gt;&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;&lt;strong&gt;14.6% to 48.5%&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Headroom wrap&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;15/18&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;703,202 on its 15 correct runs&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;-6.7% on those 15&lt;/td&gt;
					&lt;td style=&#34;text-align: right&#34;&gt;-0.7% to 17.9%&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Caveman used fewer tokens in 15 of the 18 paired runs. Headroom&amp;rsquo;s 703,202 covers only the 15 runs it answered right, so its 6.7% is against those same 15 direct runs, not against the 885,793 total. Its three failed YAML runs stay in the table and count for nothing. Caveman&amp;rsquo;s one red row, HTML at +9.9%, is in the per-case table above and stays red too. We ran this ourselves, and the raw harness artifacts are not published yet, so it is a pinned report, not something you can re-run from this repo. Method and hashes: &lt;a class=&#34;link&#34; href=&#34;./docs/WRAP-BENCHMARK.md&#34; &gt;docs/WRAP-BENCHMARK.md&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;RTK, context-mode, and pxpipe were not in that run. RTK rewrites shell output, and this suite hands the agent its data through a tool call, not the shell, so RTK would have sat idle. Different layer, different test. Fair is fair on the rest: RTK&amp;rsquo;s telemetry is opt-in and ours is opt-out, context-mode sends nothing anywhere, and pxpipe ran SWE-bench where we have not. Stack them if you like. Headroom&amp;rsquo;s own README lists caveman as something it happily runs behind.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-in-the-wild&#34;&gt;📣 In the Wild
&lt;/h2&gt;&lt;table&gt;
&lt;tr&gt;
&lt;td width=&#34;50%&#34; valign=&#34;top&#34;&gt;
&lt;p&gt;&lt;strong&gt;ThePrimeagen&lt;/strong&gt; · &lt;em&gt;&amp;ldquo;No way this actually works&amp;rdquo;&lt;/em&gt;&lt;br&gt;
&lt;a class=&#34;link&#34; href=&#34;https://www.youtube.com/watch?v=L29q2LRiMRc&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Full reaction on The PrimeTime →&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Adobe Research&lt;/strong&gt; · &lt;a class=&#34;link&#34; href=&#34;https://arxiv.org/abs/2606.24083&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;CAVEWOMAN: How Large Language Models Behave Under Linguistic Input and Output Compression&lt;/a&gt;&lt;br&gt;
Adeyemi, Rossi, Dernoncourt · arXiv, June 2026 · cites this repo. The style is now a benchmarked register.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;JetBrains&lt;/strong&gt; · &lt;a class=&#34;link&#34; href=&#34;https://blog.jetbrains.com/ai/2026/07/speak-to-ai-agents-like-cavemen-tosave-tokens/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Speaking to AI Agents like Cavemen Saves 65% of Tokens. We Test.&lt;/a&gt;&lt;br&gt;
The most rigorous outside A/B so far, run on the skill alone before the proxy existed. Their verdict: &lt;em&gt;&amp;ldquo;Use it if you like it. It is fun, and it costs you nothing measurable in quality.&amp;rdquo;&lt;/em&gt; Their 8.5% is the number that made us build the proxy.&lt;/p&gt;
&lt;/td&gt;
&lt;td width=&#34;50%&#34; valign=&#34;top&#34;&gt;
&lt;p&gt;&lt;strong&gt;Hacker News&lt;/strong&gt; · &lt;a class=&#34;link&#34; href=&#34;https://news.ycombinator.com/item?id=47647455&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;#1, 904 points, 366 comments&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The New Stack&lt;/strong&gt; · &lt;a class=&#34;link&#34; href=&#34;https://thenewstack.io/caveman-mode-token-savings/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Getting Claude Code to grunt in Caveman-speak might not save as many tokens as you think&lt;/a&gt;&lt;br&gt;
Fair headline. We link it anyway. See &lt;a class=&#34;link&#34; href=&#34;#-the-numbers&#34; &gt;The Numbers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;GitHub Trending&lt;/strong&gt; · #1 overall, July 2026&lt;br&gt;
&lt;strong&gt;Trendshift&lt;/strong&gt; · #1 Repository of the Day (April 2026) · #1 JavaScript repo of the month (April) · #1 Go repo of the month (July)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Product Hunt&lt;/strong&gt; · #8 Product of the Day&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://star-history.com/#JuliusBrussee/caveman&amp;amp;Date&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-the-skill-unpacked&#34;&gt;💬 The skill, unpacked
&lt;/h2&gt;&lt;p&gt;One rule file, one talking style, plus a small toolbox. &lt;code&gt;/caveman lite|full|ultra|wenyan-lite|wenyan-full|wenyan-ultra&lt;/code&gt; sets intensity. &lt;code&gt;/caveman off&lt;/code&gt; or &lt;code&gt;normal mode&lt;/code&gt; turns it off.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Level&lt;/th&gt;
					&lt;th&gt;Same question: &amp;ldquo;Why does my React component re-render?&amp;rdquo;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;lite&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Your component re-renders because you create a new object reference each render. Wrap it in &lt;code&gt;useMemo&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;full&lt;/strong&gt; &lt;em&gt;(default)&lt;/em&gt;&lt;/td&gt;
					&lt;td&gt;New object ref each render. Inline object prop = new ref = re-render. Wrap in &lt;code&gt;useMemo&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;ultra&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Inline obj prop, new ref, re-render. &lt;code&gt;useMemo&lt;/code&gt;.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;wenyan-full&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;每繪新生對象參照，故重繪；以 useMemo 包之則免。&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Three things the skill will never do: shorten your code, paraphrase an error message, or grunt through a security warning. It drops to full sentences for anything irreversible, then picks the club back up.&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Everything in the box&lt;/strong&gt; · commit messages, reviews, subagents, work patterns&lt;/summary&gt;
&lt;br&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Tool / command&lt;/th&gt;
					&lt;th&gt;What you get&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/caveman [lite|full|ultra|wenyan-lite|wenyan-full|wenyan-ultra|off]&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Shorter replies at the intensity you choose.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;cavecrew-investigator&lt;/code&gt;, &lt;code&gt;cavecrew-builder&lt;/code&gt;, &lt;code&gt;cavecrew-reviewer&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Compressed subagent presets for locating, editing, and reviewing code.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/caveman-commit&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Terse Conventional Commit messages.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/caveman-review&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;One-line, actionable review findings.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/caveman-compress &amp;lt;file&amp;gt;&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Smaller Markdown memory files, with the original backed up.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/caveman-stats&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Recorded Claude Code token usage; savings unknown without a measured comparison.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/caveman-help&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;One-screen reminder of every mode and command.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;investigate-first&lt;/code&gt;, &lt;code&gt;lean-build&lt;/code&gt;, &lt;code&gt;surgical-patch&lt;/code&gt;, &lt;code&gt;safe-refactor&lt;/code&gt;, &lt;code&gt;migration&lt;/code&gt;, &lt;code&gt;verify-and-stop&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Work patterns that write less code, so the agent bills fewer tokens. Your agent picks these up on its own when a task fits.&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;/caveman-setup&lt;/code&gt;, &lt;code&gt;/caveman-discover&lt;/code&gt;, &lt;code&gt;/caveman-learn&lt;/code&gt;, &lt;code&gt;/caveman-manage&lt;/code&gt;, &lt;code&gt;/caveman-optimize&lt;/code&gt;, &lt;code&gt;/caveman-explore&lt;/code&gt;, &lt;code&gt;/caveman-evidence-review&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Drive the caveman engine and proxy: set it up, find where tokens go, act on what it finds.&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;/details&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-the-proxy-unpacked&#34;&gt;🔧 The proxy, unpacked
&lt;/h2&gt;&lt;p&gt;One local process. Your agent talks to it, it talks to your provider. No Caveman server in the path, and your Claude Pro/Max login passes through to Anthropic untouched. Originals of everything it compresses sit in a SQLite file on your machine with a recovery handle, so the agent can always ask for the full version back.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;n&#34;&gt;Your&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;agent&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Claude&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Code&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Codex&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Gemini&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Aider&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;opencode&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Pi&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;…&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;   &lt;span class=&#34;k&#34;&gt;tool&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;output&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;logs&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;JSON&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;diffs&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;search&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;results&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;err&#34;&gt;▼&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;err&#34;&gt;┌────────────────────────────────────────────────────┐&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;caveman&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;proxy&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;your&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;machine&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;your&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;keys&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;          &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;detect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;json&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;code&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;diff&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;search&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;originals&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;→&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;local&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SQLite&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;recovery&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;handle&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;returned&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;err&#34;&gt;└────────────────────────────────────────────────────┘&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;err&#34;&gt;│&lt;/span&gt;   &lt;span class=&#34;n&#34;&gt;smaller&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;prompt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;same&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;answer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;err&#34;&gt;▼&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;n&#34;&gt;Your&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;provider&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Anthropic&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;OpenAI&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Google&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Bedrock&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Vertex&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Azure&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;OpenRouter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Whole team? One container.&lt;/strong&gt; Same proxy in your VPC, one shared token, keys stay on server. &lt;a class=&#34;link&#34; href=&#34;docs/technical/deploy.md&#34; &gt;Deploy it →&lt;/a&gt;&lt;/p&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;docs/assets/caveman-demo.gif&#34; alt=&#34;Terminal demo: caveman compress reads a large JSON payload and emits a much smaller compressed version, byte-exact recoverable&#34;&gt;
&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;What the engine keeps, by payload type&lt;/strong&gt; · and the wrap stack diagram&lt;/summary&gt;
&lt;br&gt;
&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;docs/assets/wrap-stack.svg&#34; alt=&#34;coding agent talks to a local caveman proxy that forwards upstream to the provider with auth passed through byte-exact; a CCR store below the proxy keeps the original bytes and returns a recovery handle to the agent; an MCP toolkit side-channel gives the agent caveman_retrieve, toon encode/decode, and browse&#34; width=&#34;820&#34;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;detect()&lt;/code&gt; types each payload and routes it to a compressor that keeps what answers depend on:&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Detected type&lt;/th&gt;
					&lt;th&gt;Keeps&lt;/th&gt;
					&lt;th&gt;Target savings&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;json&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;keys, structure, error/message subtrees; collapses repetitive arrays&lt;/td&gt;
					&lt;td&gt;70-90%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;log&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;errors, stack traces, first/last lines; drops INFO and progress noise&lt;/td&gt;
					&lt;td&gt;85-95%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;code&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;imports, signatures, types; elides function bodies, syntax stays valid&lt;/td&gt;
					&lt;td&gt;40-70%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;diff&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;file/hunk headers and changed lines; elides repeated context&lt;/td&gt;
					&lt;td&gt;60-80%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;search-result&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;top/bottom hits plus diagnostic/security hits&lt;/td&gt;
					&lt;td&gt;80-95%&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;code&gt;text&lt;/code&gt; / HTML&lt;/td&gt;
					&lt;td&gt;headings, opening/closing context, important sections&lt;/td&gt;
					&lt;td&gt;50-80%&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;contextwindow.Pack()&lt;/code&gt; additionally fits candidate context into a token budget by BM25 relevance, recency, and error signal, returned in original order so chronology survives.&lt;/p&gt;
&lt;p&gt;Any MCP host gets the same powers through five tools: &lt;code&gt;caveman_compress&lt;/code&gt;, &lt;code&gt;caveman_retrieve&lt;/code&gt;, &lt;code&gt;caveman_stats&lt;/code&gt;, &lt;code&gt;caveman_toon_encode&lt;/code&gt;, &lt;code&gt;caveman_toon_decode&lt;/code&gt;.&lt;/p&gt;
&lt;/details&gt;
&lt;h3 id=&#34;where-your-tokens-go&#34;&gt;Where your tokens go
&lt;/h3&gt;&lt;p&gt;Months of your agent history already sit on your disk. &lt;code&gt;caveman learn&lt;/code&gt; reads it, locally, read-only, no account, and ranks the places your tokens go, biggest first, with a one-line fix behind each. Then it keep watching, so you not have to remember.&lt;/p&gt;
&lt;p&gt;Your agent re-sends its instructions (&lt;code&gt;CLAUDE.md&lt;/code&gt;, skills, hooks) and the whole conversation with every message it sends the model. So a few hundred extra tokens in a setup file get paid again on every single message. That is what learn hunts.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman learn             &lt;span class=&#34;c1&#34;&gt;# Claude Code + Codex + Gemini CLI + opencode; aider via CAVEMAN_AIDER_ROOT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman learn implement   &lt;span class=&#34;c1&#34;&gt;# hand the fixes to Claude Code or Codex, one diff at a time, applied only on your yes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p align=&#34;center&#34;&gt;
  &lt;img src=&#34;docs/assets/learn-report.png&#34; alt=&#34;Caveman Learn report: a short summary and savings cards on the left; the biggest places tokens go, with one fix opened, and a chart of how full sessions get on the right&#34; width=&#34;900&#34;&gt;
&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It run itself.&lt;/strong&gt; Once caveman is on your agent (&lt;code&gt;caveman claude&lt;/code&gt;, &lt;code&gt;caveman codex&lt;/code&gt;, …), learn re-scans quietly after a session ends. Low priority, at most every 6 hours, never makes the session wait. When something new and heavy shows up, your next session opens with one line, one time:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;caveman&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;learn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;finding&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;—&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Project&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CLAUDE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;md&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;423&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;lines&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;699&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tokens&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;loaded&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;every&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;9.7&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;k&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tokens&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;every&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;estimate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Run&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;caveman&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;learn&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;review&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Nothing new, nothing said. &lt;code&gt;caveman learn autopilot off&lt;/code&gt; if you rather run it by hand.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It check your memory files.&lt;/strong&gt; Claude Code loads only the first 200 lines (or 25KB) of &lt;code&gt;MEMORY.md&lt;/code&gt;. Everything past that, your agent never sees, and nothing tells you. Learn tells you. It also catches &lt;code&gt;@imports&lt;/code&gt; pointing at files that are gone, the same rule pasted into two files your agent loads (you pay for it twice, every message), file paths in &lt;code&gt;CLAUDE.md&lt;/code&gt; that no longer exist, and memory notes the index forgot to link.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It say if you getting better.&lt;/strong&gt; Week over week, from your own sessions, first run included. Real output from the maintainer&amp;rsquo;s machine, bad news left in:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;last&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;weeks&lt;/span&gt;  &lt;span class=&#34;n&#34;&gt;tokens&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;per&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;session&lt;/span&gt;   &lt;span class=&#34;err&#34;&gt;▄▂▃▁█┊▄&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;185&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;worse&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;n&#34;&gt;peak&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;context&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;used&lt;/span&gt;    &lt;span class=&#34;err&#34;&gt;▁▁▄▅█┊▁&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;points&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;worse&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;n&#34;&gt;overloaded&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;messages&lt;/span&gt;  &lt;span class=&#34;err&#34;&gt;▁▂▃▇█┊▅&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;2.9&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;points&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;·&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;worse&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;n&#34;&gt;week&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;of&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Sep&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;928&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;sessions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;vs&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;weeks&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;before&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;              &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;trend&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;is&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;saving&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;and&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;it&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;does&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;not&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;show&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;the&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;cause&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&amp;ldquo;Overloaded&amp;rdquo; means the conversation filled more than half of what the model can hold at once. Past that, answers tend to get worse (a common rule of thumb). Each week counts its middle session, not the average, so one giant session can&amp;rsquo;t skew it. Weeks under 5 sessions say &amp;ldquo;not enough data&amp;rdquo; instead of guessing. The &lt;code&gt;┊&lt;/code&gt; marks the week still running: shown, never compared.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;It prove the fix, or undo it.&lt;/strong&gt; &lt;code&gt;implement&lt;/code&gt; re-measures after every change and undoes anything that didn&amp;rsquo;t make each message smaller. Some fixes can&amp;rsquo;t be re-counted, like a new skill that only pays off when it gets used. For those, &lt;code&gt;caveman learn experiment&lt;/code&gt; runs it on for a stretch and off for a stretch over your own sessions, and gives no verdict before 5 sessions each way. Caveman never makes your agent dumber to make it cheaper.&lt;/p&gt;
&lt;p&gt;Every verb, every check, every number it will and won&amp;rsquo;t show: &lt;a class=&#34;link&#34; href=&#34;./docs/technical/learn.md&#34; &gt;docs/technical/learn.md&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;more-verbs&#34;&gt;More verbs
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman explore install         &lt;span class=&#34;c1&#34;&gt;# read-only FastContext subagent: finds code as path:line&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman shrink -- pnpm &lt;span class=&#34;nb&#34;&gt;test&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# compress noisy command output, byte-exact recoverable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman browse &amp;lt;url&amp;gt;            &lt;span class=&#34;c1&#34;&gt;# local Chrome over a compressed a11y tree&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman mem remember&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;recall     &lt;span class=&#34;c1&#34;&gt;# durable memory; `mem recover &amp;lt;handle&amp;gt;` = original bytes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman trial -- claude         &lt;span class=&#34;c1&#34;&gt;# A/B a real session, then `trial report` (needs `disable` first)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman toon encode&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;decode      &lt;span class=&#34;c1&#34;&gt;# the TOON re-encoder, standalone&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman stats                   &lt;span class=&#34;c1&#34;&gt;# token history, API estimates, subscription equivalents&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id=&#34;pixel-mode&#34;&gt;Pixel mode
&lt;/h3&gt;&lt;p&gt;Caveman eating its own tail. Every skill you install is prompt text your agent reloads on every call. &lt;code&gt;caveman convert&lt;/code&gt; renders the skill body to PNG pages in place, and the model reads it as an image. On the caveman skill itself: &lt;strong&gt;1,069 to 415 estimated tokens, a 61% cut&lt;/strong&gt;.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman convert --dry-run        &lt;span class=&#34;c1&#34;&gt;# every installed skill, with the token math, no writes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman convert --agent claude   &lt;span class=&#34;c1&#34;&gt;# convert the profitable ones&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman convert --revert         &lt;span class=&#34;c1&#34;&gt;# byte-identical restore from SKILL.orig.md&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Convert only fires when pages beat the text. Any failure leaves the skill byte-identical and names the gate that said no.&lt;/p&gt;
&lt;h3 id=&#34;wrap-any-agent&#34;&gt;Wrap any agent
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;caveman &amp;lt;agent&amp;gt;&lt;/code&gt; turns the proxy on for good and launches the agent. &lt;code&gt;caveman wrap &amp;lt;agent&amp;gt;&lt;/code&gt; runs one session and leaves nothing behind. It never edits your config files.&lt;/p&gt;
&lt;p&gt;In managed mode the Claude Code wrap also sends the repository (github.com owner/name) and current branch name as &lt;code&gt;x-cave-tags&lt;/code&gt;, so Cloud can join a session&amp;rsquo;s spend to the change it shipped. Branch names can carry a person&amp;rsquo;s or customer&amp;rsquo;s name. Not OK? Set &lt;code&gt;CAVEMAN_WORK_TAGS=0&lt;/code&gt; and no tags go. Or set your own &lt;code&gt;x-cave-tags&lt;/code&gt; in &lt;code&gt;ANTHROPIC_CUSTOM_HEADERS&lt;/code&gt;: the wrap sends yours exactly as written and adds nothing.&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Agent&lt;/th&gt;
					&lt;th&gt;Vendor&lt;/th&gt;
					&lt;th&gt;How it&amp;rsquo;s wrapped&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Claude Code&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Anthropic&lt;/td&gt;
					&lt;td&gt;env vars&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;OpenAI Codex CLI&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;OpenAI&lt;/td&gt;
					&lt;td&gt;env vars (API key) · ephemeral &lt;code&gt;CODEX_HOME&lt;/code&gt; (ChatGPT login)&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Gemini CLI&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Google&lt;/td&gt;
					&lt;td&gt;env vars&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Aider&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;OpenAI/Anthropic&lt;/td&gt;
					&lt;td&gt;env vars&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Kilo Code&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Kilo Code&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;KILO_CONFIG_CONTENT&lt;/code&gt;, your &lt;code&gt;kilo.json&lt;/code&gt; untouched&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Qwen Code&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;QwenLM&lt;/td&gt;
					&lt;td&gt;ephemeral system-settings overlay, source settings untouched&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;opencode&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;sst&lt;/td&gt;
					&lt;td&gt;inline config via env, your &lt;code&gt;opencode.json&lt;/code&gt; untouched&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Hermes Agent&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;Nous Research&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;--provider custom&lt;/code&gt; + env&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;OpenClaw&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;OpenClaw&lt;/td&gt;
					&lt;td&gt;ephemeral merged config, your config read-only&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Pi&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;pi.dev&lt;/td&gt;
					&lt;td&gt;bundled native extension, your &lt;code&gt;~/.pi&lt;/code&gt; config untouched&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;details&gt;
&lt;summary&gt;&lt;strong&gt;Fine print&lt;/strong&gt; · tested versions, default loadout, SDK recipes&lt;/summary&gt;
&lt;br&gt;
&lt;p&gt;Tested against real sessions on &lt;strong&gt;Hermes v0.18.0&lt;/strong&gt;, &lt;strong&gt;OpenClaw 2026.6.11&lt;/strong&gt;, &lt;strong&gt;Pi 0.84.2&lt;/strong&gt;, &lt;strong&gt;Kilo Code 7.5.6&lt;/strong&gt; (the CLI, not the editor extension), and &lt;strong&gt;Qwen Code 0.22.3&lt;/strong&gt;. Persistent shortcuts are journaled and reversible with &lt;code&gt;caveman disable &amp;lt;agent&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;OpenClaw, for the record, is a lobster. Lobster claw still sharp. Lobster mouth now small.&lt;/p&gt;
&lt;p&gt;The default wrap hands the agent the five MCP tools, the browse server when Chrome resolves, command-output shrink on Claude, opencode, Gemini, Hermes, and OpenClaw, and pixel mode on new skill installs. Codex skips the shrink hook because its runtime rejects the rewrite (&lt;a class=&#34;link&#34; href=&#34;https://github.com/openai/codex/issues/18491&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;openai/codex#18491&lt;/a&gt;). Turn pieces off in &lt;code&gt;~/.caveman-cloud/config.json&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Agent not on the list, or building your own? Wrap one call natively with the &lt;a class=&#34;link&#34; href=&#34;#-caveman-in-your-own-app&#34; &gt;middleware&lt;/a&gt;, or point any provider SDK or framework (Vercel AI SDK, LangChain, LiteLLM, OpenAI Agents, CrewAI, PydanticAI) at the local proxy with a &lt;code&gt;baseURL&lt;/code&gt; swap: &lt;a class=&#34;link&#34; href=&#34;./integrations/recipes/&#34; &gt;&lt;code&gt;integrations/recipes/&lt;/code&gt;&lt;/a&gt;. New native agent is usually one JSON profile in &lt;a class=&#34;link&#34; href=&#34;./agents/profiles/&#34; &gt;&lt;code&gt;agents/profiles/&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/details&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-caveman-in-your-own-app&#34;&gt;🧩 Caveman in your own app
&lt;/h2&gt;&lt;p&gt;The proxy shrinks what a coding agent reads. The middleware does the same thing for the agent &lt;em&gt;you&lt;/em&gt; are building, in the framework you already use. One wrapper around one call. Before each provider request it swaps big tool results for a shorter copy and hands the model a &lt;code&gt;caveman_retrieve&lt;/code&gt; tool, so the model can read the original back whenever the short copy is not enough. Your conversation history keeps every original byte. Your provider, your client, your retries, your streaming: untouched.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;TypeScript&lt;/strong&gt; (Vercel AI SDK shown):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+import { createMiddlewareRuntime } from &amp;#34;@caveman-ai/sdk/middleware&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+import { withCaveman } from &amp;#34;@caveman-ai/middleware/ai-sdk&amp;#34;;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+const runtime = createMiddlewareRuntime({ endpoint: &amp;#34;http://127.0.0.1:8787&amp;#34;, mode: &amp;#34;compress&amp;#34; });
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+const scope = { namespace: &amp;#34;support&amp;#34;, session_id: conversationId, branch_id: &amp;#34;main&amp;#34;, cache_epoch: &amp;#34;0&amp;#34; };
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-const result = streamText(options);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+const result = streamText(withCaveman(options, { runtime, scope }));
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Python&lt;/strong&gt; (LangChain shown):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-diff&#34; data-lang=&#34;diff&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+from caveman_cloud.middleware import MiddlewareRuntime, Scope
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+from caveman_middleware.langchain import with_caveman_agent
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+runtime = MiddlewareRuntime(endpoint=&amp;#34;http://127.0.0.1:8787&amp;#34;, mode=&amp;#34;compress&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+scope = Scope(&amp;#34;support&amp;#34;, conversation_id, &amp;#34;main&amp;#34;, &amp;#34;0&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gd&#34;&gt;-agent = create_agent(model=model, tools=tools)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;gi&#34;&gt;+agent = create_agent(**with_caveman_agent({&amp;#34;model&amp;#34;: model, &amp;#34;tools&amp;#34;: tools}, runtime=runtime, scope=scope))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The runtime is the same local proxy from the big rock, started once beside your app:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install -g @caveman-ai/cli &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; caveman setup --install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CAVEMAN_MODE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;compress caveman start     &lt;span class=&#34;c1&#34;&gt;# binds 127.0.0.1:8787; plain `caveman start` only records&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;Frameworks with a native adapter&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;TypeScript&lt;/strong&gt; &lt;code&gt;@caveman-ai/middleware&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;Vercel AI SDK · OpenAI · Anthropic · Google GenAI · LangChain · Strands · Mastra · MCP&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;Python&lt;/strong&gt; &lt;code&gt;caveman-middleware&lt;/code&gt;&lt;/td&gt;
					&lt;td&gt;OpenAI · Anthropic · Google GenAI · LangChain + LangGraph · LiteLLM · Strands · Agno · CrewAI · PydanticAI · AutoGen · LlamaIndex · FastAPI · MCP&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Straight talk: a runtime left in record mode measures and changes nothing, whichever mode the client asks for, so set both. Decision reports say what was replaced and why, and carry no token counters; provider usage is the only savings number that counts. Runtime unreachable means your original request goes through untouched, unless you opt into strict mode.&lt;/p&gt;
&lt;p&gt;Docs: &lt;a class=&#34;link&#34; href=&#34;https://docs.caveman.so/docs/sdk/middleware&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;middleware overview&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;https://docs.caveman.so/docs/sdk/middleware/vercel-ai-sdk&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Vercel AI SDK guide&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;https://docs.caveman.so/docs/sdk/middleware/python&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Python guide&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;https://docs.caveman.so/docs/sdk/middleware/frameworks&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;every framework and version&lt;/a&gt; · &lt;a class=&#34;link&#34; href=&#34;https://docs.caveman.so/docs/sdk/middleware/deployment&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;deploy beside your app&lt;/a&gt; · package READMEs for &lt;a class=&#34;link&#34; href=&#34;./packages/middleware/typescript/README.md&#34; &gt;TypeScript&lt;/a&gt; and &lt;a class=&#34;link&#34; href=&#34;./packages/middleware/python/README.md&#34; &gt;Python&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Rather not touch code? Point any SDK at the proxy with a &lt;code&gt;baseURL&lt;/code&gt; swap instead: &lt;a class=&#34;link&#34; href=&#34;./integrations/recipes/&#34; &gt;&lt;code&gt;integrations/recipes/&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-when-to-use--when-to-skip&#34;&gt;🧭 When to use · when to skip
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Good fit if you&lt;/strong&gt; read your agent&amp;rsquo;s answers more than you paste them somewhere, run long sessions full of logs and test output, or pay per token and want the reading side shrunk without changing your code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Skip it if you&lt;/strong&gt; are billed per request rather than per token (GitHub Copilot premium requests, for one: a shorter answer is the same request), or your workload is pure code generation with almost no prose to cut. The ruleset rides along as input tokens on every call (about 1,000 estimated for the full skill), and on terse one-liner Q&amp;amp;A that can cost more than it saves.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Measure it yourself.&lt;/strong&gt; Run the same task with and without caveman and compare the provider&amp;rsquo;s billing page. That A/B outranks every number on this page. If caveman loses on your workload, turn it off. Full list of where it loses: &lt;a class=&#34;link&#34; href=&#34;./docs/HONEST-NUMBERS.md&#34; &gt;docs/HONEST-NUMBERS.md&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-the-whole-cave&#34;&gt;🏔 The whole cave
&lt;/h2&gt;&lt;p&gt;One idea everywhere: &lt;strong&gt;agent do more with less.&lt;/strong&gt;&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Repo&lt;/th&gt;
					&lt;th&gt;What it shrinks&lt;/th&gt;
					&lt;th&gt;Status&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/JuliusBrussee/caveman&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;caveman&lt;/a&gt;&lt;/strong&gt; &lt;em&gt;(you here)&lt;/em&gt;&lt;/td&gt;
					&lt;td&gt;What the agent &lt;strong&gt;says&lt;/strong&gt; (skill), &lt;strong&gt;reads&lt;/strong&gt; (proxy), and what &lt;strong&gt;your own app&lt;/strong&gt; sends (middleware)&lt;/td&gt;
					&lt;td&gt;live&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/JuliusBrussee/caveman-browse&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;caveman-browse&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;What the agent &lt;strong&gt;sees in the browser&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;live&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;caveman-agent-sdk&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;What your production agent &lt;strong&gt;loads, calls, and spends&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;own repo · in dev&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/JuliusBrussee/cavegemma&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;cavegemma&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The compression &lt;strong&gt;baked into weights&lt;/strong&gt; (Gemma fine-tune)&lt;/td&gt;
					&lt;td&gt;labs&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/JuliusBrussee/caveman-code&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;caveman-code&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The &lt;strong&gt;whole agent&lt;/strong&gt;, end to end&lt;/td&gt;
					&lt;td&gt;frozen&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/JuliusBrussee/cavemem&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;cavemem&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;What the agent &lt;strong&gt;remembers&lt;/strong&gt;, across sessions&lt;/td&gt;
					&lt;td&gt;frozen&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://github.com/JuliusBrussee/cavekit&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;cavekit&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;The &lt;strong&gt;build loop&lt;/strong&gt;, spec-driven&lt;/td&gt;
					&lt;td&gt;frozen&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Frozen ones still install and work. Their best ideas moved in here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Caveman make token small. Caveman Cloud make it &lt;em&gt;provable&lt;/em&gt;.&lt;/strong&gt; Local numbers are &lt;code&gt;inferred&lt;/code&gt;, pinned benchmarks &lt;code&gt;benchmark_counterfactual&lt;/code&gt;, neither is an invoice. Live traffic behind eval gates with signed receipts earns &lt;code&gt;verified&lt;/code&gt;. That&amp;rsquo;s Cloud. &lt;strong&gt;&lt;a class=&#34;link&#34; href=&#34;https://caveman.so&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Waitlist at caveman.so&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-privacy-and-a-small-favor&#34;&gt;🔒 Privacy, and a small favor
&lt;/h2&gt;&lt;p&gt;Your agent still talks to the provider you chose. The skill runs entirely on your machine, and nothing here needs an account.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;caveman&lt;/code&gt; CLI does send usage stats by default, and here&amp;rsquo;s the honest why: caveman is free, one person maintains it, and those stats are how I find out which commands people actually use and which optimizations run in real workflows. That&amp;rsquo;s what keeps this thing free and pointed in the right direction. Fair trade, we think.&lt;/p&gt;
&lt;p&gt;What it sends: which commands ran, when your agent starts a session (the CLI&amp;rsquo;s agent hooks send that one), token counts through and cut, a random install ID, your OS and CLI version, whether you&amp;rsquo;re signed in, how you installed it, your timezone and language, and the IP address the stats come from. IPs get wiped after 90 days, everything else after 13 months. What it never sends: your prompts, your code, or your file paths. It tells you all this the first time you run it.&lt;/p&gt;
&lt;p&gt;Not into it? One command and it&amp;rsquo;s off forever, no hard feelings:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;caveman telemetry off      &lt;span class=&#34;c1&#34;&gt;# or set DO_NOT_TRACK=1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Want what it already sent gone too? &lt;code&gt;telemetry off&lt;/code&gt; prints your install ID one last time. Send it to us and we delete it all. How: &lt;a class=&#34;link&#34; href=&#34;./SECURITY.md#delete-sent-telemetry&#34; &gt;SECURITY.md&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Exact network, telemetry, and storage boundaries: &lt;a class=&#34;link&#34; href=&#34;./SECURITY.md&#34; &gt;SECURITY.md&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;-license&#34;&gt;📜 License
&lt;/h2&gt;&lt;p&gt;One license: &lt;a class=&#34;link&#34; href=&#34;./LICENSE&#34; &gt;Apache-2.0&lt;/a&gt;, whole repo, from Caveman 3.0.0 on. Skill, CLI, client SDKs, middleware, contracts, provider catalog, extension, and the full runtime: Engine, Proxy, Browse, MCP server, &lt;code&gt;shrink&lt;/code&gt;, cavemem, shared Go platform. Read it, fork it, ship it, host it. Free like mammoth on open plain.&lt;/p&gt;
&lt;p&gt;Releases before 3.0.0 keep the license they shipped with. Details in &lt;a class=&#34;link&#34; href=&#34;./LICENSING.md&#34; &gt;LICENSING.md&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;engine/pixel&lt;/code&gt; embeds &lt;a class=&#34;link&#34; href=&#34;https://github.com/teamchong/pxpipe&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;pxpipe&lt;/a&gt; (MIT) plus glyph atlases derived from Spleen 5×8 (BSD-2-Clause) and GNU Unifont (dual OFL-1.1 / GPLv2-with-font-exception); its &lt;code&gt;NOTICE&lt;/code&gt; travels with that source.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Caveman&amp;rdquo; and the rock logo are trademarks of Julius Brussee. &amp;ldquo;Powered by Caveman&amp;rdquo; is fine when true.&lt;/p&gt;
&lt;h2 id=&#34;-cite&#34;&gt;📚 Cite
&lt;/h2&gt;&lt;p&gt;If caveman shows up in your paper, the way it showed up in Adobe&amp;rsquo;s:&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bibtex&#34; data-lang=&#34;bibtex&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nc&#34;&gt;@software&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nl&#34;&gt;brussee2026caveman&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;author&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;{Brussee, Julius}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;title&lt;/span&gt;  &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;{Caveman: why use many token when few do trick}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;year&lt;/span&gt;   &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;{2026}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;na&#34;&gt;url&lt;/span&gt;    &lt;span class=&#34;p&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;{https://github.com/JuliusBrussee/caveman}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id=&#34;-star-this-repo&#34;&gt;⭐ Star this repo
&lt;/h2&gt;&lt;p&gt;Caveman save you token, save you money. Star cost zero. Fair trade. ⭐&lt;/p&gt;
&lt;hr&gt;
&lt;sub&gt;
&lt;strong&gt;Docs:&lt;/strong&gt;
&lt;a href=&#34;./docs/README.md&#34;&gt;Technical manual&lt;/a&gt; ·
&lt;a href=&#34;./INSTALL.md&#34;&gt;Install matrix&lt;/a&gt; ·
&lt;a href=&#34;./docs/HONEST-NUMBERS.md&#34;&gt;Honest numbers&lt;/a&gt; ·
&lt;a href=&#34;./docs/WRAP-BENCHMARK.md&#34;&gt;Wrap benchmark&lt;/a&gt; ·
&lt;a href=&#34;./LICENSE&#34;&gt;License&lt;/a&gt; ·
&lt;a href=&#34;./CONTRIBUTING.md&#34;&gt;Contributing&lt;/a&gt; ·
&lt;a href=&#34;./CLAUDE.md&#34;&gt;Maintainer guide&lt;/a&gt; ·
&lt;a href=&#34;https://github.com/JuliusBrussee/caveman/issues&#34;&gt;Issues&lt;/a&gt;
&lt;br&gt;
One license, Apache-2.0. Few token. No lie.
&lt;/sub&gt;
</description>
        </item>
        
    </channel>
</rss>
