添加中文文档

This commit is contained in:
2026-05-12 13:14:17 +00:00
parent 61d7ca6bba
commit 38bb076ac6
24 changed files with 6876 additions and 0 deletions

View File

@@ -0,0 +1,677 @@
# 技能作为分支Skills as Branches
## 概述
本文档涵盖**功能技能feature skills**——通过 git 分支合并branch merge添加能力的技能。这是最复杂的技能类型也是扩展 NanoClaw 的主要方式。
NanoClaw 共有四种技能类型。完整分类请参阅 [CONTRIBUTING.md](../CONTRIBUTING.md)
| 类型 | 位置 | 工作原理 |
|------|----------|-------------|
| **功能型Feature**(本文档) | `.claude/skills/` + `skill/*` 分支 | SKILL.md 包含指令;代码位于分支上,通过 `git merge` 应用 |
| **工具型Utility** | `.claude/skills/<name>/` 包含代码文件 | 自包含工具;代码在技能目录中,安装时复制到位 |
| **操作型Operational** | `main` 上的 `.claude/skills/` | 纯指令工作流setup、debug、update |
| **容器型Container** | `container/skills/` | 运行时加载到代理容器内部 |
---
功能技能以 git 分支的形式分发在上游仓库中。应用一个技能就是一次 `git merge`。更新核心也是一次 `git merge`。一切都是标准 git 操作。
这取代了之前的 `skills-engine/` 系统(三路文件合并、`.nanoclaw/` 状态、清单文件、重放、备份/恢复),改用纯 git 操作和 Claude 进行冲突解决。
## 工作原理
### 仓库结构
上游仓库 (`nanocoai/nanoclaw`) 维护以下内容:
- `main` — 核心 NanoClaw不含技能代码
- `skill/discord` — main + Discord 集成
- `skill/telegram` — main + Telegram 集成
- `skill/slack` — main + Slack 集成
- `skill/gmail` — main + Gmail 集成
- 等等。
每个技能分支包含该技能的所有代码改动:新增文件、修改的源文件、更新的 `package.json` 依赖项、`.env.example` 新增内容——一切。没有清单文件,没有结构化操作,没有单独的 `add/``modify/` 目录。
### 技能发现与安装
技能分为两类:
**操作型技能**(位于 `main`,始终可用):
- `/setup``/debug``/update-nanoclaw``/customize``/update-skills`
- 这些是纯指令的 SKILL.md 文件——没有代码改动,只有工作流
- 位于 `main` 上的 `.claude/skills/`,对每个用户立即可用
**功能型技能**在市场marketplace按需安装
- `/add-discord``/add-telegram``/add-slack``/add-gmail` 等。
- 每个都有一套 SKILL.md 安装指令和对应的 `skill/*` 分支代码
- 位于市场仓库 (`nanocoai/nanoclaw-skills`) 中
用户永远不会直接与市场交互。操作型技能 `/setup``/customize` 透明地处理插件安装:
```bash
# Claude 在后台运行此命令——用户不可见
claude plugin install nanoclaw-skills@nanoclaw-skills --scope project
```
技能在 `claude plugin install` 之后热加载hot-loaded——无需重启。这意味着 `/setup` 可以安装市场插件然后立即运行任何功能技能全部在一个会话session中完成。
### 选择性技能安装
`/setup` 询问用户想要哪些频道,然后只提供相关技能:
1. "你想用哪些消息频道?" → Discord、Telegram、Slack、WhatsApp
2. 用户选择 Telegram → Claude 安装插件并运行 `/add-telegram`
3. Telegram 设置完成后:"想为 Telegram 添加 Agent Swarm 支持?" → 提供 `/add-telegram-swarm`
4. "想启用社区技能?" → 安装社区市场插件
依赖技能(例如 `telegram-swarm` 依赖 `telegram`)仅在其父技能安装后才提供。`/customize` 在安装后的添加操作中遵循相同模式。
### 市场配置
NanoClaw 的 `.claude/settings.json` 注册了官方市场:
```json
{
"extraKnownMarketplaces": {
"nanoclaw-skills": {
"source": {
"source": "github",
"repo": "nanocoai/nanoclaw-skills"
}
}
}
}
```
市场仓库使用 Claude Code 的插件结构:
```
nanocoai/nanoclaw-skills/
.claude-plugin/
marketplace.json # 插件目录
plugins/
nanoclaw-skills/ # 捆绑所有官方技能的单一插件
.claude-plugin/
plugin.json # 插件清单
skills/
add-discord/
SKILL.md # 安装指令;步骤 1 是 "merge the branch"
add-telegram/
SKILL.md
add-slack/
SKILL.md
...
```
多个技能捆绑在一个插件中——安装 `nanoclaw-skills` 使所有功能技能立即可用。单独技能不需要单独安装。
每个 SKILL.md 告诉 Claude 在第 1 步合并相应的技能分支,然后引导交互式设置(环境变量、机器人创建等)。
### 应用技能
用户运行 `/add-discord`通过市场发现。Claude 按照 SKILL.md 操作:
1. `git fetch upstream skill/discord`
2. `git merge upstream/skill/discord`
3. 交互式设置(创建机器人、获取 token、配置环境变量等
或手动操作:
```bash
git fetch upstream skill/discord
git merge upstream/skill/discord
```
### 应用多个技能
```bash
git merge upstream/skill/discord
git merge upstream/skill/telegram
```
Git 处理组合composition。如果两个技能修改了相同的行那就是真实的冲突由 Claude 解决。
### 更新核心
```bash
git fetch upstream main
git merge upstream/main
```
由于技能分支保持与 main 向前合并(参见 CI 部分),用户已合并的技能改动和上游改动之间有正确的公共祖先。
### 检查技能更新
之前合并过技能分支的用户可以检查更新。对于每个 `upstream/skill/*` 分支,检查该分支是否有不在用户 HEAD 中的提交:
```bash
git fetch upstream
for branch in $(git branch -r | grep 'upstream/skill/'); do
# 检查用户是否在某个时间点合并过此技能
merge_base=$(git merge-base HEAD "$branch" 2>/dev/null) || continue
# 检查技能分支是否有超出用户已有的新提交
if ! git merge-base --is-ancestor "$branch" HEAD 2>/dev/null; then
echo "$branch 有可用更新"
fi
done
```
这不需要任何状态——它使用 git 历史来确定之前合并了哪些技能以及它们是否有新提交。
此逻辑可通过两种方式使用:
- 内置于 `/update-nanoclaw` 中——合并 main 后可选择性检查技能更新
- 独立的 `/update-skills` ——独立检查和合并技能更新
### 冲突解决
在任何合并步骤中可能出现冲突。Claude 解决它们——读取冲突文件,理解双方的意图,并生成正确的结果。这就是分支方案能够大规模可行的原因:以前需要人工判断的冲突解决现已自动化。
### 技能依赖
一些技能依赖其他技能。例如 `skill/telegram-swarm` 需要 `skill/telegram`。依赖技能分支从其父技能分支派生,而不是从 `main` 派生。
这意味着 `skill/telegram-swarm` 包含 telegram 的所有改动加上自己的新增内容。当用户合并 `skill/telegram-swarm` 时,他们同时获得两者——无需单独合并 telegram。
依赖关系隐含在 git 历史中——`git merge-base --is-ancestor` 判断一个技能分支是否为另一个的祖先。不需要单独的依赖文件。
### 卸载技能
```bash
# 找到合并提交
git log --merges --oneline | grep discord
# 回退它
git revert -m 1 <merge-commit>
```
这会创建一个新的提交来撤销该技能的改动。Claude 可以处理整个流程。
如果用户在合并后修改了技能的代码在之上做了自定义改动回退可能会冲突——Claude 会解决它。
如果用户之后想重新应用技能他们需要先回退之前回退的提交git 将已回退的改动视为"已应用并已撤销"。Claude 也会处理这个问题。
## CI保持技能分支最新
每次推送到 `main` 时运行一个 GitHub Action
1. 列出所有 `skill/*` 分支
2. 对每个技能分支,将 `main` 合并进去(向前合并,而非变基)
3. 对合并结果运行构建和测试
4. 如果测试通过,推送更新后的技能分支
5. 如果技能失败(冲突、构建错误、测试失败),打开 GitHub issue 进行手动解决
**为什么用向前合并而非变基rebase**
- 无需 force-push——保留了已合并该技能的用户的历史
- 用户可以重新合并技能分支以获取技能更新bug 修复、改进)
- Git 在整个合并图中有正确的公共祖先
**为什么这具有可扩展性:**即使有几百个技能和每天几次 main 提交CI 成本也微不足道。Haiku 模型速度快且便宜。一两年以前不可行的方法现在因为 Claude 可以大规模解决冲突而变得实用。
## 安装流程
### 新用户(推荐)
1. 在 GitHub 上 Fork `nanocoai/nanoclaw`(点击 Fork 按钮)
2. 克隆你的 fork
```bash
git clone https://github.com/<you>/nanoclaw.git
cd nanoclaw
```
3. 运行 Claude Code
```bash
claude
```
4. 运行 `/setup`——Claude 处理依赖项、认证、容器设置、服务配置,并在不存在时添加 `upstream` 远程
推荐 fork 是因为它为用户提供了一个远程仓库来推送自定义内容。仅克隆可用于试用,但没有远程备份。
### 从克隆迁移的现有用户
之前运行了 `git clone https://github.com/nanocoai/nanoclaw.git` 且有本地自定义内容的用户:
1. 在 GitHub 上 Fork `nanocoai/nanoclaw`
2. 重新路由远程仓库:
```bash
git remote rename origin upstream
git remote add origin https://github.com/<you>/nanoclaw.git
git push --force origin main
```
需要 `--force` 是因为新 fork 的 main 是上游最新版但用户想要他们可能落后的版本。fork 刚刚创建,所以没有可丢失的内容。
3. 此后,`origin` = 用户的 fork`upstream` = nanocoai/nanoclaw
### 从旧技能引擎迁移的现有用户
之前通过 `skills-engine/` 系统应用技能的用户在文件树中有技能代码但没有链接到技能分支的合并提交。Git 不知道这些改动来自技能,因此在其之上合并技能分支会产生冲突或重复。
**对于今后的新技能:**正常合并技能分支即可。没有问题。
**对于现有的旧引擎技能**,有两种迁移路径:
**方案 A逐技能重新应用保留你的 fork**
1. 对于每个旧引擎技能:识别并回退旧改动,然后重新合并技能分支
2. Claude 协助识别需要回退的内容并解决所有冲突
3. 自定义修改(非技能改动)被保留
**方案 B全新开始最干净**
1. 从上游创建新的 fork
2. 合并你想要的技能分支
3. 手动重新应用你的自定义(非技能)改动
4. Claude 通过比较旧 fork 和新 fork 来帮助识别自定义改动
两种情况都需要:
- 删除 `.nanoclaw/` 目录(不再需要)
- `skills-engine/` 代码将在所有技能迁移后从上游移除
- `/update-skills` 仅跟踪通过分支合并应用的技能——旧引擎技能不会出现在更新检查中
## 用户工作流
### 自定义改动
用户直接在其 main 分支上进行自定义改动。这是标准的 fork 工作流——他们的 `main` 就是他们的定制版本。
```bash
# 进行改动
vim src/config.ts
git commit -am "将触发词改为 @Bob"
git push origin main
```
自定义改动、技能和核心更新共存于他们的 main 分支上。Git 在每一步合并时处理三路合并,因为它可以通过合并历史追溯公共祖先。
### 应用技能
在 Claude Code 中运行 `/add-discord`(通过市场插件发现),或手动操作:
```bash
git fetch upstream skill/discord
git merge upstream/skill/discord
# 按照设置指令进行配置
git push origin main
```
如果用户在合并技能分支时落后于上游 main合并可能会同时引入一些核心改动因为技能分支是向前合并了 main 的)。这通常没问题——他们得到一个兼容的版本。
### 更新核心
```bash
git fetch upstream main
git merge upstream/main
git push origin main
```
这与现有 `/update-nanoclaw` 技能的合并路径相同。
### 更新技能
运行 `/update-skills` 或让 `/update-nanoclaw` 在核心更新后检查。对于每个有新提交的先前合并的技能分支Claude 会提出合并更新的建议。
### 向上游贡献
想要向上游提交 PR 的用户:
```bash
git fetch upstream main
git checkout -b my-fix upstream/main
# 进行改动
git push origin my-fix
# 从 my-fix 创建 PR 到 nanocoai/nanoclaw:main
```
标准的 fork 贡献工作流。他们的自定义改动保留在 main 上,不会泄露到 PR 中。
## 贡献技能
以下流程适用于**功能技能**(基于分支)。对于工具型技能(自包含工具)和容器型技能,贡献者直接向 `.claude/skills/<name>/` 或 `container/skills/<name>/` 添加文件的 PR——无需分支提取。所有技能类型请参见 [CONTRIBUTING.md](../CONTRIBUTING.md)。
### 贡献者流程(功能技能)
1. Fork `nanocoai/nanoclaw`
2. 从 `main` 创建分支
3. 进行代码改动(新的频道文件、修改的集成点、更新的 package.json、.env.example 新增内容等)
4. 向 `main` 提交 PR
贡献者提交一个普通的 PR——他们不需要了解技能分支或市场仓库。他们只需进行代码改动并提交。
### 维护者流程
当技能 PR 被审查和批准后:
1. 从 PR 的提交创建一个 `skill/<name>` 分支:
```bash
git fetch origin pull/<PR_NUMBER>/head:skill/<name>
git push origin skill/<name>
```
2. Force-push 到贡献者的 PR 分支,将其替换为一个单独的提交,将贡献者添加到 `CONTRIBUTORS.md`(移除所有代码改动)
3. 将精简后的 PR 合并到 `main`(仅包含贡献者添加)
4. 将技能的 SKILL.md 添加到市场仓库 (`nanocoai/nanoclaw-skills`)
这样:
- 贡献者获得合并荣誉(其 PR 被合并)
- 他们由维护者自动添加到 CONTRIBUTORS.md 中
- 技能分支从其工作中创建
- `main` 保持干净(无技能代码)
- 贡献者只需要做一件事:提交含有代码改动的 PR
**注意:**来自 fork 的 GitHub PR 默认选中"允许维护者编辑",因此维护者可以推送到贡献者的 PR 分支。
### 技能 SKILL.md
贡献者可以选择提供 SKILL.md在 PR 中或单独提供)。它放入市场仓库并包含:
1. 前置信息(名称、描述、触发器)
2. 步骤 1合并技能分支
3. 步骤 2-N交互式设置创建机器人、获取 token、配置环境变量、验证
如果贡献者未提供 SKILL.md维护者将根据 PR 编写一个。
## 社区市场
任何人都可以使用技能分支维护自己的 fork 和自己的市场仓库。这实现了社区驱动的技能生态系统,无需对上游仓库的写入权限。
### 工作原理
社区贡献者:
1. 维护 NanoClaw 的一个 fork例如 `alice/nanoclaw`
2. 在其 fork 上使用自定义技能创建 `skill/*` 分支
3. 创建一个市场仓库(例如 `alice/nanoclaw-skills`),带有 `.claude-plugin/marketplace.json` 和插件结构
### 添加社区市场
如果社区贡献者受信任,他们可以提交 PR 将其市场添加到 NanoClaw 的 `.claude/settings.json`
```json
{
"extraKnownMarketplaces": {
"nanoclaw-skills": {
"source": {
"source": "github",
"repo": "nanocoai/nanoclaw-skills"
}
},
"alice-nanoclaw-skills": {
"source": {
"source": "github",
"repo": "alice/nanoclaw-skills"
}
}
}
}
```
合并后,所有 NanoClaw 用户自动发现社区市场以及官方市场。
### 安装社区技能
`/setup` 和 `/customize` 询问用户是否想启用社区技能。如果是Claude 通过 `claude plugin install` 安装社区市场插件:
```bash
claude plugin install alice-skills@alice-nanoclaw-skills --scope project
```
社区技能热加载并立即可用——无需重启。依赖技能仅在其先决条件满足后才提供(例如,社区 Telegram 附加组件仅在 Telegram 安装后提供)。
用户也可以通过 `/plugin` 手动浏览和安装社区插件。
### 该系统的特性
- **无需审批把关。**任何人都可以在其 fork 上创建技能,无需许可。要列入自动发现的市场才需要批准。
- **多个市场共存。**用户在 `/plugin` 中看到来自所有受信任市场的技能。
- **社区技能使用相同的合并模式。**SKILL.md 只是指向不同的远程仓库:
```bash
git remote add alice https://github.com/alice/nanoclaw.git
git fetch alice skill/my-cool-feature
git merge alice/skill/my-cool-feature
```
- **用户也可以手动添加市场。**即使未列入 settings.json用户也可以运行 `/plugin marketplace add alice/nanoclaw-skills` 来发现任何来源的技能。
- **CI 是每个 fork 独立的。**每个社区维护者运行自己的 CI 以保持其技能分支向前合并。他们可以使用与上游仓库相同的 GitHub Action。
## 风味Flavors
风味是 NanoClaw 的精选 fork——为特定用例量身定制的技能、自定义改动和配置的组合例如"NanoClaw for Sales"、"NanoClaw Minimal"、"NanoClaw for Developers")。
### 创建风味
1. Fork `nanocoai/nanoclaw`
2. 合并你想要的技能
3. 进行自定义改动(触发词、提示词、集成等)
4. 你的 fork 的 `main` 就是风味
### 安装风味
在 `/setup` 期间,在任何配置发生之前向用户提供风味选择。设置技能从仓库读取 `flavors.yaml`(随上游发布,始终最新)并呈现选项:
AskUserQuestion: "从风味开始还是默认 NanoClaw"
- 默认 NanoClaw
- NanoClaw for Sales — Gmail + Slack + CRM由 alice 维护)
- NanoClaw Minimal — 仅 Telegram轻量级由 bob 维护)
如果选择了风味:
```bash
git remote add <风味名称> https://github.com/alice/nanoclaw.git
git fetch <风味名称> main
git merge <风味名称>/main
```
然后设置过程正常继续(依赖项、认证、容器、服务)。
**此选择仅在全新 fork 时提供**——当用户的 main 与上游 main 匹配或接近且没有本地提交时。如果 `/setup` 检测到显著的本地改动(在现有安装上重新运行 setup它会跳过风味选择直接进入配置。
安装后,用户的 fork 有三个远程仓库:
- `origin` — 其 fork推送自定义内容到此
- `upstream` — `nanocoai/nanoclaw`(核心更新)
- `<风味名称>` — 风味 fork风味更新
### 更新风味
```bash
git fetch <风味名称> main
git merge <风味名称>/main
```
风味维护者保持其 fork 更新(合并上游、更新技能)。用户以与获取核心更新相同的方式获取风味更新。
### 风味注册表
`flavors.yaml` 位于上游仓库中:
```yaml
flavors:
- name: NanoClaw for Sales
repo: alice/nanoclaw
description: Gmail + Slack + CRM 集成,每日流水线摘要
maintainer: alice
- name: NanoClaw Minimal
repo: bob/nanoclaw
description: 仅 Telegram无容器开销
maintainer: bob
```
任何人都可以提交 PR 来添加自己的风味。该文件在 `/setup` 运行时可本地使用,因为它是克隆仓库的一部分。
### 可发现性
- **设置期间**——风味选择作为初始设置流程的一部分提供
- **`/browse-flavors` 技能**——随时读取 `flavors.yaml` 并呈现选项
- **GitHub 主题**——风味 fork 可以标记 `nanoclaw-flavor` 标签以便搜索
- **Discord / 网站**——社区精选列表
## 迁移
从旧技能引擎到分支的迁移已完成。所有功能技能现在位于 `skill/*` 分支上,技能引擎已移除。
### 技能分支
| 分支 | 基准 | 描述 |
|--------|------|-------------|
| `skill/whatsapp` | `main` | WhatsApp 频道 |
| `skill/telegram` | `main` | Telegram 频道 |
| `skill/slack` | `main` | Slack 频道 |
| `skill/discord` | `main` | Discord 频道 |
| `skill/gmail` | `main` | Gmail 频道 |
| `skill/voice-transcription` | `skill/whatsapp` | OpenAI Whisper 语音转录 |
| `skill/image-vision` | `skill/whatsapp` | 图片附件处理 |
| `skill/pdf-reader` | `skill/whatsapp` | PDF 附件阅读 |
| `skill/local-whisper` | `skill/voice-transcription` | 本地 whisper.cpp 转录 |
| `skill/ollama-tool` | `main` | Ollama MCP 服务器用于本地模型 |
| `skill/apple-container` | `main` | Apple Container 运行时 |
| `skill/reactions` | `main` | WhatsApp 表情反应 |
### 已移除的内容
- `skills-engine/` 目录(整个引擎)
- `scripts/apply-skill.ts`、`scripts/uninstall-skill.ts`、`scripts/rebase.ts`
- `scripts/fix-skill-drift.ts`、`scripts/validate-all-skills.ts`
- `.github/workflows/skill-drift.yml`、`.github/workflows/skill-pr.yml`
- 技能目录中的所有 `add/`、`modify/`、`tests/` 和 `manifest.yaml`
- `.nanoclaw/` 状态目录
操作型技能(`setup`、`debug`、`update-nanoclaw`、`customize`、`update-skills`)保留在 main 的 `.claude/skills/` 中。
## 变更内容
### README 快速入门
之前:
```bash
git clone https://github.com/nanocoai/NanoClaw.git
cd NanoClaw
claude
```
之后:
```
1. 在 GitHub 上 Fork nanocoai/nanoclaw
2. git clone https://github.com/<you>/nanoclaw.git
3. cd nanoclaw
4. claude
5. /setup
```
### 设置技能 (`/setup`)
设置流程的更新:
- 检查 `upstream` 远程是否存在;如果不存在则添加:`git remote add upstream https://github.com/nanocoai/nanoclaw.git`
- 检查 `origin` 是否指向用户的 fork而非 nanocoai。如果指向 nanocoai引导他们完成 fork 迁移。
- **安装市场插件:**`claude plugin install nanoclaw-skills@nanoclaw-skills --scope project`——使所有功能技能可用(热加载,无需重启)
- **询问要添加哪些频道:**呈现频道选项Discord、Telegram、Slack、WhatsApp、Gmail为选中的频道运行相应的 `/add-*` 技能
- **提供依赖技能:**频道设置后,提供相关附加组件(例如 Telegram 后的 Agent Swarm、WhatsApp 后的语音转录)
- **可选启用社区市场:**询问用户是否想要社区技能,同时安装这些市场插件
### `.claude/settings.json`
市场配置,使官方市场自动注册:
```json
{
"extraKnownMarketplaces": {
"nanoclaw-skills": {
"source": {
"source": "github",
"repo": "nanocoai/nanoclaw-skills"
}
}
}
}
```
### main 上的技能目录
`main` 上的 `.claude/skills/` 目录仅保留操作型技能setup、debug、update-nanoclaw、customize、update-skills。功能技能add-discord、add-telegram 等)位于市场仓库中,通过 `/setup` 或 `/customize` 期间的 `claude plugin install` 安装。
### 技能引擎移除
以下内容可以移除:
- `skills-engine/`——整个目录(应用、合并、重放、状态、备份等)
- `scripts/apply-skill.ts`
- `scripts/uninstall-skill.ts`
- `scripts/fix-skill-drift.ts`
- `scripts/validate-all-skills.ts`
- `.nanoclaw/`——状态目录
- 所有技能目录中的 `add/` 和 `modify/` 子目录
- main 上 `.claude/skills/` 中的功能技能 SKILL.md 文件(它们现在位于市场中)
操作型技能(`setup`、`debug`、`update-nanoclaw`、`customize`、`update-skills`)保留在 main 的 `.claude/skills/` 中。
### 新的基础设施
- **市场仓库** (`nanocoai/nanoclaw-skills`)——绑定所有功能技能的 SKILL.md 文件的单一 Claude Code 插件
- **CI GitHub Action**——每次推送到 `main` 时将 `main` 向前合并到所有 `skill/*` 分支,使用 Claude (Haiku) 解决冲突
- **`/update-skills` 技能**——使用 git 历史检查并应用技能分支更新
- **`CONTRIBUTORS.md`**——追踪技能贡献者
### 更新技能 (`/update-nanoclaw`)
采用基于分支的方法后更新技能变得更简单。旧的技能引擎需要在合并核心更新后重放所有已应用的技能——这整步消失了。技能改动已经在用户的 git 历史中,所以 `git merge upstream/main` 直接就能使用。
**保持不变的内容:**
- 预检干净的工作树、upstream 远程)
- 备份分支 + 标签
- 预览git log、git diff、文件分桶
- 合并/拣选/变基选项
- 冲突预览dry-run 合并)
- 冲突解决
- 构建 + 测试验证
- 回滚指令
**移除的内容:**
- 技能重放步骤(旧技能引擎需要在核心更新后重新应用技能)
- 重新运行结构化操作npm 依赖项、env 变量——这些现在是 git 历史的一部分)
**新增的内容:**
- 末尾的可选步骤:"检查技能更新?",运行 `/update-skills` 逻辑
- 它检查任何先前合并的技能分支是否有新提交bug 修复、技能本身的改进——不仅仅是来自 main 的向前合并)
**为什么核心更新后用户不需要重新合并技能:**
当用户合并了一个技能分支时,这些改动成为其 git 历史的一部分。当他们之后合并 `upstream/main` 时git 执行普通的三路合并——其文件树中的技能改动不受影响,只引入核心改动。向前合并 CI 确保技能分支保持与最新 main 兼容,但这是为新用户全新应用技能准备的。已经合并了该技能的现有用户不需要做任何事。
用户只有在技能本身被更新时(不仅仅是向前合并了 main才需要重新合并技能分支。`/update-skills` 检查会检测到这一点。
## Discord 公告
### 致现有用户
> **技能现在是 git 分支**
>
> 我们简化了 NanoClaw 中技能的工作方式。技能现在是你可以合并进来的 git 分支,而非自定义技能引擎。
>
> **这对你意味着什么:**
> - 应用技能:`git fetch upstream skill/discord && git merge upstream/skill/discord`
> - 更新核心:`git fetch upstream main && git merge upstream/main`
> - 检查技能更新:`/update-skills`
> - 不再有 `.nanoclaw/` 状态目录或技能引擎
>
> **我们现在推荐 fork 而非克隆。**这给你一个远程仓库来推送自定义内容。
>
> **如果你目前有带本地改动的克隆**,迁移到 fork
> 1. 在 GitHub 上 Fork `nanocoai/nanoclaw`
> 2. 运行:
> ```
> git remote rename origin upstream
> git remote add origin https://github.com/<you>/nanoclaw.git
> git push --force origin main
> ```
> 即使你非常落后也可以——只需推送当前状态。
>
> **如果你之前通过旧系统应用了技能**,代码改动已经在你的工作树中——无需重做。你可以删除 `.nanoclaw/` 目录。未来的技能和更新使用基于分支的方法。
>
> **发现技能:**技能现在通过 Claude Code 的插件市场可用。在 Claude Code 中运行 `/plugin` 浏览和安装可用技能。
### 致技能贡献者
> **贡献技能**
>
> 贡献一个技能:
> 1. Fork `nanocoai/nanoclaw`
> 2. 从 `main` 创建分支并进行代码改动
> 3. 提交一个普通的 PR
>
> 就这样。我们将从你的 PR 创建 `skill/<name>` 分支,将你添加到 CONTRIBUTORS.md并将 SKILL.md 添加到市场。CI 自动保持技能分支与 `main` 向前合并,使用 Claude 解决任何冲突。
>
> **想运行你自己的技能市场?**在你的 fork 上维护技能分支并创建一个市场仓库。提交 PR 将其添加到 NanoClaw 的自动发现市场中——或者用户可以通过 `/plugin marketplace add` 手动添加。