OkayStudy
ZH English 한국어 日本語 中文 हिन्दी বাংলা اردو Español Português Français Deutsch Русский العربية Bahasa Indonesia Tiếng Việt ไทย Türkçe

如何开启通知

此浏览器或网址无法使用通知。请使用支持通知的浏览器,通过安全连接访问SONUB。

如果通知被屏蔽,请在浏览器设置中允许通知。

  1. 打开地址栏旁的站点设置或浏览器的站点设置,将此网站的通知设为允许。
  2. 在设备设置中允许浏览器发送通知,并检查勿扰模式或专注模式。
  3. 返回SONUB,刷新页面,然后通过铃铛开启通知。

在iPhone或iPad上,将SONUB添加到主屏幕,从主屏幕打开后允许通知。

一分钟,教会你的 AI 智能体新技能

SONUB 的免费技能,可用于 、 等 。一行命令装好,用大白话吩咐,再到后面的标签里做出自己的技能。

一个书架上放着彩色的活页夹。其中一本打开着,露出带图标和几行字的封面、写着虚线步骤的几页、一张检查清单,里面还夹着一个小工具箱。一个机器人读着封面,抽出了和对话气泡里骰子图标相符的那本活页夹。

基础 — 什么是技能,怎样安装

第一次接触技能?从这里开始。先了解什么是、它怎样工作,然后用一条命令安装一个并试一试。学完后,到上方的 [进阶] 标签页制作你自己的技能。

了解智能体技能

是一个包含 文件的文件夹,它教 如何完成某一类任务:步骤、规则和检查方法,还可以附带脚本和参考文件。、 和其他智能体都支持开放的 格式。

SKILL.md 的开头写着名称和描述。智能体一开始只读这两项,当某个请求和描述相符时,才加载完整的指令。这样就能准备很多技能,又不会塞满对话。

轻松理解

可以这样想
技能包就像书架上的一本本说明书活页夹。智能体先只读封面——每本活页夹的名字和一行说明。当你的请求和某个封面对上时,它就把那本活页夹拿下来,按里面的步骤做。所以就算有很多技能包,也不会把对话挤满。
例子

一个“roll-dice”技能包:一个装着 SKILL.md 的文件夹,封面上写着“用户要随机数时掷骰子”,里面是步骤和一个小脚本。你说“帮我掷两个骰子”,智能体就会打开那本活页夹。

常见错误
写一个模糊的说明,比如“有用的帮手”。智能体只看封面来决定,所以要写清楚什么时候应该用这个技能包。
一个书架上放着彩色的活页夹。其中一本打开着,露出带图标和几行字的封面、写着虚线步骤的几页、一张检查清单,里面还夹着一个小工具箱。一个机器人读着封面,抽出了和对话气泡里骰子图标相符的那本活页夹。
智能体只读封面(名字和说明),然后只打开和请求相符的那一本活页夹。

什么是智能体技能?

智能体技能(Agent Skills)是一种轻量、开放的格式,用来给 AI 智能体增加新能力和专业知识。一个技能就是一个包含 SKILL.md 文件的文件夹。SKILL.md 里有名称(name)和描述(description),还有告诉智能体如何完成某一类任务的指令。文件夹里还可以放脚本、参考文档、等文件。

智能体越来越聪明,但要放心地把真实的工作交给它,它就得了解你们公司、你们团队和你自己的做事方式。技能把这些方法装进一个文件夹,让智能体只在需要时才加载。专业知识变成可以反复使用的东西,多步骤的任务每次都按同样的流程完成。

这种格式最早由 创建,并作为发布。现在任何人都可以参与,一起让它成长(agentskills.io)。

用在哪里 — 团队反复做的事,比如步骤、审查规则和文档格式。人换了,做事的方法还在。

学一次,就能在许多 AI 工具里使用

智能体技能不是某一家公司的功能,而是开放标准。所以只要学会一次怎么做技能,到处都能用。同一个 SKILL.md 文件夹不仅能在 Claude Code 和 Codex 中直接使用,还能在许多支持这种格式的 AI 工具中直接使用。

