← 返回主报告:Kimi Agent(云端沙箱)技术报告 | GitHub 原文
合规与风险声明:本报告为安全研究与互操作学习目的的逆向分析,全程只读采集,未对目标系统做任何修改;文中所有密钥、token、账号级标识(chat_id / project_id / tenant_id 等)均已脱敏;沙箱内发现的默认弱口令(VNC/SSH)属平台侧配置,仅作安全发现披露,请勿用于访问任何不属于自己的系统。docx/pdf/xlsx/kimi-slides 等引擎二进制为 Moonshot 专有许可(禁再分发/逆向),本文仅作行为级描述。报告基于单次分析窗口(约 50 分钟生命周期),软件版本与技能库存随镜像更新可能变化。
采集时间:2026-08-18 | 采集方式:HTTP 只读
http://127.0.0.1:18080/app/.agents/skills/(本轮 SSH 不可用) 范围:swarm-workspace、vibecoding-general-swarm、vibecoding-webapp-swarm、webapp-building-swarm、backend-building-swarm、skill-creator-swarm、deep-research-swarm、batch-download 共 8 个技能的全部关键文件(SKILL.md 全文、scripts 逐行、references/docs 全文、模板结构)。 与第一轮关系:sections/09-skills-d.md §2 已给出四层体系速写;本章为全文级深拆 + 移植评估,结论如有出入以本章为准。
0. 一句话结论
这套 swarm 体系的本体是一份”用 git 当消息总线”的多代理协作协议:基础设施只有 105 行 bash(setup-local.sh),其余全是提示词层纪律(角色模板逐字锁定、缝合点冻结、反验证螺旋)。真正的平台耦合点只有三个:/mnt/agents/output 共享盘、mshtools-website_version_manager 交付工具、http://localhost:8080/api/v1/apps portal 供应接口——三者都有清晰边界,替换后整套协议可原样搬走。
1. 分层关系(实测确认)
编排层 vibecoding-webapp-swarm (415行, 主乐谱) ──► vibecoding-general-swarm (73行, 泛化骨架)
deep-research-swarm (509行, 研究编排) batch-download (269行, 下载编排, type: capability)
基础设施层 swarm-workspace (68行 + setup-local.sh 105行) ← 唯一权威 worktree 实现
制品层 webapp-building-swarm (98行, type: artifact + 13套模板zip + 预构建node_modules)
backend-building-swarm (333行 + init.sh 674行 + 9个.mjs patcher + 6篇docs + base/db/auth三层模板)
评估层 skill-creator-swarm (490行 + init/validate/package 三脚本) ← 用 swarm 评测 swarm 时代的技能
调用关系证据链:vibecoding-webapp-swarm 的 SKILL.md “Companion Skills” 段显式引用其余四个技能的绝对路径;backend-building-swarm SKILL.md 自述 “The end-to-end sequencing is owned by vibecoding-webapp-swarm (the backend graft is its Phase 4.5)”;webapp/backend 两个制品层 SKILL.md 都把 worktree 生命周期委托给 swarm-workspace(”This is the ONE canonical implementation — webapp-building-swarm and backend-building-swarm delegate to it via thin wrappers that only set NODE_MODULES_SRC” —— setup-local.sh 头部注释原文)。
2. swarm-workspace:双层文件系统契约(基础设施层)
2.1 契约本体(SKILL.md 68行全文已读)
| 路径 | 角色 | 规则 |
|---|---|---|
/mnt/agents/output/app | 共享协调 git 仓(无 remote) | 只做 branch/merge,禁止编辑/构建 |
$HOME/app- | 每子代理本地 worktree(快盘) | 每个并行子代理必须唯一路径 |
三条由布局直接推出的关键事实(原文摘录):
- “No remote, no push. All worktrees share the shared repo’s
.gitobject store, so a commit on any branch is immediately visible to the main agent — it justgit mergefrom inside the shared repo.” —— git 对象库替代 IPC/消息队列,这是全套机制的核心取巧点。 - “
node_modules,dist, and.envare gitignored… that is whysetup-local.shcopiesnode_modules(and optionally.env) in.” —— gitignore 即隔离边界,git 不管的东西走文件复制管道。 - “Never run
git worktree prune” —— 所有代理的 worktree 元数据共享.git/worktrees/,prune 会摧毁同伴。
2.2 setup-local.sh 105 行逐段解读
签名:[REPO_PATH=] [NODE_MODULES_SRC=] [ENV_SRC=] setup-local.sh ,set -euo pipefail 开局。
- L47-55 参数与环境:
REPO_PATH默认/mnt/agents/output/app;LOCAL_PATH默认$HOME/app-$BRANCH。最精巧的是 L51-55ENV_SRC的默认值设计:默认指向$REPO_PATH/.env——即 backend graft 阶段”暂存”(staged)到共享仓的 .env。注释原文:”so any worktree — including ad-hoc backend passes that don’t pass ENV_SRC — inherits DATABASE_URL etc. Without this,npm run db:pushin such a worktree fails with ‘DATABASE_URL is required’. copy_env() no-ops when the file is absent.” .env 是 gitignored 的,不走 git;把它放进共享仓(git 追踪之外)就变成一个”密钥信箱”,后续每个 worktree 自动继承——这是整套协议里最妙的一笔。 - L57-62 copy_env():
ENV_SRC非空且文件存在才cp到$LOCAL_PATH/.env,否则静默跳过(纯前端项目无 .env 时不报错)。 - L69-87 已存在目录的三态处理(重入语义,全部有代码佐证):
- 是 worktree 且分支相同 → 复用、刷新 .env、跳过 npm install、exit 0(L73-78);
- 是 worktree 但分支不同 →
git worktree remove --force(失败则rm -rf)后走重建(L80-82); - 非 git 残留目录 →
rm -rf重建(L84-85)。
注意 L71 的检测技巧:worktree 的 .git 是文件(gitdir 指针)不是目录,所以用 -e 而非 -d,并加 git rev-parse --git-dir 双保险。
- L92 创建:
git worktree add --force "$LOCAL_PATH" "$BRANCH"。--force的理由写在 L90 注释:”handles stale entries from dead sandboxes”——子代理沙箱是易消亡的(ephemeral),死沙箱留下的 worktree 元数据残留被显式设计进恢复语义。 - L98-103 依赖安装:有
NODE_MODULES_SRC就cp -r覆盖(预构建 node_modules,镜像构建期准备,运行时零下载冷启动),然后仍然跑npm install对齐——因为页面代理可能各自加了包,最终 merge 后还需再 install 一次(见 Phase 7 step 4 的注释 “setup-local.sh installs before later branches are merged, so this final install reconciles subagent dependency changes”)。 - 它不管的事:共享仓的创建(”Creating it … is the job of whatever workflow lays the first template — not this skill”,L64-68)——职责切得很干净。
工程质量评价:105 行覆盖了幂等重入、脏目录恢复、死沙箱残留、密钥继承、快盘/慢盘分层六个真实工程问题,无任何 LLM/runtime 依赖,纯 git+bash+npm 原语。
3. vibecoding-webapp-swarm:编排层主乐谱(SKILL.md 415行全文已读)
固定技术栈写死在 frontmatter 之后第一段:Node 20 / Tailwind v3.4.19 / Vite v7.2.4 / React 19+TS / shadcn/ui(版本钉死,且要求”communicate to all subagents”——每个子代理提示词都必须带版本号)。
3.1 七阶段流水线(Mode A)
- Phase 1 主代理:跑
init-webapp.sh(PROJECT_PATH=$HOME/init REMOTE_PATH=/mnt/agents/output/app),研究结果写/mnt/agents/output/info.md。硬约束:”Do NOT plan page structure, page count, visual direction, or design details in this phase. Those decisions belong entirely to the Designer.” —— 主代理在此阶段被明确剥夺创意权。 - Phase 2 设计:创建名为 Pro_Designer 的子代理。关键证据:“name must contain ‘designer’ (case-insensitive) for model routing” —— 子代理名称字符串参与 runtime 的模型路由(设计师角色路由到不同/更强的模型),这是沙箱 runtime 的隐藏契约,提示词里被当成硬性约定使用。
- Phase 4 脚手架代理(单个子代理):提示词 16 条逐字条款,含 AI 媒体资产生成(”use the image generation tool… Save all generated media to
$HOME/app-scaffold/public/“)、共享组件路径写死(src/components/Navbar.tsx|Footer.tsx|Layout.tsx)、Layout/路由契约(<Outlet/>嵌套路由 vs{children}包裹,二选一禁止混用)、全栈时 Login.tsx 只做占位 + Navbar 里埋{/ AUTH-SLOT: rewired to useAuth() in Phase 5 /}注释锚点。 - Phase 5 backend graft 由主代理亲自跑(不开子代理)。原因写得很白:”because
init.shwrites a gitignored.envthat never travels through the merge: it survives only in the sandbox where it ran, which must be the main agent’s own”。跑完cp $HOME/app-backend/.env /mnt/agents/output/app/.env暂存,然后才从 master 派生页面分支——保证页面代理继承脚手架 + tRPC client。 - Phase 6 并行页面代理:”Launch all subagents simultaneously (single message, multiple
tasktool calls)”。每代理 13 条硬性条款,核心是缝合点冻结清单:
> “Must NOT modify:
src/App.tsx,src/index.css, shared components,public/. Full-stack: also must NOT modifyapi/router.tsordb/schema.ts— these are merge-conflict seams owned by the backend graft/product pass. *Auth apps: also must NOT create or modifysrc/pages/Login.tsx,src/hooks/useAuth.ts,src/const.ts,src/components/AuthLayout.tsx,src/providers/trpc.tsx, or anything underapi/**”
- Phase 7 主代理收口:
final-buildworktree 里 octopus merge(git merge g1 g2 ... --no-edit,失败则退化为逐个 merge)→ 手工接线 App.tsx 路由 → grep 契约检查(grep -nw "fixed" Navbar.tsx查定位契约;全栈 auth 时grep -rn "oauth/authorize" src/ | grep -v Login.tsx必须为空、grep -n 'scope' Login.tsx必须是 “profile”)→npm install && npm run build成功(最多 3 次重试)→ 才允许调mshtools-website_version_manager的build_version。
3.2 反验证螺旋纪律(全套技能反复出现的失效模式对策)
- 子代理条款第 16/13 条逐字:”After committing, return immediately. No need to run the dev server, open a browser, take screenshots, or verify your work.”
- 主代理 Core Principle 7:”Create the version once per delivery and STOP. One
build_versioncall per delivery, then no verification loop: do NOT open the URL, take screenshots, or review.” - 版本工具本身设计成 git-native 闭环:
build_version= 把project_dir状态 commit(版本 ID = commit 短哈希);rollback= 恢复树再 commit(roll-forward,不改写历史)——用 git 语义锁死”交付后不许再动”。
3.3 static vs dynamic 双交付路径
build_version 的 project_dir 指向随 type 分叉:static(纯前端)必须指向 /mnt/agents/output/app(平台从那里构建,merge 即交付);dynamic(全栈)必须指向带 node_modules+.env 的 worktree(服务端构建并起 dev server 预览)。迭代纪律:master 是唯一持久谱系,修 bug/回滚一律从 master 新派分支+新 worktree,禁止复用旧 worktree(”a reused worktree is stale relative to master… can fold leftover debris into the version tool’s commits”)。
3.4 角色模板与”防污染”设计
Designer 的 system prompt 和 task prompt 都是逐字固定模板,只允许填 {USER_QUERY} 和 {RESEARCH} 两个占位符,且三条明令:”Do NOT add sections like ‘Key Context’…”、”Do NOT add your own creative interpretation…”、”Do NOT paraphrase the user request — copy it character-for-character.” —— 把所有创意决策压给 Designer 单一角色,防止主代理的规划冲动污染设计。这是多代理系统里”主代理职权最小化”的教科书式写法。
3.5 三个 references 文件(全文已读)
design-guide.md(90行):Designer 专用。视觉能力清单(GSAP/Framer/Three.js/Lenis)、性能护栏(每视口 ≤8-10 个同时动画元素、每 section 只许一个重 shader)、设计文档格式(全局 design.md + 每页 [page].md,每 section 必须有具体参数的 Animation 字段)、Asset Manifest 契约(Designer 只写资产清单不生成资产,生成是 Scaffold 代理的活——职责分离写进文档 “What You Do NOT Do”)。react-dev.md(216行):所有实现代理(scaffold+页面)必读,Designer 和主代理不读——阅读权限也按角色分配。内容是被实战打磨过的 React 陷阱清单:GSAP/Framer 库隔离(同组件树禁止混用)、Framer 性能规则(高频动画禁 useState 用 MotionValue)、min-h-[100dvh]替代h-screen、canvas 尺寸必须 inline style、粒子交互用 lerp 位移衰减不改基准位置、Layout+路由契约专章(混用<Outlet/>与{children}会”renders a blank<main>with no error, andnpm run buildstill passes”——静默空白页是运行时 bug 不是类型错误)、Full-Stack Auth Contract 表(useAuth/LOGIN_PATH 用法 vs 手写 OAuth URL 的禁令)。product-knowledge.md(46行):平台能力事实注入。核心事实:build_version 返回版本 ID 不返回 URL(”Never fabricate or guess a URL”)、preview≠publish(发布是用户手点按钮得<name>.ok.kimi.link,agent 永远不能说”已上线”)、边界(不支持第三方支付/第三方 OAuth、导出代码不带 Kimi 登录和平台数据库)、排障话术(预览空白先查项目是否在/mnt/agents/output/app下)。这是防止模型幻觉平台能力的标准做法。
3.6 Mode B(单代理侧线)
网站是”副产品且简单(1-3页)”时降级为单代理:主代理 init → 单个子代理”设计+实现一肩挑”(写单个 design.md 然后实现全站)→ 主代理 build+static 交付。注意与 general-swarm 的模式选择哲学相反:webapp-swarm “When in doubt → Mode A”,general-swarm “When in doubt → Mode B”——因为两者的默认任务密度不同。
4. vibecoding-general-swarm:泛化骨架(SKILL.md 73行全文已读)
同一骨架抽掉 web 特例后的通用版,差异点:
SPEC.md取代 design.md 作为单一事实源;”Spec fidelity: exact interfaces, exact module boundaries, exact data formats”。- 核心原则第 7 条换成 “Test before merge”(子代理跑模块测试、主代理 merge 后跑集成测试)——通用编码没有
npm run build这一个天然闸门,所以显式补测试纪律。 - worktree 用法退化为裸 git 命令(
git worktree add $HOME/work-),不调 setup-local.sh——因为通用项目没有统一的预构建 node_modules 可复制。共享仓路径也从output/app变为output/project。 - 覆盖范围自述极大:”Python tools, data pipelines, ML systems, APIs, games, bots, CLI apps, mobile apps”——73 行显然支撑不了这么多域,它是”兜底编排宪法”而非操作手册。frontmatter 用词是 “MANDATORY for ANY coding task not covered by vibecoding-webapp-swarm”。
5. webapp-building-swarm:制品层(前端)
- SKILL.md(98行,
type: artifact):解释双层架构表、三个脚本的用法、13 套模板清单。模板表:0-origin(默认,40+ shadcn/ui 组件)+ airlens/exhibition/exvia/forest/kaleo/lipstick/modo/photographer/playza/shibumi/swiss-dada/villa 共 12 套风格模板(GSAP/Three.js 重度视觉站居多)。 - templates/:每套模板一个目录含
<name>.zip(实测 0-origin.zip 129KB、airlens 153KB、exhibition 172KB、playza 157KB)+info.md(0-origin 的 info.md 是初始化回显:组件清单 40+、目录结构、import 示例——给 agent 看的模板说明书)+ 一个日期目录(2026-03-11/,疑为版本快照)。 - init-webapp.sh(120行逐行已读):解 zip 到 /tmp → 拷 info.md → 便携 sed 替换
<title>(L21-25 特意写了 GNU/BSD sed 兼容函数,注释说旧版 OSTYPE 判断在装了 GNU sed 的机器上坏过——有实战修坑痕迹)→ 拷入项目 → 覆盖预构建 node_modules → 非默认模板才补跑npm install→ 有REMOTE_PATH时:git init && git add -A && git commit后git clone $PROJECT_PATH $REMOTE_PATH再git remote remove origin——本地 clone 当”共享仓”用,clone 是为了得到干净的.git(clone 天然不含 node_modules 等 gitignored 内容),remove origin 是仪式性的”此仓无远端”声明。 - .prepare-template.sh(27行):镜像构建期跑一次——解 0-origin →
npm install→ 整体拷到scripts/template/(含 node_modules)。运行时所有cp -r node_modules都来源于此,实现零下载冷启动。注释明确 “Run once at image build time, not at runtime.”。 - 与非 swarm 版
webapp-building的差异(第一轮 09 章已实测):非 swarm 版模板改从 Portal 只读挂载/mnt/agents/.websites-templates读、带路径逃逸防护、且会向 portalPOST /api/v1/apps注册 app——swarm 版反而没有 portal 注册(注册由 backend graft 或平台侧完成)。
6. backend-building-swarm:制品层(后端,全套技术含量最高)
6.1 SKILL.md(333行)要点
- 栈:tRPC 11 + Drizzle ORM + Hono + MySQL + OAuth 2.0(Kimi 登录)。嫁接物:
api/、contracts/、可选db/,“never replaces or modifies existing frontend files”。 - 特性增量安装:base(Hono+tRPC+contracts)首跑必装;
db(Drizzle+MySQL);auth(Kimi OAuth,自动含 db)。默认无参数 = auth。 .backend-features.jsonmanifest 门控重入:重复跑只装 delta;graft 自有文件(Login.tsx/useAuth/AuthLayout)每次权威覆盖(cp),用户可扩展文件(schema.ts/seed.ts/connection.ts/drizzle.config.ts)有则让位(safe_copy/cp -n)——所有权边界用 cp 的旗标语义实现,很巧。- 19 条 “Common Mistakes” 清单是踩坑日志的精华:
serial()是bigint unsigned auto_increment(MySQL 每表只允许一个自增列,FK 必须bigint(..., unsigned: true));禁手写 DB 实体 interface(typeof table.$inferSelect,因为 superjson 会给Date不是string);api不是 tRPC client 名(是trpc,from@/providers/trpc);@/别名只到src/(api 里要用@db/、@contracts/);NEVERdb:push --force、NEVER drop tables 修 migration。
6.2 init.sh(674行逐段已读)——嫁接引擎
结构:参数解析(--features 与 --template 互斥)→ 校验(npm、src/ 存在)→ git 兜底(safe.directory、wip commit 保存现场)→ manifest 读写(含遗留检测:无 manifest 但有 api/ 就探针式推断已装特性并补写 manifest,L194-227)→ 特性安装(base/db/auth 三个函数)→ portal 供应 → npm install → 自动接线 → 写 manifest → commit。
- portal 供应(L495-546,全脚本最关键的平台耦合段):
PORTAL_URL="${PORTAL_URL:-http://localhost:8080/api/v1/apps}"
APP_INFO=$(curl -sf -X POST "$PORTAL_URL" -d "{\"name\":\"$APP_TITLE\",\"features\":$FEATURES_JSON}")
返回 {app_id, app_secret, credentials: {KEY: value}},据此生成 .env:APP_ID、APP_SECRET、VITE_APP_ID、VITE_KIMI_AUTH_URL(从 KIMI_AUTH_URL 派生 Vite 前缀版)+ credentials 全量(含 DATABASE_URL、KIMI_AUTH_URL、KIMI_OPEN_URL、OWNER_UNION_ID 等)。MySQL 实例、OAuth app 注册、owner 身份全部由 portal 一键供应——沙箱里没有数据库,数据库在云端,portal 按 app 发连接串。有防御性检查:portal 返回非 JSON(502 HTML 错误页)时显式报错退出(L504-506 注释原文说明动机)。
- *9 个
lib/.mjs 确定性 patcher**(Node 脚本,全部已读/抽样精读):merge-schema.mjs(105行):把 users 表定义合并进db/schema.ts——正则提取表名做幂等(已存在即 exit 0)、合并 import 语句(按 from 去重)、插入位置优先// TODO:注释锚点之前。wire-app-tsx.mjs(51行):正则找最后一个 page import 后插 Login/NotFound import,按既有<Route缩进对齐后在</Routes>前插两条路由;找不到锚点 exit 1 → 落到 docs/Post-Init-Wiring.md 的人工接线指引(”Auto-wired” vs “Wiring required” 两态输出)。已接线检测是src.includes("Login")——粗但够用。- 其余 patch-vite-config(失败时整文件 fallback 重写,L310-339 内嵌完整替代配置)、merge-tsconfig、merge-package-json(读
package.json.feat片段合并依赖)、patch-env-ts(给 env.ts 加required("DATABASE_URL")类声明)、patch-router-auth、patch-boot-auth(加 OAuth callback)、wire-main-tsx(包 TRPCProvider)。 - 设计哲学:易错的手工编辑全部下沉为确定性 Node 脚本,LLM 只跑脚本不手写 patch——与第一轮报告”确定性引擎兜底”范式完全吻合。
- –template 模式:fullstack 模板 zip 自带
.backend-features.json+ 预铺api/ db/ contracts/,init.sh 检测到 manifest 自动切 provision-only(跳过所有文件拷贝/patch,只做 portal 注册 + 写 .env + npm install)。 - 错误兜底:
trap ... ERR在失败时提示 “Please abort the current task and let the user provide feedback to Kimi”(L3)——失败语义是”中止并上报”而非重试。
6.3 docs/ 六篇(全部已读/精读)
- Authentication.md(242行):完整 OAuth 2.0 实现说明。架构:
api/kimi/{auth,session,platform}.ts(OAuth flow、jose JWT 1 年期 session、Kimi Open Platform API client);users 表 schema(unionId 唯一、role enum user/admin);Login.tsx 全文内嵌(getOAuthUrl()拼${VITE_KIMI_AUTH_URL}/api/oauth/authorize?client_id=...&scope=profile,state = base64(redirectUri));admin 分配机制:portal 响应里的creator_user_id写入OWNER_UNION_ID,登录时 unionId 匹配即 admin;三级 procedure 表publicQuery/authedQuery/adminQuery。 - Database.md(381行):Drizzle 纪律——禁裸 SQL、MySQL 无
.returning()用.$returningId()、onDuplicateKeyUpdateupsert、db:push(开发)vsdb:generate+db:migrate(生产)分流。 - Project-Structure.md(147行):完整目录树 + import 别名公约表(
@/→src 前端专用、@contracts/→前后端共享、@db/→api 专用;api 内部用相对路径)。 - tRPC.md(161行)、Development-Guide.md(260行):zod input 校验强制、superjson 序列化语义、开发流程。
- Post-Init-Wiring.md(38行):auto-wire 失败时的人工接线两步骤——确定性脚本的失败有显式人工兜底文档,闭环完整。
- 模板依赖快照(
scripts/template/package.json已读):trpc 11.8.1、hono 4.8.3、drizzle-orm 0.45.1、mysql2 3.14.1、jose 6.1.3、@aws-sdk/client-s3 + s3-request-presigner(模板内置 S3 能力,凭证也来自 portal credentials)、react-router 7.6.1。
7. skill-creator-swarm:技能元工厂 + 盲评协议
7.1 本体(490行,Anthropic skill-creator 的 swarm 适配版)
三原则:简洁至上(”The context window is a public good”)、按任务脆弱度设自由度(高/中/低三档)、渐进披露(frontmatter→SKILL.md→references/ 三层)。技能解剖:scripts/(确定性操作)、references/(按需加载文档)、assets/(被消费不进上下文的产物)。七步流程,Step 5 为 swarm 评测(MANDATORY)。
7.2 盲评协议(Step 5,executor/grader/comparator/analyzer 四角色)
- 成对执行铁律:”Do not run all
with_skillcases first and come back for baseline later. Pair them in the same evaluation round”——同一轮内 with_skill 与 baseline(无技能=新技能评测;旧版技能=更新评测)成对启动。 - 四角色全部用
create_subagent显式 system_prompt 创建,零脚本(”These do not need dedicated scripts… they can be created viacreate_subagentwith explicitsystem_prompts and used throughtask“):skill_executor:跑任务。提示词模板固定字段:Mode(with_skill|baseline)、Skill path(/mnt/agents/output/<skill>/SKILL.md精确路径,baseline 无)、Task、Input files、Output directory。skill_grader:对照 expectations 逐条 pass/fail + 证据,并反向指出弱 expectation(”point out weak expectations if they are non-discriminating”)。skill_comparator:盲评——”review output A and output B without knowing which is which… Do not infer which one used the skill”,从 prompt 反推 rubric,输出 winner A/B/TIE + 各自优缺点。skill_analyzer:读技能+评测笔记,找”ambiguous instructions / missing guidance / repeated wasted work”,产出具体修改建议。
- expectation 写法指导:弱(”a file exists”)vs 强(”the output workbook includes a pivot table on sheet Summary”);主观任务靠盲评+人审而非硬断言。
- 反过度工程明令:”avoid building complex external orchestration scripts just to run evals… The implementation should stay lightweight.”
- 工作区约定:
<skill>-workspace/iteration-1/eval-N/{with_skill,without_skill,notes.md}——”The point is consistency, not strict tooling.”
7.3 三脚本(全部逐行已读)
init_skill.py(303行):生成技能骨架。内置 SKILL.md 模板带四种结构模式指导(Workflow-Based / Task-Based / Reference-Guidelines / Capabilities-Based,各配一句话选型标准和结构示例),外加 scripts/references/assets 三个示例文件(示例文件本身写满”别的技能怎么用我”的交叉引用)。命名规范 kebab-case ≤64 字符。硬编码输出路径/mnt/agents/output,并强调/app/.user/skills/NOT shared——/mnt/agents/output是主子沙箱间唯一共享目录的又一实证。quick_validate.py(103行):frontmatter 校验。允许键白名单{name, description, license, allowed-tools, metadata, compatibility};name kebab-case≤64、description 禁尖括号≤1024 字符。注意:沙箱里 269 个技能的 frontmatter 方言远比这宽(type:、openclaw.requires.*、permissions:等第一轮已观测),说明这个 validator 只约束”本工具产出的技能”,不管存量。package_skill.py(110行):先 validate 再打 zip 格式的.skill文件;SKILL.md 强制要求最终回复引用.skill文件路径供 UI 展示下载。references/workflows.md(28行)+output-patterns.md(82行):顺序/条件工作流写法、严格 vs 弹性输出模板、input/output 示例对——给技能作者的模式小抄,轻量。
8. deep-research-swarm:研究编排(509行,frontmatter 用 YAML 列表式方言)
- 四条路由(Phase 0 意图路由):A 宽搜索(两段式 swarm:先 ≥5 个 wide 代理 × ≥10 搜索做广度,再 ≥10 个 deep 代理 × ≥20 搜索做深度)/ B 聚焦搜索(标准管线)/ C 纯文件(0 次外部搜索,禁偷偷搜索:”do NOT sneak in external searches. Fidelity to user intent is paramount”)/ D 文件增强(文件为主+外部补缺,≥150 搜索)。歧义默认规则:A 优先于 B、D 优先于 C。
- 认识论设计(区别于普通”并行加速”):”Swarm parallelism serves epistemic robustness — not merely speed”。维度间故意 ≥30% 概念重叠制造交叉验证压力;Phase 4 交叉验证把发现分四级置信(High=≥2 代理独立信源一致 / Medium / Low / Conflict Zone 冲突高亮绝不抹平——含时间维度冲突单列);Phase 5 条件触发逐冲突派验证代理(每冲突 ≥3 次追加搜索,Route C 禁用)。
- 证据模板(所有子代理输出强制):
Claim/Source/URL/Date/Excerpt(verbatim,禁转述)/Context/Confidence(high|medium|low)七字段;全文[^number^]行内引用,与 pdf 技能的citation.jsonl衔接(09 章 §3.1)。 - Epistemic Reset Rule:分析前必须 bash 查当前日期;搜索语言锁死跟随用户语言。
- 收口不是写报告而是交接:Phase 7 把
research/下全部产物(dim 文件 ≥10、cross_verification、insight ≥5 条)显式路径清单交接给report-writing或paper-writing技能,并要求”明确告诉写作技能研究已完成、不需要再派研究代理”——技能间交接协议。 - 输出目录铁律
/mnt/agents/output/research/(”non-negotiable”,禁止直接写 output/ 根)。
9. batch-download:纯提示词下载编排(269行,type: capability)
- 四阶段:分解(Orchestrator 独占,”No execution in this phase”)→ 证据收集(URL 模式发现是灵魂:数字递增/目录结构/命名模板/分页参数,”verify the pattern holds by testing 2–3 instances” 后用 Python 程序化生成全量 URL)→ 并行下载(一原子单元一
task,同时发出)→ 整合校验。 - 反幻觉条款密度最高:”Never fabricate URLs”(只许用户给的/搜索到的/验证过模式外推的/程序解析的四种来源)、”Do NOT download HTML and rename it as
.pdf“、严格类型匹配失败要报”limitation / partial result”。 - 子代理提示词五要素模板:目标范围、
ATTENTION:前缀关键约束、覆盖要求(”download ALL of them, not just the first one”)、验证要求、STRICT 输出格式(JSON schema 或 Markdown 表,”No extra commentary”,未知字段填 “-“)。 - Orchestrator 侧校验四连:格式/字段/约束/细节级(”year 2021 but URL shows 2019″这类标签值不匹配单列);失败重试用”clarified prompt 重跑或派专门 verify 代理换路线”。
- 限流处理:429/403/CAPTCHA → 10-60s 随机抖动退避、敏感站点优先 Python 直连;最终铁律 “Never call tools after generating the final answer”。
- 与 git 体系完全无关——证明 swarm 家族有两种并存实现:纯提示词契约(batch-download/deep-research)vs git worktree 实体隔离(vibecoding 系列)。
10. 运行时原语:create_subagent + task 调用约定汇总
从全套技能反推出的沙箱 runtime 编排 API:
| 约定 | 证据 |
|---|---|
存在两个原语:create_subagent(带显式 system_prompt 创建命名角色)与 task(派任务执行) | skill-creator-swarm L11、L276 |
| 子代理名称参与模型路由:名字含 “designer”(不区分大小写)路由到设计模型 | vibecoding-webapp-swarm L95 注释 |
并行 = 单条消息内多个 task 调用同时发出 | vw-swarm L206 “single message, multiple task tool calls”;batch-download L166 |
子代理跑在独立易消亡沙箱,跨沙箱唯一共享目录是 /mnt/agents/output;/app/.user/skills/ 不共享 | setup-local.sh L40 注释;skill-creator-swarm L146 |
| 子代理通过文件系统收上下文(提示词里写绝对路径让子代理自己读),不是参数注入 | 所有 swarm 技能的子代理提示词模板(”Read /mnt/agents/output/design/design.md in full”) |
交付工具 mshtools-website_version_manager(build_version/rollback),git-native,版本 ID=commit 短哈希 | vw-swarm Phase 7、L331 |
平台供应 API POST http://localhost:8080/api/v1/apps → {app_id, app_secret, credentials{DATABASE_URL, KIMI_AUTH_URL, ...}} | backend init.sh L496-543 |
| 图像/视频生成工具对子代理可用(”the image generation tool”) | vw-swarm Phase 4 条款 7 |
11. 密钥/凭证观测(脱敏记录)
- backend graft 生成的
.env含APP_SECRET、DATABASE_URL(MySQL 连接串)、KIMI_AUTH_URL/KIMI_OPEN_URL、OWNER_UNION_ID——来源均为 portalPOST /api/v1/apps响应,位置$PROJECT_PATH/.env(gitignored),经共享仓.env信箱分发给各 worktree。本轮未读取任何真实 .env 内容,仅记录机制。 .backend-features.json含app_id(非密)。- 模板内置 S3 client 依赖(@aws-sdk/client-s3),凭证同样预期来自 portal credentials。
12. 移植评估表
12.1 对 Hermes(自有多代理框架)
| 组件 | 价值 | 理由 | 工作量 | 硬依赖 |
|---|---|---|---|---|
| swarm-workspace 双层契约 + setup-local.sh | 高 | 105 行 bash 实现多代理代码隔离+合并+密钥继承,零 LLM 耦合,可直接当 Hermes 的 workspace 原语 | 纯拷贝(改 REPO_PATH 默认值) | git、npm(可选) |
| 缝合点冻结 + grep 契约检查 | 高 | “App.tsx/router.ts/schema.ts 冻结 + merge 后 grep 校验”是多代理并行改同仓冲突的最小工程解,与框架无关 | 需适配(改成 Hermes 项目的缝合点清单) | 无 |
| 反验证螺旋纪律(commit 即返回 / build 一次即 STOP) | 高 | 针对 LLM 代理真实失效模式,纯提示词条款 | 纯拷贝(措辞可直接借用) | 无 |
| vibecoding-webapp-swarm 七阶段乐谱 | 中 | 角色分工/分组策略可借鉴,但技术栈钉死 + 版本工具耦合,Hermes 需换成自己的构建交付 | 需重写(保留骨架替换交付层) | mshtools 版本工具、AI 媒体生成工具 |
| backend init.sh 嫁接引擎(9 个 mjs patcher) | 中 | “LLM 不手写 patch,跑确定性脚本”的范式价值高于代码本身;patcher 与 tRPC/Hono 栈强绑定 | 需重写(范式照搬,脚本重写) | portal 供应 API(需替换为自有 provisioning) |
| skill-creator-swarm 盲评四角色 | 高 | executor/grader/comparator/analyzer + 同轮成对 + 盲评,仅需两个子代理原语,Hermes 可直接用于提示词/技能回归评测 | 需适配(映射到 Hermes 的子代理 API) | 子代理创建/任务原语 |
| deep-research-swarm 路由+置信分级 | 中 | 四路由、Conflict Zone、证据七字段模板是高质量研究编排样本 | 需适配(输出目录、交接的写作技能改名) | 搜索工具 |
| batch-download | 低 | 提示词纪律可摘抄(URL 模式发现、禁伪造 URL),但整体是单域 playbook | 需适配 | 网络访问 |
| Designer 名字路由模型 | 低(对 Hermes)/ 参考 | 依赖沙箱 runtime 隐藏特性;但启发 Hermes 可做”角色名→模型路由”显式机制 | 需重写 | runtime 模型路由 |
12.2 对 Kimi Code(本机 CLI,SKILL.md 三级 scope + MCP + Agent/AgentSwarm)
| 组件 | 价值 | 理由 | 工作量 | 硬依赖 |
|---|---|---|---|---|
| swarm-workspace + setup-local.sh | 高 | Kimi Code 有 Agent 子代理机制;worktree 契约可封装为一个 project scope 技能,脚本直接可用(REPO_PATH 改项目路径) | 纯拷贝+薄封装 | git;子代理需共享文件系统(本机 CLI 天然满足,比云端更简单) |
| skill-creator-swarm 本体(init/validate/package + 盲评协议) | 高 | 格式同源(同一套 SKILL.md+frontmatter 约定,validator 白名单兼容 Kimi Code 技能格式);/mnt/agents/output 改项目目录即可;盲评协议映射到 Agent 子代理调用 | 需适配(路径 + 子代理 API 名) | Agent 子代理原语 |
| 编排提示词范式(角色模板逐字锁定、Actor Reference 表、模式选择表) | 高 | 与 runtime 无关的 prompt 工程资产,Kimi Code 技能可直接引用写法 | 纯拷贝(作为写作范式) | 无 |
| vibecoding 两个编排技能 | 中 | 骨架可移植,但依赖云端交付工具与 /mnt/agents 布局;Kimi Code 场景下交付=本地构建,可简化 Phase 7 | 需适配 | — |
| backend-building-swarm | 低 | tRPC/Hono/Kimi OAuth 栈与 Kimi Code 用户场景错位,portal 供应完全不可用 | 需重写 | portal API(硬耦合,不可用) |
| deep-research-swarm | 中 | Kimi Code 有 MCP 数据源与搜索;路由+交叉验证骨架可用,搜索预算需按 CLI 配额现实下调 | 需适配 | 搜索/取数 MCP |
| batch-download | 低 | 单域 playbook,Kimi Code 用户少有此场景 | 需适配 | 网络 |
| product-knowledge.md 写法 | 中(范式) | “把平台能力边界写成技能文档防幻觉”的做法值得 Kimi Code 技能作者效仿 | 纯拷贝(范式) | 无 |
12.3 平台耦合点清单(移植时必须替换的三件事)
/mnt/agents/output共享盘:drive9 FUSE 挂载,主子沙箱唯一共享目录。Hermes 换成自己的共享卷/目录约定;Kimi Code 本机场景直接用项目目录。mshtools-website_version_manager:云端交付/预览/回滚工具,git-native 语义。替换为任意”commit + 部署记录”机制即可保持协议不变。- portal
POST /api/v1/apps供应:app 注册 + MySQL/OAuth/S3 凭证下发,backend-building-swarm 的命门。无 portal 则 auth/db 特性整体不可用,需替换为自有 provisioning 或剥掉全栈路径。
次要耦合:子代理名称→模型路由(runtime 隐藏契约)、AI 图像/视频生成工具、静态站 project_dir 必须指向 /mnt/agents/output/app(平台构建路径键)。
13. 工程质量亮点与坑(速查)
亮点:① git 对象库当 IPC,无远端无 push;② .env 借 gitignore 边界 + 共享仓信箱实现密钥继承;③ --force + 三态重入把 ephemeral 沙箱恢复语义写进 105 行脚本;④ 确定性 .mjs patcher 替代 LLM 手工 patch,失败有人工兜底文档;⑤ 创意权单点化(Designer)+ 主代理职权最小化;⑥ 交付即 git commit(版本 ID=短哈希),回滚=roll-forward commit,无历史改写;⑦ 盲评协议零脚本,两个原语搞定。
坑/杂质:① git worktree prune 是全域禁令,任何自动化清理都可能误伤(协议靠人人遵守,无技术强制);② 共享仓 .env 明文落盘在共享盘上——密钥信箱便利与暴露面一体两面;③ octopus merge 依赖缝合点冻结纪律,子代理越界改冻结文件没有硬阻断(只有提示词禁令+事后 grep);④ wire-app-tsx.mjs 的已接线检测是 src.includes("Login") 这种粗匹配,极端命名下会误判;⑤ frontmatter validator 白名单与沙箱存量技能方言(type:/openclaw.* 等)不一致,skill-creator 产出的技能反而是”方言最窄”的;⑥ deep-research 的 ≥200 次搜索预算在非云端配额下不现实。