引言

“为什么用很多 token,少 token 也行。”

这是"每日一个开源项目"系列的第150篇文章。今天的主角是 caveman——一个让 AI 编程 Agent 用穴居人风格说话的 Skill,平均节省 65% 输出 token,代码内容字节精确不变。

82,947 Stars。这是一个 meme 项目,也是一个认真的工程工具。

LLM 输出有一个默认倾向:把简单的事说得很礼貌、很完整、很有铺垫。“非常感谢您的问题!您遇到这个问题很可能是因为……让我来详细解释一下……”——这些话在对话里听起来友好,但在编程工作流里是纯粹的 token 浪费。你要的是答案,不是过渡句。

caveman 的解法:装一个约束,告诉 Agent"去掉填充词,保留实质,用短语而非句子——但永远不要碰代码、命令和错误信息"。效果是 65% 的输出 token 削减,答案更快,账单更小,而且有一篇 2026 年的论文说简短输出在某些基准测试上准确率反而高了 26 分。

你将学到什么

  • 穴居人压缩的工作原理:它裁掉了什么、保留了什么
  • 四个压缩级别:lite / full / ultra / wenyan 各自的压缩幅度
  • 诚实的数字:65% 是输出 token,全会话节省为什么更小,什么情况下反而亏
  • 完整工具集:/caveman-compress 压缩记忆文件的永久节省效果
  • Caveman 生态系统:五个相关项目各自解决什么问题

前置知识

  • 使用过 Claude Code 或任意 AI 编程工具
  • 了解 LLM token 的基本概念(输出 token 收费)

项目背景

项目简介

caveman 是一个跨 Agent 的 Skill/Plugin,安装后告诉 AI 编程 Agent:回答时去掉废话、用片段而非完整句子,但代码、命令、错误信息一字不改。

它解决的不是"AI 答案不准确"的问题,而是"AI 说话太啰嗦"的问题。大型语言模型经过 RLHF 训练后有礼貌倾向——喜欢说"当然"、“让我来”、“这个很好的问题”、“如您所见”、“总的来说”。这些词在聊天场景里有价值,在编程工作流里是噪声。

项目由 Julius Brussee 创建,网站:caveman.so

作者/团队介绍

  • 作者: Julius Brussee
  • 主要语言: JavaScript
  • License: MIT
  • 官网: caveman.so

项目数据

  • ⭐ GitHub Stars: 82,900+
  • 🍴 Forks: 4,629+
  • 📄 License: MIT
  • 📅 创建时间: 2026-04-04(三个月内达到 8 万 Star)

主要功能

Before / After

正常 Agent(69 tokens) Caveman Agent(19 tokens)
“您的 React 组件重复渲染的原因很可能是您在每次渲染循环中创建了新的对象引用。当您将内联对象作为 prop 传递时,React 的浅比较每次都会将其视为不同的对象,从而触发重新渲染。我建议使用 useMemo 来记忆该对象。” “每次渲染新建对象引用。内联 prop = 新引用 = 重渲染。用 useMemo 包裹。”

同样的修复方案,三分之一的词,没有技术信息丢失。

┌────────────────────────────────────────────┐
│   输出 token 节省   █████████       65%     │
│   输入 token 节省   ░░░░░░░░░         0%    │
│   技术准确性        █████████      100%     │
│   氛围              █████████       爆表    │
└────────────────────────────────────────────┘

穴居人没有让 AI 变笨。穴居人让 AI 嘴变小了。它压缩的是 Agent 说的话,不是它知道的东西。

安装

一条命令,自动找到机器上所有 Agent,逐一安装:

# macOS · Linux · WSL · Git Bash
curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh | bash
# Windows PowerShell
irm https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.ps1 | iex

约 30 秒,需要 Node ≥ 18,跳过未安装的 Agent,可以安全重复运行。

单独安装到特定 Agent:

# Claude Code 插件方式
claude plugin marketplace add JuliusBrussee/caveman && claude plugin install caveman@caveman

# Cursor / Windsurf / Cline / Codex 等
npx skills add JuliusBrussee/caveman -a cursor

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

启用方式:在 Claude Code 里安装后,从第一条消息就自动启用(Hook 机制),无需手动执行命令。其他 Agent 输入 /caveman 或说"talk like caveman"启用,说"normal mode"关闭。

四个压缩级别

/caveman <level> 切换,级别在会话内保持:

级别 同一句话的不同版本
正常 Agent “您应该将对象包裹在 useMemo 中,因为每次渲染都会创建新引用。”
lite “将对象包裹在 useMemo 中。每次渲染都会创建新引用。”
full(默认) “每次渲染新引用。将对象包裹在 useMemo 中。”
ultra “新引用/渲染。useMemo 它。”
wenyan 使用文言文格式,经典中文每 token 信息密度最高

多语言说明:Caveman 保持你的语言。用中文写,caveman 用中文咕哝。西班牙语、法语、葡萄牙语同理。它压缩的是风格,不翻译语言。wenyan 是唯一例外——它故意切换到文言文,因为经典中文每 token 的信息密度更高。

完整工具集

命令 作用
/caveman [lite|full|ultra|wenyan] 压缩所有回复,级别在会话内保持
/caveman-commit Conventional Commit 格式,主题行 ≤50 字符,写"为什么"不写"是什么"
/caveman-review 单行 PR 评论:L42: 🔴 bug: user null. 加守卫。
/caveman-stats 真实会话 token 使用量、终身节省量、美元换算,--share 输出可发推的一行
/caveman-compress <file> 把记忆文件(如 CLAUDE.md)改写为穴居人风格,平均节省 46% 输入 token,每次会话永久生效
caveman-shrink MCP 中间件,包裹任意 MCP 服务器,压缩其工具描述。npm 包
cavecrew-* 穴居人子 Agent(调查员、Builder、审查员),约比普通子 Agent 少 60% token,主上下文更持久