安装方法也到处一样:把技能文件夹放进工具查找技能的文件夹就行了。只是每个工具的这个位置稍有不同(见下框)。

  • Claude Code
  • & Codex
  • Factory

这里是 agentskills.io 上介绍的部分工具(2026-10-16 确认)。名单还在不断增加。

# where each tool looks for skills      all projects        this project
Claude Code                             ~/.claude/skills    .claude/skills
Codex · Gemini CLI · Copilot CLI        ~/.agents/skills    .agents/skills
VS Code (GitHub Copilot)                                    .agents/skills
# put the whole skill folder there:  .agents/skills/roll-dice/SKILL.md

它是怎么工作的:只读需要部分的三个阶段

智能体用(progressive disclosure)的方式读取技能:一开始只读一点,任务需要时再多读。

  1. 发现(Discovery):启动时只读取所有技能的名称和描述,每个技能大约 100 个 ,所以装很多技能也依然轻便。
  2. 激活(Activation):当请求和某个技能的描述相符时,智能体会读取该技能 SKILL.md 的全部正文。正文建议控制在约 5,000 个 token、500 行以内。
  3. 执行(Execution):智能体按照指令工作,只在需要时运行 scripts/ 里的或阅读 references/ 里的文档。

文件夹结构和 SKILL.md 的规则

技能唯一必需的文件是 SKILL.md。它开头是夹在两行 --- 之间的 头部,下面用 写指令。

  • name(必填):最多 64 个字符,只能用小写英文字母、数字和连字符(-)。不能以连字符开头或结尾,也不能连续使用两个连字符,并且必须和文件夹名称相同。
  • description(必填):最多 1,024 个字符。用人们真正会说的话,写清它做什么、什么时候用。智能体读这段话来决定是否使用这个技能。
  • 、compatibility、、(选填):许可证、需要的环境(最多 500 个字符)、作者和等额外信息,以及预先批准的工具(实验功能)。大多数技能都用不到。
  • scripts/、references/、assets/(选填):要运行的代码、需要时阅读的文档,以及模板、图片、等资料。用相对于技能文件夹的路径指向文件,并且从 SKILL.md 只链接一层深度。
my-skill/            # folder name = the skill's name
├── SKILL.md         # required: name + description + instructions
├── scripts/         # optional: code the agent can run
├── references/      # optional: documents read only when needed
└── assets/          # optional: templates, images, data

动手做一个:一个文件,五分钟

最简单的技能只有一个 SKILL.md 文件。我们来做 agentskills.io 快速入门(Quickstart)里的掷骰子技能。

  1. 创建文件夹:在项目中创建 .agents/skills/roll-dice/ 文件夹(Claude Code 用 .claude/skills/roll-dice/)。文件夹名称就是技能名称。
  2. 编写 SKILL.md:像下框那样写上 name 和 description,再在正文里用几行写下要做的事。
  3. 检查:重新打开智能体,输入 /skills,看看列表里有没有 roll-dice。
  4. 测试:请它“掷一个 d20”,看技能有没有被触发;再问一个无关的问题,看它是不是没有被触发。如果不容易被触发,就改进 description。
---
name: roll-dice
description: Roll dice using a random number generator. Use when asked to roll a die (d6, d20, etc.), roll dice, or generate a random dice roll.
---

To roll a die, use the following command that generates a random number from 1
to the given number of sides:

```bash
echo $((RANDOM % <sides> + 1))
```

Replace `<sides>` with the number of sides on the die (e.g., 6 for a standard
die, 20 for a d20).

养成制作自己技能的习惯

对于自己熟悉的领域,养成制作并使用自己专属技能的习惯非常重要。自己的工作方法、标准和窍门,自己最清楚。把它们写成技能,AI 每次都会按你的方式工作,你的知识也会变成可以反复使用的工具。

