Skill: lmqiang-711/feishu-agent-provision (version 3.2.6)

# Feishu Agent Provision — 飞书群 AI Agent 一键创建工具 **EN:** Create Feishu group AI Agents in minutes — includes scheduled reports, long-term memory, group binding, clone, delete, and diagnose. One command to deploy. **ZH:** 3分钟为飞书群创建一个专属 AI Agent：自动定时报告、长期记忆上下文、群内智能应答。支持创建 / 克隆 / 删除 / 诊断，绑定群组自动路由，无需手动配置。 --- > **一句话**：用一条指令，为每个飞书群创建专属 AI Agent——自动定时汇报、长期记忆上下文、群内智能应答。 **这个 skill 能做什么？** - 🆕 **创建 Agent**：告诉它飞书群 ID + 职责，3 分钟自动完成 workspace 创建、配置注册、群组绑定、定时报告设置 - 🔁 **克隆 Agent**：复制现有 Agent 快速创建变体（换群、换身份、换时间） - 🗑️ **删除 Agent**：预览 + 确认 + trash 保护，安全删除 - 🔍 **诊断扫描**：一键发现所有 Agent 的路由配置问题 - 📊 **状态查询**：查看单个 Agent 的注册信息、Session 模式、备份状态 **使用示例：** ``` 用户："创建一个航天赛道 agent，绑定 space 群" → 自动完成：workspace 创建 → 注册配置 → 绑定群组 → 设置每日17:00报告 用户："克隆 math-tutor，改名 chemistry-tutor" → 自动完成：完整复制 → 新群绑定 → 身份定义调整 ``` > **⚠️ 安全声明（必读）** > 本 skill 需要以下系统权限，请在安装前确认： > - 在 `$HOME/.openclaw/` 下创建目录和文件 > - 修改 OpenClaw 网关配置（`gateway config.patch`） > - 创建和管理 cron 定时任务 > - 读写 agent workspace 下的所有文件 > - 注册 agent ID 并绑定飞书群 > > **安装行为：** `always: false`（仅在用户明确触发时执行，不自动运行） > **VirusTotal：** 已确认安全（0/67 引擎报恶意） ## 功能特性 - ✅ **3分钟创建** — 填写飞书群 ID + 职责，Agent 自动生成并绑定群组 - ✅ **定时自动报告** — 每日/每周自动向群内发送报告，支持自定义时间 - ✅ **长期记忆机制** — 启动时恢复上下文，结束时自动备份，记住项目进度 - ✅ **克隆与编辑** — 复制现有 Agent，快速创建变体，支持单行格式修改身份 - ✅ **一键诊断** — 自动扫描所有 Agent 的路由配置问题 - ✅ **安全删除** — 预览确认 + trash 保护 + 活跃 Session 警告 - ✅ **Session 长效性** — 短期/中期/长期三种模式按需选择 - ✅ **多账号兼容** — 自动处理 `accountId: "main"`，支持多飞书账号环境 ## 触发条件 ### 创建 Agent - "创建一个飞书群 agent" - "创建项目 agent" - "新建 agent 并绑定飞书群" - "用 FAP 创建一个 agent" ### 删除 Agent 用户说以下内容时激活（建议加前缀"用 skill"或"用 Feishu Agent Provision"）： - "删除 <ID> agent" - "删除飞书agent <ID>" - "删除项目agent" - "删除 <ID>" - "用 skill 删除 <ID> agent" - "用 FAP 删除 <ID> agent" - "用 Feishu Agent Provision 删除 <ID> agent" ### 克隆 Agent 用户说以下内容时激活（建议加前缀"用 skill"或"用 Feishu Agent Provision"）： - "克隆 <ID> agent" - "克隆 <ID>" - "克隆 <ID>，新 ID <新ID>" - "克隆 <ID>，绑定到 <群ID>" - "基于 <ID> 克隆" - "复制 <ID> agent" - "用 skill 克隆 <ID> agent" - "用 FAP 克隆 <ID>" - "用 Feishu Agent Provision 克隆 <ID>，新 ID <新ID>" ### 诊断扫描 用户说以下内容时激活（扫描所有已注册 Agent 的路由状态，一键发现配置问题）： - "诊断飞书 agent 路由" - "检查所有飞书 agent 状态" - "扫描飞书 agent 路由状态" - "飞书 agent 体检" - "用 FAP 诊断所有 agent" ### 状态查询 用户说以下内容时激活（查询单个 Agent 的详细状态）： - "查一下 <ID> 的状态" - "<ID> agent 怎么了" - "<ID> 状态查询" - "space 的状态"（直接报 ID） - "用 FAP 查一下 <ID>" --- ## 工作流程 ### 第一步：收集配置（询问用户） 依次询问以下问题，确认所有配置： **必填项：** 1. **Agent ID** — 英文ID，如 `ctyun`、`project-x`（字母+数字+短横线，不能有下划线或中文） 2. **Agent 中文名** — 对外显示名称，如"业务代理"、"航天赛道Agent" 3. **飞书群 ID** — 形如 `oc_xxx`（确认已加入机器人的群） 4. **Agent 职责描述** — 这个 agent 负责什么？（简要描述，50字以内） 5. **汇报时间：** - 每日汇报时间（如 `17:00`，默认 17:00） - 每周汇报时间（如 `周五 17:00`，默认周五 17:00） 6. **数据文件路径（可选）** — agent 需要读取的数据文件绝对路径，如 `/Users/xxx/.project/data.json` **可选配置：** 7. **Session 长效性** — 让用户选择： ``` 请选择 Agent 的 Session 模式： 1️⃣ 短期（isolated） - 每次任务新建 session，不保留历史 - 轻量、隔离，适合临时性 Agent 2️⃣ 中期（medium session） - 持久 session，保留上下文 - 定时清理旧数据（30天） - 适合有持续任务但不需要长期记忆的 Agent 3️⃣ 长期（long session）【推荐】 - 完整持久 session，累积所有历史 - 完整备份机制 - 适合需要记住项目进度、历史决策的 Agent 请回复数字 1、2 或 3 ``` **推荐选择 3（长期）**，可获得完整记忆累积能力。 如果用户提供了完整信息，跳过询问直接使用。 --- ### 第二步：创建 Workspace（操作前需用户确认） > ⚠️ **确认提示**：即将在 `$HOME/.openclaw/agents/<AGENT_ID>/` 下创建目录和文件。这是安全的，但如果该 Agent ID 已存在，现有配置可能被覆盖。 ```bash AGENT_ID="<id>" AGENT_DIR="$HOME/.openclaw/agents/$AGENT_ID/workspace" mkdir -p "$AGENT_DIR/memory" mkdir -p "$AGENT_DIR/memory/daily" ``` --- ### 第三步：写入 Workspace 文件 **SOUL.md** — Agent 身份定义，包含： - Agent 名称和职责 - 项目背景和关键数据 - 工作原则和优先级定义 - 汇报飞书群 ID - 语气风格 **USER.md** — 服务对象信息（从主 workspace 复制或新建） **AGENTS.md** — 标准 workspace 指引（从主 workspace 复制） **HEARTBEAT.md** — 空或仅有注释 **memory/backup.md** — 备份状态文件： ```markdown # <AGENT_ID> 备份状态 ## 基本信息 - 创建时间：<YYYY-MM-DD> - Session 长效性：<短期/中期/长期> - 核心配置：<职责描述> - 飞书群：<群ID> ## 当前状态 - 最后更新时间：<YYYY-MM-DD> - 当前进度：<简要描述> - 待处理事项：<列表> ## Session 模式 - sessionTarget: session:<AGENT_ID> - 备份策略：启动时读 backup.md，结束时写 backup.md ``` --- ### 第四步：注册 Agent 到 OpenClaw 配置（操作前需用户确认） > ⚠️ **确认提示**：即将修改 OpenClaw 全局配置，添加 Agent 注册信息和群组路由绑定。修改后需执行 `openclaw gateway restart` 使配置生效。 使用 gateway config.patch 注入： ```json { "agents": { "list": [{ "id": "<AGENT_ID>", "workspace": "<AGENT_DIR>", "identity": { "name": "<中文名>" } }] }, "bindings": [{ "type": "route", "agentId": "<AGENT_ID>", "match": { "channel": "feishu", "accountId": "main", "peer": { "kind": "group", "id": "<飞书群ID>" } } }] } ``` --- ### 第五步：验证路由 发送测试消息到对应飞书群，检查日志确认路由成功： ```bash openclaw logs --follow | grep "dispatching to agent" ``` 确认日志出现 `agent:<AGENT_ID>:feishu:group:<飞书群ID>` --- ### 第六步：设置定时报告（含备份机制）（操作前需用户确认） > ⚠️ **确认提示**：即将创建 cron 定时任务，该任务将持续运行并在指定时间向飞书群发送消息。如不再需要，可随时通过 `cron remove` 删除。 **Session 模式映射：** | 用户选择 | sessionTarget | |---------|--------------| | 短期 | `"isolated"` | | 中期 | `"session:<AGENT_ID>-medium"` | | 长期 | `"session:<AGENT_ID>"` | **完整 cron add 命令（必须包含 delivery）：** **日报 Cron（周一至周五）：** ```json { "name": "<AGENT_ID>-daily-report", "agentId": "<AGENT_ID>", "schedule": { "kind": "cron", "expr": "0 <HOUR> * * 1-5", "tz": "Asia/Shanghai" }, "payload": { "kind": "agentTurn", "message": "📋 <中文名>定时报告时间到！\n\n【记忆恢复】启动时先读 ~/.openclaw/agents/<AGENT_ID>/workspace/memory/backup.md，了解当前状态。\n\n【执行任务】<具体任务内容，如读取数据文件、生成报告等>\n\n【结束备份】任务完成后，把本次执行结果（时间、做了什么、下次待办）追加写入 ~/.openclaw/agents/<AGENT_ID>/workspace/memory/backup.md。\n\n格式：【YYYY-MM-DD HH:MM】完成：xxx；待办：xxx", "timeoutSeconds": 120 }, "sessionTarget": "session:<AGENT_ID>", "delivery": { "mode": "announce", "channel": "feishu", "to": "<飞书群ID>" } } ``` **周报 Cron（周五合并到日报，不单独发）：** ```json { "name": "<AGENT_ID>-weekly-report", "agentId": "<AGENT_ID>", "schedule": { "kind": "cron", "expr": "0 <HOUR> * * 5", "tz": "Asia/Shanghai" }, "payload": { "kind": "agentTurn", "message": "📋 <中文名>周报时间到！\n\n【记忆恢复】先读 ~/.openclaw/agents/<AGENT_ID>/workspace/memory/backup.md。\n\n【执行任务】本周总结 + 下周计划（注意：周五与日报合并发送，不要单独发一条）。\n\n【结束备份】把本次结果追加写入 ~/.openclaw/agents/<AGENT_ID>/workspace/memory/backup.md。", "timeoutSeconds": 120 }, "sessionTarget": "session:<AGENT_ID>", "delivery": { "mode": "announce", "channel": "feishu", "to": "<飞书群ID>" } } ``` **⚠️ 关键检查项（必做）：** - `agentId` 必须填写为 `"<AGENT_ID>"`（由该 agent 自己执行 cron，不是 main） - `delivery.channel` 必须为 `"feishu"` - `delivery.to` 必须填写**飞书群 ID**（形如 `oc_xxx`），不能为空 - `sessionTarget` 必须根据用户选择的 Session 模式填写 - 如果用户选择"短期"，改为 `"isolated"` 并去掉备份相关指令 > ⚠️ **常见错误**：漏填 `delivery.to` 会导致任务执行成功但消息无法发送到飞书群，报错 `Delivering to Feishu requires target <chatId|user:openId|chat:chatId>`。 --- ### 第七步：自动备份机制说明 **启动时恢复：** 每次 cron 触发后，先读取 `memory/backup.md`，恢复： - 当前项目进度 - 待处理事项 - 历史背景 **结束时备份：** 每次任务完成后，将结果追加写入 `memory/backup.md`： - 本次完成内容 - 下次待办 - 任何重要决策记录 **Session 长效性对比：** | 模式 | 记忆保留 | 适用场景 | |------|---------|---------| | 短期（isolated） | 无，每次新建 | 临时任务、一次性报告 | | 中期（medium） | 有，30天清理 | 有持续任务但不需要长期记忆 | | **长期（long）** | **有，永久累积** | **需要记住项目进度、历史决策** | --- ## 删除 Agent ### 触发词 - "删除 <ID> agent" - "删除飞书agent <ID>" - "删除项目agent" - "删除 <ID>" ### 脚本 调用 `scripts/delete_agent.py` 执行删除流程。 ### 完整流程 **推荐使用 `--no-restart` 模式**（避免 Gateway 重启导致输出丢失），最后手动重启。 **Step 1：检查 Agent 是否存在** - 读取 `openclaw.json` 的 `agents.list` - 不存在 + 无残留 workspace → 报错并列出可用 Agent - 不存在 + 有残留 workspace → ⚠️ 进入残留清理模式（无需「确认删除」） **Step 2：检查活跃 Session（有则警告）** - 没有活跃 session → 继续 - 有活跃 session → 显示警告，三个选项： 1. 在飞书群发「停止服务」指令后再试 2. 「强制删除」继续（显示额外警告） 3. 「取消」中止 **Step 3：预览清理清单** ``` ⚠️ 即将删除 Agent「<ID>」： 【将清理的组件】 ├── 🗂️ Workspace: ~/.openclaw/agents/<ID>/workspace/ │ ├── SOUL.md / USER.md / AGENTS.md / HEARTBEAT.md │ └── memory/ ├── ⏰ Cron 定时任务（2个） │ ├── <ID>-daily-report │ └── <ID>-weekly-report ├── 🔗 飞书群绑定: <群ID> │ └── 群消息将退回主 Agent └── 📋 Agent 注册: <ID>（从 agents.list 移除） ⚠️ 此操作不可逆！ ``` **Step 4：安全确认** 用户必须输入「确认删除」才能继续（非简单 Y），否则取消。 **Step 5：执行清理** 1. 删除 Cron 任务 2. 移除 bindings 配置 3. 从 agents.list 移除条目 4. 将 workspace 目录移至 `~/.Trash/`（而非直接 rm） 5. **标准模式**：重启 Gateway → ⏸️ 输出丢失 **--no-restart 模式**：不重启，询问： - [1] 立即重启（推荐） - [2] 稍后手动重启 6. 验证结果 **Step 6：完成后提示** ``` ✅ 删除步骤完成！Agent「<ID>」已从系统移除。 📌 后续注意： • 飞书群 <群ID> 的消息现在由主 Agent 响应 • Workspace 备份可在 trash 中找到 • config 已修改，重启后生效 • 请之后手动执行：openclaw gateway restart ``` ### 关键设计（已确认） - **确认词：「确认删除」**（不加 ID，简化） - **有活跃 session → 提供「强制删除」选项**（显示额外警告） - **残留清理模式**：Agent 未注册但 workspace 存在时，自动进入清理模式 - **Workspace 使用 `trash`** 而非 `rm` - **推荐 `--no-restart`**，避免输出丢失 - **重启后提示"现在可以继续对话"** --- ## 克隆 Agent ### 触发词 - "克隆 <ID> agent" - "克隆 <ID>" - "基于 <ID> 克隆" - "复制 <ID> agent" ### 用法 ```bash python3 scripts/clone_agent.py <SOURCE_AGENT_ID> ``` ### 核心原则 - **先展示，后决策**：先展示源 Agent 完整摘要，再让用户填写清单 - **每个问题一行**：用户逐行填写，互不干扰 - **修改内容单行提交**：SOUL/USER 按格式填写关键词，AI 自动生成完整文件 ### 克隆流程（共 6 步） **Step 1：检查源 Agent（自动）** 检查 agents.list，验证源 Agent 是否存在；读取 workspace 所有文件；获取原 cron 任务、原绑定群。 **Step 2：展示源 Agent 摘要** ``` 📋 克隆来源：math-tutor 【基本信息】 • 中文名：中考数学辅导 • 原飞书群：oc_e83c4768... 【Cron 定时任务】 • math-tutor-daily | 0 21 * * 1-5 【SOUL.md 核心内容】 # 中考数学辅导 ## Teaching Philosophy ### 苏格拉底教学法 1. 先问认知... ... 【USER.md 核心内容】 • 服务对象：中考学生及其家长 • 科目：数学 ``` **Step 3：用户填写清单** ``` 【清单格式】 1. 新 Agent ID：chemistry-tutor 2. 新飞书群：oc_81ba8ae3e0ec35ed2318839844a37940 3. Cron策略：1 （1=克隆原 Cron；2=不克隆；3=克隆并改为 HH:MM） 4. SOUL.md：1 （1=克隆仅替换ID；2=留空自动生成minimal；3=修改内容） 5. USER.md：1 （1=克隆仅替换ID；2=留空自动生成minimal；3=修改内容） 6. AGENTS.md：1（1=克隆；2=跳过） 7. HEARTBEAT.md：1（1=克隆；2=跳过） 如选 4 或 5 为「3 修改内容」，或 3 为「3 HH:MM」， 下一条消息请按以下格式填写： SOUL修改：中文名=xxx | 科目=xxx | 职责=xxx USER修改：服务对象=xxx | 科目=xxx Cron改为：21:30 ``` **清单各选项说明：** | 选项 | SOUL.md | USER.md | |------|---------|---------| | `1` 克隆仅替换ID | 完整复制，只替换原 Agent ID | 完整复制，只替换原 Agent ID | | `2` 留空自动生成minimal | 自动生成最小可用文件（带空字段占位） | 自动生成最小可用文件 | | `3` 修改内容 | 用户按格式单行填写，AI 生成完整文件 | 用户按格式单行填写，AI 生成完整文件 | **修改内容填写格式：** ``` SOUL修改：中文名=中考化学辅导 | 科目=化学 | 职责=苏格拉底式化学辅导 | 角色=AI化学辅导老师 USER修改：服务对象=中考学生 | 科目=化学 ``` **Step 4：生成预览报告** 展示所有配置结果，包括 SOUL.md / USER.md 内容预览。 **Step 5：确认克隆 [1] / 取消 [2]** **Step 6：执行 + 重启** ### 关键设计 - **同群绑定：禁止**，直接报错退出 - **Cron 可修改时间**：选 `3 HH:MM` 直接指定新时间 - **memory/backup.md：新建空白**（不复制历史） - **memory/daily/：不复制**（历史数据不继承） - **HEARTBEAT.md：默认克隆** ## 诊断扫描 ### 功能说明 一键扫描所有已注册 Agent 的飞书路由配置，发现以下问题： - Binding 缺 `accountId`（多账号环境下导致路由失败） - `groupAllowFrom` 位置错误（写在顶层而非 `accounts.main`） - 无 Binding 的已注册 Agent ### 触发词 见上文「触发条件 → 诊断扫描」 ### 扫描流程 **Step 1：收集数据** - 读取 `openclaw.json` 的 `agents.list` - 读取 `bindings` 数组 - 读取 `channels.feishu.groupAllowFrom` 位置 - 读取 cron 任务列表（确认哪些 Agent 有定时任务） **Step 2：逐 Agent 分析** 对每个 Agent（除 main、ctyun 外）检查： 1. 有无 binding？→ 无 → 标记「未绑定群」 2. binding 是 group 类型？→ 是 3. binding 是否有 `accountId`？→ 无 → 标记「需修复（缺 accountId）」 4. binding 的 `accountId` 是否为 `main`？→ 否 → 标记「需修复（accountId 不匹配）」 **Step 3：检查 groupAllowFrom 位置** - 顶层 `channels.feishu.groupAllowFrom` → ✅ 正常 - `channels.feishu.accounts.main.groupAllowFrom` → ✅ 正常 - 其他情况 → ❌ 需迁移 **Step 4：生成诊断报告** ``` 📋 Agent 路由诊断报告 生成时间：<YYYY-MM-DD HH:MM> 【绑定状态】 | Agent | 群组 | accountId | 状态 | 备注 | |-------|------|-----------|------|------| | space | oc_d225... | ❌ 缺失 | 需修复 | 多账号环境下无法匹配 | | knowledge-base | oc_ffd... | ✅ 有 | 正常 | - | | ... | ... | ... | ... | ... | 【groupAllowFrom 位置】 | 位置 | 状态 | |------|------| | channels.feishu.groupAllowFrom（顶层） | ❌ 错误（gateway 不会从此读取）| | channels.feishu.accounts.main.groupAllowFrom | ✅ 正确 | 【需要修复的 Agent】 - space（oc_d225...）：binding 缺 accountId - llm-study（oc_636...）：binding 缺 accountId - chemistry-tutor（oc_81ba...）：binding 缺 accountId 【修复方案】 已生成修复命令，确认后自动执行。 ``` **Step 5：确认修复** ``` ⚠️ 发现 <N> 个 Agent 需要修复，<M> 处配置问题。 修复内容： 1. 为以下 Agent 的 binding 补全 accountId：space, llm-study, chemistry-tutor, ppt-beautifier 2. 将 groupAllowFrom 从顶层迁移至 accounts.main 是否执行？[1] 确认修复 / [2] 取消 ``` 选择 [1]：自动执行修复 + 重启 Gateway。 选择 [2]：展示修复命令，用户自行执行。 ### 输出修复命令（如用户选择不自动修复） ```bash # 1. 修复 binding（示例） # 将以下 binding 配置补全 accountId # 原始：{"agentId": "space", "match": {"channel": "feishu", "peer": {"kind": "group", "id": "oc_d225..."}}} # 修改为：{"agentId": "space", "match": {"channel": "feishu", "accountId": "main", "peer": {"kind": "group", "id": "oc_d225..."}}} # 2. 迁移 groupAllowFrom # 将 channels.feishu.groupAllowFrom 的值移动到 channels.feishu.accounts.main.groupAllowFrom # 并删除顶层 channels.feishu.groupAllowFrom # 执行后必须：openclaw gateway restart ``` --- ## 状态查询 ### 功能说明 查询单个 Agent 的详细运行状态，包括：注册信息、路由状态、Session 模式、备份机制、Workspace 完整性等。 ### 触发词 见上文「触发条件 → 状态查询」 ### 查询流程 **Step 1：确认 Agent ID** - 用户提供了 ID → 直接使用 - 用户只说"状态" → 要求提供具体 Agent ID - Agent 不存在 → 报错并列出所有可用 Agent **Step 2：收集数据** 读取并汇总以下信息： | 数据源 | 获取内容 | |--------|--------| | `agents.list` | 注册时间、中文名、workspace 路径 | | `bindings` | 绑定群 ID、accountId 状态 | | cron 任务 | 日报/周报 cron 是否注册、下次执行时间 | | `memory/backup.md` | 最后备份时间、备份状态 | | workspace 文件列表 | SOUL.md、USER.md 等是否存在 | | session 文件 | 最后活跃时间 | **Step 3：判断 Session 类型** 从 cron job 的 `sessionTarget` 推断： | sessionTarget | Session 类型 | |--------------|-------------| | `isolated` | 短期 | | `session:<ID>-medium` | 中期 | | `session:<ID>` | 长期 | | 无 cron | 短期（isolated）| **Step 4：生成状态报告** ``` 📋 Agent「<ID>」状态报告 查询时间：<YYYY-MM-DD HH:MM> 【基本信息】 • Agent ID：<ID> • 中文名：<中文名> • 注册时间：<YYYY-MM-DD HH:MM>（从 agents.list 读取） • Workspace：~/.openclaw/agents/<ID>/workspace/ 【路由状态】 • 绑定群：<oc_xxx> • accountId：✅ 有（main）/ ❌ 缺失 • Binding 状态：✅ 正常 / ❌ 需修复 【Session 模式】 • Session 类型：短期 / 中期 / 长期 • Session 标识：session:<ID> / isolated • 最后活跃时间：<YYYY-MM-DD HH:MM>（从 session 文件读取） 【定时任务】 • 日报 Cron：✅ / ❌ - 名称：<ID>-daily-report - Schedule：0 <HOUR> * * 1-5（周一至周五） - 下次执行：<YYYY-MM-DD HH:MM> • 周报 Cron：✅ / ❌ - 名称：<ID>-weekly-report - Schedule：0 <HOUR> * * 5（周五） 【备份机制】 • 备份文件：memory/backup.md • 备份位置：~/.openclaw/agents/<ID>/workspace/memory/backup.md • 最后备份时间：<YYYY-MM-DD HH:MM>（文件 mtime） • 备份状态： - ✅ 正常（48 小时内有更新） - ⚠️ 过久（超过 48 小时未更新） - ❌ 无备份文件 • Cron Payload 含备份指令：✅ / ❌ 【Workspace 文件完整性】 • SOUL.md：✅ / ❌ • USER.md：✅ / ❌ • AGENTS.md：✅ / ❌ • HEARTBEAT.md：✅ / ❌ • memory/backup.md：✅（<YYYY-MM-DD HH:MM>）/ ❌ • memory/daily/：✅（<N> 个文件）/ ❌（空目录） 【最近活动】 • 最后处理消息：<YYYY-MM-DD HH:MM>（从 session 文件读取） • Agent 当前状态：🟢 在线 / 🟡 空闲 / ⚠️ 异常 ``` **Step 5：异常项高亮** 如有异常项，在报告底部列出： ``` ⚠️ 发现以下问题： 1. accountId 缺失（binding 需修复） 2. 备份文件超过 48 小时未更新 3. Workspace SOUL.md 文件缺失 建议运行「诊断飞书 agent 路由」获取完整修复方案。 ``` --- ## 注意事项 - 始终使用绝对路径，勿用 `~`（agent 运行时不会展开） - SOUL.md 放身份和行为指引，敏感业务数据（KPI/合作伙伴/优先名单等）写入独立数据文件，不要直接写在 SOUL.md 里 - **定时报告 Cron 会自动发消息到飞书群**（delivery.mode: announce），建议在配置 message 时加入「发送前确认」步骤——整理完内容后先发飞书 DM 给你确认，收到回复后再发群 - 飞书群必须已在 `channels.feishu.groupAllowFrom` 中配置 - Session 长效性建议选择 **长期（3）**，可获得最完整的记忆累积 - 创建完成后在飞书群实测：发送一条消息，确认由对应 agent 响应而非主 agent - 删除前建议在飞书群发送「停止服务」指令，避免任务异常中断 - 克隆时**禁止同群绑定**，新 Agent 必须绑定不同飞书群 --- ## 故障排查（Troubleshooting） ### 问题1：Agent 未响应群消息 症状：在飞书群发送消息，没有收到回复。 排查步骤： - 检查 Gateway 是否运行：`openclaw gateway status` - 检查飞书群是否在白名单：`openclaw config get channels.feishu.groupAllowFrom` - 确认群 ID 在列表中。 - 检查日志路由：`openclaw logs --limit 50 | grep ""` - 查看是否有消息到达和 dispatch 记录。 - 检查 Agent 是否注册成功：`openclaw config get agents.list` - 确认新 Agent ID 在列表中。 ### 问题2：消息回退到主 Agent（多账号环境） 症状：群消息被主 Agent 响应，而不是专属 Agent。 **排查步骤：** 1. `openclaw config get bindings` 查看该 Agent 的 binding 配置 2. 检查 binding 是否有 `accountId` 字段： - **有 `accountId` →** 检查值是否为 `main` - **无 `accountId` →** ⚠️ 多账号环境下会导致路由失败（见下方修复） 3. `openclaw config get channels.feishu.groupAllowFrom` 确认群 ID 在白名单中 4. `openclaw gateway restart` 重启 Gateway 5. 在飞书群发一条测试消息，用 `openclaw logs | grep dispatching` 确认路由到正确的 Agent **修复（多账号环境）：** 如果 binding 缺 `accountId`，需要补全： ```json // 改前 {"agentId": "space", "match": {"channel": "feishu", "peer": {"kind": "group", "id": "oc_d225..."}}} // 改后 {"agentId": "space", "match": {"channel": "feishu", "accountId": "main", "peer": {"kind": "group", "id": "oc_d225..."}}} ``` 使用 `gateway config.patch` 修复后重启 Gateway。 **一键修复：** 运行「诊断飞书 agent 路由」触发修复流程，可自动完成所有修复。 ### 问题3：Session 没有保留历史 症状：Agent 每次都不记得之前的事。 原因：选择了"短期（isolated）"模式。 解决： - 修改 cron 任务的 sessionTarget 为 `"session:<AGENT_ID>"` - 重启 Gateway 使配置生效 ### 问题4：备份文件没有更新 症状：memory/backup.md 内容一直是旧的。 排查： - 检查 cron 任务的 payload 是否包含"结束备份"指令 - 检查 Agent 对应的 session 是否正常运行 - 检查备份文件的写入路径是否正确（绝对路径） ### 问题5：克隆时报错「禁止同群绑定」 症状：克隆时指定了与原 Agent 相同的飞书群。 原因：两个 Agent 绑定同群会导致消息混乱，设计上禁止。 解决： - 为新 Agent 绑定不同的飞书群 - 或选择「不绑定群」，之后手动配置 --- ## 版本历史 - **v3.2.6**（2026-05-28）安全修复——SKILL.md：移除「将 KPI/合作伙伴写入 SOUL.md」的写法指引；delete_agent.py：trash 移动失败时显式询问用户，不再静默永久删除；cron-template.md：日报/周报 message 新增「发送前确认」步骤；SKILL.md 注意事项：新增定时报告自动发群的确认提示；补全 clawhub-publish 包（references/ + create_agent.py + clone_agent.py） - **v3.2.4**：delete_agent.py 安全修复——移除 --yes 跳过确认参数；新增 agent_id 格式严格校验（小写字母/数字/短横线）；trash_workspace 增加 resolve() 路径安全校验，防止路径穿越（2026-05-12） - **v3.2.2**：优化技能描述和搜索关键词，提升 ClawHub 搜索排名和用户吸引力（2026-05-12） - **v3.2.1**：创建 Agent 时自动生成 agent/ 目录（models.json + auth-profiles.json）；cron 模板加入 agentId 字段；cron 由被创建 agent 自己执行，不再由 main 代劳（2026-05-12） - **v3.2.0**：克隆流程重构（2026-05-12）—— 精简为 6 步清单式流程；支持 SOUL/USER 单行格式修改；Cron 可直接指定新时间；AGENTS/HEARTBEAT 可跳过；最多 7 次独立 input - **v3.1.0**：修复多飞书账号环境下群组 binding 无法匹配问题（binding 模板补全 `accountId`）；新增诊断扫描功能；新增状态查询功能；更新故障排查章节 - **v3.1.1**：新增中英双语摘要描述，优化页面展示效果（2026-05-11） - **v3.0.2**：更新技能简介，改为简洁直接风格（2026-05-08） - **v3.0.1**：克隆流程优化（2026-05-05） - 删除 `--quiet` 静默模式，统一为纯交互模式 - Step 2.5 选 2 时新增 Step 3.5（仅飞书群+Cron，不编辑 SOUL/USER） - 新增飞书群冲突检查（不能与原 Agent 同群，不能绑定其他 Agent） - 删除 `--no-restart` 参数，执行后始终询问重启 [1]立即/[2]稍后 - 确认改为 [1]确认/[2]取消（原来 [3]） - **v3.0**：新增删除 Agent 功能（预览 + 安全确认 + trash 保护）；新增编辑克隆 Agent 功能（字段级编辑 + 同群绑定禁止）；更新触发词和流程 - **v2.2**：修复 cron add 缺少 delivery.to 的 Bug；补充完整 JSON 示例；新增关键检查项和常见错误说明 - **v2.1**：顶部新增完整安全声明；操作前增加用户确认提示；移除重复警告段落；确保元数据与实际行为一致 - **v2.0**：新增 Session 长效性选择（短期/中期/长期）；新增自动备份机制（启动恢复+结束备份）；优化备份文件格式；新增安全说明消除 VirusTotal 误报 - **v1.0**：初始版本，基础创建流程


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal:  | SkillSpector: suspicious (CRITICAL)