27 KiB
技能作为分支(Skills as Branches)
概述
本文档涵盖功能技能(feature skills)——通过 git 分支合并(branch merge)添加能力的技能。这是最复杂的技能类型,也是扩展 NanoClaw 的主要方式。
NanoClaw 共有四种技能类型。完整分类请参阅 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 透明地处理插件安装:
# Claude 在后台运行此命令——用户不可见
claude plugin install nanoclaw-skills@nanoclaw-skills --scope project
技能在 claude plugin install 之后热加载(hot-loaded)——无需重启。这意味着 /setup 可以安装市场插件,然后立即运行任何功能技能,全部在一个会话(session)中完成。
选择性技能安装
/setup 询问用户想要哪些频道,然后只提供相关技能:
- "你想用哪些消息频道?" → Discord、Telegram、Slack、WhatsApp
- 用户选择 Telegram → Claude 安装插件并运行
/add-telegram - Telegram 设置完成后:"想为 Telegram 添加 Agent Swarm 支持?" → 提供
/add-telegram-swarm - "想启用社区技能?" → 安装社区市场插件
依赖技能(例如 telegram-swarm 依赖 telegram)仅在其父技能安装后才提供。/customize 在安装后的添加操作中遵循相同模式。
市场配置
NanoClaw 的 .claude/settings.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 操作:
git fetch upstream skill/discordgit merge upstream/skill/discord- 交互式设置(创建机器人、获取 token、配置环境变量等)
或手动操作:
git fetch upstream skill/discord
git merge upstream/skill/discord
应用多个技能
git merge upstream/skill/discord
git merge upstream/skill/telegram
Git 处理组合(composition)。如果两个技能修改了相同的行,那就是真实的冲突,由 Claude 解决。
更新核心
git fetch upstream main
git merge upstream/main
由于技能分支保持与 main 向前合并(参见 CI 部分),用户已合并的技能改动和上游改动之间有正确的公共祖先。
检查技能更新
之前合并过技能分支的用户可以检查更新。对于每个 upstream/skill/* 分支,检查该分支是否有不在用户 HEAD 中的提交:
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 判断一个技能分支是否为另一个的祖先。不需要单独的依赖文件。
卸载技能
# 找到合并提交
git log --merges --oneline | grep discord
# 回退它
git revert -m 1 <merge-commit>
这会创建一个新的提交来撤销该技能的改动。Claude 可以处理整个流程。
如果用户在合并后修改了技能的代码(在之上做了自定义改动),回退可能会冲突——Claude 会解决它。
如果用户之后想重新应用技能,他们需要先回退之前回退的提交(git 将已回退的改动视为"已应用并已撤销")。Claude 也会处理这个问题。
CI:保持技能分支最新
每次推送到 main 时运行一个 GitHub Action:
- 列出所有
skill/*分支 - 对每个技能分支,将
main合并进去(向前合并,而非变基) - 对合并结果运行构建和测试
- 如果测试通过,推送更新后的技能分支
- 如果技能失败(冲突、构建错误、测试失败),打开 GitHub issue 进行手动解决
为什么用向前合并而非变基(rebase):
- 无需 force-push——保留了已合并该技能的用户的历史
- 用户可以重新合并技能分支以获取技能更新(bug 修复、改进)
- Git 在整个合并图中有正确的公共祖先
**为什么这具有可扩展性:**即使有几百个技能和每天几次 main 提交,CI 成本也微不足道。Haiku 模型速度快且便宜。一两年以前不可行的方法现在因为 Claude 可以大规模解决冲突而变得实用。
安装流程
新用户(推荐)
- 在 GitHub 上 Fork
nanocoai/nanoclaw(点击 Fork 按钮) - 克隆你的 fork:
git clone https://github.com/<you>/nanoclaw.git cd nanoclaw - 运行 Claude Code:
claude - 运行
/setup——Claude 处理依赖项、认证、容器设置、服务配置,并在不存在时添加upstream远程
推荐 fork 是因为它为用户提供了一个远程仓库来推送自定义内容。仅克隆可用于试用,但没有远程备份。
从克隆迁移的现有用户
之前运行了 git clone https://github.com/nanocoai/nanoclaw.git 且有本地自定义内容的用户:
- 在 GitHub 上 Fork
nanocoai/nanoclaw - 重新路由远程仓库:
需要
git remote rename origin upstream git remote add origin https://github.com/<you>/nanoclaw.git git push --force origin main--force是因为新 fork 的 main 是上游最新版,但用户想要他们可能落后的版本。fork 刚刚创建,所以没有可丢失的内容。 - 此后,
origin= 用户的 fork,upstream= nanocoai/nanoclaw
从旧技能引擎迁移的现有用户
之前通过 skills-engine/ 系统应用技能的用户在文件树中有技能代码,但没有链接到技能分支的合并提交。Git 不知道这些改动来自技能,因此在其之上合并技能分支会产生冲突或重复。
**对于今后的新技能:**正常合并技能分支即可。没有问题。
对于现有的旧引擎技能,有两种迁移路径:
方案 A:逐技能重新应用(保留你的 fork)
- 对于每个旧引擎技能:识别并回退旧改动,然后重新合并技能分支
- Claude 协助识别需要回退的内容并解决所有冲突
- 自定义修改(非技能改动)被保留
方案 B:全新开始(最干净)
- 从上游创建新的 fork
- 合并你想要的技能分支
- 手动重新应用你的自定义(非技能)改动
- Claude 通过比较旧 fork 和新 fork 来帮助识别自定义改动
两种情况都需要:
- 删除
.nanoclaw/目录(不再需要) skills-engine/代码将在所有技能迁移后从上游移除/update-skills仅跟踪通过分支合并应用的技能——旧引擎技能不会出现在更新检查中
用户工作流
自定义改动
用户直接在其 main 分支上进行自定义改动。这是标准的 fork 工作流——他们的 main 就是他们的定制版本。
# 进行改动
vim src/config.ts
git commit -am "将触发词改为 @Bob"
git push origin main
自定义改动、技能和核心更新共存于他们的 main 分支上。Git 在每一步合并时处理三路合并,因为它可以通过合并历史追溯公共祖先。
应用技能
在 Claude Code 中运行 /add-discord(通过市场插件发现),或手动操作:
git fetch upstream skill/discord
git merge upstream/skill/discord
# 按照设置指令进行配置
git push origin main
如果用户在合并技能分支时落后于上游 main,合并可能会同时引入一些核心改动(因为技能分支是向前合并了 main 的)。这通常没问题——他们得到一个兼容的版本。
更新核心
git fetch upstream main
git merge upstream/main
git push origin main
这与现有 /update-nanoclaw 技能的合并路径相同。
更新技能
运行 /update-skills 或让 /update-nanoclaw 在核心更新后检查。对于每个有新提交的先前合并的技能分支,Claude 会提出合并更新的建议。
向上游贡献
想要向上游提交 PR 的用户:
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。
贡献者流程(功能技能)
- Fork
nanocoai/nanoclaw - 从
main创建分支 - 进行代码改动(新的频道文件、修改的集成点、更新的 package.json、.env.example 新增内容等)
- 向
main提交 PR
贡献者提交一个普通的 PR——他们不需要了解技能分支或市场仓库。他们只需进行代码改动并提交。
维护者流程
当技能 PR 被审查和批准后:
- 从 PR 的提交创建一个
skill/<name>分支:git fetch origin pull/<PR_NUMBER>/head:skill/<name> git push origin skill/<name> - Force-push 到贡献者的 PR 分支,将其替换为一个单独的提交,将贡献者添加到
CONTRIBUTORS.md(移除所有代码改动) - 将精简后的 PR 合并到
main(仅包含贡献者添加) - 将技能的 SKILL.md 添加到市场仓库 (
nanocoai/nanoclaw-skills)
这样:
- 贡献者获得合并荣誉(其 PR 被合并)
- 他们由维护者自动添加到 CONTRIBUTORS.md 中
- 技能分支从其工作中创建
main保持干净(无技能代码)- 贡献者只需要做一件事:提交含有代码改动的 PR
**注意:**来自 fork 的 GitHub PR 默认选中"允许维护者编辑",因此维护者可以推送到贡献者的 PR 分支。
技能 SKILL.md
贡献者可以选择提供 SKILL.md(在 PR 中或单独提供)。它放入市场仓库并包含:
- 前置信息(名称、描述、触发器)
- 步骤 1:合并技能分支
- 步骤 2-N:交互式设置(创建机器人、获取 token、配置环境变量、验证)
如果贡献者未提供 SKILL.md,维护者将根据 PR 编写一个。
社区市场
任何人都可以使用技能分支维护自己的 fork 和自己的市场仓库。这实现了社区驱动的技能生态系统,无需对上游仓库的写入权限。
工作原理
社区贡献者:
- 维护 NanoClaw 的一个 fork(例如
alice/nanoclaw) - 在其 fork 上使用自定义技能创建
skill/*分支 - 创建一个市场仓库(例如
alice/nanoclaw-skills),带有.claude-plugin/marketplace.json和插件结构
添加社区市场
如果社区贡献者受信任,他们可以提交 PR 将其市场添加到 NanoClaw 的 .claude/settings.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 安装社区市场插件:
claude plugin install alice-skills@alice-nanoclaw-skills --scope project
社区技能热加载并立即可用——无需重启。依赖技能仅在其先决条件满足后才提供(例如,社区 Telegram 附加组件仅在 Telegram 安装后提供)。
用户也可以通过 /plugin 手动浏览和安装社区插件。
该系统的特性
- **无需审批把关。**任何人都可以在其 fork 上创建技能,无需许可。要列入自动发现的市场才需要批准。
- **多个市场共存。**用户在
/plugin中看到来自所有受信任市场的技能。 - **社区技能使用相同的合并模式。**SKILL.md 只是指向不同的远程仓库:
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")。
创建风味
- Fork
nanocoai/nanoclaw - 合并你想要的技能
- 进行自定义改动(触发词、提示词、集成等)
- 你的 fork 的
main就是风味
安装风味
在 /setup 期间,在任何配置发生之前向用户提供风味选择。设置技能从仓库读取 flavors.yaml(随上游发布,始终最新)并呈现选项:
AskUserQuestion: "从风味开始还是默认 NanoClaw?"
- 默认 NanoClaw
- NanoClaw for Sales — Gmail + Slack + CRM(由 alice 维护)
- NanoClaw Minimal — 仅 Telegram,轻量级(由 bob 维护)
如果选择了风味:
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(风味更新)
更新风味
git fetch <风味名称> main
git merge <风味名称>/main
风味维护者保持其 fork 更新(合并上游、更新技能)。用户以与获取核心更新相同的方式获取风味更新。
风味注册表
flavors.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.tsscripts/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 快速入门
之前:
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
市场配置,使官方市场自动注册:
{
"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.tsscripts/uninstall-skill.tsscripts/fix-skill-drift.tsscripts/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:
- 在 GitHub 上 Fork
nanocoai/nanoclaw- 运行:
即使你非常落后也可以——只需推送当前状态。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浏览和安装可用技能。
致技能贡献者
贡献技能
贡献一个技能:
- Fork
nanocoai/nanoclaw- 从
main创建分支并进行代码改动- 提交一个普通的 PR
就这样。我们将从你的 PR 创建
skill/<name>分支,将你添加到 CONTRIBUTORS.md,并将 SKILL.md 添加到市场。CI 自动保持技能分支与main向前合并,使用 Claude 解决任何冲突。**想运行你自己的技能市场?**在你的 fork 上维护技能分支并创建一个市场仓库。提交 PR 将其添加到 NanoClaw 的自动发现市场中——或者用户可以通过
/plugin marketplace add手动添加。