跳到主要内容
Supermarket
返回能力市场
Agent Pack
programming
NOASSERTION

caveman

🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman

JuliusBrusseeJuliusBrussee
59/ 100

公开评测 · 综合采用结论

存在需要人工复核的风险或证据不足

查看评测依据 评测我的项目基于公开项目证据,非安全认证或安装推荐
105.6kstars
6.1kforks
最近更新 15天前
评测生成时间(北京时间)
本报告引擎
v3.0.0
当前引擎
v3.16.0

本报告与当前引擎使用不同规则;原分数不会自动更新,不同版本的分数不宜直接对比。

重新评测此项目

进入后确认来源与额度,提交才会创建任务。

Evaluation report

综合采用结论

59
D
满分 100
谨慎采用高风险
决策摘要

存在需要人工复核的风险或证据不足

85%
高置信度
100
文档
78
安全
95
质量
100
活跃
70
采用

历史报告未保存置信度明细;重新评测后可查看各项证据贡献。

How it works · 未生成图示

本次报告未完成图示提取

本次评测未完成 AI 证据提取;确定性评分与安全扫描仍然有效。重新评测后,证据充分时会自动选择合适图型。

补充参与方或组件说明谁参与、各自负责什么
说明关系与顺序提供输入输出、调用或依赖证据
重新评测自动选图按证据选择流程、时序或架构图
五维表现
确定性工程质量 95/100
采用建议
优势
  • 问题与用途描述
  • 有效 README
  • 安装或接入步骤
  • 可执行示例
关注点
  • 发现高风险的一键下载执行或安装命令

也有自己的公开项目?先看完证据,再用当前规则生成独立报告。

评测我的项目 →
文档证据
100/100
问题与用途描述10 分
有效 README12 分
安装或接入步骤14 分
可执行示例16 分
输入、参数或工具说明11 分
输出或结果说明9 分
限制、权限或边界12 分
错误处理或排障8 分
许可证信息5 分
结构化章节3 分
安全证据
高风险
发现高风险的一键下载执行或安装命令
unsafe-install-commandREADME.md:87high confidence
curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/v2.2.0/install.sh | bash

修复:固定版本与校验和,先下载审查再执行,避免管道直接交给 Shell。

优先改进清单
  1. 01固定版本与校验和,先下载审查再执行,避免管道直接交给 Shell。
方法、证据与局限展开
数据来源

GitHub Repository API

扫描范围

25 个文件 · 104,326 字符

评测引擎

v3.0.0 · AI 复核未启用

局限
  • 静态评测不会安装或执行项目代码
  • 安全扫描基于高信号文件与已知模式,不能替代人工审计
  • 流行度只反映采用程度,不代表安全或工程质量

30 天热度趋势

README

Caveman

why use many token when few do trick

Your AI coding agent bills by the word and writes like it knows that. Caveman make it stop.

ThePrimeagen reacts to Caveman: No way this actually works

▶️ ThePrimeagen reacts: "No way this actually works"

GitHub stars npm downloads 30+ agents 10 native wrap profiles License skills.sh

🏆 #1 on GitHub Trending · July 2026  ·  🥇 #1 Repository of the Day on Trendshift · April 2026

#1 on Hacker News · 904 points · 366 comments  ·  #8 Product of the Day on Product Hunt

📄 Cited in CAVEWOMAN, an Adobe Research paper that measured caveman-style output cutting cost 1.4 to 2.4×, up to 3×  ·  🧪 Tested by JetBrains on 86 real coding tasks: "costs you nothing measurable in quality"

Caveman - why use many token when few do trick | Product Hunt JuliusBrussee%2Fcaveman | Trendshift

⚡ One command, no account, no API key. npx skills add JuliusBrussee/caveman -g → Quick Start


See it · Quick Start · The Numbers · In the Wild · The Skill · The Proxy · Wrap · When to Skip · Docs


🪨 See it

🗣️ Normal agent · 69 tokens Caveman agent · 19 tokens

The reason your React component is re-rendering is likely because you're creating a new object reference on each render cycle. When you pass an inline object as a prop, React's shallow comparison sees it as a different object every time, which triggers a re-render. I'd recommend using useMemo to memoize the object.

New object ref each render. Inline object prop = new ref = re-render. Wrap in useMemo.

Same diagnosis. Same fix. Same useMemo. The only thing that died was the throat-clearing.

Code, commands, file paths, and exact error messages never get cavemanned. Only the prose around them does. Security warnings and "are you sure?" confirmations come back in full sentences on their own, then caveman resumes.

Caveman no make brain smaller. Caveman make mouth smaller.

