添加 skill 功能的 feature memory,记录技能包管理服务和 Hook 系统的核心信息。 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.4 KiB
3.4 KiB
Skill 功能
负责范围:技能包管理服务 - 核心实现 最后更新:2025-02-11
当前状态
Skill 系统支持两种来源:官方 skills (./skills/) 和用户 skills (projects/uploads/{bot_id}/skills/)。支持 Hook 系统和 MCP 服务器配置,通过 SKILL.md 或 plugin.json 定义元数据。
核心文件
routes/skill_manager.py- Skill 上传/删除/列表 APIagent/plugin_hook_loader.py- Hook 系统实现agent/deep_assistant.py-CustomSkillsMiddlewareagent/prompt_loader.py- PrePrompt hooks + MCP 配置合并skills/- 官方 skills 目录skills_developing/- 开发中 skills
最近重要事项
- 2025-02-11: 初始化 skill 功能 memory
Gotchas(开发必读)
- ⚠️ 执行脚本必须使用绝对路径
- ⚠️ MCP 配置优先级:Skill MCP > 默认 MCP > 用户参数
- ⚠️ 上传大小限制:50MB(ZIP),解压后最大 500MB
- ⚠️ 压缩比例检查:最大 100:1(防止 zip 炸弹)
- ⚠️ 符号链接检查:禁止解压包含符号链接的文件
Skill 目录结构
skill-name/
├── SKILL.md # 核心指令文档(必需)
├── skill.yaml # 元数据配置(可选)
├── .claude-plugin/
│ └── plugin.json # Hook 和 MCP 配置(可选)
└── scripts/ # 可执行脚本(可选)
└── script.py
Hook 系统
| Hook 类型 | 执行时机 | 用途 |
|---|---|---|
PrePrompt |
system_prompt 加载时 | 动态注入用户上下文 |
PostAgent |
agent 执行后 | 处理响应结果 |
PreSave |
保存消息前 | 内容过滤/修改 |
API 接口
| 端点 | 方法 | 功能 |
|---|---|---|
GET /api/v1/skill/list |
- | 返回官方 + 用户 skills |
POST /api/v1/skill/upload |
- | ZIP 上传,解压到用户目录 |
DELETE /api/v1/skill/remove |
- | 删除用户 skill |
内置 Skills
| Skill 名称 | 功能描述 |
|---|---|
excel-analysis |
Excel 数据分析、透视表、图表 |
managing-scripts |
管理可复用脚本库 |
rag-retrieve |
RAG 知识库检索 |
jina-ai |
Jina AI Reader/Search |
user-context-loader |
Hook 机制示例 |
plugin.json 格式
{
"name": "skill-name",
"description": "描述",
"hooks": {
"PrePrompt": [{"type": "command", "command": "python hooks/pre_prompt.py"}],
"PostAgent": [...],
"PreSave": [...]
},
"mcpServers": {
"server-name": {
"command": "...",
"args": [...]
}
}
}
Skill 加载优先级
- Skill MCP 配置(最高)
- 默认 MCP 配置 (
mcp/mcp_settings.json) - 用户传入参数(覆盖所有)
安全措施
- ZipSlip 防护:检查解压路径
- 路径遍历防护:验证
bot_id和skill_name格式 - 大小限制:上传 50MB,解压后 500MB
- 压缩比限制:最大 100:1
设计原则
- 渐进式加载:按需加载,避免一次性读取所有
- 绝对路径优先:执行脚本必须使用绝对路径
- 通用化设计:脚本应参数化,解决一类问题
- 安全优先:完整的上传验证链
配置项
SKILLS_DIR=./skills # 官方 skills 目录
BACKEND_HOST=xxx # RAG API 主机
MASTERKEY=xxx # 认证密钥
索引
- 设计决策:
decisions/ - 变更历史:
changelog/ - 相关文档:
docs/