不必一开始就写得完美。按照基本的技能格式(一个文件夹和 SKILL.md),简单写下想法、和规则,然后请 AI 帮你更新就行。整理格式、补全缺少的步骤,正是 AI 擅长的事。

  1. 搭好框架:按基本格式创建技能文件夹和 SKILL.md,在最上面写好 name 和 description。
  2. 简单写下:在正文里用几行写下想法(这个技能做什么)、逻辑(按什么顺序做)和规则(必须遵守的和不能做的)(见下面的框)。
  3. 请求更新:对 AI 说“请把这个技能整理成标准的技能格式。保留我的想法、逻辑和规则,补上缺少的步骤、示例和检查方法”,然后读一读改过的内容,确认是否符合你的意思。
---
name: weekly-report
description: Writes my team's weekly report. Use when asked for a weekly report or "this week's summary".
---

Idea:  turn this week's commits and issues into a one-page report.
Logic: read the last 7 days of git log → group by feature → write the report.
Rules: plain words, 10 bullets at most, never include passwords or customer names.

做好技能的诀窍

  • description 最重要:写清它做什么、什么时候用、不适用于什么。像“帮忙处理 ”这样含糊的描述几乎不会被用上。
  • 一个技能只装一类任务。正文用简短的步骤、的例子以及常见的例外来写。
  • 把长的说明移到 references/,把重复的命令或计算移到 scripts/。脚本要说明自己需要什么,并给出清楚易懂的。
  • 用 validate ./my-skill 检查头部规则,用 管理技能,并和团队分享。
  • 别人做的技能可以运行脚本,所以安装之前一定要先读一遍。
  • 使用之前 — 别人做的技能包,先读它的指令和脚本,再在可以撤销的小任务上试一试。Agent Skills 网站只规定格式,不保证技能包安全。
深入一点

描述决定了技能什么时候被使用,所以要用人们真正会说的话来写,并说明它不适用于什么。指令要简短具体,把冗长的细节放到单独的参考文件里,再用应该触发和不应该触发的请求来测试技能。技能可以运行脚本,所以只安装来自可信来源的技能,安装前先读一遍。SONUB 本身就是用好几个技能做出来的——其中一个技能专门为你在本站看到的术语编写面向初学者的弹出说明。

一行命令安装

在项目文件夹里打开运行这行命令。它会从 sonub.com 读取技能列表,问你要装哪些技能、装给哪些,然后把技能文件夹复制到每个智能体查找技能的位置。

npx skills add https://sonub.com

需要 18 或更高(自带 npx)。 装好后,开启智能体的新会话,让它读取新技能。

不知道命令也没关系 — 直接让 AI 帮你安装

安装技能时,只要告诉 你想安装哪个技能就行。AI 很聪明,只要说清楚技能在哪里,比如“安装 https://sonub.com 上的 gp 技能”,它就会帮你装好。即使不知道安装命令,AI 也会替你安装并使用它。复制下面这句话发给你的智能体试试。

请安装 SONUB 的技能:运行 npx skills add https://sonub.com -y,然后告诉我装好了哪些技能,以及我说什么就能开始使用。

不过,如果你什么都不懂,只是让 AI 去做,那最终是 AI 完成了工作,而不是你完成了工作。

所以要先了解 AI,才能更好地给 AI 安排工作;当 AI 做错时,你也能分析它做过的事情,找出哪里出了问题,再重新提出要求。

常用选项

用于这台电脑上的所有项目(不加则只用于当前项目)
npx skills add https://sonub.com -g

只装一个技能
npx skills add https://sonub.com -s gp

只装给一个智能体
npx skills add https://sonub.com -a claude-code

只列出技能,不安装
npx skills add https://sonub.com -l

不提问——把所有技能装给这台电脑上找到的智能体
npx skills add https://sonub.com -y

管理已安装的技能 — 查看、版本、更新、删除

(npx skills)还能列出你安装的技能、显示它们的、更新和删除它们。下面的命令中,-g 表示(这台电脑上的所有项目);不加 -g 时,命令作用于当前项目(本地)。

全局与本地(项目)