Half the fun is that your agent talks like it just discovered fire. The other half is that it is still right.


🌍 Why this exists

A token is what AI billing counts, roughly three quarters of a word. Your agent pays for every token it writes and every token it reads. Most agents write like a cover letter and read like a firehose.

Caveman attacks both ends:

  • The skill shrinks what the agent says. One rule file. Free forever. Works in 30+ agents.
  • The proxy shrinks what the agent reads: 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.

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.


⚡ Quick Start

Caveman come in two sizes. Start small.

Small rock: the skill

A rule file that makes your agent answer in caveman. MIT, free forever, works in 30+ agents (Claude Code, Codex, Gemini, Cursor, Windsurf, Cline, Copilot, more). One command:

npx skills add JuliusBrussee/caveman -g

Type /caveman if your agent doesn't wake up on its own. That the whole install. One rock.

Big rock: the proxy

Runs on your machine, between your agent and the AI provider, and shrinks what the agent reads before every call. MIT CLI, BSL-1.1 runtime:

npm install -g @caveman-ai/cli && caveman setup --install
caveman claude        # or codex · gemini · aider · kilo · qwen · opencode · hermes · openclaw · pi

They stack. Most people start with the small rock and graduate.

More doors into the cave · full installer, Windows, single agents, uninstall

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+.

curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/v2.7.0/install.sh | bash

Windows, PowerShell 5.1+:

irm https://raw.githubusercontent.com/JuliusBrussee/caveman/v2.7.0/install.ps1 | iex

Just one agent:

# Claude Code
claude plugin marketplace add JuliusBrussee/caveman && claude plugin install caveman@caveman

# Gemini CLI
gemini extensions install https://github.com/JuliusBrussee/caveman

# Qwen Code CLI, then its Caveman wrapper
npm i -g @qwen-code/qwen-code
caveman qwen

# Codex, Cursor, Windsurf, Cline, and other skills-compatible agents
npx skills add JuliusBrussee/caveman --skill '*' -a codex --yes -g  # replace codex with your agent profile

Install broke? Open your agent in this repo and say: "Read CLAUDE.md and INSTALL.md, install caveman for me." Agent read repo, agent fix own brain. Snake eat tail.

Changed your mind: npx -y github:JuliusBrussee/caveman -- --uninstall

The full 30+ agent matrix, dry runs, flags, and verification live in INSTALL.md.

🕐 The first five minutes

Small rock. The skill, right after npx skills add:

  1. Ask it something. Any coding question. Watch the preamble vanish and the answer stay.
  2. Turn the dial. /caveman lite for tight-but-polite. /caveman ultra for grunts. /caveman wenyan for classical Chinese, because someone asked.
  3. Commit like a caveman. /caveman-commit writes a Conventional Commit in one line.
  4. Review like a caveman. /caveman-review gives one finding per line: L42: 🔴 null deref. Guard it.
  5. Shrink your memory files. /caveman-compress CLAUDE.md cuts the prose, keeps every heading, path, and command, and backs up the original.
  6. Come home. Say stop caveman. Normal prose returns. No hard feelings.

Big rock. The proxy, right after npm install -g @caveman-ai/cli:

  1. Find out where your tokens go. caveman learn reads months of agent history already on your disk, locally, and ranks your token sinks worst-first with a one-line fix behind each. Do this before anything else. It is the most useful five minutes in this README.
  2. Let it fix them. caveman learn implement hands each fix to Claude Code or Codex one diff at a time, applied only on your yes, and reverts anything that did not lower tokens per turn.
  3. Wrap your agent. caveman claude (or codex, gemini, aider, opencode, pi, …) 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.
  4. Shrink the noisy stuff. caveman shrink -- pnpm test compresses command output. caveman browse <url> gives the agent a compressed view of a web page instead of a 15,000-token accessibility dump.
  5. Prove it on your own work. caveman trial -- claude runs a real session with and without caveman, then caveman trial report 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 caveman disable claude first, and caveman enable claude after. Caveman rather say "cannot measure this" than hand you a report full of zeros.
  6. Shrink caveman itself. caveman convert --dry-run 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.
  7. Watch the bill. caveman stats for history and estimates. /caveman-stats inside Claude Code for that session.

📊 The Numbers

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.

What the skill saves (writing less)

Who measuredWhat they measuredResult
Adobe Research (CAVEWOMAN, arXiv 2606.24083)Eight models, five datasets, five compression levelsOutput-side caveman style cuts realized cost 1.4 to 2.4× per model, up to 3× in the best case
JetBrains86 real coding tasks, paired A/B, Claude Code 2.1.200. Skill only, no proxy (July 2026, before the proxy existed)8.5% fewer output tokens, about 10% cost. No detectable quality change (sign test p = 0.82)
This repo (committed eval snapshot)Ten dev questions, skill vs a plain Answer concisely. control, claude-opus-4-650% fewer output tokens at the median on top of the terse control. Length only, not correctness

