$npx -y skills add cyijun/agent-smith --skill agent-smithUse when a complex task needs parallel decomposition into independent subtasks, when multiple agents must work simultaneously without conflicts, or when recursive task delegation is required
| 1 | # Agent Smith |
| 2 | |
| 3 | 实现递归自相似多智能体系统的 Skill。每个智能体(史密斯)拥有独立的工作空间,通过目录隔离协议达成无冲突的并行任务分解与执行。 |
| 4 | |
| 5 | ## Overview |
| 6 | |
| 7 | Agent Smith 是一个递归自相似的多智能体协作框架。每个智能体(史密斯)遵循相同的协议,在自己的工作空间内独立运行,通过父子间的 inbox/outbox 通信完成复杂任务的分解与汇总。 |
| 8 | |
| 9 | ## When to Use |
| 10 | |
| 11 | 在以下场景触发本 Skill: |
| 12 | |
| 13 | - 用户请求"创建多智能体系统"或"设置 Agent Smith" |
| 14 | - 任务需要分解为多个并行子任务 |
| 15 | - 需要协调多个 Agent 同时工作 |
| 16 | - 复杂任务需要递归分解处理 |
| 17 | - 要求无冲突的并行执行环境 |
| 18 | |
| 19 | ## When NOT to Use |
| 20 | |
| 21 | 在以下场景请勿触发本 Skill: |
| 22 | |
| 23 | - 单个 Agent 可在 15 分钟内独立完成的任务 |
| 24 | - 子任务之间存在严格线性依赖(每一步必须等待上一步完成) |
| 25 | - 仅需单 Agent 即可完成,并行执行无收益 |
| 26 | - 任务已充分细化,无需进一步分解 |
| 27 | |
| 28 | ## Hard Constraints (Quick Reference) |
| 29 | |
| 30 | 以下限制由史密斯协议强制执行。修改这些值需要同时更新 `SKILL.md` 和 `smith.md`。 |
| 31 | |
| 32 | | 限制 | 值 | |
| 33 | |------|-----| |
| 34 | | 最大递归深度 | 3(Level 0 根节点 → 最大 Level 3) | |
| 35 | | 每层最大子代理数 | 5 | |
| 36 | | Level ≥ 3 行为 | 禁止分解,必须直接执行 | |
| 37 | |
| 38 | ## 核心概念 |
| 39 | |
| 40 | **史密斯 (Smith)** 是自相似的智能体单元,每个史密斯拥有唯一 ID 和层级,能够执行任务、分解任务、创建子史密斯并汇总结果。所有史密斯遵循相同的协议,形成递归结构。 |
| 41 | |
| 42 | 所有史密斯均受上述 [Hard Constraints](#hard-constraints-quick-reference) 约束。 |
| 43 | |
| 44 | **无冲突协议** 通过严格的目录隔离实现并行安全:每个史密斯只能写入自己的 `private/` 和 `outbox/`,只能读取自己 `inbox/` 中父史密斯分配的任务。父史密斯拥有创建子目录和写入子史密斯 inbox 的专属权限。 |
| 45 | |
| 46 | ## 目录结构 |
| 47 | |
| 48 | ``` |
| 49 | .agent-smith/ |
| 50 | ├── smiths/ |
| 51 | │ ├── smith-root/ # 根史密斯 |
| 52 | │ │ ├── smith.md # 史密斯定义(只读) |
| 53 | │ │ ├── inbox/ # 任务队列(外部/父写入,自己读取) |
| 54 | │ │ ├── private/ # 私有工作区 |
| 55 | │ │ ├── outbox/ # 结果输出 |
| 56 | │ │ │ └── result.md |
| 57 | │ │ └── children/ # 子史密斯目录 |
| 58 | │ │ └── smith-001/ |
| 59 | │ │ ├── smith.md |
| 60 | │ │ ├── inbox/ # 父写入,子读取 |
| 61 | │ │ ├── private/ |
| 62 | │ │ ├── outbox/ |
| 63 | │ │ └── children/ |
| 64 | └── results/ |
| 65 | └── final.md # 最终结果 |
| 66 | ``` |
| 67 | |
| 68 | ## 初始化矩阵 |
| 69 | |
| 70 | 当用户请求初始化 Agent Smith 时,执行以下步骤: |
| 71 | |
| 72 | **1. 创建目录结构** |
| 73 | |
| 74 | 创建根史密斯环境: |
| 75 | - `.agent-smith/smiths/smith-root/inbox/` —— 任务队列 |
| 76 | - `.agent-smith/smiths/smith-root/private/` —— 私有工作区 |
| 77 | - `.agent-smith/smiths/smith-root/outbox/` —— 结果输出 |
| 78 | - `.agent-smith/smiths/smith-root/children/` —— 子史密斯容器 |
| 79 | - `.agent-smith/results/` —— 最终结果 |
| 80 | |
| 81 | **2. 读取 `smith.md` 模板** |
| 82 | |
| 83 | 从 `smith.md` 读取史密斯定义模板。 |
| 84 | |
| 85 | **3. 替换占位符** |
| 86 | |
| 87 | 替换模板中的变量: |
| 88 | - `{SMITH_ID}` → `smith-root` |
| 89 | - `{PARENT_ID}` → `none` |
| 90 | - `{LEVEL}` → `0` |
| 91 | |
| 92 | **4. 写入根史密斯定义** |
| 93 | |
| 94 | 将替换后的内容写入 `.agent-smith/smiths/smith-root/smith.md`。 |
| 95 | |
| 96 | **5. 创建任务文件** |
| 97 | |
| 98 | 基于 `templates/task.md.template` 创建根任务文件 `.agent-smith/smiths/smith-root/inbox/task-root.md`。 |
| 99 | |
| 100 | 替换模板占位符: |
| 101 | - `{TITLE}` → 任务标题 |
| 102 | - `{TASK_ID}` → `root` |
| 103 | - `{SMITH_ID}` → `smith-root` |
| 104 | - `{PARENT_TASK_ID}` → `none` |
| 105 | - `{TIMESTAMP}` → 当前时间 |
| 106 | - `{LEVEL}` → `0` |
| 107 | - `{DESCRIPTION}` → 任务描述 |
| 108 | - `{CONTEXT}` → 相关上下文 |
| 109 | - `{EXPECTED_OUTPUT}` → 期望输出 |
| 110 | |
| 111 | **6. 生成启动指南** |
| 112 | |
| 113 | 在 `.agent-smith/smiths/smith-root/private/START_HERE.md` 生成启动指南,包含: |
| 114 | - 当前身份确认 |
| 115 | - 任务文件位置 |
| 116 | - 执行流程说明 |
| 117 | - 输出要求 |
| 118 | |
| 119 | ## 创建子史密斯 |
| 120 | |
| 121 | 当父史密斯需要创建子史密斯时,执行以下步骤: |
| 122 | |
| 123 | **前置检查(强制)** |
| 124 | |
| 125 | 创建任何子史密斯之前,必须确认: |
| 126 | - [ ] 当前层级 < 3(若层级 ≥ 3,停止——直接执行) |
| 127 | - [ ] 现有子代理数量 < 5(若已达 5 个,停止——直接执行或重新分解) |
| 128 | |
| 129 | **1. 确定新史密斯 ID** |
| 130 | |
| 131 | 按序号递增生成 ID,如 `smith-001`、`smith-002`。 |
| 132 | |
| 133 | **2. 创建子目录** |
| 134 | |
| 135 | 在父史密斯的 `children/` 下创建 `{smith-id}/` 目录结构: |
| 136 | - `inbox/` —— 父写入任务,子读取 |
| 137 | - `private/` —— 私有工作区 |
| 138 | - `outbox/` —— 结果输出 |
| 139 | - `children/` —— 子史密斯容器 |
| 140 | |
| 141 | **3. 读取模板并替换** |
| 142 | |
| 143 | 读取 `smith.md` 模板,替换占位符: |
| 144 | - `{SMITH_ID}` → 新 ID(如 `smith-001`) |
| 145 | - `{PARENT_ID}` → 当前史密斯 ID |
| 146 | - `{LEVEL}` → 当前层级 + 1 |
| 147 | |
| 148 | **4. 写入子史密斯定义** |
| 149 | |
| 150 | 将替换后的内容写入子目录的 `smith.md`。 |
| 151 | |
| 152 | **5. 生成子任务文件** |
| 153 | |
| 154 | 基于 `templates/task.md.template` 在子史密斯的 `inbox/` 下创建任务文件 `task-{SMITH_ID}.md`。 |
| 155 | |
| 156 | 替换模板占位符: |
| 157 | - `{TITLE}` → 子任务标题 |
| 158 | - `{TASK_ID}` → 子史密斯 ID(如 `smith-001`) |
| 159 | - `{SMITH_ID}` → 子史密斯 ID |
| 160 | - `{PARENT_TASK_ID}` → 父任务 ID |
| 161 | - `{TIMESTAMP}` → 当前时间 |
| 162 | - `{LEVEL}` → 当前层级 + 1 |
| 163 | - `{DESCRIPTION}` → 子任务描述 |
| 164 | - `{CONTEXT}` → 父上下文 |
| 165 | - `{EXPECTED_OUTPUT}` → 期望输出 |
| 166 | |
| 167 | 确保任务文件只写入该子史密斯的 `inbox/`,不得写入任何其他史密斯的目录。 |
| 168 | |
| 169 | **6. 生成子史密斯启动指南** |
| 170 | |
| 171 | 在子史密斯的 `private/START_HERE.md` 生成启动指南,包含: |
| 172 | - 子史密斯身份确认 |
| 173 | - 父史密斯引用 |
| 174 | - 任务文件位置 |
| 175 | - 执行约束说明 |
| 176 | |
| 177 | ## 执行流程 |
| 178 | |
| 179 | 1. 读取 `inbox/` 中的任务 |
| 180 | 2. 分析任务复杂度 |
| 181 | 3. 判断:能否直接完成? |
| 182 | - **是** → 执行任务 → 将结果写入 `outbox/result.md` → 结束 |
| 183 | - **否** → 对照 [Hard Constraints](#hard-constraints-quick-reference) 检查当前层级 |
| 184 | - 若层级 ≥ 3:**必须直接执行**(禁止分解) |
| 185 | - 若层级 < 3:设计子任务(最多 5 个)→ 创建子史密斯目录 → 在子史密斯 `inbox/` 中创建任务文件 → 等待子结果 → 汇总 → 写入 `outbox/result.md` → 结束 |
| 186 | |
| 187 | ## 最终结果汇总 |
| 188 | |
| 189 | 根史密斯(Level 0)在完成自身 `outbox/result.md` 后,还有一项额外职责: |
| 190 | |
| 191 | - 将根史密斯的 `outbox/result.md` 复制或汇总到 `.agent-smith/results/final.md` |
| 192 | |
| 193 | 该文件作为用户获取多智能体会话完整输出的统一入口。 |
| 194 | |
| 195 | ## 写约束协议 |
| 196 | |
| 197 | **允许写入**: |
| 198 | - 自己的 `private/` —— 草稿、思考、临时文件 |
| 199 | - 自己的 `outbox/result.md` —— 最终结果 |
| 200 | - 自己的 `children/` —— 创建子史密斯目录(父权限) |
| 201 | - 自己 `children/` 下子史密斯的 `inbox/` —— 创建子任务(父权限) |
| 202 | |
| 203 | **禁止写入**: |
| 204 | - 其他史密斯的 `private/` 或 `outbox/` |
| 205 | - 父史密斯的任何目录 |
| 206 | - 其他史密斯的 `inbox/`(只能写自己创建的子史密斯的 inbox) |
| 207 | |
| 208 | ## 常见错误与修复 |
| 209 | |
| 210 | ### Red Flags —— 停止并重新评估 |
| 211 | |
| 212 | 遇到以下任何情况时,**禁止**继续分解,应直接执行: |
| 213 | |
| 214 | - 子任务预计耗时少于 15 分钟 |
| 215 | - 当前层级已 ≥ 3,仍在考虑分解 |
| 216 | - 同层子代理数量将超过 5 个 |
| 217 | - 子任务之间耦合紧密或需要频繁同步 |
| 218 | |
| 219 | ### 错误:过度分解 |
| 220 | |
| 221 | **症状:** 为简单任务创建子史密斯,子任务只需几分钟即可完成。 |
| 222 | **修复:** 若任务少于 3 个主要步骤或预计 15 分钟内可完成,直接执行。分解带来的协调开销会超过收益。 |
| 223 | |
| 224 | ### 错误:超出递归深度 |
| 225 | |
| 226 | **症状:** 在 Level 3 或更深层级仍试图创建子史密斯。 |
| 227 | **修复:** 硬限制为 Level 3。当层级 ≥ 3 时,必须直接执行。若任务仍过大,应优化任务定义而非违反协议。 |
| 228 | |
| 229 | ### 错误:写入错误目录 |
| 230 | |
| 231 | **症状:** 在自己子代理的 `inbox/` 以外创建任务文件,或修改其他史密斯的 `private/` 或 `outbox/`。 |
| 232 | **修复:** 重新阅读 [写约束协议](#写约束协议)。只允许写入:自己的 `private/`、自己的 `outbox/`、自己的 `childre |