全局与本地(项目)
全局 (-g) 本地 (不加 -g)
使用范围 这台电脑上的所有项目 仅在该项目文件夹内
实际文件 ~/.agents/skills/<name> .agents/skills/<name>
读取的位置 ~/.claude/skills/<name> .claude/skills/<name>
版本和日期记录 ~/.agents/.skill-lock.json skills-lock.json 没有日期 — 只有版本()

本地命令要在项目文件夹内运行。如果同一个技能既在全局又安装,Claude Code 会使用全局(个人)的那个。

Claude Code 不读取 ~/.agents/skills

Claude Code 只读取 .claude/skills 文件夹(~/.claude/skills 和项目的 .claude/skills),从不读取 ~/.agents/skills 或项目的 .agents/skills。、 和 读取 .agents/skills。skills CLI 把实际文件放在 .agents/skills 中,并在 .claude/skills 中为 Claude Code 创建一个链接。如果你手动把技能文件夹只复制到 ~/.agents/skills,Claude Code 是看不到的 — 请把它(或一个链接)放到 ~/.claude/skills,开启新会话,然后在 Claude Code 中用 /skills 检查。

列出已安装的技能

全局技能 — 名称、路径、智能体、Source
npx skills ls -g

本项目(本地)的技能
npx skills ls

只显示为 Claude Code 链接的技能
npx skills ls -g -a claude-code

以 JSON 输出 — 包含范围和下载地址
npx skills ls -g --json

如果 Source 是 sonub.com 或某个 ,说明该技能是用 skills CLI 安装的,可以用它更新和删除。local 表示有人手动放入了这个文件夹 — skills CLI 不会更新它。

查看版本和安装日期

技能没有版本号。版本是来源发布的 digest(技能的 )的前 12 个字符。安装技能时,skills CLI 会把这个值连同安装日期和更新日期写入记录文件(本地记录没有日期)。我们把这些做成了一个 sh 脚本 skill-versions.sh:下载一次,就可以在任何项目中重复使用 — 它用一张表显示全局和本地技能,并与来源的最新版本进行比较。

下载一次脚本
curl -fsSL https://sonub.com/.well-known/skills/claude-skill/scripts/skill-versions.sh -o ~/skill-versions.sh

全局技能和本项目的技能
sh ~/skill-versions.sh

仅全局
sh ~/skill-versions.sh -g

仅本项目(本地)— 在该文件夹中运行
sh ~/skill-versions.sh -p

如果已全局安装 claude-skill,无需下载即可运行
sh ~/.claude/skills/claude-skill/scripts/skill-versions.sh

SKILL   SCOPE    VERSION       INSTALLED (UTC)    UPDATED (UTC)      SOURCE     NEWEST
gp      global   8188561e0e0f  2026-10-18 03:47   2026-10-19 01:32   sonub.com  update → 2c1de455707c
popup   global   de0138a39fa1  2026-10-18 03:47   2026-10-19 01:32   sonub.com  latest
popup   project  de0138a39fa1  2026-10-19 01:36*  2026-10-19 01:36*  sonub.com  latest

在 NEWEST 列中,latest 表示已是最新,update → … 表示有新版本 — 请更新。? 表示来源没有响应。本地技能的日期是 写入的时间,并标有 *。脚本只读取,不做任何更改;它在 上运行(skills CLI 也需要 Node.js)。

显示 skill-versions.sh
#!/bin/sh
# skill-versions.sh — the version, install date and update date of every agent skill installed with
# the skills CLI (npx skills), and whether a newer version is out. Skills have no version number:
# the version is the first 12 characters of the digest (sha256) the source published.
#
#   sh skill-versions.sh            # global (~/.agents/.skill-lock.json) and this project (./skills-lock.json)
#   sh skill-versions.sh -g         # global only
#   sh skill-versions.sh -p         # this project only — run it in the project folder
#   sh skill-versions.sh --offline  # do not ask the sources for the newest version
#
# Reads only the lock files and the sources' /.well-known/agent-skills/index.json; changes nothing.
# Needs Node.js, which the skills CLI needs anyway. Newer version → npx skills update <name> [-g].