Read those three together and you get the honest picture. Chat-style Q&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.

The JetBrains number is why the proxy exists. They measured the skill alone, in July 2026, before the proxy shipped. Their finding was that an agent's bill is mostly reading, not writing, and no talking style fixes that. So we built the thing that shrinks the reading. The table below is what that changed.

The Adobe paper's other finding matters too: compressing the human's prompt into caveman-speak makes models answer longer and worse. Caveman never rewrites your prompts. Only the agent's mouth.

The rules add input tokens on every call, and whether shorter output pays for them depends on your agent, caching, and billing. Full accounting: docs/HONEST-NUMBERS.md.

No reviewed API benchmark result is published here yet. Run uv run python benchmarks/run.py to generate a new result, then review its raw response pairs and quality before publishing the generated table.

What the proxy saves (reading less)

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:

CaseDirect Claude CodeThrough cavemanChange
CSV outlier hunt165,82374,484-55.1%
Log needle in haystack148,80774,068-50.2%
YAML config drift132,12471,027-46.2%
Test output failure150,377108,514-27.8%
Deployment JSON drift147,975108,939-26.4%
Dashboard HTML alert140,687154,641+9.9%
Total885,793591,673-33.2%

18 of 18 answer checks passed. Case-clustered 95% interval: 14.6% to 48.5%. In the same suite, Headroom's wrap saved 6.7% and failed 3 of 18 checks. Method, provenance hashes, and limits: docs/WRAP-BENCHMARK.md. Raw harness artifacts are not in this checkout, so treat it as a pinned report, not a public reproduction.

Maintainer note. 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.

Everything else caveman shrinks

SurfaceMeasuredNumber
Browser pagesFocused question against a 200-row table, vs the Playwright ARIA snapshot121 tokens vs 15,704. 129.8× smaller. Tiny forms lose 2.3×; the benchmark says so
Memory files (/caveman-compress)Five real CLAUDE.md-style fixtures46% smaller on average, headings, code, paths, and URLs verified intact
The skill itself (pixel mode)Rendered to PNG pages the model reads as an image1,069 to 415 estimated tokens, a 61% cut
Your harness prefix (subagent-tax)What every subagent re-sends before doing any workOn one real machine, 219k of a 267k-char request was tool schemas. Run it on yours

📣 In the Wild

ThePrimeagen · "No way this actually works"
Full reaction on The PrimeTime →

Adobe Research · CAVEWOMAN: How Large Language Models Behave Under Linguistic Input and Output Compression
Adeyemi, Rossi, Dernoncourt · arXiv, June 2026 · cites this repo. The style is now a benchmarked register.

JetBrains · Speaking to AI Agents like Cavemen Saves 65% of Tokens. We Test.
The most rigorous outside A/B so far, run on the skill alone before the proxy existed. Their verdict: "Use it if you like it. It is fun, and it costs you nothing measurable in quality." Their 8.5% is the number that made us build the proxy.

Hacker News · #1, 904 points, 366 comments

The New Stack · Getting Claude Code to grunt in Caveman-speak might not save as many tokens as you think
Fair headline. We link it anyway. See The Numbers.

GitHub Trending · #1 overall, July 2026
Trendshift · #1 Repository of the Day (April 2026) · #1 JavaScript repo of the month (April) · #1 Go repo of the month (July)

Product Hunt · #8 Product of the Day

Star History Chart


💬 The skill, unpacked

One rule file, one talking style, plus a small toolbox. /caveman lite|full|ultra|wenyan-lite|wenyan-full|wenyan-ultra sets intensity. /caveman off or normal mode turns it off.

LevelSame question: "Why does my React component re-render?"
liteYour component re-renders because you create a new object reference each render. Wrap it in useMemo.
full (default)New object ref each render. Inline object prop = new ref = re-render. Wrap in useMemo.
ultraInline obj prop, new ref, re-render. useMemo.
wenyan-full每繪新生對象參照,故重繪;以 useMemo 包之則免。

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.

