☰
Stagewise Agent 技能实战:caveman 模式如何压缩 65% 输出 Token 且不丢技术精度
2026/10/9 2:06:01 网站建设 项目流程
  • 人工智能
  • 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.

项目地址:https://gitcode.com/gh_mirrors/st/stagewise
点击查看免费下载

本文以仓库 .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会解析四个字段:

字段类型含义默认值
namestring技能名称,必填,缺失则技能被跳过无
descriptionstring技能描述,必填,缺失则技能被跳过无
user-invocableboolean是否出现在斜杠命令弹出框true
agent-invocableboolean是否注入 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:

  1. 安全警告(security warnings);
  2. 不可逆操作的确认(irreversible action confirmations);
  3. 多步骤序列——当碎片顺序或省略连词可能造成误读时;
  4. 压缩本身造成技术歧义时,例如"migrate table drop column backup first"——没有冠词和连词,无法判断是先备份还是先删列;
  5. 用户要求澄清或重复提问时。

文档给出的破坏性操作示例(同时演示了"格式仅用于展示,警告文案必须用会话语言写"):

Warning:This will permanently delete all rows in theuserstable 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展示了严格的发现逻辑:

  1. 技能目录不存在则返回空数组;
  2. 遍历目录条目,只接受子目录,且通过isDirectorySafe跟随符号链接判断真实类型(普通Dirent.isDirectory()会把符号链接目录当非目录而跳过,见该文件 L51-L65 的注释);
  3. 子目录内必须存在SKILL.md文件;
  4. 用gray-matter解析 frontmatter,name与description缺一即跳过;
  5. 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 规定了技能/插件的优先级层级:

  1. plugins/{id}/SKILL.md—— 核心固有知识,永远最优先;
  2. globalskills-sw/*——~/.stagewise/skills/的用户级技能;
  3. {WORKSPACE}/.stagewise/skills/*—— 工作区专属技能;
  4. globalskills-agents/skills/*——~/.agents/skills/的跨 Agent 用户级技能;
  5. {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.

项目地址:https://gitcode.com/gh_mirrors/st/stagewise
点击查看免费下载

相关推荐

上一篇:如何用Equalizer APO免费提升电脑音质:3个步骤实现专业级音频优化
下一篇:3步搞定电脑音频优化:Equalizer APO终极指南,让你的声音焕然一新

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询