scope=all
online=1
for arg in "$@"; do
  case "$arg" in
    -g|--global) scope=global ;;
    -p|--project) scope=project ;;
    --offline) online=0 ;;
    -h|--help) sed -n '2,12p' "$0" | sed 's/^# \{0,1\}//'; exit 0 ;;
    *) echo "unknown option: $arg (try -h)" >&2; exit 2 ;;
  esac
done

command -v node >/dev/null 2>&1 || { echo "Node.js is needed (the skills CLI needs it too)" >&2; exit 1; }

SCOPE="$scope" ONLINE="$online" node - <<'JS'
const fs = require('fs'), os = require('os'), path = require('path');
const { SCOPE, ONLINE } = process.env;

const lists = [];
if (SCOPE !== 'project') lists.push(['global', path.join(os.homedir(), '.agents', '.skill-lock.json'), os.homedir()]);
if (SCOPE !== 'global') lists.push(['project', path.resolve('skills-lock.json'), process.cwd()]);

const short = (d) => (d || '').replace(/^sha256:/, '').slice(0, 12);
const day = (t) => (t ? t.slice(0, 16).replace('T', ' ') : '');

// The project lock file has no dates — fall back to when SKILL.md was written (marked with *).
function fileDate(base, name) {
  for (const dir of ['.agents/skills', '.claude/skills']) {
    try { return fs.statSync(path.join(base, dir, name, 'SKILL.md')).mtime.toISOString(); } catch {}
  }
  return '';
}

async function newest(base, cache) {
  if (!(base in cache)) {
    cache[base] = fetch(new URL('/.well-known/agent-skills/index.json', base), { signal: AbortSignal.timeout(10000) })
      .then((r) => (r.ok ? r.json() : null))
      .then((j) => Object.fromEntries((j?.skills || []).map((s) => [s.name, short(s.digest)])))
      .catch(() => null);
  }
  return cache[base];
}

(async () => {
  const rows = [], cache = {};
  for (const [scope, file, base] of lists) {
    let skills;
    try { skills = JSON.parse(fs.readFileSync(file, 'utf8')).skills || {}; } catch { continue; }
    for (const [name, s] of Object.entries(skills)) {
      const version = short(s.wellKnownDigest || s.computedHash || s.skillFolderHash) || '-';
      let installed = day(s.installedAt), updated = day(s.updatedAt);
      if (!installed) installed = updated = day(fileDate(base, name)) + '*';
      let status = '';
      if (ONLINE === '1') {
        const site = s.sourceType === 'well-known' && (s.sourceBaseUrl || s.sourceUrl);
        const index = site ? await newest(site, cache) : null;
        const latest = index?.[name];
        status = !site ? '-' : !latest ? '?' : latest === short(s.wellKnownDigest) ? 'latest' : `update → ${latest}`;
      }
      rows.push([name, scope, version, installed, updated, s.source || '-', status]);
    }
  }
  if (!rows.length) { console.log('No skills installed with the skills CLI here (no lock file).'); return; }
  const head = ['SKILL', 'SCOPE', 'VERSION', 'INSTALLED (UTC)', 'UPDATED (UTC)', 'SOURCE', ONLINE === '1' ? 'NEWEST' : ''];
  const all = [head, ...rows];
  const width = head.map((_, i) => Math.max(...all.map((r) => r[i].length)));
  for (const r of all) console.log(r.map((c, i) => c.padEnd(width[i])).join('  ').trimEnd());
  if (rows.some((r) => r[3].endsWith('*'))) console.log('* the project lock file keeps no dates — this is when SKILL.md was written');
  if (rows.some((r) => r[6].startsWith('update'))) console.log('Newer version out → npx skills update <skill> (-g for global)');
})();
JS