Everything in the box · commit messages, reviews, subagents, work patterns
Tool / commandWhat you get
/caveman [lite|full|ultra|wenyan-lite|wenyan-full|wenyan-ultra|off]Shorter replies at the intensity you choose.
cavecrew-investigator, cavecrew-builder, cavecrew-reviewerCompressed subagent presets for locating, editing, and reviewing code.
/caveman-commitTerse Conventional Commit messages.
/caveman-reviewOne-line, actionable review findings.
/caveman-compress <file>Smaller Markdown memory files, with the original backed up.
/caveman-statsRecorded Claude Code token usage; savings unknown without a measured comparison.
/caveman-helpOne-screen reminder of every mode and command.
investigate-first, lean-build, surgical-patch, safe-refactor, migration, verify-and-stopWork patterns that write less code, so the agent bills fewer tokens. Your agent picks these up on its own when a task fits.
/caveman-setup, /caveman-discover, /caveman-learn, /caveman-manage, /caveman-optimize, /caveman-explore, /caveman-evidence-reviewDrive the caveman engine and proxy: set it up, find where tokens go, act on what it finds.

🔧 The proxy, unpacked

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.

 Your agent  (Claude Code · Codex · Gemini · Aider · opencode · Pi · …)
      │   tool output · logs · JSON · diffs · search results
      ▼
 ┌────────────────────────────────────────────────────┐
 │  caveman proxy   (your machine, your keys)          │
 │  detect() → json · log · code · diff · search · text│
 │  originals → local SQLite, recovery handle returned │
 └────────────────────────────────────────────────────┘
      │   smaller prompt, same answer
      ▼
 Your provider  (Anthropic · OpenAI · Google · Bedrock · Vertex · Azure · OpenRouter)

Whole team? One container. Same proxy in your VPC, one shared token, keys stay on server. Deploy it →

Terminal demo: caveman compress reads a large JSON payload and emits a much smaller compressed version, byte-exact recoverable

What the engine keeps, by payload type · and the wrap stack diagram

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

detect() types each payload and routes it to a compressor that keeps what answers depend on:

Detected typeKeepsTarget savings
jsonkeys, structure, error/message subtrees; collapses repetitive arrays70-90%
logerrors, stack traces, first/last lines; drops INFO and progress noise85-95%
codeimports, signatures, types; elides function bodies, syntax stays valid40-70%
difffile/hunk headers and changed lines; elides repeated context60-80%
search-resulttop/bottom hits plus diagnostic/security hits80-95%
text / HTMLheadings, opening/closing context, important sections50-80%

contextwindow.Pack() additionally fits candidate context into a token budget by BM25 relevance, recency, and error signal, returned in original order so chronology survives.

Any MCP host gets the same powers through five tools: caveman_compress, caveman_retrieve, caveman_stats, caveman_toon_encode, caveman_toon_decode.

Where your tokens go

Months of your agent history already sit on your disk. caveman learn reads it, locally, read-only, no account, and ranks your token sinks worst-first with a one-line fix behind each.

caveman learn             # Claude Code + Codex + Gemini CLI + opencode; aider via CAVEMAN_AIDER_ROOT
caveman learn implement   # hand the fixes to Claude Code or Codex, one diff at a time, applied only on your yes

Caveman Learn report: TLDR summary and savings cards on the left; ranked token sinks with an expanded fix and a session context depth histogram on the right

implement re-measures after every change and reverts anything that didn't lower tokens per turn. Caveman never makes your agent dumber to make it cheaper.

More verbs

caveman explore install         # read-only FastContext subagent: finds code as path:line
caveman shrink -- pnpm test     # compress noisy command output, byte-exact recoverable
caveman browse <url>            # local Chrome over a compressed a11y tree
caveman mem remember|recall     # durable memory; `mem recover <handle>` = original bytes
caveman trial -- claude         # A/B a real session, then `trial report` (needs `disable` first)
caveman toon encode|decode      # the TOON re-encoder, standalone
caveman stats                   # token history, API estimates, subscription equivalents

Pixel mode

Caveman eating its own tail. Every skill you install is prompt text your agent reloads on every call. caveman convert renders the skill body to PNG pages in place, and the model reads it as an image. On the caveman skill itself: 1,069 to 415 estimated tokens, a 61% cut.

caveman convert --dry-run        # every installed skill, with the token math, no writes
caveman convert --agent claude   # convert the profitable ones
caveman convert --revert         # byte-identical restore from SKILL.orig.md

Convert only fires when pages beat the text. Any failure leaves the skill byte-identical and names the gate that said no.

Wrap any agent

caveman <agent> turns the proxy on for good and launches the agent. caveman wrap <agent> runs one session and leaves nothing behind. It never edits your config files.

