开发者指南
Neodomain 底层 API 和 CLI 命令行工具完全向开发者与 AI 智能体开放。
您的个人访问令牌 (Access Token)
在调用接口或执行 CLI 操作时,请在 Header 中附加此 Token 以进行身份验证。
🧠 技能 (Skill) 完整指南
Skill 是 Neowow Studio 生态的核心扩展机制——将专业知识和自动化流程打包为可复用的 AI 指令集, 在 Hermes Agent 中加载后即时增强 AI 的能力边界。
1. 什么是 Skill?
Skill 是一段 Markdown 格式的 AI 系统指令,它告诉 AI Agent(如 Hermes) 在面对特定任务时应如何思考、执行和输出。你可以把 Skill 理解为给 AI 安装的「专业模块」—— AI 原本是通才,加载 Skill 后就变成了该领域的专家。
Skill 的典型用途
- 剧本创作:定义角色分析、对话润色、情节结构的系统方法
- 代码规范:强制特定的代码风格、命名约定和架构模式
- 翻译工作流:先理解语境→直译→本地化润色→质量检查的多步流水线
- 数据分析:从原始数据到可视化报告的完整分析框架
- 内容审核:敏感内容识别、合规检查的判定标准和输出格式
Skill 文件结构
--- name: 剧本内容填充 description: 帮助分析剧本,填充场景细节、角色对话和情感层次 tags: [writing, creative, script] version: 3 --- ## 角色设定 你是一位经验丰富的剧本顾问和故事架构师... ## 核心工作流 1. **需求分析**:理解用户提供的剧本草稿... 2. **结构优化**:检查三幕结构... 3. **内容填充**:逐场景扩展... ## 输出规范 - 保留原剧本的全部情节走向 - 新增内容用 **[新增]** 标记 - 修改建议用 **[建议]** 标记
关键字段:YAML 前置元数据(name / description / tags)用于市场展示和搜索; Markdown 正文即为 AI 加载的实际指令。
2. 发布 Skill
方式一:通过控制台发布
- 登录
app.neowow.studio,在控制台选择「上传技能」模式 - 填写 Skill 名称、简短描述和标签(用于市场分类和搜索)
- 粘贴 Markdown 格式的 Skill 内容,或直接上传
.md文件 - 点击发布,Skill 即刻上架到市场,其他用户可以订阅
方式二:通过 API 上传
适合 CI/CD 流水线或 AI Agent 自动化发布:
POST https://app.neowow.studio/api/skills
Authorization: Bearer <your-access-token>
Content-Type: application/json
{
"name": "剧本内容填充",
"description": "帮助分析剧本...",
"content": "# 技能内容\n\n## 角色设定\n...",
"tags": ["writing", "creative"],
"displayName": "费元华"
}方式三:通过 Hermes Agent 终端
# 从本地 .md 文件发布 $ hermes skill-publish ./my-skill.md # 通过对话创建 用户:帮我创建一个 Skill,名为"SEO 文章优化"... Hermes:已创建并发布到市场 ✅ # 查看我的所有 Skill $ hermes skills mine
3. 更新 Skill
当你修改 Skill 内容并重新发布时,系统会自动递增版本号。 所有已订阅该 Skill 的用户都会收到 「有新版本」 的提醒。
- 在「我的分享」或「技能市场」中找到你的 Skill
- 点击「更新」按钮,修改内容后保存
- 版本号自动 +1,订阅者端显示更新提示
- 订阅者点击「同步」即可获取最新版本
通过 API 更新
PUT https://app.neowow.studio/api/skills/skill-kwgtob7?ownerId=<your-id>
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "剧本内容填充 v2",
"description": "新增了角色弧光分析功能",
"content": "# 更新的内容...",
"tags": ["writing", "creative", "character"]
}4. 订阅与使用 Skill
浏览与订阅
- 访问 市场 → 技能 浏览所有可用 Skill
- 点击感兴趣的 Skill 卡片进入详情页
- 查看简介、标签、订阅数和评论
- 点击「订阅」—— 订阅后 Skill 自动同步到 Hermes Agent
在 Hermes Agent 中使用
# 已订阅的 Skill 自动出现在可用列表中 $ hermes skills list 📝 剧本内容填充 v3 ⭐ 已安装 🎨 资产设计 v1 ⭐ 已安装 📊 数据分析框架 v2 🔄 有新版本 # 在对话中自动触发 用户:使用「剧本内容填充」优化这段剧本... Hermes:(自动加载 Skill 指令,按 Skill 定义的工作流执行) # 手动订阅 $ hermes skills subscribe skill-kwgtob7 # 同步最新版本 $ hermes skills sync skill-kwgtob7 # 取消订阅 $ hermes skills unsubscribe skill-kwgtob7
Skill 同步原理
💡 自动同步:Hermes Agent 启动时会调用 GET /api/skills?subscribed=true&ownerId=<...> 拉取 已订阅的 Skill 列表,将内容写入 ~/.hermes/skills/ 目录。之后每次对话时,Agent 会扫描该目录 加载所有 Skill 的系统指令到对话上下文。版本更新后 Agent 会提示用户同步。
5. 编写优质 Skill 的建议
- 明确的角色定义:第一段就告诉 AI "你是一个...",越具体越好
- 结构化工作流:用编号步骤描述,AI 会严格按顺序执行
- 输出规范:指定输出格式(Markdown/JSON/表格),减少歧义
- 正例 + 反例:给出好的输出和坏的输出示例
- 边界条件:明确什么情况下应该拒绝执行或请求更多信息
- 版本迭代:根据实际使用反馈持续优化,每次更新通知订阅者
6. 📦 Skill 类型 + 多文件上传 (Phase ζ.7)
Skill 不再只能是单个文本块。除了直接粘贴 Markdown,你可以上传:
- 单文件 — 一个
.md/.txt等文本文件 - 整个文件夹 — 浏览器一次拣选,所有子文件按相对路径打包
- Zip 压缩包 — 浏览器侧解压(JSZip),提取文本文件上传
支持的 Skill 类型
| 类型 | 说明 | 典型结构 |
|---|---|---|
| 通用 (generic) | 纯 Markdown / 文本,无格式约束 — 默认选项 | SKILL.md |
| Claude | Anthropic Claude Skills 格式 — YAML frontmatter + 引用 | SKILL.mdreferences/scripts/ |
| Hermes | Neowow 标准 — 在 Claude 基础上扩展,可调用平台能力(生图 / 视频 / Neodomain CLI / 商城其他 skill 等) | 同 Claude + 调用能力声明 |
Anthropic Claude Skills 格式参考
官方文档:anthropic.com/news/skills
my-claude-skill/ ├── SKILL.md # 主文件,需要 YAML frontmatter ├── README.md # (可选) 给人类读的文档 ├── references/ # (可选) 额外上下文,如 example*.md └── scripts/ # (可选) Python/shell 工具脚本 # SKILL.md 顶部 frontmatter 示例: --- name: pdf-summary description: Read a PDF and produce structured summary license: MIT --- # Skill 主体...
转换为 Hermes 标准 (复选框)
上传通用 / Claude 格式时,可勾选 "✨ 同时转换为 Neowow Hermes 标准"。 v1 仅打 convertedToHermes: true 标记 + 存原文不动;后续版本会:
- 在 SKILL.md 顶部注入 Hermes frontmatter
- 添加
hermes.yaml声明能调用的平台能力(生图 / 视频 / KV / CLI 等) - 引用商城里其他 Skill(skill-to-skill 调用)
💡 你现在勾上没什么副作用,等转换器上线后,标记过的 skill 会被批量处理一次。
文件大小限制
- 单文件 ≤ 500 KB
- 整个 skill (所有文件) 序列化后 ≤ 1.5 MB(TableStore 列上限是 2 MB,留 padding)
- Zip 上传 ≤ 10 MB(解压后还要满足上面两条)
- 非文本类型(图片/二进制) v1 拒绝 — 把图放外部 CDN,在 SKILL.md 里用 URL 引用
API 字段(给程序化上传用)
POST /api/skills?ownerId=<id>
{
"name": "my-skill",
"description": "...",
"skillType": "claude", // 'generic'|'claude'|'hermes'
"files": {
"SKILL.md": "---\nname: ...\n---\n# ...",
"references/example.md": "...",
"scripts/helper.py": "..."
},
// 多文件模式: content 可为空,服务器从 files 里挑 SKILL.md / README.md
// 当镜像(向下兼容老 viewer)。也可显式传 content 覆盖
"content": "",
"convertedToHermes": true, // 转换标记
"tags": ["pdf"],
"visibility": "private",
"allowedUsers": ["1928091762437005312"]
}7. 🔒 私有 Skill (Phase ζ.6 — 白名单可见)
不想让 Skill 出现在公共市场,只让特定用户能订阅?发布或编辑 Skill 时,把可见性设为 "🔒 私有",并填入白名单 userId。
访问规则
| 身份 | 市场列表 | 查看详情 | 订阅 | 编辑 |
|---|---|---|---|---|
| 作者 | ✅ 带 🔒 标识 | ✅ | 自动 | ✅ |
| 白名单用户 | ✅ | ✅ | ✅ | ❌ |
| 已订阅(后被设私有) | ✅ | ✅ | 已是订阅者 | ❌ |
| 其他用户 | ❌ 完全看不到 | 404 | 404 | ❌ |
| 公开 API(/api/public/skills) | ❌ 永不返回 | 404 | — | — |
🔍 注意: 非授权用户得到的是 404 Not Found 而不是 403 Forbidden — 这是故意的,不让外部窥探"这个 Skill 是否存在"。
如何拿到对方的 userId
让对方在登录状态的浏览器 console 跑:
fetch('/api/me/whoami', { credentials: 'include' })
.then(r => r.json())
.then(d => console.log(d.userId));返回 19 位数字(例如 1928091762437005312),粘到 "白名单" 输入框即可。每行一个,或用逗号分隔。
grandfathered subscribers (老订阅者保留访问)
技能从 公开 切换到 私有 后,已经订阅过的用户保留访问权限 — 你不需要为每个人手动加白名单。 作者只想未来不让陌生人订阅 时,直接切私有(白名单留空)就行。 想把现有订阅者也踢出 的话…目前 UI 没暴露这个功能,需要联系运营手动改 row。
API 字段(给程序化集成用)
POST /api/skills 创建时和 PUT /api/skills/{id} 更新时,body 接受:
{
"name": "我的私有技能",
"content": "...",
"visibility": "private", // 'private' (默认) | 'public'
"allowedUsers": [
"1928091762437005312", // 作者主账号
"1922456789012345678" // 协作者 A
]
// ... 其他常规字段
}字段 allowedUsers 仅在 visibility="private" 时生效;visibility="public" 时即使列出也被忽略,但会保存以便日后切回私有时不丢失。
Phase ζ.8 起默认值已从 public 改为 private — 创作者没显式设置时技能不会被广播到公共市场。如需上架公共市场,发布时显式传 visibility: "public"。
申请-审批流(Phase ζ.8):除 allowedUsers 之外,作者无需事先收集 userId。其他登录用户在私有技能详情页可点击「申请访问」自动提交请求;作者在该技能的「管理 ▾ → 待审批」菜单或 /skills 顶部的访问请求横幅审批通过即可。涉及的 API:
POST /api/skills/{id}/access-requests— 申请访问(任意登录用户)。Body:{ requesterDisplayName, message? }。幂等:同 userId 重复提交会刷新现有请求。GET /api/skills/{id}/access-requests?ownerId=...— 列出待审批请求(仅作者)。PUT /api/skills/{id}/access-requests?ownerId=...— 审批(仅作者)。Body:{ requesterId, action: "approve" | "deny" }。approve会把requesterId加入allowedUsers。GET /api/me/access-requests?ownerId=...&ownerIds=...— 跨所有自己技能的待审批收件箱(用于/skills横幅)。
反爬虫:对未登录调用方,私有技能 GET 仍返回 404(不泄漏存在性)。登录用户在私有技能上无访问权时返回 200 + 元数据残缺(_canRequestAccess: true),用于展示申请按钮但不暴露内容/文件。