项目详细剖析

基准测试数据

真实 API token 计数,跨 10 个典型编程提示的平均值:

任务 正常 Caveman 节省
解释 React 重渲染 Bug 1180 159 87%
修复认证中间件 Token 过期 704 121 83%
配置 PostgreSQL 连接池 2347 380 84%
解释 git rebase vs merge 702 292 58%
回调重构为 async/await 387 301 22%
微服务 vs 单体架构 446 310 30%
PR 安全审查 678 398 41%
Docker 多阶段构建 1042 290 72%
调试 PostgreSQL 竞态条件 1200 232 81%
实现 React Error Boundary 3454 456 87%
平均 1214 294 65%

诚实的数字警告

README 里有一个罕见的诚实声明,值得单独介绍:

Caveman 只压缩输出 token。输入和推理 token 不受影响,而且 Skill 本身每轮约增加 1–1.5k 输入 token。所以全会话的实际节省比输出数字小,对于本身就简洁的工作任务,甚至可能变成净亏损。真正的收益是可读性和速度,成本节省是附赠品。

什么时候 caveman 赢:

  • 解释类任务(架构解释、概念说明)→ 最大节省(80%+)
  • 调试说明 → 大节省(70-80%)
  • 代码生成 → 中等节省(代码本身不会被压缩)

什么时候 caveman 亏:

  • 已经很简洁的任务(“运行这个命令”)→ Skill 开销 > 节省
  • 短对话 → Skill 初始 token 未被摊销

/caveman-compress:永久节省的关键

/caveman-compress <file> 的价值不同于普通的 caveman 压缩——它压缩的是每次会话都会加载的记忆文件CLAUDE.mdAGENTS.md 等)。

/caveman-compress CLAUDE.md

真实压缩数据:

文件 原始 压缩后 节省
claude-md-preferences.md 706 285 59.6%
project-notes.md 1145 535 53.3%
claude-md-project.md 1122 636 43.3%
todo-list.md 627 388 38.1%
mixed-with-code.md(含代码) 888 560 36.9%
平均 898 481 46%

代码、URL、路径字节精确保留。只有散文性的描述被压缩。一次压缩,之后每个会话都从更小的输入上下文开始——永久节省,不只是单次回复。

工作原理

1. 安装
   └── 把 Skill 文件写入 Agent 的规则/配置目录

2. Skill 指令(核心)
   └── 告诉 Agent:
       ✅ 去掉填充词("当然"/"如您所见"/"总的来说")
       ✅ 用片段而非完整句子
       ✅ 省略过渡句和介绍性短语
       ❌ 永远不要修改代码、命令、错误信息

3. Claude Code 自动启用(Hook 机制)
   └── 安装时写入一个小标志文件
   └── 每次会话 Hook 触发,Agent 从第一条消息就是穴居人模式

4. /caveman-stats
   └── 读取本地会话日志,计算 token 节省
   └── 写入状态栏(statusline 显示 [CAVEMAN] ⛏ 12.4k)

5. 零遥测
   └── 安装后无网络请求
   └── Skill 是本地 prompt,Hook 是本地脚本,stats 读本地日志

有趣的研究支撑

2026 年 3 月,arxiv 上有一篇论文(arXiv:2604.00025):《Brevity Constraints Reverse Performance Hierarchies in Language Models》,测试了 31 个模型,发现限制大模型给出简短回答,在部分基准测试上准确率提升了约 26 分

简短不只是更便宜,有时候更准确。

Caveman 生态系统

作者围绕"Agent 用更少 token 做更多事"这一主题构建了五个相关项目:

项目 压缩对象
caveman(本文) Agent 说的话(输出 token)
caveman-code 整个 Agent 端到端(比 Codex 同任务约少 2× token)
cavemem Agent 记住的东西(跨会话记忆)
cavekit 构建循环(规格驱动,消除猜测)
cavegemma 压缩烘焙进权重(Gemma 微调模型)

以及五个附属 Skill(grill-meinterface-kitjunior-to-seniorloop-factory),统一通过 npx skills@latest add JuliusBrussee/skills 安装。


项目地址与资源

官方资源


总结

caveman 是一个 meme 包装里的严肃工具。穴居人的形式是个梗,但 65% 输出 token 节省是真实测量数据,基准测试代码在仓库里可以自己跑。

项目值得注意的是它对诚实的执着:主动在 README 里写"这是输出 token,全会话节省更小,短任务可能净亏"——这比大多数效率工具的宣传要诚实得多。

/caveman-compress 是其中最有长期价值的功能:把 CLAUDE.md 等每次会话都加载的记忆文件压缩 46%,不是节省一次,是之后每次都省。如果你的 CLAUDE.md 已经很长了,这个值得单独试一次。

对于长时间使用 Claude Code 或任意 AI 编程工具、每天有大量代码对话的开发者,caveman 是目前 token 成本优化中接入成本最低、副作用最小的工具之一:一条安装命令,30 秒,之后每次 AI 回复都更快、更短、更便宜。


探索 PrimeSkills —— 精选 AI Agent 与技能的市场,每一个都经过真实企业工作流验证,去掉浮夸,留下真正有用的。

欢迎访问我的个人主页,发现更多有价值的见解和有趣的产品。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