- 人工智能
- AI Agent
- 代码智能体
- 开发工具
【免费下载链接】stagewise
The Open Source Agentic IDE. Create and orchestrate coding agents, show app previews and run git workflows. Use your favorite models across all providers.
本文以仓库 .agents/skills/caveman/SKILL.md 为核心骨架,讲解 Stagewise(开源 Agentic IDE)中 caveman 技能的设计原理与完整使用规范:它的触发方式、持久化语义、压缩规则、六档强度、自动降级机制与使用边界,并结合 packages/agent-core/src/services/mount-manager/workspace-info/skills.ts 等源码说明技能在 Stagewise 中是如何被扫描、解析和加载的。读完你可以:在对话中随时开启/切换/关闭 caveman 模式,理解它每个规则背后的 token 经济学,并知道哪些场景下它会主动恢复为正常散文以保安全。
一、caveman 是什么:一份写给模型的"输出压缩协议"
caveman 是 Stagewise 技能(skill)体系中的一个通信风格技能。它不改变模型的推理能力,只压缩模型的输出表达——把每一条回复都改写成"聪明原始人"式的极简语句。用技能文档自己的话概括:
Respond terse like smart caveman. All technical substance stay. Only fluff die. (像聪明的原始人一样简洁回应。所有技术实质保留,只有废话消失。)
从仓库的 skills-lock.json 可以看到它的出处:
"caveman": { "source": "JuliusBrussee/caveman", "sourceType": "github", "skillPath": "skills/caveman/SKILL.md", "computedHash": "59e1fe0d3eeb4189ee5c467efde567672e5cacb41f157c477a6152ca907d44ea" }它作为第三方 GitHub 技能被锁定进 Stagewise 的技能清单,目录位于 .agents/skills/caveman/,内含两个文件:SKILL.md(给模型看的完整指令,即本文主体)和 README.md(给人看的概览)。
技能如何被"识别":frontmatter 是入口
caveman 的SKILL.md以 YAML frontmatter 开头,声明了name与description。这正是 Stagewise 识别技能的方式——packages/agent-core/src/services/mount-manager/workspace-info/skills.ts 中的parseFrontmatter会解析四个字段:
| 字段 | 类型 | 含义 | 默认值 |
|---|---|---|---|
name | string | 技能名称,必填,缺失则技能被跳过 | 无 |
description | string | 技能描述,必填,缺失则技能被跳过 | 无 |
user-invocable | boolean | 是否出现在斜杠命令弹出框 | true |
agent-invocable | boolean | 是否注入 Agent 的系统提示 | true |
caveman 的description不仅用于展示,还承载了"触发条件"信息——技能文档 packages/agent-core/src/env/adapters/enabled-skills.prompt.md 规定的工作流第一步就是"把任务与技能描述匹配,开始工作前先读SKILL.md"。caveman 的 description 明确列出了触发信号:
- 用户说 "caveman mode"、"talk like caveman"、"use caveman"、"less tokens"、"be brief"
- 用户调用
/caveman - 任何"请求 token 效率"的场合(auto-trigger)
二、持久性与开关:默认 full,一句命令切换
caveman 的持久性语义非常明确,文档原文是"ACTIVE EVERY RESPONSE":
- 每一条回复都保持 caveman 风格,不会因为对话轮次变多而"漂移"回正常散文(no filler drift);
- 即使模型对当前情况不确定,也继续保持该模式(still active if unsure);
- 关闭的唯一方式:说 "stop caveman" 或 "normal mode"。
默认强度为full,切换命令:
/caveman lite # 轻量压缩 /caveman full # 默认档 /caveman ultra # 极端压缩 /caveman wenyan-lite # 半文言 /caveman wenyan-full # 文言 /caveman wenyan-ultra # 极端文言 /caveman off # 关闭强度级别一经切换便持续生效,直到再次切换或会话结束(见第六节 Boundaries)。
三、核心压缩规则:什么删、什么必须一字不差
第三节是技能文档最核心的部分,定义了"删什么"与"保什么"的完整边界,直接决定了压缩后内容的可信度。
3.1 删掉的东西
| 类别 | 具体对象 |
|---|---|
| 冠词 | a / an / the(仅限冠词语言) |
| 填充词 | just / really / basically / actually / simply |
| 客套话 | sure / certainly / of course / happy to |
| 委婉语与对冲 | hedging,如 "I think it might be..." |
| 句子形式 | 允许碎片句(Fragments OK) |
| 冗长同义词 | 用短词替代:big 而非 extensive,fix 而非 "implement a solution for" |
| 输出噪声 | 不叙述工具调用过程、不搞装饰性表格、不用 emoji、不倾倒超长原始错误日志(除非被要求) |
错误日志的纪律是:只引用最短的决定性一行(quote shortest decisive line),其余省略。
3.2 必须一字不差的东西
- 否定词永不删:not / never / no / only / except 一旦被删就可能翻转语义,造成的代价远超省下的任何 token;
- 数字与单位精确:不四舍五入、不省略单位;
- 技术术语精确:专有名词、API 名、CLI 命令、commit 类型关键词(feat/fix/...)、错误字符串一律原样保留,除非用户明确要求翻译;
- 代码块不变:
SKILL.md明确 "Code blocks unchanged"。
3.3 缩写纪律:禁止发明缩写,因为 tokenizer 不买账
这是 caveman 规则中反直觉但极有价值的一条:
- 标准、广为人知的技术缩写(DB / API / HTTP)可以使用;
- 绝不发明新缩写(如 cfg / impl / req / res / fn)——文档给出了实测论证:tokenizer 会把这类缩写拆分成与完整单词相同的 token 数,省下的 token 为零,却额外增加读者的解码成本。完整单词既更便宜又更清晰;
- 同理,禁止使用因果箭头
→(X → Y):它自身就是一个 token,省不下任何东西。
ultra 档进一步强调:代码符号、函数名、API 名、错误字符串"永远不要碰"(never touch)。
3.4 工具调用纪律
技能要求工具调用"fire direct":
- 调用前不写前言、不写计划、不写进度说明;
- 两次调用之间同样不写任何过渡说明;
- 调用前允许的文本只有三种用途:澄清、警告安全/不可逆操作、解决歧义;
- 拿到结果后直接发起下一次调用或给出最终答案,绝不宣布"下一步我要做什么"。
3.5 语言纪律:压缩风格,不压缩语言
- 严格保持用户的主导语言,用用户书写的那门语言回复,绝不切换——无论示例文本或项目多语言环境如何;
- 输出的每一行(开场、工具调用前的状态行、最终回复)都用该语言;
- "删冠词"仅适用于冠词语言(如英语);在助词/后置词承担格与角色的小语种里,必须保留这些小标记——它们是语法而非填充,只能压缩礼貌语与填充词。
3.6 无自我指涉
- 永不命名或宣告该风格:不说 "caveman mode on"、"me caveman think",不打第三人称标签;
- 只输出 caveman 风格内容,禁止"正常答案 + Caveman: 回顾"的双份输出;
- 唯一例外:用户主动询问这是什么模式时,可以解释。
3.7 输出范式
文档给出的范式:
Pattern: [thing] [action] [reason]. [next step].反例(要避免的):
"Sure! I'd be happy to help you with that. The issue you're experiencing is likely caused by..."
正例(要追求的):
"Bug in auth middleware. Token expiry check use
<not<=. Fix:"
四、六档强度:从轻量到文言文的完整压缩谱系
技能定义了六个强度级别,各自改变的内容不同:
| 级别 | 改变什么 |
|---|---|
| lite | 去掉填充词与对冲。保留冠词和完整句子。专业但紧凑 |
| full(默认) | 删冠词、允许碎片句、用短同义词。经典 caveman。无工具调用叙述、无装饰性表格/emoji、不倾倒长错误日志(除非要求)。标准缩写可用;禁止发明缩写 |
| ultra | 因果明确时去掉连词。一个词够用就用一个词。每个事实只说一次。禁止散文缩写(cfg/impl/req/res/fn/auth),禁止箭头(X → Y)——实测在 tokenizer 下零 token 节省,却损失解码清晰度。代码符号、函数名、API 名、错误字符串永不触碰 |
| wenyan-lite | 半文言。去掉填充与对冲,但保留语法结构,使用古典语域 |
| wenyan-full | 最大文言化。完整文言文。字符减少 80%–90%(注意是字符,不是 token)。古典句式、动词前置宾语、主语常省略、使用文言助词(之/乃/為/其) |
| wenyan-ultra | 在保持文言韵味的前提下极限缩写,最大压缩 |
提示:仓库中的 caveman README.md 对 ultra 档的描述是"裸碎片句 + 允许缩写(DB/auth/fn)+ 用箭头表因果",示例里也出现了
→;而 SKILL.md 作为实际驱动模型行为的指令文件,对 ultra 档明确写的是"禁止发明缩写、禁止箭头",并给出了 tokenizer 层面的论证。两者存在表述差异,以 SKILL.md 为准。
4.1 示例对照一:"React 组件为什么重渲染?"
| 级别 | 输出 |
|---|---|
| lite | "Your component re-renders because you create a new object reference each render. Wrap it inuseMemo." |
| full | "New object ref each render. Inline object prop = new ref = re-render. Wrap inuseMemo." |
| ultra | "Inline obj prop, new ref, re-render.useMemo." |
| wenyan-lite | "組件頻重繪,以每繪新生對象參照故。以 useMemo 包之。" |
| wenyan-full | "每繪新生對象參照,故重繪;以 useMemo 包之則免。" |
| wenyan-ultra | "新參照則重繪。useMemo 包之。" |
4.2 示例对照二:"解释数据库连接池。"
| 级别 | 输出 |
|---|---|
| lite | "Connection pooling reuses open connections instead of creating new ones per request. Avoids repeated handshake overhead." |
| full | "Pool reuse open DB connections. No new connection per request. Skip handshake overhead." |
| ultra | "Pool reuse open DB connections. No per-request handshake." |
| wenyan-full | "池蓄已開之連,不逐請而新開,省握手之費。" |
| wenyan-ultra | "池蓄連,免逐請新開,省握手。" |
4.3 文言字符的专属约束
文档特别强调:"Classical chars = wenyan modes only"——古典汉字只能在 wenyan 系列档位使用;在其他档位,绝不能为了缩短而把一个词替换成文言单字。
五、Auto-Clarity:什么时候自动切回正常散文
这是 caveman 的安全机制:在以下五类场景中,技能会自动丢弃 caveman 风格、恢复完整散文,在清晰段落结束后再恢复 caveman:
- 安全警告(security warnings);
- 不可逆操作的确认(irreversible action confirmations);
- 多步骤序列——当碎片顺序或省略连词可能造成误读时;
- 压缩本身造成技术歧义时,例如
"migrate table drop column backup first"——没有冠词和连词,无法判断是先备份还是先删列; - 用户要求澄清或重复提问时。
文档给出的破坏性操作示例(同时演示了"格式仅用于展示,警告文案必须用会话语言写"):
Warning:This will permanently delete all rows in the
userstable and cannot be undone.DROP TABLE users;Caveman resume. Verify backup exist first.
即:警告用完整、无歧义的自然语言 + 原样代码块;危险段落结束后,恢复 caveman 风格并补充"先确认备份存在"。
六、Boundaries:聊天之外一律正常散文
caveman 的适用范围有明确边界——只作用于聊天输出。凡是会持久化到聊天以外的内容,一律写正常散文:
- 代码(code)
- 注释(comments)
- 提交信息(commits)
- 文档(docs)
- issue / PR / MR 文本
- 记忆文件(memory files)
- 第三方消息(
/caveman-compress命令豁免,即该命令下生成的第三方文本可以压缩)
关闭命令 "stop caveman" / "normal mode" 立即恢复;强度级别持续到被改变或会话结束。
七、仓库源码视角:caveman 在 Stagewise 中如何被加载
理解了文档本身,再看 Stagewise 是如何把这类技能变成 Agent 可执行行为的。
7.1 扫描与校验:不是随便一个目录都算技能
packages/agent-core/src/services/mount-manager/workspace-info/skills.ts 的discoverSkills展示了严格的发现逻辑:
- 技能目录不存在则返回空数组;
- 遍历目录条目,只接受子目录,且通过
isDirectorySafe跟随符号链接判断真实类型(普通Dirent.isDirectory()会把符号链接目录当非目录而跳过,见该文件 L51-L65 的注释); - 子目录内必须存在
SKILL.md文件; - 用
gray-matter解析 frontmatter,name与description缺一即跳过; userInvocable/agentInvocable缺省时默认为true。
caveman 满足全部条件:位于.agents/skills/caveman/SKILL.md,frontmatter 声明了 name 和 description。
7.2 全局与工作区发现:.stagewise优先于.agents
同一文件中的discoverGlobalSkills与discoverWorkspaceSkills会合并多个技能目录并按名称去重,.stagewise/的优先级高于.agents/。也就是说,如果你在~/.stagewise/skills/caveman/和~/.agents/skills/caveman/都放了同名技能,前者生效。
7.3 优先级层级与使用工作流
packages/agent-core/src/env/adapters/enabled-skills.prompt.md 规定了技能/插件的优先级层级:
plugins/{id}/SKILL.md—— 核心固有知识,永远最优先;globalskills-sw/*——~/.stagewise/skills/的用户级技能;{WORKSPACE}/.stagewise/skills/*—— 工作区专属技能;globalskills-agents/skills/*——~/.agents/skills/的跨 Agent 用户级技能;{WORKSPACE}/.agents/skills/*—— 与其他 Agent 共享的通用技能(caveman 即落在此层)。
同文档还定义了使用工作流:任务匹配技能描述 → 开工前读SKILL.md→ 按需加载references/、assets/→技能只能通过读文件访问,绝不执行其中的scripts/(只读,逻辑由 Agent 手动应用)→ 忽略与当前任务无关的技能。
7.4 挂载前缀:为什么/caveman开箱即用
apps/browser/src/shared/global-skill-prefixes.ts 定义了全局技能源:
globalskills-sw→~/.stagewise/skills/(标签 Stagewise);globalskills-agents→~/.agents/skills/(标签 Agents);- 另有外部源
globalskills-codex(~/.codex/skills/)与globalskills-claude(~/.claude/skills/)。
其中globalskills-sw与globalskills-agents被列入ALWAYS_ENABLED_GLOBAL_SKILL_PREFIXES(同文件 L36-L39),注释明确"Stagewise 与 Agents 目录是产品核心,只要磁盘上存在就始终加载"。因此~/.agents/skills/caveman/下的技能(与仓库内.agents/skills/caveman/结构一致)无需额外配置即可被识别,/caveman也就开箱可用。类型层面,packages/agent-core/src/types/skills.ts 将技能来源划分为builtin/workspace/global/plugin四种,caveman 属于global(用户级)或workspace(工作区内)来源。
八、实战速查:一份可复制的使用清单
- 想省 token 时:直接说 "less tokens" 或
/caveman,默认 full 档;追求极致再升ultra;中文语境想更省字符可尝试wenyan系列(注意 80%–90% 的缩减是字符维度)。 - 担心精度时:数字、单位、否定词、技术术语、错误串、代码块在压缩中永不丢失——这是技能写死的不变量,可放心使用。
- 遇到危险操作:技能会自动恢复完整散文 + 完整警告 + 原样代码块,无需手动干预。
- 要写提交信息/文档/issue:caveman 不适用于这些持久化输出,会自动回到正常散文。
- 想退出:说 "stop caveman" 或 "normal mode"。
- 想改行为:直接在对话里
/caveman lite|full|ultra|wenyan-lite|wenyan-full|wenyan-ultra|off切换。
caveman 的核心理念可以提炼为一句话:压缩的是表达,不是语义。它用一套明确的删除清单和保留不变量,把 token 节约从"凭感觉删词"变成"有纪律的工程"——这也是它适合作为 Agent 技能模板、被 Stagewise 这类 Agentic IDE 直接消费的原因。想要深入研究,可继续阅读技能完整指令 SKILL.md、配套 README.md,以及技能加载实现 workspace-info/skills.ts 与优先级说明 enabled-skills.prompt.md。
- 人工智能
- AI Agent
- 代码智能体
- 开发工具
【免费下载链接】stagewise
The Open Source Agentic IDE. Create and orchestrate coding agents, show app previews and run git workflows. Use your favorite models across all providers.
相关推荐
Caveman Skill 实战指南:用六档"穴居人"强度压缩 Agent 输出,省下 Output Token
Caveman Skill 实战指南:用六档"穴居人"强度压缩 Agent 输出,省下 Output Token 本文基于仓库中 skills/caveman/
人工智能AI 应用AI 技能AI 插件LLMOps开发工具Headroom × LangChain 实战:用 SmartCrusher 压缩 Agent 工具输出,节省 74% Token 且 100% 保留 ERROR
Headroom × LangChain 实战:用 SmartCrusher 压缩 Agent 工具输出,节省 74% Token 且 100% 保留 ERRO
人工智能LLM 网关AI 应用caveman cavecrew 技能实战:如何基于压缩输出的子代理完成代码定位、编辑与审查
caveman cavecrew 技能实战:如何基于压缩输出的子代理完成代码定位、编辑与审查 cavecrew 是 caveman 项目中的一组 Claude
人工智能AI 应用AI 技能AI 插件LLMOps开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考