
目录1.开启新会话(session)时Agent会扫描发现Skills2.用户输入LLM决策Skill3 LLM返回Tool callLLM——Agent4.Agent执行tool call返回结果Agent——LLM5.LLM按照Skill指令执行LLM——Agent6.Agent执行Shell命令拿到结果Agent——LLM7.完整时序图SKILL.md中frontmatter如下--- name: citadel description: wiki官方Skillwiki km/wiki/xxx 自动化操作工具直接调用线上接口响应速度更快。 支持读取文档信息和内容、获取模板内容、读取文档的目录、查询文档统计信息、总结文档内容、获取文档元信息父文档ID、标题、创建者、所有者等、查询当前文档的子文档列表 创建新的wiki文档、改文档插入图片/附件/视频/音频到文档、删文档、复制wiki文档、从模板创建wiki文档、移动文档到其他文档下或者指定空间下 支持搜索wiki文档并支持查询用户的最近编辑/浏览、收到的文档、被的文档、评论过的文档、全文评论和划词评论内容、添加划词评论、回复划词评论以及批量盘点权限、批量授权、批量修改/移除权限、权限继承、清空权限、链接分享权限和空间管理员操作以及由 AI 生成 draw.io 流程图并插入文档、获取知识广场文章列表推荐/最新/关注 metadata: skillhub.creator: skillhub.updater: skillhub.version: V36 skillhub.source: Skillhub skillhub.skill_id: 3367 skillhub.high_sensitive: true ---用一句话总结Skill 动态注入的 system prompt 片段 预定义的 tool schema 多轮 tool calling 循环。1.开启新会话(session)时Agent会扫描发现Skills全局 skill ~/.openclaw/skills/*/SKILL.md 内置 skill /app/skills/*/SKILL.md 工作区 skill ~/.openclaw/workspace-xxx/skills/*/SKILL.md个人级别跨所有项目可用~/.catpaw/skills/ 项目级别仅当前工作区可用{workspace}/.catpaw/skills/收集所有skills的name description注入到system prompt格式大致available_skills skill namecitadel/name descriptionwiki官方Skill支持读取文档信息.../description location~/.openclaw/skills/citadel/SKILL.md/location /skill skill namebi-query-sql/name description执行 SQL 或用自然语言描述查询需求.../description location~/.openclaw/skills/query-sql/SKILL.md/location /skill ... /available_skills2.用户输入LLM决策Skill2.1 Agent构建LLM请求{ model: claude-xxx, messages: [ { role: system, content: You are 交易领域数字QA...\n\navailable_skills\nskill\n namecitadel/name\n descriptionwiki官方Skill支持读取文档信息和内容.../description\n location~/.openclaw/skills/citadel/SKILL.md/location\n/skill\n/available_skills\n\nWhen a skill is relevant, read SKILL.md FIRST... }, { role: user, content: 帮我读一下这个wiki文档https://wiki.com/collabpage/1234567890 } ], tools: [ { name: read, description: 读取本地文件内容... }, { name: exec, description: 执行 shell 命令... } ] }system prompt中有Skill描述摘要和一段指令When a skill is relevant, read SKILL.md FIRST...2.2 LLM 推理结果识别到 wiki 链接匹配citadelskill决定先读 SKILL.md3 LLM返回Tool callLLM——Agent{ tool_calls: [{ name: read, arguments: { path: ~/.openclaw/skills/citadel/SKILL.md } }] }4.Agent执行tool call返回结果Agent——LLM在本地执行 Read(/Users/123456/.../citadel/SKILL.md)拿到文件内容{ messages: [ { role: system, content: 同上 }, { role: user, content: 帮我读一下这个wiki文档https://wiki.com/collabpage/1234567890 }, { role: assistant, content: null, tool_calls: [{ name: read, arguments: { path: ~/.openclaw/skills/citadel/SKILL.md } }] }, { role: tool, tool_call_id: xxx, content: 完整SKILL.md内容 } ], tools:[同上] }5.LLM按照Skill指令执行LLM——AgentLLM读完SKILL.md之后知道了要用oa-skills citadelCLI需要从 URL 提取contentId 1234567890调用命令oa-skills citadel get-page --contentId 1234567890{ tool_calls: [{ name: exec, arguments: { command: oa-skills citadel get-page --contentId 1234567890 } }] }6.Agent执行Shell命令拿到结果Agent——LLM执行指令oa-skills citadel get-page │ ├── 调用 wiki.com API │ GET /api/collab/page/content?contentId1234567890 │ Authorization: SSO token │ └── 返回页面内容 JSON{ messages: [ ...前面所有轮次..., { role: assistant, tool_calls: [{ name: exec, arguments: { command: oa-skills citadel get-page --contentId 1234567890 } }] }, { role: tool, content: {\n \title\: \交易流程测试规范\,\n \content\: \## 一、概述\\n本文档描述...\,\n \author\: \zhangsan\,\n \updateTime\: \2026-05-01\\n} } ] }7.完整时序图用户 Agent LLM CLI/工具 wikiAPI │ │ │ │ │ │─ 发消息 ───▶│ │ │ │ │ │─ 构造请求 ────▶│ │ │ │ │ │─ tool_call ──────▶│ │ │ │ │ read SKILL.md │ │ │ │◀─ 返回结果 ────│◀─ 文件内容 ───────│ │ │ │─ 追加tool结果 ▶│ │ │ │ │ │─ tool_call ──────▶│ │ │ │ │ exec citadel │─ HTTP请求 ───▶│ │ │ │ │◀─ 页面内容 ───│ │ │◀─ 返回结果 ────│◀─ CLI输出 ────────│ │ │ │─ 追加tool结果 ▶│ │ │ │ │ │─ 生成回复 ───────▶│ │ │◀─ 最终回复 ─│◀───────────────│ │ │概念角色Agent消息的组装者和调度者负责把每轮工具结果追加到 messages 再发给 LLMLLM纯推理只看 messages决定下一步调用什么工具SKILL.md给 LLM 看的说明书告诉它用什么命令、什么参数CLI (oa-skills)真正干活的执行层封装了鉴权、API 调用等复杂逻辑ToolLLM 和执行层之间的接口协议函数调用格式LLM 本身不直接访问wiki它只会说要调用哪个工具Agent 负责真正执行工具并把结果反馈回去形成多轮循环直到任务完成。