路径 — 安装位置、下载来源、原始版本

  • 安装位置 — npx skills ls 显示的路径(例如 ~/.agents/skills/gp)
  • 下载来源 — 记录文件中的 sourceUrl(例如 https://sonub.com/.well-known/agent-skills/gp.tar.gz)
  • 原始版本 — 制作技能的地方(SONUB 技能的原始版本由 sonub.com 提供)。对已安装文件夹的修改会在下次更新时被覆盖,所以请修改原始版本。

更新与卸载

只把 gp 更新到最新版本(全局)
npx skills update gp -g

把所有全局技能更新到最新版本
npx skills update -g

把本项目的所有技能更新到最新版本
npx skills update -p

删除 gp(全局;会先询问 — 加上 -y 可跳过询问)
npx skills rm gp -g

从本项目中删除 gp
npx skills rm gp

只取消与 Claude Code 的链接(其他智能体仍保留)
npx skills rm gp -g -a claude-code

更新只会下载 digest 发生变化的技能。完成后,开启新的会话,再运行一次 skill-versions.sh — VERSION 应该与 NEWEST 相同。已删除的技能可以用 npx skills add https://sonub.com -s gp -g 重新安装。

技能

每个技能都是一个标准文件夹,里面有 (读取的说明)和一个小工具。无需注册,采用 。

gp

把所有工作放进一个

用大白话告诉,它就会通过 管理你的 GitHub Project 看板,并读回结果加以确认。

  • :创建、编辑、在列之间移动、关闭、重新打开、评论
  • 看板列:添加、重命名(卡片保留)、调整顺序、设置颜色
  • 为 issue 附加和视频
  • issue 内的 清单,带进度
  • 指派负责人,邀请、查看和移除看板成员
  • 用 /gp init <看板地址> 为每个项目指定看板

试着说

  • “我手上有哪些活?”
  • “把 #12 移到 Review”
  • “在它的 TODO 里加上‘更新文档’”
  • “在最前面加一列 Urgent”

动手试试:用 gp 技能管理工作

gp 是 SONUB 制作的技能,把你所有的工作都放在 上管理。用平常的话请它做下面这些事,就会用 (gh)完成,并重新读取结果加以确认:

  • 创建、修改、关闭 ,附加图片
  • 清单
  • 添加或重命名看板列
  • 指派负责人

技能文件夹里正是上面介绍的几部分:、真正干活的脚本(scripts/gp.py),以及只在需要时才读取的参考文件。

  1. 准备:在 github.com/signup 注册免费的 账号,并安装 gh。登录时智能体可以用 gh auth login 帮你完成。
  2. 安装:在输入下面这一行(需要 )。它会把 gp 装进你电脑上的智能体——、、 等。
  3. 第一次:说“设置 gp”。智能体会用 gp 的 doctor 命令检查一切,然后选一个你的看板或新建一个。
  4. 用自己的话提出请求:“创建 Issue:登录按钮没反应,附上这张”“移到 Done”“添加 Review 列”“看看我手上的工作”。
# 1) install the gp skill — Claude Code, Codex, Gemini CLI, Copilot CLI ...
npx skills add https://sonub.com -s gp -g
#   -g: for every project (leave it out for this project only)

# 2) once: log in to GitHub with the board permissions
gh auth login
gh auth refresh -s project,repo

# 3) then just ask the agent:
# "Set up gp and show my GitHub projects."
# "Make an issue: the login button does nothing. Attach shot.png. TODO: reproduce, fix, test."
# "Move it to In Progress."   "Add a Review column."   "Done!"   "What's on my plate?"

需要一个免费的 账号、gh CLI 和 3.8+。

安装此技能

npx skills add https://sonub.com -s gp

claude-skill

学习 ,用得更好

Claude Code 几乎每天都发布新。这个技能按顺序教你,依据最新的官方文档回答问题,检查你的环境,并总结每一个新功能。

  • 14 节课程,每节都有在你自己项目里做的练习和检验题
  • 小测验,并保存学习进度
  • 对照官方文档核实的回答,附带链接
  • 中的每个新功能,按主题总结
  • 检查设置、CLAUDE.md、技能、插件和 的环境诊断
  • /claude-skill update 把新发布的功能纳入技能

试着说

  • “下一课”
  • “怎么用 hook 在每次编辑后运行 ?”
  • “检查我的环境”
  • “给我出个测验”

需要 3.8+ 和连接(它会读取官方文档)。

安装此技能

npx skills add https://sonub.com -s claude-skill

popup

在读者遇到难词的地方当场解释

在项目的任意页面或文档里,把鼠标悬停在专业词汇上(手机上则点按),就会弹出一张小卡片来解释:含义、通俗说法、示例、源和“了解更多”链接。

  • 一份术语表 是所有解释的唯一来源,涵盖你发布的每一种语言
  • 直接放入 popup.js 和 popup.css 即可——无需框架,无需构建
  • 自动识别普通文本中的术语;短语、“?”按钮和链接预览则手动添加
  • 支持键盘操作、手机(底部面板)、从右向左书写的语言和
  • 一项检查,找出文档里还没有解释的行话
  • 面向 上的 :提供 GLOSSARY.md,以及悬停即可显示含义的链接

试着说

  • “给入门页面加上术语弹窗”
  • “鼠标悬停时解释 、 和 ”
  • “让 README 对新手更友好”
  • “文档里还有哪些词需要解释?”

该工具需要 3.8+。弹窗可在任何现代中运行。

安装此技能

npx skills add https://sonub.com -s popup

cowork

一次问遍你电脑上的所有 ,再核实答案

cowork 会找出你已安装的 AI 工具 — 、、、、、、、 — 把同一个问题以发给每一个真正可用的 AI,再由你的核实证据后写成一份报告。

  • /cowork init 扫描你的 AI 工具,并逐个测试它是否真的会回答
  • 列表保存在 .cowork/.cowork-agents.json — 安装或登录新工具后再运行一次 init
  • 每个 AI 都只读运行,由它自己的沙箱或 沙箱锁住
  • 记住失败原因(登录、套餐、用量上限、超时),下次自动绕开
  • 一份 final-report.md:共识、分歧和被证明错误的说法
  • 如果你要求修复,它会在报告后立即应用核实过的建议

试着说

  • “/cowork init”
  • “/cowork login-timeout 为什么登录有时会断开?”
  • “用 cowork 分析:我教材的章节顺序对吗?”
  • “现在 cowork 能用哪些 AI?”

在 macOS 上效果最好,它的沙箱能把每个 AI 锁成只读(其他系统只运行 Claude Code、Codex 和 Copilot)。需要 Perl 和至少一个已登录的 AI CLI;每个 AI 使用你自己的账号和套餐。

安装此技能

npx skills add https://sonub.com -s cowork

infographics

不是装饰,而是回答问题的信息图

infographics 把文档、报告和页面变成“画出来的信息”。先分析原文、挑选信息,再用一张主图和每个项目一张同风格的图(),以及连接关系与顺序的线(曲线、直线、斜线、折线)画出来,完成前检查结果。

  • 从原文开始 — 读者、目的、一条核心信息和事实清单。找不到的数字留作空缺,绝不编造
  • 设计阅读顺序 — 观点标题 → 摘要 → 3~5 个关键信息块 → 结论,用一个核心图代替一排相同的卡片
  • 图和线是必需的 — 分岔用曲线,顺序用路线图,共同部分用连接图,必修实线、选修虚线。只排列表格和列表就是失败
  • 固定的字号、网格、间距和唯一的强调色
  • 用同一原文做出的简陋结果、纯文字结果和好结果并排比较
  • 5 秒、模糊、30 秒测试,以及统计图和线数量、查找被截断、重叠、过小文字的检查

试着说

  • “把这份报告做成信息图”
  • “把指南页面改成一眼就能比较的样子”
  • “用这份商业计划书做 12 张申请图片”
  • “这张信息图看起来太空了,改一下”

必须先安装 webmovie 技能( add https://sonub.com -s webmovie)。浏览器检查需要 22 以上和 。图片用带图像的 Codex CLI()制作。

安装此技能

npx skills add https://sonub.com -s infographics

linkify

给页面的每个位置一个链接

linkify 让网站的每个章节、标题和段落都可以链接。点击标题,地址就会变成 页面#章节 并复制到——打开这个链接的人会直接跳到那个章节。

  • 点击标题或链接按钮,地址变成 …#章节 并被复制,同时显示“链接已复制”
  • 打开链接时滚动到该章节(停在固定顶栏下方)并短暂高亮
  • 途中会打开折叠的 details 框和隐藏的标签页
  • 直接放入的 linkify.js 和 linkify.css——无需框架,无需构建
  • 检查工具:找出没有固定 id 的标题、重复的 id 和失效的 #链接
  • 检查:在宽屏和窄屏上点击、复制并打开每个链接

试着说

  • “给文档的每个标题加上复制链接按钮”
  • “让每个常见问题的回答都可以链接”
  • “点击章节标题就复制它的地址”
  • “哪些章节还没有固定 id?”

链接在任何现代浏览器中都能使用。检查工具需要 3.8+,浏览器检查需要 22+ 和 。

安装此技能

npx skills add https://sonub.com -s linkify

webmovie

用 做的影片

webmovie 像短视频一样播放宣传、介绍或讲解片,但每个场景都是真正的 HTML。标题、数字、图表、图片和按钮用 和少量 动起来,能读到每个字,影片随页面一起翻译,也能像其他文字一样修改。

  • 像视频一样播放 HTML 场景的播放器——场景转场、缓慢推进的镜头、背景光、播放/暂停、场景按钮,结束时停止
  • 一个属性即可使用 30 多种镜头效果——遮罩、模糊、逐字、逐词、逐行、打字机、 翻转、重落、弹跳、高亮、数字滚动、条形图、圆环、饼图和线条绘制
  • 没有 JavaScript 或开启减少动态效果时,影片就是按顺序排列场景的页面——人人都能读的分镜
  • 所有语言都安全——不拆开阿拉伯文和印度系文字,保留中日韩,RTL 自动镜像,译文再长也用同样的时间
  • 直接放入的 webmovie.css 和 webmovie.js(无、无构建、无 ),同样的效果也可用于页面区块、按钮和悬停
  • 检查:找出隐藏或被改动的文字和不停的动画,并保存每个场景的静止画面

试着说

  • “给首页做一个 30 秒的介绍影片——用 HTML,不要视频”
  • “把这份报告做成逐个场景播放的故事”
  • “出现时让数字往上数、让条形图变长”
  • “给开始按钮加上悬停效果”

影片在任何现代浏览器中都能播放。检查需要 22+ 和 。

安装此技能

npx skills add https://sonub.com -s webmovie

常见问题

什么是 Agent Skill?

一个文件夹,里面的 告诉 何时以及如何完成某项任务,另外还有所需的脚本和说明。它是一项(agentskills.io),所以同一个文件夹可以在许多智能体中使用。

装给所有项目,还是只装给这个项目?

不加 -g 时,技能会装进你当前所在的项目(例如 和 .agents/skills/),后团队成员也能一起用。加上 -g,就会在你的主文件夹里装一次,所有项目都能用。

支持哪些智能体?

、、、 、,以及 skills 工具认识的其他智能体。它会问你要装给哪些智能体,你也可以用 -a 指定一个。

免费吗?我的数据会去哪里?

免费,采用 。技能在你的电脑上用你自己的工具运行:gp 只通过你的 登录与 通信,claude-skill 读取公开的 Claude Code 文档,popup 只处理你自己的文件,cowork 只你电脑上已安装并登录的 AI 工具。sonub.com 只负责提供技能文件。

安装后没有出现,怎么办?

开启智能体的新会话——它在启动时读取技能文件夹。在 Claude Code 中,也可以像 /gp 这样输入斜杠加技能名。

在课堂上教 — AI 课程的 Agent Skills 一章

请选择要取消的待付款预约。每次取消都需要确认。

你所在国家的时间:

关闭