AgentVendorHow it's wrapped
Claude CodeAnthropicenv vars
OpenAI Codex CLIOpenAIenv vars (API key) · ephemeral CODEX_HOME (ChatGPT login)
Gemini CLIGoogleenv vars
AiderOpenAI/Anthropicenv vars
Kilo CodeKilo CodeKILO_CONFIG_CONTENT, your kilo.json untouched
Qwen CodeQwenLMephemeral system-settings overlay, source settings untouched
opencodesstinline config via env, your opencode.json untouched
Hermes AgentNous Research--provider custom + env
OpenClawOpenClawephemeral merged config, your config read-only
Pipi.devbundled native extension, your ~/.pi config untouched
Fine print · tested versions, default loadout, SDK recipes

Tested against real sessions on Hermes v0.18.0, OpenClaw 2026.6.11, Pi 0.84.2, Kilo Code 7.5.6 (the CLI, not the editor extension), and Qwen Code 0.22.3. Persistent shortcuts are journaled and reversible with caveman disable <agent>.

OpenClaw, for the record, is a lobster. Lobster claw still sharp. Lobster mouth now small.

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 (openai/codex#18491). Turn pieces off in ~/.caveman-cloud/config.json.

Agent not on the list? Point any provider SDK or framework (Vercel AI SDK, LangChain, LiteLLM, OpenAI Agents, CrewAI, PydanticAI) at the local proxy with a baseURL swap: integrations/recipes/. New native agent is usually one JSON profile in agents/profiles/.


🧭 When to use · when to skip

Good fit if you read your agent'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.

Skip it if you 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&A that can cost more than it saves.

Measure it yourself. Run the same task with and without caveman and compare the provider'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: docs/HONEST-NUMBERS.md.


🏔 The whole cave

One idea everywhere: agent do more with less.

RepoWhat it shrinksStatus
caveman (you here)What the agent says (skill) and reads (proxy)live
caveman-browseWhat the agent sees in the browserlive
caveman-agent-sdkWhat your production agent loads, calls, and spendsown repo · in dev
cavegemmaThe compression baked into weights (Gemma fine-tune)labs
caveman-codeThe whole agent, end to endfrozen
cavememWhat the agent remembers, across sessionsfrozen
cavekitThe build loop, spec-drivenfrozen

Frozen ones still install and work. Their best ideas moved in here.

Caveman make token small. Caveman Cloud make it provable. Local numbers are inferred, pinned benchmarks benchmark_counterfactual, neither is an invoice. Live traffic behind eval gates with signed receipts earns verified. That's Cloud. Waitlist at caveman.so


🔒 Privacy, and a small favor

Your agent still talks to the provider you chose. The skill and hooks run entirely on your machine, and nothing here needs an account.

The caveman CLI does send anonymous usage stats by default, and here'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's what keeps this thing free and pointed in the right direction. Fair trade, we think.

What it sends: which commands ran, plus token counts through and cut. What it never sends: your prompts, your code, your file paths, or anything that could identify you. It tells you all this the first time you run it.

Not into it? One command and it's off forever, no hard feelings:

caveman telemetry off      # or set DO_NOT_TRACK=1

Exact network, telemetry, and storage boundaries: SECURITY.md.


📜 License

Split license. Skill and adoption surfaces are MIT. Engine-linked runtime is BSL-1.1 source-available, not OSI Open Source before Change Date.

MIT: the skill, Agent SDK and initializer, the CLI, both client SDKs, contracts, provider catalog, extension shell, and the thin cavemem clients. Free like mammoth on open plain.

BSL-1.1: Engine, Proxy, Cache Engine, rewriter, Browse, MCP server, shrink, cavemem Go core, and shared Go platform. New Engine-linked runtime modules default to BSL-1.1. Read it, fork it, self-host it for your own first-party traffic free, production included. Each version converts to Apache-2.0 on the earlier of 2030-06-21 or four years after it ships. Hosting it for third parties needs a commercial license.

engine/pixel embeds pxpipe (MIT) plus glyph atlases derived from Spleen 5×8 (BSD-2-Clause) and GNU Unifont (dual OFL-1.1 / GPLv2-with-font-exception); its NOTICE travels with that source.

"Caveman" and the rock logo are trademarks of Julius Brussee. "Powered by Caveman" is fine when true.

📚 Cite

If caveman shows up in your paper, the way it showed up in Adobe's:

@software{brussee2026caveman,
  author = {Brussee, Julius},
  title  = {Caveman: why use many token when few do trick},
  year   = {2026},
  url    = {https://github.com/JuliusBrussee/caveman}
}

⭐ Star this repo

Caveman save you token, save you money. Star cost zero. Fair trade. ⭐


Docs: Technical manual · Install matrix · Honest numbers · Wrap benchmark · License · Contributing · Maintainer guide · Issues
MIT skill · BSL-1.1 engine. Few token. No lie.