96SEO 2026-08-09 18:39 4
痛点:想让 agent 学会新能力。却只能改源码,维护成本高。
工具长在 agent 的代码里加一个就得改源码。

但很多想让 agent 学会的能力其实是知识——发版流程、commit 规范、内部 CLI 用法。
Anthropic 的 Agent Skills 就是为这种知识能力准备的:把一项能力写成一个文件夹。丢进约定目录,agent 就学会了不改一行代码。
Claude Code 率先落地。规范开放在,很快成了跨工具标准,pi 实现的也是这一套。不过,
示例结构:
demo-skills/
release/
SKILL.md ← "怎么发版"的说明书
bump-version.sh ← 说明书里引用的脚本
commit-style.md ← "commit 规范"。简单到一个文件就够
加载效果:
$ npx tsx ch07/skills.ts
== 加载到的技能 ==
- commit-style: 按团队规范写 commit message。说起来,当使用者要求提交代码或写 commit 时使用。- release: 给本项目发版。当使用者说"发版""发布新版本""bump version"时使用。
release/
├── SKILL.md ← 必需文件,包含 frontmatter 与正文
├── bump-version.sh ← 可选资源
| 字段 | 作用 | 约束 |
|---|---|---|
Name | skill 唯一标识,也是手动触发时的命令名(/skill:release)。默认使用目录名兜底, | 小写字母/数字/连字符,≤ 30 字符。 |
Description | 模型判断“什么时候该用”该 skill 的唯一依据。必须包含触发词, | 必填,≤ 200 字符。 |
Name + Description 是跨工具最小共识。./bump-version.sh),解析基于 skill 所在目录。SOME_SKILL/SKILL.md + 资源文件们 SOME_SKILL.md Pain point:*把所有 skill 全部塞进 system prompt* → 每次请求都带几万 token,成本爆炸,模型注意力被噪声淹没。
// 简单粗暴版:把每个 skill 全文拼进 system prompt
let skillSection = "
# Skills
";for ) {
skillSection += "
---
" + readFileSync;}
systemPrompt += skillSection;
- 两个 skill 时还能接受;如果积累到数十甚至上百个,每个 ~800 字。则约 .5 万 token 常驻程序提示**,费用和都被占满**。
The key insight: **frontmatter = 商品标签,正文 = 说明书 **。只把标签放进 prompt,正文留在磁盘。需要时模型自行 #read.
第一版 vs progressive disclosure 对比
┌───────────────────── system prompt ──────────────────────┐
│…│← 常驻、计费、噪声
└───────────────────────────────────────────────────────────────┘
progressive disclosure:
│
export function parseFrontmatter: { fm: Record;body: string } {
const m = raw.match
---
/);if return { fm: {},body: raw };const fm: Record = {};for ) {
const i = line.indexOf;老实说,if fm = line.slice.trim;说起来,}
return { fm,body: raw.slice };}
export interface MiniSkill {
再看name,string;description: string;filePath: string;按理说,// 正文所在方法。用于 read
baseDir: string;// 相对方法解析根目录
}
export function loadSkills: MiniSkill {
if ) return;const out: MiniSkill =;for ) {
const sub = join;const file = existsSync)
join // 目录式
: name.endsWith?按理说,sub : null;其实,// 单文件式
if continue;const {fm}=parseFrontmatter);怎么说呢,if continue;// 必须有 description
out.push({
再看name,fm.name?,name.replace,description: fm.description。filePath:file,baseDir: dirname,});}
return out;不过,}
export function formatSkillsForPrompt:string{
if return "";const items = skills.map(s=>
`
`+
` ${s.name}
`+
` ${s.description}
`+
` ${s.filePath}
`+
` `
).join;return `
The following skills provide specialized instructions for specific tasks.
Use read tool to load a skill's file when task matches its description.
${items}
`;}
commit-style
按团队规范写 commit message。当使用者要求提交代码或写 commit 时使用。其实,
/path/to/demo-skills/commit-style.md
release
给本项目发版。当使用者说"发版""发布新版本""bump version"时使用。
/path/to/demo-skills/release/SKILL.md
① system prompt 包含清单 ② 使用者:"帮我发个版" ③ 模型匹配 description → 决定使用 *release* ④ 模型调用 read → 正文进入上下文 ⑤ 按说明执行后续步骤
说到*关键点*。没有任何新机制,只是复用第 章的 #read.
#read;没有此工具则不渲染清单,以免产生空洞。Pain point:*担心每个 Skill 都需要额外的运行时环境* → 不需要!
The spec’s smartest “non‑action”: **脚本直接走已有的 #bash.**
说明书里写 “跑 . /bump-version.sh patch"”。模型按照记录好的 basesDir` 拼绝对方法,接下来调用普通 bash 工具。整个执行链仍然是:
$ npx tsx ch07/loop.ts "帮我给这个项目发个 patch 版"
read
---
description: 给本项目发版…---
...
好的,按 skill 流程来:跑 bump 脚本升 patch...
bash
至于bash。.../bump-version.sh: Permission denied
bash
bump patch
edit…更新 package.json …Successfully replaced block
bash
> demo@... test
all tests passed
✅ 完成!
patch 版本已从 0.1.0→0.1.1,测试全绿。tag 已跳过,
*要点回顾*
| 关键问题与答案 | ||
|---|---|---|
| a) 拦截层级? | Bash 为唯一入口;说起来,所有 Skill 脚本、使用者自定义命令、模型生成命令均走此口子。只在 Bash 前做一次 sandbox 即可覆盖全部执行场景。. | |
| b) 隔离机制? | Linux 使用 bubblewrap、macOS 使用 sandbox‑exec;pi 封装为 @anthropic-ai/sandbox-runtime,实现统一接口。. | |
| b) 替换后端? |
通过 pi 的 |
|
| d) 策略配置?老实说, |
配置文件 .pi/sandbox.json
默认拒绝,一切未列入白名单的网络请求均被阻断;文件程序同理,只允许项目根和 /tmp 写入。. |
|
| 结果:无论 Skill 自带何种脚本。都在同一套沙箱下执行,无需在 loader 中额外编写任何配合代码。老实说,. | ||
| 额外特性 | ||
|---|---|---|
| parseFrontmatter | utils/frontmatter.ts | – |
| loadSkills | loadSkillsFromDir、 respecting .gitignore 与 symlink | – |
| description 必填过滤 | loadSkillFromFile 中校验并记录 warning | – |
| Name 格式校验 | validateName 并输出 diagnostic | |
| 三来源合并 | ||
<\/table>
/skill: 调用渠道。li>/发现 SKILL.md 后停止递归 ⇒ 禁止在一个 Skill 文件夹内部再嵌套另一个 Skill,以免漏检。<\/ol>至于**产出**,
/skill: 注入。按理说,一次命令即可离线跑通。不过,li>Token账务计算明确——Progressive Disclosure 把常驻 token 从数万降至千余。实现大规模技能库可行性,li>沙箱设计思路:“Bash 为唯一收口”,利用 OS 层面隔离。无需为 Skills 编写额外配合代码,实现“一行也不改”。li>实际经验集合,包括常见异常处理、常用方法还有反模式检查。为你快速建立可靠、安全且易维护的 Coding Agent 技能程序奠定基础。作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback