{"id":1881,"date":"2026-08-18T20:14:11","date_gmt":"2026-08-18T12:14:11","guid":{"rendered":"https:\/\/tongchun.website\/index.php\/kimiagent-15-swarm\/"},"modified":"2026-08-18T20:26:33","modified_gmt":"2026-08-18T12:26:33","slug":"kimiagent-15-swarm","status":"publish","type":"page","link":"https:\/\/tongchun.website\/index.php\/kimiagent-15-swarm\/","title":{"rendered":"15-swarm \u2014 Swarm \u5168\u5bb6\u6df1\u5ea6\u62c6\u89e3\uff08\u7b2c\u4e8c\u8f6e \u00b7 \u660e\u661f\u6280\u80fd\u7ec4\uff09"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u2190 \u8fd4\u56de\u4e3b\u62a5\u544a\uff1a<a href=\"https:\/\/tongchun.website\/index.php\/2026\/kimi-agent%ef%bc%88%e4%ba%91%e7%ab%af%e6%b2%99%e7%ae%b1%ef%bc%89%e6%8a%80%e6%9c%af%e6%8a%a5%e5%91%8a\/\">Kimi Agent\uff08\u4e91\u7aef\u6c99\u7bb1\uff09\u6280\u672f\u62a5\u544a<\/a> \uff5c <a href=\"https:\/\/github.com\/SHAWNTRIBBIANI\/kimiagent-analysis\/blob\/main\/sections\/15-swarm.md\">GitHub \u539f\u6587<\/a><\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><strong>\u5408\u89c4\u4e0e\u98ce\u9669\u58f0\u660e<\/strong>\uff1a\u672c\u62a5\u544a\u4e3a\u5b89\u5168\u7814\u7a76\u4e0e\u4e92\u64cd\u4f5c\u5b66\u4e60\u76ee\u7684\u7684\u9006\u5411\u5206\u6790\uff0c\u5168\u7a0b\u53ea\u8bfb\u91c7\u96c6\uff0c\u672a\u5bf9\u76ee\u6807\u7cfb\u7edf\u505a\u4efb\u4f55\u4fee\u6539\uff1b\u6587\u4e2d\u6240\u6709\u5bc6\u94a5\u3001token\u3001\u8d26\u53f7\u7ea7\u6807\u8bc6\uff08chat_id \/ project_id \/ tenant_id \u7b49\uff09\u5747\u5df2\u8131\u654f\uff1b\u6c99\u7bb1\u5185\u53d1\u73b0\u7684\u9ed8\u8ba4\u5f31\u53e3\u4ee4\uff08VNC\/SSH\uff09\u5c5e\u5e73\u53f0\u4fa7\u914d\u7f6e\uff0c\u4ec5\u4f5c\u5b89\u5168\u53d1\u73b0\u62ab\u9732\uff0c\u8bf7\u52ff\u7528\u4e8e\u8bbf\u95ee\u4efb\u4f55\u4e0d\u5c5e\u4e8e\u81ea\u5df1\u7684\u7cfb\u7edf\u3002docx\/pdf\/xlsx\/kimi-slides \u7b49\u5f15\u64ce\u4e8c\u8fdb\u5236\u4e3a Moonshot \u4e13\u6709\u8bb8\u53ef\uff08\u7981\u518d\u5206\u53d1\/\u9006\u5411\uff09\uff0c\u672c\u6587\u4ec5\u4f5c\u884c\u4e3a\u7ea7\u63cf\u8ff0\u3002\u62a5\u544a\u57fa\u4e8e\u5355\u6b21\u5206\u6790\u7a97\u53e3\uff08\u7ea6 50 \u5206\u949f\u751f\u547d\u5468\u671f\uff09\uff0c\u8f6f\u4ef6\u7248\u672c\u4e0e\u6280\u80fd\u5e93\u5b58\u968f\u955c\u50cf\u66f4\u65b0\u53ef\u80fd\u53d8\u5316\u3002<\/p><\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>\u91c7\u96c6\u65f6\u95f4\uff1a2026-08-18 \uff5c \u91c7\u96c6\u65b9\u5f0f\uff1aHTTP \u53ea\u8bfb <code>http:\/\/127.0.0.1:18080\/app\/.agents\/skills\/<\/code>\uff08\u672c\u8f6e SSH \u4e0d\u53ef\u7528\uff09 \u8303\u56f4\uff1aswarm-workspace\u3001vibecoding-general-swarm\u3001vibecoding-webapp-swarm\u3001webapp-building-swarm\u3001backend-building-swarm\u3001skill-creator-swarm\u3001deep-research-swarm\u3001batch-download \u5171 8 \u4e2a\u6280\u80fd\u7684\u5168\u90e8\u5173\u952e\u6587\u4ef6\uff08SKILL.md \u5168\u6587\u3001scripts \u9010\u884c\u3001references\/docs \u5168\u6587\u3001\u6a21\u677f\u7ed3\u6784\uff09\u3002 \u4e0e\u7b2c\u4e00\u8f6e\u5173\u7cfb\uff1asections\/09-skills-d.md \u00a72 \u5df2\u7ed9\u51fa\u56db\u5c42\u4f53\u7cfb\u901f\u5199\uff1b\u672c\u7ae0\u4e3a\u5168\u6587\u7ea7\u6df1\u62c6 + \u79fb\u690d\u8bc4\u4f30\uff0c\u7ed3\u8bba\u5982\u6709\u51fa\u5165\u4ee5\u672c\u7ae0\u4e3a\u51c6\u3002<\/p><\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"0-%25e4%25b8%2580%25e5%258f%25a5%25e8%25af%259d%25e7%25bb%2593%25e8%25ae%25ba\" class=\"wp-block-heading\">0. \u4e00\u53e5\u8bdd\u7ed3\u8bba<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u8fd9\u5957 swarm \u4f53\u7cfb\u7684\u672c\u4f53\u662f<strong>\u4e00\u4efd&#8221;\u7528 git \u5f53\u6d88\u606f\u603b\u7ebf&#8221;\u7684\u591a\u4ee3\u7406\u534f\u4f5c\u534f\u8bae<\/strong>\uff1a\u57fa\u7840\u8bbe\u65bd\u53ea\u6709 105 \u884c bash\uff08setup-local.sh\uff09\uff0c\u5176\u4f59\u5168\u662f\u63d0\u793a\u8bcd\u5c42\u7eaa\u5f8b\uff08\u89d2\u8272\u6a21\u677f\u9010\u5b57\u9501\u5b9a\u3001\u7f1d\u5408\u70b9\u51bb\u7ed3\u3001\u53cd\u9a8c\u8bc1\u87ba\u65cb\uff09\u3002\u771f\u6b63\u7684\u5e73\u53f0\u8026\u5408\u70b9\u53ea\u6709\u4e09\u4e2a\uff1a<code>\/mnt\/agents\/output<\/code> \u5171\u4eab\u76d8\u3001<code>mshtools-website_version_manager<\/code> \u4ea4\u4ed8\u5de5\u5177\u3001<code>http:\/\/localhost:8080\/api\/v1\/apps<\/code> portal \u4f9b\u5e94\u63a5\u53e3\u2014\u2014\u4e09\u8005\u90fd\u6709\u6e05\u6670\u8fb9\u754c\uff0c\u66ff\u6362\u540e\u6574\u5957\u534f\u8bae\u53ef\u539f\u6837\u642c\u8d70\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"1-%25e5%2588%2586%25e5%25b1%2582%25e5%2585%25b3%25e7%25b3%25bb%25e5%25ae%259e%25e6%25b5%258b%25e7%25a1%25ae%25e8%25ae%25a4\" class=\"wp-block-heading\">1. \u5206\u5c42\u5173\u7cfb\uff08\u5b9e\u6d4b\u786e\u8ba4\uff09<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>\u7f16\u6392\u5c42   vibecoding-webapp-swarm (415\u884c, \u4e3b\u4e50\u8c31) \u2500\u2500\u25ba vibecoding-general-swarm (73\u884c, \u6cdb\u5316\u9aa8\u67b6)\n         deep-research-swarm (509\u884c, \u7814\u7a76\u7f16\u6392)     batch-download (269\u884c, \u4e0b\u8f7d\u7f16\u6392, type: capability)\n\u57fa\u7840\u8bbe\u65bd\u5c42 swarm-workspace (68\u884c + setup-local.sh 105\u884c)  \u2190 \u552f\u4e00\u6743\u5a01 worktree \u5b9e\u73b0\n\u5236\u54c1\u5c42   webapp-building-swarm (98\u884c, type: artifact + 13\u5957\u6a21\u677fzip + \u9884\u6784\u5efanode_modules)\n         backend-building-swarm (333\u884c + init.sh 674\u884c + 9\u4e2a.mjs patcher + 6\u7bc7docs + base\/db\/auth\u4e09\u5c42\u6a21\u677f)\n\u8bc4\u4f30\u5c42   skill-creator-swarm (490\u884c + init\/validate\/package \u4e09\u811a\u672c)  \u2190 \u7528 swarm \u8bc4\u6d4b swarm \u65f6\u4ee3\u7684\u6280\u80fd<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8c03\u7528\u5173\u7cfb\u8bc1\u636e\u94fe\uff1avibecoding-webapp-swarm \u7684 SKILL.md &#8220;Companion Skills&#8221; \u6bb5\u663e\u5f0f\u5f15\u7528\u5176\u4f59\u56db\u4e2a\u6280\u80fd\u7684\u7edd\u5bf9\u8def\u5f84\uff1bbackend-building-swarm SKILL.md \u81ea\u8ff0 &#8220;The end-to-end sequencing is owned by vibecoding-webapp-swarm (the backend graft is its Phase 4.5)&#8221;\uff1bwebapp\/backend \u4e24\u4e2a\u5236\u54c1\u5c42 SKILL.md \u90fd\u628a worktree \u751f\u547d\u5468\u671f<strong>\u59d4\u6258<\/strong>\u7ed9 swarm-workspace\uff08&#8221;This is the ONE canonical implementation \u2014 webapp-building-swarm and backend-building-swarm delegate to it via thin wrappers that only set NODE_MODULES_SRC&#8221; \u2014\u2014 setup-local.sh \u5934\u90e8\u6ce8\u91ca\u539f\u6587\uff09\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"2-swarmworkspace%25e5%258f%258c%25e5%25b1%2582%25e6%2596%2587%25e4%25bb%25b6%25e7%25b3%25bb%25e7%25bb%259f%25e5%25a5%2591%25e7%25ba%25a6%25e5%259f%25ba%25e7%25a1%2580%25e8%25ae%25be%25e6%2596%25bd%25e5%25b1%2582\" class=\"wp-block-heading\">2. swarm-workspace\uff1a\u53cc\u5c42\u6587\u4ef6\u7cfb\u7edf\u5951\u7ea6\uff08\u57fa\u7840\u8bbe\u65bd\u5c42\uff09<\/h2>\n\n\n\n<h3 id=\"21-%25e5%25a5%2591%25e7%25ba%25a6%25e6%259c%25ac%25e4%25bd%2593skillmd-68%25e8%25a1%258c%25e5%2585%25a8%25e6%2596%2587%25e5%25b7%25b2%25e8%25af%25bb\" class=\"wp-block-heading\">2.1 \u5951\u7ea6\u672c\u4f53\uff08SKILL.md 68\u884c\u5168\u6587\u5df2\u8bfb\uff09<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u8def\u5f84<\/th><th>\u89d2\u8272<\/th><th>\u89c4\u5219<\/th><\/tr><\/thead><tbody><tr><td><code>\/mnt\/agents\/output\/app<\/code><\/td><td>\u5171\u4eab\u534f\u8c03 git \u4ed3\uff08<strong>\u65e0 remote<\/strong>\uff09<\/td><td>\u53ea\u505a branch\/merge\uff0c<strong>\u7981\u6b62\u7f16\u8f91\/\u6784\u5efa<\/strong><\/td><\/tr><tr><td><code>$HOME\/app-<branch><\/code><\/td><td>\u6bcf\u5b50\u4ee3\u7406\u672c\u5730 worktree\uff08\u5feb\u76d8\uff09<\/td><td>\u6bcf\u4e2a\u5e76\u884c\u5b50\u4ee3\u7406<strong>\u5fc5\u987b\u552f\u4e00\u8def\u5f84<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e09\u6761\u7531\u5e03\u5c40\u76f4\u63a5\u63a8\u51fa\u7684\u5173\u952e\u4e8b\u5b9e\uff08\u539f\u6587\u6458\u5f55\uff09\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>&#8220;No remote, no push. All worktrees share the shared repo&#8217;s <code>.git<\/code> object store, so a commit on any branch is immediately visible to the main agent \u2014 it just <code>git merge <branch><\/code> from inside the shared repo.&#8221; \u2014\u2014 <strong>git \u5bf9\u8c61\u5e93\u66ff\u4ee3 IPC\/\u6d88\u606f\u961f\u5217<\/strong>\uff0c\u8fd9\u662f\u5168\u5957\u673a\u5236\u7684\u6838\u5fc3\u53d6\u5de7\u70b9\u3002<\/li><li>&#8220;<code>node_modules<\/code>, <code>dist<\/code>, and <code>.env<\/code> are gitignored&#8230; that is why <code>setup-local.sh<\/code> copies <code>node_modules<\/code> (and optionally <code>.env<\/code>) in.&#8221; \u2014\u2014 gitignore \u5373\u9694\u79bb\u8fb9\u754c\uff0cgit \u4e0d\u7ba1\u7684\u4e1c\u897f\u8d70\u6587\u4ef6\u590d\u5236\u7ba1\u9053\u3002<\/li><li>&#8220;Never run <code>git worktree prune<\/code>&#8221; \u2014\u2014 \u6240\u6709\u4ee3\u7406\u7684 worktree \u5143\u6570\u636e\u5171\u4eab <code>.git\/worktrees\/<\/code>\uff0cprune \u4f1a\u6467\u6bc1\u540c\u4f34\u3002<\/li><\/ul>\n\n\n\n<h3 id=\"22-setuplocalsh-105-%25e8%25a1%258c%25e9%2580%2590%25e6%25ae%25b5%25e8%25a7%25a3%25e8%25af%25bb\" class=\"wp-block-heading\">2.2 setup-local.sh 105 \u884c\u9010\u6bb5\u89e3\u8bfb<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7b7e\u540d\uff1a<code>[REPO_PATH=] [NODE_MODULES_SRC=] [ENV_SRC=] setup-local.sh <branch> [local-path]<\/code>\uff0c<code>set -euo pipefail<\/code> \u5f00\u5c40\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>L47-55 \u53c2\u6570\u4e0e\u73af\u5883<\/strong>\uff1a<code>REPO_PATH<\/code> \u9ed8\u8ba4 <code>\/mnt\/agents\/output\/app<\/code>\uff1b<code>LOCAL_PATH<\/code> \u9ed8\u8ba4 <code>$HOME\/app-$BRANCH<\/code>\u3002\u6700\u7cbe\u5de7\u7684\u662f L51-55 <code>ENV_SRC<\/code> \u7684\u9ed8\u8ba4\u503c\u8bbe\u8ba1\uff1a\u9ed8\u8ba4\u6307\u5411 <code>$REPO_PATH\/.env<\/code>\u2014\u2014\u5373 backend graft \u9636\u6bb5&#8221;\u6682\u5b58&#8221;\uff08staged\uff09\u5230\u5171\u4eab\u4ed3\u7684 .env\u3002\u6ce8\u91ca\u539f\u6587\uff1a&#8221;so any worktree \u2014 including ad-hoc backend passes that don&#8217;t pass ENV_SRC \u2014 inherits DATABASE_URL etc. Without this, <code>npm run db:push<\/code> in such a worktree fails with &#8216;DATABASE_URL is required&#8217;. copy_env() no-ops when the file is absent.&#8221; <strong>.env \u662f gitignored \u7684\uff0c\u4e0d\u8d70 git\uff1b\u628a\u5b83\u653e\u8fdb\u5171\u4eab\u4ed3\uff08git \u8ffd\u8e2a\u4e4b\u5916\uff09\u5c31\u53d8\u6210\u4e00\u4e2a&#8221;\u5bc6\u94a5\u4fe1\u7bb1&#8221;\uff0c\u540e\u7eed\u6bcf\u4e2a worktree \u81ea\u52a8\u7ee7\u627f<\/strong>\u2014\u2014\u8fd9\u662f\u6574\u5957\u534f\u8bae\u91cc\u6700\u5999\u7684\u4e00\u7b14\u3002<\/li><li><strong>L57-62 copy_env()<\/strong>\uff1a<code>ENV_SRC<\/code> \u975e\u7a7a\u4e14\u6587\u4ef6\u5b58\u5728\u624d <code>cp<\/code> \u5230 <code>$LOCAL_PATH\/.env<\/code>\uff0c\u5426\u5219\u9759\u9ed8\u8df3\u8fc7\uff08\u7eaf\u524d\u7aef\u9879\u76ee\u65e0 .env \u65f6\u4e0d\u62a5\u9519\uff09\u3002<\/li><li><strong>L69-87 \u5df2\u5b58\u5728\u76ee\u5f55\u7684\u4e09\u6001\u5904\u7406<\/strong>\uff08\u91cd\u5165\u8bed\u4e49\uff0c\u5168\u90e8\u6709\u4ee3\u7801\u4f50\u8bc1\uff09\uff1a<\/li><\/ul>\n\n\n\n<ol class=\"wp-block-list\"><li>\u662f worktree \u4e14\u5206\u652f\u76f8\u540c \u2192 \u590d\u7528\u3001\u5237\u65b0 .env\u3001<strong>\u8df3\u8fc7 npm install<\/strong>\u3001exit 0\uff08L73-78\uff09\uff1b<\/li><li>\u662f worktree \u4f46\u5206\u652f\u4e0d\u540c \u2192 <code>git worktree remove --force<\/code>\uff08\u5931\u8d25\u5219 <code>rm -rf<\/code>\uff09\u540e\u8d70\u91cd\u5efa\uff08L80-82\uff09\uff1b<\/li><li>\u975e git \u6b8b\u7559\u76ee\u5f55 \u2192 <code>rm -rf<\/code> \u91cd\u5efa\uff08L84-85\uff09\u3002<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">  \u6ce8\u610f L71 \u7684\u68c0\u6d4b\u6280\u5de7\uff1aworktree \u7684 <code>.git<\/code> \u662f<strong>\u6587\u4ef6<\/strong>\uff08gitdir \u6307\u9488\uff09\u4e0d\u662f\u76ee\u5f55\uff0c\u6240\u4ee5\u7528 <code>-e<\/code> \u800c\u975e <code>-d<\/code>\uff0c\u5e76\u52a0 <code>git rev-parse --git-dir<\/code> \u53cc\u4fdd\u9669\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>L92 \u521b\u5efa<\/strong>\uff1a<code>git worktree add --force \"$LOCAL_PATH\" \"$BRANCH\"<\/code>\u3002<code>--force<\/code> \u7684\u7406\u7531\u5199\u5728 L90 \u6ce8\u91ca\uff1a&#8221;handles stale entries from dead sandboxes&#8221;\u2014\u2014<strong>\u5b50\u4ee3\u7406\u6c99\u7bb1\u662f\u6613\u6d88\u4ea1\u7684\uff08ephemeral\uff09\uff0c\u6b7b\u6c99\u7bb1\u7559\u4e0b\u7684 worktree \u5143\u6570\u636e\u6b8b\u7559\u88ab\u663e\u5f0f\u8bbe\u8ba1\u8fdb\u6062\u590d\u8bed\u4e49<\/strong>\u3002<\/li><li><strong>L98-103 \u4f9d\u8d56\u5b89\u88c5<\/strong>\uff1a\u6709 <code>NODE_MODULES_SRC<\/code> \u5c31 <code>cp -r<\/code> \u8986\u76d6\uff08\u9884\u6784\u5efa node_modules\uff0c\u955c\u50cf\u6784\u5efa\u671f\u51c6\u5907\uff0c\u8fd0\u884c\u65f6\u96f6\u4e0b\u8f7d\u51b7\u542f\u52a8\uff09\uff0c\u7136\u540e<strong>\u4ecd\u7136<\/strong>\u8dd1 <code>npm install<\/code> \u5bf9\u9f50\u2014\u2014\u56e0\u4e3a\u9875\u9762\u4ee3\u7406\u53ef\u80fd\u5404\u81ea\u52a0\u4e86\u5305\uff0c\u6700\u7ec8 merge \u540e\u8fd8\u9700\u518d install \u4e00\u6b21\uff08\u89c1 Phase 7 step 4 \u7684\u6ce8\u91ca &#8220;setup-local.sh installs before later branches are merged, so this final install reconciles subagent dependency changes&#8221;\uff09\u3002<\/li><li><strong>\u5b83\u4e0d\u7ba1\u7684\u4e8b<\/strong>\uff1a\u5171\u4eab\u4ed3\u7684\u521b\u5efa\uff08&#8221;Creating it &#8230; is the job of whatever workflow lays the first template \u2014 not this skill&#8221;\uff0cL64-68\uff09\u2014\u2014\u804c\u8d23\u5207\u5f97\u5f88\u5e72\u51c0\u3002<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5de5\u7a0b\u8d28\u91cf\u8bc4\u4ef7<\/strong>\uff1a105 \u884c\u8986\u76d6\u4e86\u5e42\u7b49\u91cd\u5165\u3001\u810f\u76ee\u5f55\u6062\u590d\u3001\u6b7b\u6c99\u7bb1\u6b8b\u7559\u3001\u5bc6\u94a5\u7ee7\u627f\u3001\u5feb\u76d8\/\u6162\u76d8\u5206\u5c42\u516d\u4e2a\u771f\u5b9e\u5de5\u7a0b\u95ee\u9898\uff0c\u65e0\u4efb\u4f55 LLM\/runtime \u4f9d\u8d56\uff0c\u7eaf git+bash+npm \u539f\u8bed\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"3-vibecodingwebappswarm%25e7%25bc%2596%25e6%258e%2592%25e5%25b1%2582%25e4%25b8%25bb%25e4%25b9%2590%25e8%25b0%25b1skillmd-415%25e8%25a1%258c%25e5%2585%25a8%25e6%2596%2587%25e5%25b7%25b2%25e8%25af%25bb\" class=\"wp-block-heading\">3. vibecoding-webapp-swarm\uff1a\u7f16\u6392\u5c42\u4e3b\u4e50\u8c31\uff08SKILL.md 415\u884c\u5168\u6587\u5df2\u8bfb\uff09<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u56fa\u5b9a\u6280\u672f\u6808\u5199\u6b7b\u5728 frontmatter \u4e4b\u540e\u7b2c\u4e00\u6bb5\uff1aNode 20 \/ Tailwind v3.4.19 \/ Vite v7.2.4 \/ React 19+TS \/ shadcn\/ui\uff08\u7248\u672c\u9489\u6b7b\uff0c\u4e14\u8981\u6c42&#8221;communicate to all subagents&#8221;\u2014\u2014\u6bcf\u4e2a\u5b50\u4ee3\u7406\u63d0\u793a\u8bcd\u90fd\u5fc5\u987b\u5e26\u7248\u672c\u53f7\uff09\u3002<\/p>\n\n\n\n<h3 id=\"31-%25e4%25b8%2583%25e9%2598%25b6%25e6%25ae%25b5%25e6%25b5%2581%25e6%25b0%25b4%25e7%25ba%25bfmode-a\" class=\"wp-block-heading\">3.1 \u4e03\u9636\u6bb5\u6d41\u6c34\u7ebf\uff08Mode A\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Phase 1 \u4e3b\u4ee3\u7406<\/strong>\uff1a\u8dd1 <code>init-webapp.sh<\/code>\uff08<code>PROJECT_PATH=$HOME\/init REMOTE_PATH=\/mnt\/agents\/output\/app<\/code>\uff09\uff0c\u7814\u7a76\u7ed3\u679c\u5199 <code>\/mnt\/agents\/output\/info.md<\/code>\u3002\u786c\u7ea6\u675f\uff1a&#8221;Do NOT plan page structure, page count, visual direction, or design details in this phase. Those decisions belong entirely to the Designer.&#8221; \u2014\u2014 \u4e3b\u4ee3\u7406\u5728\u6b64\u9636\u6bb5\u88ab\u660e\u786e\u5265\u593a\u521b\u610f\u6743\u3002<\/li><li><strong>Phase 2 \u8bbe\u8ba1<\/strong>\uff1a\u521b\u5efa\u540d\u4e3a <strong>Pro_Designer<\/strong> \u7684\u5b50\u4ee3\u7406\u3002\u5173\u952e\u8bc1\u636e\uff1a<em>&#8220;name must contain &#8216;designer&#8217; (case-insensitive) for model routing&#8221;<\/em> \u2014\u2014 <strong>\u5b50\u4ee3\u7406\u540d\u79f0\u5b57\u7b26\u4e32\u53c2\u4e0e runtime \u7684\u6a21\u578b\u8def\u7531<\/strong>\uff08\u8bbe\u8ba1\u5e08\u89d2\u8272\u8def\u7531\u5230\u4e0d\u540c\/\u66f4\u5f3a\u7684\u6a21\u578b\uff09\uff0c\u8fd9\u662f\u6c99\u7bb1 runtime \u7684\u9690\u85cf\u5951\u7ea6\uff0c\u63d0\u793a\u8bcd\u91cc\u88ab\u5f53\u6210\u786c\u6027\u7ea6\u5b9a\u4f7f\u7528\u3002<\/li><li><strong>Phase 4 \u811a\u624b\u67b6\u4ee3\u7406<\/strong>\uff08\u5355\u4e2a\u5b50\u4ee3\u7406\uff09\uff1a\u63d0\u793a\u8bcd 16 \u6761\u9010\u5b57\u6761\u6b3e\uff0c\u542b AI \u5a92\u4f53\u8d44\u4ea7\u751f\u6210\uff08&#8221;use the image generation tool&#8230; Save all generated media to <code>$HOME\/app-scaffold\/public\/<\/code>&#8220;\uff09\u3001\u5171\u4eab\u7ec4\u4ef6\u8def\u5f84\u5199\u6b7b\uff08<code>src\/components\/Navbar.tsx|Footer.tsx|Layout.tsx<\/code>\uff09\u3001Layout\/\u8def\u7531\u5951\u7ea6\uff08<code>&lt;Outlet\/&gt;<\/code> \u5d4c\u5957\u8def\u7531 vs <code>{children}<\/code> \u5305\u88f9\uff0c\u4e8c\u9009\u4e00\u7981\u6b62\u6df7\u7528\uff09\u3001\u5168\u6808\u65f6 Login.tsx \u53ea\u505a\u5360\u4f4d + Navbar \u91cc\u57cb <code>{\/<em> AUTH-SLOT: rewired to useAuth() in Phase 5 <\/em>\/}<\/code> \u6ce8\u91ca\u951a\u70b9\u3002<\/li><li><strong>Phase 5 backend graft \u7531\u4e3b\u4ee3\u7406\u4eb2\u81ea\u8dd1<\/strong>\uff08\u4e0d\u5f00\u5b50\u4ee3\u7406\uff09\u3002\u539f\u56e0\u5199\u5f97\u5f88\u767d\uff1a&#8221;because <code>init.sh<\/code> writes a gitignored <code>.env<\/code> that never travels through the merge: it survives only in the sandbox where it ran, which must be the main agent&#8217;s own&#8221;\u3002\u8dd1\u5b8c <code>cp $HOME\/app-backend\/.env \/mnt\/agents\/output\/app\/.env<\/code> \u6682\u5b58\uff0c<strong>\u7136\u540e\u624d<\/strong>\u4ece master \u6d3e\u751f\u9875\u9762\u5206\u652f\u2014\u2014\u4fdd\u8bc1\u9875\u9762\u4ee3\u7406\u7ee7\u627f\u811a\u624b\u67b6 + tRPC client\u3002<\/li><li><strong>Phase 6 \u5e76\u884c\u9875\u9762\u4ee3\u7406<\/strong>\uff1a&#8221;Launch <strong>all<\/strong> subagents simultaneously (single message, multiple <code>task<\/code> tool calls)&#8221;\u3002\u6bcf\u4ee3\u7406 13 \u6761\u786c\u6027\u6761\u6b3e\uff0c\u6838\u5fc3\u662f<strong>\u7f1d\u5408\u70b9\u51bb\u7ed3\u6e05\u5355<\/strong>\uff1a<\/li><\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>  &gt; &#8220;Must NOT modify: <code>src\/App.tsx<\/code>, <code>src\/index.css<\/code>, shared components, <code>public\/<\/code>. <strong>Full-stack: also must NOT modify <code>api\/router.ts<\/code> or <code>db\/schema.ts<\/code><\/strong> \u2014 these are merge-conflict seams owned by the backend graft\/product pass. *<em>Auth apps: also must NOT create or modify <code>src\/pages\/Login.tsx<\/code>, <code>src\/hooks\/useAuth.ts<\/code>, <code>src\/const.ts<\/code>, <code>src\/components\/AuthLayout<\/em>.tsx<\/code>, <code>src\/providers\/trpc.tsx<\/code>, or anything under <code>api\/<\/code>**&#8221;<\/p><\/blockquote>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Phase 7 \u4e3b\u4ee3\u7406\u6536\u53e3<\/strong>\uff1a<code>final-build<\/code> worktree \u91cc <strong>octopus merge<\/strong>\uff08<code>git merge g1 g2 ... --no-edit<\/code>\uff0c\u5931\u8d25\u5219\u9000\u5316\u4e3a\u9010\u4e2a merge\uff09\u2192 \u624b\u5de5\u63a5\u7ebf App.tsx \u8def\u7531 \u2192 <strong>grep \u5951\u7ea6\u68c0\u67e5<\/strong>\uff08<code>grep -nw \"fixed\" Navbar.tsx<\/code> \u67e5\u5b9a\u4f4d\u5951\u7ea6\uff1b\u5168\u6808 auth \u65f6 <code>grep -rn \"oauth\/authorize\" src\/ | grep -v Login.tsx<\/code> \u5fc5\u987b\u4e3a\u7a7a\u3001<code>grep -n 'scope' Login.tsx<\/code> \u5fc5\u987b\u662f &#8220;profile&#8221;\uff09\u2192 <code>npm install &amp;&amp; npm run build<\/code> \u6210\u529f\uff08\u6700\u591a 3 \u6b21\u91cd\u8bd5\uff09\u2192 \u624d\u5141\u8bb8\u8c03 <code>mshtools-website_version_manager<\/code> \u7684 <code>build_version<\/code>\u3002<\/li><\/ul>\n\n\n\n<h3 id=\"32-%25e5%258f%258d%25e9%25aa%258c%25e8%25af%2581%25e8%259e%25ba%25e6%2597%258b%25e7%25ba%25aa%25e5%25be%258b%25e5%2585%25a8%25e5%25a5%2597%25e6%258a%2580%25e8%2583%25bd%25e5%258f%258d%25e5%25a4%258d%25e5%2587%25ba%25e7%258e%25b0%25e7%259a%2584%25e5%25a4%25b1%25e6%2595%2588%25e6%25a8%25a1%25e5%25bc%258f%25e5%25af%25b9\" class=\"wp-block-heading\">3.2 \u53cd\u9a8c\u8bc1\u87ba\u65cb\u7eaa\u5f8b\uff08\u5168\u5957\u6280\u80fd\u53cd\u590d\u51fa\u73b0\u7684\u5931\u6548\u6a21\u5f0f\u5bf9\u7b56\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>\u5b50\u4ee3\u7406\u6761\u6b3e\u7b2c 16\/13 \u6761\u9010\u5b57\uff1a&#8221;After committing, return immediately. No need to run the dev server, open a browser, take screenshots, or verify your work.&#8221;<\/li><li>\u4e3b\u4ee3\u7406 Core Principle 7\uff1a&#8221;Create the version once per delivery and STOP. One <code>build_version<\/code> call per delivery, then no verification loop: do NOT open the URL, take screenshots, or review.&#8221;<\/li><li>\u7248\u672c\u5de5\u5177\u672c\u8eab\u8bbe\u8ba1\u6210 git-native \u95ed\u73af\uff1a<code>build_version<\/code> = \u628a <code>project_dir<\/code> \u72b6\u6001 commit\uff08\u7248\u672c ID = commit \u77ed\u54c8\u5e0c\uff09\uff1b<code>rollback<\/code> = \u6062\u590d\u6811\u518d commit\uff08roll-forward\uff0c\u4e0d\u6539\u5199\u5386\u53f2\uff09\u2014\u2014<strong>\u7528 git \u8bed\u4e49\u9501\u6b7b&#8221;\u4ea4\u4ed8\u540e\u4e0d\u8bb8\u518d\u52a8&#8221;<\/strong>\u3002<\/li><\/ul>\n\n\n\n<h3 id=\"33-static-vs-dynamic-%25e5%258f%258c%25e4%25ba%25a4%25e4%25bb%2598%25e8%25b7%25af%25e5%25be%2584\" class=\"wp-block-heading\">3.3 static vs dynamic \u53cc\u4ea4\u4ed8\u8def\u5f84<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>build_version<\/code> \u7684 <code>project_dir<\/code> \u6307\u5411\u968f <code>type<\/code> \u5206\u53c9\uff1astatic\uff08\u7eaf\u524d\u7aef\uff09\u5fc5\u987b\u6307\u5411 <code>\/mnt\/agents\/output\/app<\/code>\uff08\u5e73\u53f0\u4ece\u90a3\u91cc\u6784\u5efa\uff0cmerge \u5373\u4ea4\u4ed8\uff09\uff1bdynamic\uff08\u5168\u6808\uff09\u5fc5\u987b\u6307\u5411\u5e26 <code>node_modules+.env<\/code> \u7684 worktree\uff08\u670d\u52a1\u7aef\u6784\u5efa\u5e76\u8d77 dev server \u9884\u89c8\uff09\u3002\u8fed\u4ee3\u7eaa\u5f8b\uff1amaster \u662f\u552f\u4e00\u6301\u4e45\u8c31\u7cfb\uff0c\u4fee bug\/\u56de\u6eda\u4e00\u5f8b\u4ece master \u65b0\u6d3e\u5206\u652f+\u65b0 worktree\uff0c\u7981\u6b62\u590d\u7528\u65e7 worktree\uff08&#8221;a reused worktree is stale relative to master&#8230; can fold leftover debris into the version tool&#8217;s commits&#8221;\uff09\u3002<\/p>\n\n\n\n<h3 id=\"34-%25e8%25a7%2592%25e8%2589%25b2%25e6%25a8%25a1%25e6%259d%25bf%25e4%25b8%258e%25e9%2598%25b2%25e6%25b1%25a1%25e6%259f%2593%25e8%25ae%25be%25e8%25ae%25a1\" class=\"wp-block-heading\">3.4 \u89d2\u8272\u6a21\u677f\u4e0e&#8221;\u9632\u6c61\u67d3&#8221;\u8bbe\u8ba1<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Designer \u7684 system prompt \u548c task prompt \u90fd\u662f<strong>\u9010\u5b57\u56fa\u5b9a\u6a21\u677f<\/strong>\uff0c\u53ea\u5141\u8bb8\u586b <code>{USER_QUERY}<\/code> \u548c <code>{RESEARCH}<\/code> \u4e24\u4e2a\u5360\u4f4d\u7b26\uff0c\u4e14\u4e09\u6761\u660e\u4ee4\uff1a&#8221;Do NOT add sections like &#8216;Key Context&#8217;&#8230;&#8221;\u3001&#8221;Do NOT add your own creative interpretation&#8230;&#8221;\u3001&#8221;Do NOT paraphrase the user request \u2014 copy it character-for-character.&#8221; \u2014\u2014 \u628a\u6240\u6709\u521b\u610f\u51b3\u7b56\u538b\u7ed9 Designer \u5355\u4e00\u89d2\u8272\uff0c<strong>\u9632\u6b62\u4e3b\u4ee3\u7406\u7684\u89c4\u5212\u51b2\u52a8\u6c61\u67d3\u8bbe\u8ba1<\/strong>\u3002\u8fd9\u662f\u591a\u4ee3\u7406\u7cfb\u7edf\u91cc&#8221;\u4e3b\u4ee3\u7406\u804c\u6743\u6700\u5c0f\u5316&#8221;\u7684\u6559\u79d1\u4e66\u5f0f\u5199\u6cd5\u3002<\/p>\n\n\n\n<h3 id=\"35-%25e4%25b8%2589%25e4%25b8%25aa-references-%25e6%2596%2587%25e4%25bb%25b6%25e5%2585%25a8%25e6%2596%2587%25e5%25b7%25b2%25e8%25af%25bb\" class=\"wp-block-heading\">3.5 \u4e09\u4e2a references \u6587\u4ef6\uff08\u5168\u6587\u5df2\u8bfb\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><code>design-guide.md<\/code>\uff0890\u884c\uff09\uff1aDesigner \u4e13\u7528\u3002\u89c6\u89c9\u80fd\u529b\u6e05\u5355\uff08GSAP\/Framer\/Three.js\/Lenis\uff09\u3001\u6027\u80fd\u62a4\u680f\uff08\u6bcf\u89c6\u53e3 \u22648-10 \u4e2a\u540c\u65f6\u52a8\u753b\u5143\u7d20\u3001\u6bcf section \u53ea\u8bb8\u4e00\u4e2a\u91cd shader\uff09\u3001\u8bbe\u8ba1\u6587\u6863\u683c\u5f0f\uff08\u5168\u5c40 design.md + \u6bcf\u9875 [page].md\uff0c\u6bcf section \u5fc5\u987b\u6709\u5177\u4f53\u53c2\u6570\u7684 Animation \u5b57\u6bb5\uff09\u3001<strong>Asset Manifest \u5951\u7ea6<\/strong>\uff08Designer \u53ea\u5199\u8d44\u4ea7\u6e05\u5355\u4e0d\u751f\u6210\u8d44\u4ea7\uff0c\u751f\u6210\u662f Scaffold \u4ee3\u7406\u7684\u6d3b\u2014\u2014\u804c\u8d23\u5206\u79bb\u5199\u8fdb\u6587\u6863 &#8220;What You Do NOT Do&#8221;\uff09\u3002<\/li><li><code>react-dev.md<\/code>\uff08216\u884c\uff09\uff1a\u6240\u6709\u5b9e\u73b0\u4ee3\u7406\uff08scaffold+\u9875\u9762\uff09\u5fc5\u8bfb\uff0cDesigner \u548c\u4e3b\u4ee3\u7406<strong>\u4e0d\u8bfb<\/strong>\u2014\u2014\u9605\u8bfb\u6743\u9650\u4e5f\u6309\u89d2\u8272\u5206\u914d\u3002\u5185\u5bb9\u662f\u88ab\u5b9e\u6218\u6253\u78e8\u8fc7\u7684 React \u9677\u9631\u6e05\u5355\uff1aGSAP\/Framer \u5e93\u9694\u79bb\uff08\u540c\u7ec4\u4ef6\u6811\u7981\u6b62\u6df7\u7528\uff09\u3001Framer \u6027\u80fd\u89c4\u5219\uff08\u9ad8\u9891\u52a8\u753b\u7981 useState \u7528 MotionValue\uff09\u3001<code>min-h-[100dvh]<\/code> \u66ff\u4ee3 <code>h-screen<\/code>\u3001canvas \u5c3a\u5bf8\u5fc5\u987b inline style\u3001\u7c92\u5b50\u4ea4\u4e92\u7528 lerp \u4f4d\u79fb\u8870\u51cf\u4e0d\u6539\u57fa\u51c6\u4f4d\u7f6e\u3001<strong>Layout+\u8def\u7531\u5951\u7ea6\u4e13\u7ae0<\/strong>\uff08\u6df7\u7528 <code>&lt;Outlet\/&gt;<\/code> \u4e0e <code>{children}<\/code> \u4f1a&#8221;renders a blank <code>&lt;main&gt;<\/code> with no error, and <code>npm run build<\/code> still passes&#8221;\u2014\u2014\u9759\u9ed8\u7a7a\u767d\u9875\u662f\u8fd0\u884c\u65f6 bug \u4e0d\u662f\u7c7b\u578b\u9519\u8bef\uff09\u3001Full-Stack Auth Contract \u8868\uff08useAuth\/LOGIN_PATH \u7528\u6cd5 vs \u624b\u5199 OAuth URL \u7684\u7981\u4ee4\uff09\u3002<\/li><li><code>product-knowledge.md<\/code>\uff0846\u884c\uff09\uff1a<strong>\u5e73\u53f0\u80fd\u529b\u4e8b\u5b9e\u6ce8\u5165<\/strong>\u3002\u6838\u5fc3\u4e8b\u5b9e\uff1abuild_version \u8fd4\u56de\u7248\u672c ID \u4e0d\u8fd4\u56de URL\uff08&#8221;Never fabricate or guess a URL&#8221;\uff09\u3001preview\u2260publish\uff08\u53d1\u5e03\u662f\u7528\u6237\u624b\u70b9\u6309\u94ae\u5f97 <code>&lt;name&gt;.ok.kimi.link<\/code>\uff0cagent \u6c38\u8fdc\u4e0d\u80fd\u8bf4&#8221;\u5df2\u4e0a\u7ebf&#8221;\uff09\u3001\u8fb9\u754c\uff08\u4e0d\u652f\u6301\u7b2c\u4e09\u65b9\u652f\u4ed8\/\u7b2c\u4e09\u65b9 OAuth\u3001\u5bfc\u51fa\u4ee3\u7801\u4e0d\u5e26 Kimi \u767b\u5f55\u548c\u5e73\u53f0\u6570\u636e\u5e93\uff09\u3001\u6392\u969c\u8bdd\u672f\uff08\u9884\u89c8\u7a7a\u767d\u5148\u67e5\u9879\u76ee\u662f\u5426\u5728 <code>\/mnt\/agents\/output\/app<\/code> \u4e0b\uff09\u3002\u8fd9\u662f\u9632\u6b62\u6a21\u578b\u5e7b\u89c9\u5e73\u53f0\u80fd\u529b\u7684\u6807\u51c6\u505a\u6cd5\u3002<\/li><\/ul>\n\n\n\n<h3 id=\"36-mode-b%25e5%258d%2595%25e4%25bb%25a3%25e7%2590%2586%25e4%25be%25a7%25e7%25ba%25bf\" class=\"wp-block-heading\">3.6 Mode B\uff08\u5355\u4ee3\u7406\u4fa7\u7ebf\uff09<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7f51\u7ad9\u662f&#8221;\u526f\u4ea7\u54c1\u4e14\u7b80\u5355\uff081-3\u9875\uff09&#8221;\u65f6\u964d\u7ea7\u4e3a\u5355\u4ee3\u7406\uff1a\u4e3b\u4ee3\u7406 init \u2192 \u5355\u4e2a\u5b50\u4ee3\u7406&#8221;\u8bbe\u8ba1+\u5b9e\u73b0\u4e00\u80a9\u6311&#8221;\uff08\u5199\u5355\u4e2a design.md \u7136\u540e\u5b9e\u73b0\u5168\u7ad9\uff09\u2192 \u4e3b\u4ee3\u7406 build+static \u4ea4\u4ed8\u3002\u6ce8\u610f\u4e0e general-swarm \u7684\u6a21\u5f0f\u9009\u62e9\u54f2\u5b66\u76f8\u53cd\uff1awebapp-swarm &#8220;When in doubt \u2192 Mode A&#8221;\uff0cgeneral-swarm &#8220;When in doubt \u2192 Mode B&#8221;\u2014\u2014\u56e0\u4e3a\u4e24\u8005\u7684\u9ed8\u8ba4\u4efb\u52a1\u5bc6\u5ea6\u4e0d\u540c\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"4-vibecodinggeneralswarm%25e6%25b3%259b%25e5%258c%2596%25e9%25aa%25a8%25e6%259e%25b6skillmd-73%25e8%25a1%258c%25e5%2585%25a8%25e6%2596%2587%25e5%25b7%25b2%25e8%25af%25bb\" class=\"wp-block-heading\">4. vibecoding-general-swarm\uff1a\u6cdb\u5316\u9aa8\u67b6\uff08SKILL.md 73\u884c\u5168\u6587\u5df2\u8bfb\uff09<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u540c\u4e00\u9aa8\u67b6\u62bd\u6389 web \u7279\u4f8b\u540e\u7684\u901a\u7528\u7248\uff0c\u5dee\u5f02\u70b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><code>SPEC.md<\/code> \u53d6\u4ee3 design.md \u4f5c\u4e3a\u5355\u4e00\u4e8b\u5b9e\u6e90\uff1b&#8221;Spec fidelity: exact interfaces, exact module boundaries, exact data formats&#8221;\u3002<\/li><li>\u6838\u5fc3\u539f\u5219\u7b2c 7 \u6761\u6362\u6210 <strong>&#8220;Test before merge&#8221;<\/strong>\uff08\u5b50\u4ee3\u7406\u8dd1\u6a21\u5757\u6d4b\u8bd5\u3001\u4e3b\u4ee3\u7406 merge \u540e\u8dd1\u96c6\u6210\u6d4b\u8bd5\uff09\u2014\u2014\u901a\u7528\u7f16\u7801\u6ca1\u6709 <code>npm run build<\/code> \u8fd9\u4e00\u4e2a\u5929\u7136\u95f8\u95e8\uff0c\u6240\u4ee5\u663e\u5f0f\u8865\u6d4b\u8bd5\u7eaa\u5f8b\u3002<\/li><li>worktree \u7528\u6cd5\u9000\u5316\u4e3a<strong>\u88f8 git \u547d\u4ee4<\/strong>\uff08<code>git worktree add $HOME\/work-<branch> <branch><\/code>\uff09\uff0c\u4e0d\u8c03 setup-local.sh\u2014\u2014\u56e0\u4e3a\u901a\u7528\u9879\u76ee\u6ca1\u6709\u7edf\u4e00\u7684\u9884\u6784\u5efa node_modules \u53ef\u590d\u5236\u3002\u5171\u4eab\u4ed3\u8def\u5f84\u4e5f\u4ece <code>output\/app<\/code> \u53d8\u4e3a <code>output\/project<\/code>\u3002<\/li><li>\u8986\u76d6\u8303\u56f4\u81ea\u8ff0\u6781\u5927\uff1a&#8221;Python tools, data pipelines, ML systems, APIs, games, bots, CLI apps, mobile apps&#8221;\u2014\u201473 \u884c\u663e\u7136\u652f\u6491\u4e0d\u4e86\u8fd9\u4e48\u591a\u57df\uff0c\u5b83\u662f&#8221;\u515c\u5e95\u7f16\u6392\u5baa\u6cd5&#8221;\u800c\u975e\u64cd\u4f5c\u624b\u518c\u3002frontmatter \u7528\u8bcd\u662f &#8220;MANDATORY for ANY coding task not covered by vibecoding-webapp-swarm&#8221;\u3002<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"5-webappbuildingswarm%25e5%2588%25b6%25e5%2593%2581%25e5%25b1%2582%25e5%2589%258d%25e7%25ab%25af\" class=\"wp-block-heading\">5. webapp-building-swarm\uff1a\u5236\u54c1\u5c42\uff08\u524d\u7aef\uff09<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>SKILL.md<\/strong>\uff0898\u884c\uff0c<code>type: artifact<\/code>\uff09\uff1a\u89e3\u91ca\u53cc\u5c42\u67b6\u6784\u8868\u3001\u4e09\u4e2a\u811a\u672c\u7684\u7528\u6cd5\u300113 \u5957\u6a21\u677f\u6e05\u5355\u3002\u6a21\u677f\u8868\uff1a0-origin\uff08\u9ed8\u8ba4\uff0c40+ shadcn\/ui \u7ec4\u4ef6\uff09+ airlens\/exhibition\/exvia\/forest\/kaleo\/lipstick\/modo\/photographer\/playza\/shibumi\/swiss-dada\/villa \u5171 12 \u5957\u98ce\u683c\u6a21\u677f\uff08GSAP\/Three.js \u91cd\u5ea6\u89c6\u89c9\u7ad9\u5c45\u591a\uff09\u3002<\/li><li><strong>templates\/<\/strong>\uff1a\u6bcf\u5957\u6a21\u677f\u4e00\u4e2a\u76ee\u5f55\u542b <code>&lt;name&gt;.zip<\/code>\uff08\u5b9e\u6d4b 0-origin.zip 129KB\u3001airlens 153KB\u3001exhibition 172KB\u3001playza 157KB\uff09+ <code>info.md<\/code>\uff080-origin \u7684 info.md \u662f\u521d\u59cb\u5316\u56de\u663e\uff1a\u7ec4\u4ef6\u6e05\u5355 40+\u3001\u76ee\u5f55\u7ed3\u6784\u3001import \u793a\u4f8b\u2014\u2014<strong>\u7ed9 agent \u770b\u7684\u6a21\u677f\u8bf4\u660e\u4e66<\/strong>\uff09+ \u4e00\u4e2a\u65e5\u671f\u76ee\u5f55\uff08<code>2026-03-11\/<\/code>\uff0c\u7591\u4e3a\u7248\u672c\u5feb\u7167\uff09\u3002<\/li><li><strong>init-webapp.sh<\/strong>\uff08120\u884c\u9010\u884c\u5df2\u8bfb\uff09\uff1a\u89e3 zip \u5230 \/tmp \u2192 \u62f7 info.md \u2192 \u4fbf\u643a sed \u66ff\u6362 <code>&lt;title&gt;<\/code>\uff08L21-25 \u7279\u610f\u5199\u4e86 GNU\/BSD sed \u517c\u5bb9\u51fd\u6570\uff0c\u6ce8\u91ca\u8bf4\u65e7\u7248 OSTYPE \u5224\u65ad\u5728\u88c5\u4e86 GNU sed \u7684\u673a\u5668\u4e0a\u574f\u8fc7\u2014\u2014\u6709\u5b9e\u6218\u4fee\u5751\u75d5\u8ff9\uff09\u2192 \u62f7\u5165\u9879\u76ee \u2192 <strong>\u8986\u76d6\u9884\u6784\u5efa node_modules<\/strong> \u2192 \u975e\u9ed8\u8ba4\u6a21\u677f\u624d\u8865\u8dd1 <code>npm install<\/code> \u2192 \u6709 <code>REMOTE_PATH<\/code> \u65f6\uff1a<code>git init &amp;&amp; git add -A &amp;&amp; git commit<\/code> \u540e <strong><code>git clone $PROJECT_PATH $REMOTE_PATH<\/code> \u518d <code>git remote remove origin<\/code><\/strong>\u2014\u2014\u672c\u5730 clone \u5f53&#8221;\u5171\u4eab\u4ed3&#8221;\u7528\uff0cclone \u662f\u4e3a\u4e86\u5f97\u5230\u5e72\u51c0\u7684 <code>.git<\/code>\uff08clone \u5929\u7136\u4e0d\u542b node_modules \u7b49 gitignored \u5185\u5bb9\uff09\uff0cremove origin \u662f\u4eea\u5f0f\u6027\u7684&#8221;\u6b64\u4ed3\u65e0\u8fdc\u7aef&#8221;\u58f0\u660e\u3002<\/li><li><strong>.prepare-template.sh<\/strong>\uff0827\u884c\uff09\uff1a<strong>\u955c\u50cf\u6784\u5efa\u671f<\/strong>\u8dd1\u4e00\u6b21\u2014\u2014\u89e3 0-origin \u2192 <code>npm install<\/code> \u2192 \u6574\u4f53\u62f7\u5230 <code>scripts\/template\/<\/code>\uff08\u542b node_modules\uff09\u3002\u8fd0\u884c\u65f6\u6240\u6709 <code>cp -r node_modules<\/code> \u90fd\u6765\u6e90\u4e8e\u6b64\uff0c\u5b9e\u73b0\u96f6\u4e0b\u8f7d\u51b7\u542f\u52a8\u3002\u6ce8\u91ca\u660e\u786e &#8220;Run once at image build time, not at runtime.&#8221;\u3002<\/li><li>\u4e0e\u975e swarm \u7248 <code>webapp-building<\/code> \u7684\u5dee\u5f02\uff08\u7b2c\u4e00\u8f6e 09 \u7ae0\u5df2\u5b9e\u6d4b\uff09\uff1a\u975e swarm \u7248\u6a21\u677f\u6539\u4ece Portal \u53ea\u8bfb\u6302\u8f7d <code>\/mnt\/agents\/.websites-templates<\/code> \u8bfb\u3001\u5e26\u8def\u5f84\u9003\u9038\u9632\u62a4\u3001\u4e14\u4f1a\u5411 portal <code>POST \/api\/v1\/apps<\/code> \u6ce8\u518c app\u2014\u2014swarm \u7248\u53cd\u800c\u6ca1\u6709 portal \u6ce8\u518c\uff08\u6ce8\u518c\u7531 backend graft \u6216\u5e73\u53f0\u4fa7\u5b8c\u6210\uff09\u3002<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"6-backendbuildingswarm%25e5%2588%25b6%25e5%2593%2581%25e5%25b1%2582%25e5%2590%258e%25e7%25ab%25af%25e5%2585%25a8%25e5%25a5%2597%25e6%258a%2580%25e6%259c%25af%25e5%2590%25ab%25e9%2587%258f%25e6%259c%2580%25e9%25ab%2598\" class=\"wp-block-heading\">6. backend-building-swarm\uff1a\u5236\u54c1\u5c42\uff08\u540e\u7aef\uff0c\u5168\u5957\u6280\u672f\u542b\u91cf\u6700\u9ad8\uff09<\/h2>\n\n\n\n<h3 id=\"61-skillmd333%25e8%25a1%258c%25e8%25a6%2581%25e7%2582%25b9\" class=\"wp-block-heading\">6.1 SKILL.md\uff08333\u884c\uff09\u8981\u70b9<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>\u6808\uff1atRPC 11 + Drizzle ORM + Hono + MySQL + OAuth 2.0\uff08Kimi \u767b\u5f55\uff09\u3002\u5ac1\u63a5\u7269\uff1a<code>api\/<\/code>\u3001<code>contracts\/<\/code>\u3001\u53ef\u9009 <code>db\/<\/code>\uff0c<strong>&#8220;never replaces or modifies existing frontend files&#8221;<\/strong>\u3002<\/li><li>\u7279\u6027\u589e\u91cf\u5b89\u88c5\uff1abase\uff08Hono+tRPC+contracts\uff09\u9996\u8dd1\u5fc5\u88c5\uff1b<code>db<\/code>\uff08Drizzle+MySQL\uff09\uff1b<code>auth<\/code>\uff08Kimi OAuth\uff0c\u81ea\u52a8\u542b db\uff09\u3002\u9ed8\u8ba4\u65e0\u53c2\u6570 = auth\u3002<\/li><li><code>.backend-features.json<\/code> manifest \u95e8\u63a7\u91cd\u5165\uff1a\u91cd\u590d\u8dd1\u53ea\u88c5 delta\uff1bgraft \u81ea\u6709\u6587\u4ef6\uff08Login.tsx\/useAuth\/AuthLayout\uff09<strong>\u6bcf\u6b21\u6743\u5a01\u8986\u76d6<\/strong>\uff08<code>cp<\/code>\uff09\uff0c\u7528\u6237\u53ef\u6269\u5c55\u6587\u4ef6\uff08schema.ts\/seed.ts\/connection.ts\/drizzle.config.ts\uff09<strong>\u6709\u5219\u8ba9\u4f4d<\/strong>\uff08<code>safe_copy<\/code>\/<code>cp -n<\/code>\uff09\u2014\u2014\u6240\u6709\u6743\u8fb9\u754c\u7528 cp \u7684\u65d7\u6807\u8bed\u4e49\u5b9e\u73b0\uff0c\u5f88\u5de7\u3002<\/li><li>19 \u6761 &#8220;Common Mistakes&#8221; \u6e05\u5355\u662f\u8e29\u5751\u65e5\u5fd7\u7684\u7cbe\u534e\uff1a<code>serial()<\/code> \u662f <code>bigint unsigned auto_increment<\/code>\uff08MySQL \u6bcf\u8868\u53ea\u5141\u8bb8\u4e00\u4e2a\u81ea\u589e\u5217\uff0cFK \u5fc5\u987b <code>bigint(..., unsigned: true)<\/code>\uff09\uff1b\u7981\u624b\u5199 DB \u5b9e\u4f53 interface\uff08<code>typeof table.$inferSelect<\/code>\uff0c\u56e0\u4e3a superjson \u4f1a\u7ed9 <code>Date<\/code> \u4e0d\u662f <code>string<\/code>\uff09\uff1b<code>api<\/code> \u4e0d\u662f tRPC client \u540d\uff08\u662f <code>trpc<\/code>\uff0cfrom <code>@\/providers\/trpc<\/code>\uff09\uff1b<code>@\/<\/code> \u522b\u540d\u53ea\u5230 <code>src\/<\/code>\uff08api \u91cc\u8981\u7528 <code>@db\/<\/code>\u3001<code>@contracts\/<\/code>\uff09\uff1bNEVER <code>db:push --force<\/code>\u3001NEVER drop tables \u4fee migration\u3002<\/li><\/ul>\n\n\n\n<h3 id=\"62-initsh674%25e8%25a1%258c%25e9%2580%2590%25e6%25ae%25b5%25e5%25b7%25b2%25e8%25af%25bb%25e5%25ab%2581%25e6%258e%25a5%25e5%25bc%2595%25e6%2593%258e\" class=\"wp-block-heading\">6.2 init.sh\uff08674\u884c\u9010\u6bb5\u5df2\u8bfb\uff09\u2014\u2014\u5ac1\u63a5\u5f15\u64ce<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7ed3\u6784\uff1a\u53c2\u6570\u89e3\u6790\uff08<code>--features<\/code> \u4e0e <code>--template<\/code> \u4e92\u65a5\uff09\u2192 \u6821\u9a8c\uff08npm\u3001src\/ \u5b58\u5728\uff09\u2192 git \u515c\u5e95\uff08safe.directory\u3001wip commit \u4fdd\u5b58\u73b0\u573a\uff09\u2192 manifest \u8bfb\u5199\uff08\u542b<strong>\u9057\u7559\u68c0\u6d4b<\/strong>\uff1a\u65e0 manifest \u4f46\u6709 <code>api\/<\/code> \u5c31\u63a2\u9488\u5f0f\u63a8\u65ad\u5df2\u88c5\u7279\u6027\u5e76\u8865\u5199 manifest\uff0cL194-227\uff09\u2192 \u7279\u6027\u5b89\u88c5\uff08base\/db\/auth \u4e09\u4e2a\u51fd\u6570\uff09\u2192 <strong>portal \u4f9b\u5e94<\/strong> \u2192 npm install \u2192 \u81ea\u52a8\u63a5\u7ebf \u2192 \u5199 manifest \u2192 commit\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>portal \u4f9b\u5e94\uff08L495-546\uff0c\u5168\u811a\u672c\u6700\u5173\u952e\u7684\u5e73\u53f0\u8026\u5408\u6bb5\uff09<\/strong>\uff1a<\/li><\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\">  PORTAL_URL=\"${PORTAL_URL:-http:\/\/localhost:8080\/api\/v1\/apps}\"\n  APP_INFO=$(curl -sf -X POST \"$PORTAL_URL\" -d \"{\\\"name\\\":\\\"$APP_TITLE\\\",\\\"features\\\":$FEATURES_JSON}\")<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">  \u8fd4\u56de <code>{app_id, app_secret, credentials: {KEY: value}}<\/code>\uff0c\u636e\u6b64\u751f\u6210 <code>.env<\/code>\uff1a<code>APP_ID<\/code>\u3001<code>APP_SECRET<\/code>\u3001<code>VITE_APP_ID<\/code>\u3001<code>VITE_KIMI_AUTH_URL<\/code>\uff08\u4ece KIMI_AUTH_URL \u6d3e\u751f Vite \u524d\u7f00\u7248\uff09+ credentials \u5168\u91cf\uff08\u542b <code>DATABASE_URL<\/code>\u3001<code>KIMI_AUTH_URL<\/code>\u3001<code>KIMI_OPEN_URL<\/code>\u3001<code>OWNER_UNION_ID<\/code> \u7b49\uff09\u3002<strong>MySQL \u5b9e\u4f8b\u3001OAuth app \u6ce8\u518c\u3001owner \u8eab\u4efd\u5168\u90e8\u7531 portal \u4e00\u952e\u4f9b\u5e94<\/strong>\u2014\u2014\u6c99\u7bb1\u91cc\u6ca1\u6709\u6570\u636e\u5e93\uff0c\u6570\u636e\u5e93\u5728\u4e91\u7aef\uff0cportal \u6309 app \u53d1\u8fde\u63a5\u4e32\u3002\u6709\u9632\u5fa1\u6027\u68c0\u67e5\uff1aportal \u8fd4\u56de\u975e JSON\uff08502 HTML \u9519\u8bef\u9875\uff09\u65f6\u663e\u5f0f\u62a5\u9519\u9000\u51fa\uff08L504-506 \u6ce8\u91ca\u539f\u6587\u8bf4\u660e\u52a8\u673a\uff09\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>*<em>9 \u4e2a <code>lib\/<\/em>.mjs<\/code> \u786e\u5b9a\u6027 patcher**\uff08Node \u811a\u672c\uff0c\u5168\u90e8\u5df2\u8bfb\/\u62bd\u6837\u7cbe\u8bfb\uff09\uff1a\n<ul><li><code>merge-schema.mjs<\/code>\uff08105\u884c\uff09\uff1a\u628a users \u8868\u5b9a\u4e49\u5408\u5e76\u8fdb <code>db\/schema.ts<\/code>\u2014\u2014\u6b63\u5219\u63d0\u53d6\u8868\u540d\u505a\u5e42\u7b49\uff08\u5df2\u5b58\u5728\u5373 exit 0\uff09\u3001\u5408\u5e76 import \u8bed\u53e5\uff08\u6309 from \u53bb\u91cd\uff09\u3001\u63d2\u5165\u4f4d\u7f6e\u4f18\u5148 <code>\/\/ TODO:<\/code> \u6ce8\u91ca\u951a\u70b9\u4e4b\u524d\u3002<\/li><li><code>wire-app-tsx.mjs<\/code>\uff0851\u884c\uff09\uff1a\u6b63\u5219\u627e\u6700\u540e\u4e00\u4e2a page import \u540e\u63d2 Login\/NotFound import\uff0c\u6309\u65e2\u6709 <code>&lt;Route<\/code> \u7f29\u8fdb\u5bf9\u9f50\u540e\u5728 <code>&lt;\/Routes&gt;<\/code> \u524d\u63d2\u4e24\u6761\u8def\u7531\uff1b\u627e\u4e0d\u5230\u951a\u70b9 exit 1 \u2192 \u843d\u5230 docs\/Post-Init-Wiring.md \u7684\u4eba\u5de5\u63a5\u7ebf\u6307\u5f15\uff08&#8221;Auto-wired&#8221; vs &#8220;Wiring required&#8221; \u4e24\u6001\u8f93\u51fa\uff09\u3002<strong>\u5df2\u63a5\u7ebf\u68c0\u6d4b<\/strong>\u662f <code>src.includes(\"Login\")<\/code>\u2014\u2014\u7c97\u4f46\u591f\u7528\u3002<\/li><li>\u5176\u4f59 patch-vite-config\uff08\u5931\u8d25\u65f6\u6574\u6587\u4ef6 fallback \u91cd\u5199\uff0cL310-339 \u5185\u5d4c\u5b8c\u6574\u66ff\u4ee3\u914d\u7f6e\uff09\u3001merge-tsconfig\u3001merge-package-json\uff08\u8bfb <code>package.json.feat<\/code> \u7247\u6bb5\u5408\u5e76\u4f9d\u8d56\uff09\u3001patch-env-ts\uff08\u7ed9 env.ts \u52a0 <code>required(\"DATABASE_URL\")<\/code> \u7c7b\u58f0\u660e\uff09\u3001patch-router-auth\u3001patch-boot-auth\uff08\u52a0 OAuth callback\uff09\u3001wire-main-tsx\uff08\u5305 TRPCProvider\uff09\u3002<\/li><li><strong>\u8bbe\u8ba1\u54f2\u5b66\uff1a\u6613\u9519\u7684\u624b\u5de5\u7f16\u8f91\u5168\u90e8\u4e0b\u6c89\u4e3a\u786e\u5b9a\u6027 Node \u811a\u672c\uff0cLLM \u53ea\u8dd1\u811a\u672c\u4e0d\u624b\u5199 patch<\/strong>\u2014\u2014\u4e0e\u7b2c\u4e00\u8f6e\u62a5\u544a&#8221;\u786e\u5b9a\u6027\u5f15\u64ce\u515c\u5e95&#8221;\u8303\u5f0f\u5b8c\u5168\u543b\u5408\u3002<\/li><\/ul><\/li><li><strong>&#8211;template \u6a21\u5f0f<\/strong>\uff1afullstack \u6a21\u677f zip \u81ea\u5e26 <code>.backend-features.json<\/code> + \u9884\u94fa <code>api\/ db\/ contracts\/<\/code>\uff0cinit.sh \u68c0\u6d4b\u5230 manifest \u81ea\u52a8\u5207 provision-only\uff08\u8df3\u8fc7\u6240\u6709\u6587\u4ef6\u62f7\u8d1d\/patch\uff0c\u53ea\u505a portal \u6ce8\u518c + \u5199 .env + npm install\uff09\u3002<\/li><li><strong>\u9519\u8bef\u515c\u5e95<\/strong>\uff1a<code>trap ... ERR<\/code> \u5728\u5931\u8d25\u65f6\u63d0\u793a &#8220;Please abort the current task and let the user provide feedback to Kimi&#8221;\uff08L3\uff09\u2014\u2014\u5931\u8d25\u8bed\u4e49\u662f&#8221;\u4e2d\u6b62\u5e76\u4e0a\u62a5&#8221;\u800c\u975e\u91cd\u8bd5\u3002<\/li><\/ul>\n\n\n\n<h3 id=\"63-docs-%25e5%2585%25ad%25e7%25af%2587%25e5%2585%25a8%25e9%2583%25a8%25e5%25b7%25b2%25e8%25af%25bb%25e7%25b2%25be%25e8%25af%25bb\" class=\"wp-block-heading\">6.3 docs\/ \u516d\u7bc7\uff08\u5168\u90e8\u5df2\u8bfb\/\u7cbe\u8bfb\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Authentication.md<\/strong>\uff08242\u884c\uff09\uff1a\u5b8c\u6574 OAuth 2.0 \u5b9e\u73b0\u8bf4\u660e\u3002\u67b6\u6784\uff1a<code>api\/kimi\/{auth,session,platform}.ts<\/code>\uff08OAuth flow\u3001jose JWT 1 \u5e74\u671f session\u3001Kimi Open Platform API client\uff09\uff1busers \u8868 schema\uff08unionId \u552f\u4e00\u3001role enum user\/admin\uff09\uff1b<strong>Login.tsx \u5168\u6587\u5185\u5d4c<\/strong>\uff08<code>getOAuthUrl()<\/code> \u62fc <code>${VITE_KIMI_AUTH_URL}\/api\/oauth\/authorize?client_id=...&amp;scope=profile<\/code>\uff0cstate = base64(redirectUri)\uff09\uff1b<strong>admin \u5206\u914d\u673a\u5236<\/strong>\uff1aportal \u54cd\u5e94\u91cc\u7684 <code>creator_user_id<\/code> \u5199\u5165 <code>OWNER_UNION_ID<\/code>\uff0c\u767b\u5f55\u65f6 unionId \u5339\u914d\u5373 admin\uff1b\u4e09\u7ea7 procedure \u8868 <code>publicQuery\/authedQuery\/adminQuery<\/code>\u3002<\/li><li><strong>Database.md<\/strong>\uff08381\u884c\uff09\uff1aDrizzle \u7eaa\u5f8b\u2014\u2014\u7981\u88f8 SQL\u3001MySQL \u65e0 <code>.returning()<\/code> \u7528 <code>.$returningId()<\/code>\u3001<code>onDuplicateKeyUpdate<\/code> upsert\u3001<code>db:push<\/code>\uff08\u5f00\u53d1\uff09vs <code>db:generate<\/code>+<code>db:migrate<\/code>\uff08\u751f\u4ea7\uff09\u5206\u6d41\u3002<\/li><li><strong>Project-Structure.md<\/strong>\uff08147\u884c\uff09\uff1a\u5b8c\u6574\u76ee\u5f55\u6811 + import \u522b\u540d\u516c\u7ea6\u8868\uff08<code>@\/<\/code>\u2192src \u524d\u7aef\u4e13\u7528\u3001<code>@contracts\/<\/code>\u2192\u524d\u540e\u7aef\u5171\u4eab\u3001<code>@db\/<\/code>\u2192api \u4e13\u7528\uff1bapi \u5185\u90e8\u7528\u76f8\u5bf9\u8def\u5f84\uff09\u3002<\/li><li><strong>tRPC.md<\/strong>\uff08161\u884c\uff09\u3001<strong>Development-Guide.md<\/strong>\uff08260\u884c\uff09\uff1azod input \u6821\u9a8c\u5f3a\u5236\u3001superjson \u5e8f\u5217\u5316\u8bed\u4e49\u3001\u5f00\u53d1\u6d41\u7a0b\u3002<\/li><li><strong>Post-Init-Wiring.md<\/strong>\uff0838\u884c\uff09\uff1aauto-wire \u5931\u8d25\u65f6\u7684\u4eba\u5de5\u63a5\u7ebf\u4e24\u6b65\u9aa4\u2014\u2014<strong>\u786e\u5b9a\u6027\u811a\u672c\u7684\u5931\u8d25\u6709\u663e\u5f0f\u4eba\u5de5\u515c\u5e95\u6587\u6863<\/strong>\uff0c\u95ed\u73af\u5b8c\u6574\u3002<\/li><li>\u6a21\u677f\u4f9d\u8d56\u5feb\u7167\uff08<code>scripts\/template\/package.json<\/code> \u5df2\u8bfb\uff09\uff1atrpc 11.8.1\u3001hono 4.8.3\u3001drizzle-orm 0.45.1\u3001mysql2 3.14.1\u3001jose 6.1.3\u3001@aws-sdk\/client-s3 + s3-request-presigner\uff08<strong>\u6a21\u677f\u5185\u7f6e S3 \u80fd\u529b<\/strong>\uff0c\u51ed\u8bc1\u4e5f\u6765\u81ea portal credentials\uff09\u3001react-router 7.6.1\u3002<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"7-skillcreatorswarm%25e6%258a%2580%25e8%2583%25bd%25e5%2585%2583%25e5%25b7%25a5%25e5%258e%2582-%25e7%259b%25b2%25e8%25af%2584%25e5%258d%258f%25e8%25ae%25ae\" class=\"wp-block-heading\">7. skill-creator-swarm\uff1a\u6280\u80fd\u5143\u5de5\u5382 + \u76f2\u8bc4\u534f\u8bae<\/h2>\n\n\n\n<h3 id=\"71-%25e6%259c%25ac%25e4%25bd%2593490%25e8%25a1%258canthropic-skillcreator-%25e7%259a%2584-swarm-%25e9%2580%2582%25e9%2585%258d%25e7%2589%2588\" class=\"wp-block-heading\">7.1 \u672c\u4f53\uff08490\u884c\uff0cAnthropic skill-creator \u7684 swarm \u9002\u914d\u7248\uff09<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e09\u539f\u5219\uff1a\u7b80\u6d01\u81f3\u4e0a\uff08&#8221;The context window is a public good&#8221;\uff09\u3001\u6309\u4efb\u52a1\u8106\u5f31\u5ea6\u8bbe\u81ea\u7531\u5ea6\uff08\u9ad8\/\u4e2d\/\u4f4e\u4e09\u6863\uff09\u3001\u6e10\u8fdb\u62ab\u9732\uff08frontmatter\u2192SKILL.md\u2192references\/ \u4e09\u5c42\uff09\u3002\u6280\u80fd\u89e3\u5256\uff1ascripts\/\uff08\u786e\u5b9a\u6027\u64cd\u4f5c\uff09\u3001references\/\uff08\u6309\u9700\u52a0\u8f7d\u6587\u6863\uff09\u3001assets\/\uff08\u88ab\u6d88\u8d39\u4e0d\u8fdb\u4e0a\u4e0b\u6587\u7684\u4ea7\u7269\uff09\u3002\u4e03\u6b65\u6d41\u7a0b\uff0cStep 5 \u4e3a <strong>swarm \u8bc4\u6d4b\uff08MANDATORY\uff09<\/strong>\u3002<\/p>\n\n\n\n<h3 id=\"72-%25e7%259b%25b2%25e8%25af%2584%25e5%258d%258f%25e8%25ae%25aestep-5executorgradercomparatoranalyzer-%25e5%259b%259b%25e8%25a7%2592%25e8%2589%25b2\" class=\"wp-block-heading\">7.2 \u76f2\u8bc4\u534f\u8bae\uff08Step 5\uff0cexecutor\/grader\/comparator\/analyzer \u56db\u89d2\u8272\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>\u6210\u5bf9\u6267\u884c\u94c1\u5f8b<\/strong>\uff1a&#8221;Do not run all <code>with_skill<\/code> cases first and come back for baseline later. Pair them in the same evaluation round&#8221;\u2014\u2014\u540c\u4e00\u8f6e\u5185 with_skill \u4e0e baseline\uff08\u65e0\u6280\u80fd=\u65b0\u6280\u80fd\u8bc4\u6d4b\uff1b\u65e7\u7248\u6280\u80fd=\u66f4\u65b0\u8bc4\u6d4b\uff09\u6210\u5bf9\u542f\u52a8\u3002<\/li><li><strong>\u56db\u89d2\u8272\u5168\u90e8\u7528 <code>create_subagent<\/code> \u663e\u5f0f system_prompt \u521b\u5efa\uff0c\u96f6\u811a\u672c<\/strong>\uff08&#8221;These do not need dedicated scripts&#8230; they can be created via <code>create_subagent<\/code> with explicit <code>system_prompt<\/code>s and used through <code>task<\/code>&#8220;\uff09\uff1a\n<ul><li><code>skill_executor<\/code>\uff1a\u8dd1\u4efb\u52a1\u3002\u63d0\u793a\u8bcd\u6a21\u677f\u56fa\u5b9a\u5b57\u6bb5\uff1aMode\uff08with_skill|baseline\uff09\u3001Skill path\uff08<code>\/mnt\/agents\/output\/&lt;skill&gt;\/SKILL.md<\/code> \u7cbe\u786e\u8def\u5f84\uff0cbaseline \u65e0\uff09\u3001Task\u3001Input files\u3001Output directory\u3002<\/li><li><code>skill_grader<\/code>\uff1a\u5bf9\u7167 expectations \u9010\u6761 pass\/fail + \u8bc1\u636e\uff0c\u5e76<strong>\u53cd\u5411\u6307\u51fa\u5f31 expectation<\/strong>\uff08&#8221;point out weak expectations if they are non-discriminating&#8221;\uff09\u3002<\/li><li><code>skill_comparator<\/code>\uff1a<strong>\u76f2\u8bc4<\/strong>\u2014\u2014&#8221;review output A and output B without knowing which is which&#8230; Do not infer which one used the skill&#8221;\uff0c\u4ece prompt \u53cd\u63a8 rubric\uff0c\u8f93\u51fa winner A\/B\/TIE + \u5404\u81ea\u4f18\u7f3a\u70b9\u3002<\/li><li><code>skill_analyzer<\/code>\uff1a\u8bfb\u6280\u80fd+\u8bc4\u6d4b\u7b14\u8bb0\uff0c\u627e&#8221;ambiguous instructions \/ missing guidance \/ repeated wasted work&#8221;\uff0c\u4ea7\u51fa\u5177\u4f53\u4fee\u6539\u5efa\u8bae\u3002<\/li><\/ul><\/li><li><strong>expectation \u5199\u6cd5\u6307\u5bfc<\/strong>\uff1a\u5f31\uff08&#8221;a file exists&#8221;\uff09vs \u5f3a\uff08&#8221;the output workbook includes a pivot table on sheet Summary&#8221;\uff09\uff1b\u4e3b\u89c2\u4efb\u52a1\u9760\u76f2\u8bc4+\u4eba\u5ba1\u800c\u975e\u786c\u65ad\u8a00\u3002<\/li><li><strong>\u53cd\u8fc7\u5ea6\u5de5\u7a0b\u660e\u4ee4<\/strong>\uff1a&#8221;avoid building complex external orchestration scripts just to run evals&#8230; The implementation should stay lightweight.&#8221;<\/li><li><strong>\u5de5\u4f5c\u533a\u7ea6\u5b9a<\/strong>\uff1a<code>&lt;skill&gt;-workspace\/iteration-1\/eval-N\/{with_skill,without_skill,notes.md}<\/code>\u2014\u2014&#8221;The point is consistency, not strict tooling.&#8221;<\/li><\/ul>\n\n\n\n<h3 id=\"73-%25e4%25b8%2589%25e8%2584%259a%25e6%259c%25ac%25e5%2585%25a8%25e9%2583%25a8%25e9%2580%2590%25e8%25a1%258c%25e5%25b7%25b2%25e8%25af%25bb\" class=\"wp-block-heading\">7.3 \u4e09\u811a\u672c\uff08\u5168\u90e8\u9010\u884c\u5df2\u8bfb\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><code>init_skill.py<\/code>\uff08303\u884c\uff09\uff1a\u751f\u6210\u6280\u80fd\u9aa8\u67b6\u3002\u5185\u7f6e SKILL.md \u6a21\u677f\u5e26<strong>\u56db\u79cd\u7ed3\u6784\u6a21\u5f0f\u6307\u5bfc<\/strong>\uff08Workflow-Based \/ Task-Based \/ Reference-Guidelines \/ Capabilities-Based\uff0c\u5404\u914d\u4e00\u53e5\u8bdd\u9009\u578b\u6807\u51c6\u548c\u7ed3\u6784\u793a\u4f8b\uff09\uff0c\u5916\u52a0 scripts\/references\/assets \u4e09\u4e2a\u793a\u4f8b\u6587\u4ef6\uff08\u793a\u4f8b\u6587\u4ef6\u672c\u8eab\u5199\u6ee1&#8221;\u522b\u7684\u6280\u80fd\u600e\u4e48\u7528\u6211&#8221;\u7684\u4ea4\u53c9\u5f15\u7528\uff09\u3002\u547d\u540d\u89c4\u8303 kebab-case \u226464 \u5b57\u7b26\u3002<strong>\u786c\u7f16\u7801\u8f93\u51fa\u8def\u5f84 <code>\/mnt\/agents\/output<\/code><\/strong>\uff0c\u5e76\u5f3a\u8c03 <code>\/app\/.user\/skills\/<\/code> NOT shared\u2014\u2014<strong><code>\/mnt\/agents\/output<\/code> \u662f\u4e3b\u5b50\u6c99\u7bb1\u95f4\u552f\u4e00\u5171\u4eab\u76ee\u5f55\u7684\u53c8\u4e00\u5b9e\u8bc1<\/strong>\u3002<\/li><li><code>quick_validate.py<\/code>\uff08103\u884c\uff09\uff1afrontmatter \u6821\u9a8c\u3002\u5141\u8bb8\u952e\u767d\u540d\u5355 <code>{name, description, license, allowed-tools, metadata, compatibility}<\/code>\uff1bname kebab-case\u226464\u3001description \u7981\u5c16\u62ec\u53f7\u22641024 \u5b57\u7b26\u3002\u6ce8\u610f\uff1a<strong>\u6c99\u7bb1\u91cc 269 \u4e2a\u6280\u80fd\u7684 frontmatter \u65b9\u8a00\u8fdc\u6bd4\u8fd9\u5bbd<\/strong>\uff08<code>type:<\/code>\u3001<code>openclaw.requires.*<\/code>\u3001<code>permissions:<\/code> \u7b49\u7b2c\u4e00\u8f6e\u5df2\u89c2\u6d4b\uff09\uff0c\u8bf4\u660e\u8fd9\u4e2a validator \u53ea\u7ea6\u675f&#8221;\u672c\u5de5\u5177\u4ea7\u51fa\u7684\u6280\u80fd&#8221;\uff0c\u4e0d\u7ba1\u5b58\u91cf\u3002<\/li><li><code>package_skill.py<\/code>\uff08110\u884c\uff09\uff1a\u5148 validate \u518d\u6253 zip \u683c\u5f0f\u7684 <code>.skill<\/code> \u6587\u4ef6\uff1bSKILL.md \u5f3a\u5236\u8981\u6c42\u6700\u7ec8\u56de\u590d\u5f15\u7528 <code>.skill<\/code> \u6587\u4ef6\u8def\u5f84\u4f9b UI \u5c55\u793a\u4e0b\u8f7d\u3002<\/li><li><code>references\/workflows.md<\/code>\uff0828\u884c\uff09+ <code>output-patterns.md<\/code>\uff0882\u884c\uff09\uff1a\u987a\u5e8f\/\u6761\u4ef6\u5de5\u4f5c\u6d41\u5199\u6cd5\u3001\u4e25\u683c vs \u5f39\u6027\u8f93\u51fa\u6a21\u677f\u3001input\/output \u793a\u4f8b\u5bf9\u2014\u2014\u7ed9\u6280\u80fd\u4f5c\u8005\u7684\u6a21\u5f0f\u5c0f\u6284\uff0c\u8f7b\u91cf\u3002<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"8-deepresearchswarm%25e7%25a0%2594%25e7%25a9%25b6%25e7%25bc%2596%25e6%258e%2592509%25e8%25a1%258cfrontmatter-%25e7%2594%25a8-yaml-%25e5%2588%2597%25e8%25a1%25a8%25e5%25bc%258f%25e6%2596%25b9%25e8%25a8%2580\" class=\"wp-block-heading\">8. deep-research-swarm\uff1a\u7814\u7a76\u7f16\u6392\uff08509\u884c\uff0cfrontmatter \u7528 YAML \u5217\u8868\u5f0f\u65b9\u8a00\uff09<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>\u56db\u6761\u8def\u7531\uff08Phase 0 \u610f\u56fe\u8def\u7531\uff09<\/strong>\uff1aA \u5bbd\u641c\u7d22\uff08\u4e24\u6bb5\u5f0f swarm\uff1a\u5148 \u22655 \u4e2a wide \u4ee3\u7406 \u00d7 \u226510 \u641c\u7d22\u505a\u5e7f\u5ea6\uff0c\u518d \u226510 \u4e2a deep \u4ee3\u7406 \u00d7 \u226520 \u641c\u7d22\u505a\u6df1\u5ea6\uff09\/ B \u805a\u7126\u641c\u7d22\uff08\u6807\u51c6\u7ba1\u7ebf\uff09\/ C \u7eaf\u6587\u4ef6\uff08<strong>0 \u6b21\u5916\u90e8\u641c\u7d22<\/strong>\uff0c\u7981\u5077\u5077\u641c\u7d22\uff1a&#8221;do NOT sneak in external searches. Fidelity to user intent is paramount&#8221;\uff09\/ D \u6587\u4ef6\u589e\u5f3a\uff08\u6587\u4ef6\u4e3a\u4e3b+\u5916\u90e8\u8865\u7f3a\uff0c\u2265150 \u641c\u7d22\uff09\u3002\u6b67\u4e49\u9ed8\u8ba4\u89c4\u5219\uff1aA \u4f18\u5148\u4e8e B\u3001D \u4f18\u5148\u4e8e C\u3002<\/li><li><strong>\u8ba4\u8bc6\u8bba\u8bbe\u8ba1<\/strong>\uff08\u533a\u522b\u4e8e\u666e\u901a&#8221;\u5e76\u884c\u52a0\u901f&#8221;\uff09\uff1a&#8221;Swarm parallelism serves epistemic robustness \u2014 not merely speed&#8221;\u3002\u7ef4\u5ea6\u95f4<strong>\u6545\u610f \u226530% \u6982\u5ff5\u91cd\u53e0<\/strong>\u5236\u9020\u4ea4\u53c9\u9a8c\u8bc1\u538b\u529b\uff1bPhase 4 \u4ea4\u53c9\u9a8c\u8bc1\u628a\u53d1\u73b0\u5206\u56db\u7ea7\u7f6e\u4fe1\uff08High=\u22652 \u4ee3\u7406\u72ec\u7acb\u4fe1\u6e90\u4e00\u81f4 \/ Medium \/ Low \/ <strong>Conflict Zone \u51b2\u7a81\u9ad8\u4eae\u7edd\u4e0d\u62b9\u5e73<\/strong>\u2014\u2014\u542b\u65f6\u95f4\u7ef4\u5ea6\u51b2\u7a81\u5355\u5217\uff09\uff1bPhase 5 \u6761\u4ef6\u89e6\u53d1\u9010\u51b2\u7a81\u6d3e\u9a8c\u8bc1\u4ee3\u7406\uff08\u6bcf\u51b2\u7a81 \u22653 \u6b21\u8ffd\u52a0\u641c\u7d22\uff0cRoute C \u7981\u7528\uff09\u3002<\/li><li><strong>\u8bc1\u636e\u6a21\u677f<\/strong>\uff08\u6240\u6709\u5b50\u4ee3\u7406\u8f93\u51fa\u5f3a\u5236\uff09\uff1a<code>Claim\/Source\/URL\/Date\/Excerpt(verbatim\uff0c\u7981\u8f6c\u8ff0)\/Context\/Confidence(high|medium|low)<\/code> \u4e03\u5b57\u6bb5\uff1b\u5168\u6587 <code>[^number^]<\/code> \u884c\u5185\u5f15\u7528\uff0c\u4e0e pdf \u6280\u80fd\u7684 <code>citation.jsonl<\/code> \u8854\u63a5\uff0809 \u7ae0 \u00a73.1\uff09\u3002<\/li><li><strong>Epistemic Reset Rule<\/strong>\uff1a\u5206\u6790\u524d\u5fc5\u987b bash \u67e5\u5f53\u524d\u65e5\u671f\uff1b\u641c\u7d22\u8bed\u8a00\u9501\u6b7b\u8ddf\u968f\u7528\u6237\u8bed\u8a00\u3002<\/li><li><strong>\u6536\u53e3\u4e0d\u662f\u5199\u62a5\u544a\u800c\u662f\u4ea4\u63a5<\/strong>\uff1aPhase 7 \u628a <code>research\/<\/code> \u4e0b\u5168\u90e8\u4ea7\u7269\uff08dim \u6587\u4ef6 \u226510\u3001cross_verification\u3001insight \u22655 \u6761\uff09<strong>\u663e\u5f0f\u8def\u5f84\u6e05\u5355<\/strong>\u4ea4\u63a5\u7ed9 <code>report-writing<\/code> \u6216 <code>paper-writing<\/code> \u6280\u80fd\uff0c\u5e76\u8981\u6c42&#8221;\u660e\u786e\u544a\u8bc9\u5199\u4f5c\u6280\u80fd\u7814\u7a76\u5df2\u5b8c\u6210\u3001\u4e0d\u9700\u8981\u518d\u6d3e\u7814\u7a76\u4ee3\u7406&#8221;\u2014\u2014<strong>\u6280\u80fd\u95f4\u4ea4\u63a5\u534f\u8bae<\/strong>\u3002<\/li><li>\u8f93\u51fa\u76ee\u5f55\u94c1\u5f8b <code>\/mnt\/agents\/output\/research\/<\/code>\uff08&#8221;non-negotiable&#8221;\uff0c\u7981\u6b62\u76f4\u63a5\u5199 output\/ \u6839\uff09\u3002<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"9-batchdownload%25e7%25ba%25af%25e6%258f%2590%25e7%25a4%25ba%25e8%25af%258d%25e4%25b8%258b%25e8%25bd%25bd%25e7%25bc%2596%25e6%258e%2592269%25e8%25a1%258ctype-capability\" class=\"wp-block-heading\">9. batch-download\uff1a\u7eaf\u63d0\u793a\u8bcd\u4e0b\u8f7d\u7f16\u6392\uff08269\u884c\uff0c<code>type: capability<\/code>\uff09<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>\u56db\u9636\u6bb5\uff1a\u5206\u89e3\uff08Orchestrator \u72ec\u5360\uff0c&#8221;No execution in this phase&#8221;\uff09\u2192 \u8bc1\u636e\u6536\u96c6\uff08<strong>URL \u6a21\u5f0f\u53d1\u73b0<\/strong>\u662f\u7075\u9b42\uff1a\u6570\u5b57\u9012\u589e\/\u76ee\u5f55\u7ed3\u6784\/\u547d\u540d\u6a21\u677f\/\u5206\u9875\u53c2\u6570\uff0c&#8221;verify the pattern holds by testing 2\u20133 instances&#8221; \u540e\u7528 Python \u7a0b\u5e8f\u5316\u751f\u6210\u5168\u91cf URL\uff09\u2192 \u5e76\u884c\u4e0b\u8f7d\uff08\u4e00\u539f\u5b50\u5355\u5143\u4e00 <code>task<\/code>\uff0c\u540c\u65f6\u53d1\u51fa\uff09\u2192 \u6574\u5408\u6821\u9a8c\u3002<\/li><li>\u53cd\u5e7b\u89c9\u6761\u6b3e\u5bc6\u5ea6\u6700\u9ad8\uff1a&#8221;Never fabricate URLs&#8221;\uff08\u53ea\u8bb8\u7528\u6237\u7ed9\u7684\/\u641c\u7d22\u5230\u7684\/<strong>\u9a8c\u8bc1\u8fc7\u6a21\u5f0f<\/strong>\u5916\u63a8\u7684\/\u7a0b\u5e8f\u89e3\u6790\u7684\u56db\u79cd\u6765\u6e90\uff09\u3001&#8221;Do NOT download HTML and rename it as <code>.pdf<\/code>&#8220;\u3001\u4e25\u683c\u7c7b\u578b\u5339\u914d\u5931\u8d25\u8981\u62a5&#8221;limitation \/ partial result&#8221;\u3002<\/li><li>\u5b50\u4ee3\u7406\u63d0\u793a\u8bcd\u4e94\u8981\u7d20\u6a21\u677f\uff1a\u76ee\u6807\u8303\u56f4\u3001<code>ATTENTION:<\/code> \u524d\u7f00\u5173\u952e\u7ea6\u675f\u3001\u8986\u76d6\u8981\u6c42\uff08&#8221;download ALL of them, not just the first one&#8221;\uff09\u3001\u9a8c\u8bc1\u8981\u6c42\u3001<strong>STRICT \u8f93\u51fa\u683c\u5f0f<\/strong>\uff08JSON schema \u6216 Markdown \u8868\uff0c&#8221;No extra commentary&#8221;\uff0c\u672a\u77e5\u5b57\u6bb5\u586b &#8220;-&#8220;\uff09\u3002<\/li><li>Orchestrator \u4fa7\u6821\u9a8c\u56db\u8fde\uff1a\u683c\u5f0f\/\u5b57\u6bb5\/\u7ea6\u675f\/\u7ec6\u8282\u7ea7\uff08&#8221;year 2021 but URL shows 2019&#8243;\u8fd9\u7c7b\u6807\u7b7e\u503c\u4e0d\u5339\u914d\u5355\u5217\uff09\uff1b\u5931\u8d25\u91cd\u8bd5\u7528&#8221;clarified prompt \u91cd\u8dd1\u6216\u6d3e\u4e13\u95e8 verify \u4ee3\u7406\u6362\u8def\u7ebf&#8221;\u3002<\/li><li>\u9650\u6d41\u5904\u7406\uff1a429\/403\/CAPTCHA \u2192 10-60s \u968f\u673a\u6296\u52a8\u9000\u907f\u3001\u654f\u611f\u7ad9\u70b9\u4f18\u5148 Python \u76f4\u8fde\uff1b\u6700\u7ec8\u94c1\u5f8b &#8220;Never call tools after generating the final answer&#8221;\u3002<\/li><li>\u4e0e git \u4f53\u7cfb\u5b8c\u5168\u65e0\u5173\u2014\u2014\u8bc1\u660e swarm \u5bb6\u65cf\u6709<strong>\u4e24\u79cd\u5e76\u5b58\u5b9e\u73b0<\/strong>\uff1a\u7eaf\u63d0\u793a\u8bcd\u5951\u7ea6\uff08batch-download\/deep-research\uff09vs git worktree \u5b9e\u4f53\u9694\u79bb\uff08vibecoding \u7cfb\u5217\uff09\u3002<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"10-%25e8%25bf%2590%25e8%25a1%258c%25e6%2597%25b6%25e5%258e%259f%25e8%25af%25adcreatesubagent-task-%25e8%25b0%2583%25e7%2594%25a8%25e7%25ba%25a6%25e5%25ae%259a%25e6%25b1%2587%25e6%2580%25bb\" class=\"wp-block-heading\">10. \u8fd0\u884c\u65f6\u539f\u8bed\uff1a<code>create_subagent<\/code> + <code>task<\/code> \u8c03\u7528\u7ea6\u5b9a\u6c47\u603b<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4ece\u5168\u5957\u6280\u80fd\u53cd\u63a8\u51fa\u7684\u6c99\u7bb1 runtime \u7f16\u6392 API\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u7ea6\u5b9a<\/th><th>\u8bc1\u636e<\/th><\/tr><\/thead><tbody><tr><td>\u5b58\u5728\u4e24\u4e2a\u539f\u8bed\uff1a<code>create_subagent<\/code>\uff08\u5e26\u663e\u5f0f <code>system_prompt<\/code> \u521b\u5efa\u547d\u540d\u89d2\u8272\uff09\u4e0e <code>task<\/code>\uff08\u6d3e\u4efb\u52a1\u6267\u884c\uff09<\/td><td>skill-creator-swarm L11\u3001L276<\/td><\/tr><tr><td><strong>\u5b50\u4ee3\u7406\u540d\u79f0\u53c2\u4e0e\u6a21\u578b\u8def\u7531<\/strong>\uff1a\u540d\u5b57\u542b &#8220;designer&#8221;\uff08\u4e0d\u533a\u5206\u5927\u5c0f\u5199\uff09\u8def\u7531\u5230\u8bbe\u8ba1\u6a21\u578b<\/td><td>vibecoding-webapp-swarm L95 \u6ce8\u91ca<\/td><\/tr><tr><td>\u5e76\u884c = <strong>\u5355\u6761\u6d88\u606f\u5185\u591a\u4e2a <code>task<\/code> \u8c03\u7528\u540c\u65f6\u53d1\u51fa<\/strong><\/td><td>vw-swarm L206 &#8220;single message, multiple <code>task<\/code> tool calls&#8221;\uff1bbatch-download L166<\/td><\/tr><tr><td>\u5b50\u4ee3\u7406\u8dd1\u5728<strong>\u72ec\u7acb\u6613\u6d88\u4ea1\u6c99\u7bb1<\/strong>\uff0c\u8de8\u6c99\u7bb1\u552f\u4e00\u5171\u4eab\u76ee\u5f55\u662f <code>\/mnt\/agents\/output<\/code>\uff1b<code>\/app\/.user\/skills\/<\/code> \u4e0d\u5171\u4eab<\/td><td>setup-local.sh L40 \u6ce8\u91ca\uff1bskill-creator-swarm L146<\/td><\/tr><tr><td>\u5b50\u4ee3\u7406\u901a\u8fc7<strong>\u6587\u4ef6\u7cfb\u7edf<\/strong>\u6536\u4e0a\u4e0b\u6587\uff08\u63d0\u793a\u8bcd\u91cc\u5199\u7edd\u5bf9\u8def\u5f84\u8ba9\u5b50\u4ee3\u7406\u81ea\u5df1\u8bfb\uff09\uff0c\u4e0d\u662f\u53c2\u6570\u6ce8\u5165<\/td><td>\u6240\u6709 swarm \u6280\u80fd\u7684\u5b50\u4ee3\u7406\u63d0\u793a\u8bcd\u6a21\u677f\uff08&#8221;Read \/mnt\/agents\/output\/design\/design.md in full&#8221;\uff09<\/td><\/tr><tr><td>\u4ea4\u4ed8\u5de5\u5177 <code>mshtools-website_version_manager<\/code>\uff08build_version\/rollback\uff09\uff0cgit-native\uff0c\u7248\u672c ID=commit \u77ed\u54c8\u5e0c<\/td><td>vw-swarm Phase 7\u3001L331<\/td><\/tr><tr><td>\u5e73\u53f0\u4f9b\u5e94 API <code>POST http:\/\/localhost:8080\/api\/v1\/apps<\/code> \u2192 <code>{app_id, app_secret, credentials{DATABASE_URL, KIMI_AUTH_URL, ...}}<\/code><\/td><td>backend init.sh L496-543<\/td><\/tr><tr><td>\u56fe\u50cf\/\u89c6\u9891\u751f\u6210\u5de5\u5177\u5bf9\u5b50\u4ee3\u7406\u53ef\u7528\uff08&#8221;the image generation tool&#8221;\uff09<\/td><td>vw-swarm Phase 4 \u6761\u6b3e 7<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"11-%25e5%25af%2586%25e9%2592%25a5%25e5%2587%25ad%25e8%25af%2581%25e8%25a7%2582%25e6%25b5%258b%25e8%2584%25b1%25e6%2595%258f%25e8%25ae%25b0%25e5%25bd%2595\" class=\"wp-block-heading\">11. \u5bc6\u94a5\/\u51ed\u8bc1\u89c2\u6d4b\uff08\u8131\u654f\u8bb0\u5f55\uff09<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>backend graft \u751f\u6210\u7684 <code>.env<\/code> \u542b <code>APP_SECRET<\/code>\u3001<code>DATABASE_URL<\/code>\uff08MySQL \u8fde\u63a5\u4e32\uff09\u3001<code>KIMI_AUTH_URL\/KIMI_OPEN_URL<\/code>\u3001<code>OWNER_UNION_ID<\/code>\u2014\u2014\u6765\u6e90\u5747\u4e3a portal <code>POST \/api\/v1\/apps<\/code> \u54cd\u5e94\uff0c\u4f4d\u7f6e <code>$PROJECT_PATH\/.env<\/code>\uff08gitignored\uff09\uff0c\u7ecf\u5171\u4eab\u4ed3 <code>.env<\/code> \u4fe1\u7bb1\u5206\u53d1\u7ed9\u5404 worktree\u3002<strong>\u672c\u8f6e\u672a\u8bfb\u53d6\u4efb\u4f55\u771f\u5b9e .env \u5185\u5bb9<\/strong>\uff0c\u4ec5\u8bb0\u5f55\u673a\u5236\u3002<\/li><li><code>.backend-features.json<\/code> \u542b <code>app_id<\/code>\uff08\u975e\u5bc6\uff09\u3002<\/li><li>\u6a21\u677f\u5185\u7f6e S3 client \u4f9d\u8d56\uff08@aws-sdk\/client-s3\uff09\uff0c\u51ed\u8bc1\u540c\u6837\u9884\u671f\u6765\u81ea portal credentials\u3002<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"12-%25e7%25a7%25bb%25e6%25a4%258d%25e8%25af%2584%25e4%25bc%25b0%25e8%25a1%25a8\" class=\"wp-block-heading\">12. \u79fb\u690d\u8bc4\u4f30\u8868<\/h2>\n\n\n\n<h3 id=\"121-%25e5%25af%25b9-hermes%25e8%2587%25aa%25e6%259c%2589%25e5%25a4%259a%25e4%25bb%25a3%25e7%2590%2586%25e6%25a1%2586%25e6%259e%25b6\" class=\"wp-block-heading\">12.1 \u5bf9 Hermes\uff08\u81ea\u6709\u591a\u4ee3\u7406\u6846\u67b6\uff09<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u7ec4\u4ef6<\/th><th>\u4ef7\u503c<\/th><th>\u7406\u7531<\/th><th>\u5de5\u4f5c\u91cf<\/th><th>\u786c\u4f9d\u8d56<\/th><\/tr><\/thead><tbody><tr><td>swarm-workspace \u53cc\u5c42\u5951\u7ea6 + setup-local.sh<\/td><td><strong>\u9ad8<\/strong><\/td><td>105 \u884c bash \u5b9e\u73b0\u591a\u4ee3\u7406\u4ee3\u7801\u9694\u79bb+\u5408\u5e76+\u5bc6\u94a5\u7ee7\u627f\uff0c\u96f6 LLM \u8026\u5408\uff0c\u53ef\u76f4\u63a5\u5f53 Hermes \u7684 workspace \u539f\u8bed<\/td><td>\u7eaf\u62f7\u8d1d\uff08\u6539 REPO_PATH \u9ed8\u8ba4\u503c\uff09<\/td><td>git\u3001npm\uff08\u53ef\u9009\uff09<\/td><\/tr><tr><td>\u7f1d\u5408\u70b9\u51bb\u7ed3 + grep \u5951\u7ea6\u68c0\u67e5<\/td><td><strong>\u9ad8<\/strong><\/td><td>&#8220;App.tsx\/router.ts\/schema.ts \u51bb\u7ed3 + merge \u540e grep \u6821\u9a8c&#8221;\u662f\u591a\u4ee3\u7406\u5e76\u884c\u6539\u540c\u4ed3\u51b2\u7a81\u7684\u6700\u5c0f\u5de5\u7a0b\u89e3\uff0c\u4e0e\u6846\u67b6\u65e0\u5173<\/td><td>\u9700\u9002\u914d\uff08\u6539\u6210 Hermes \u9879\u76ee\u7684\u7f1d\u5408\u70b9\u6e05\u5355\uff09<\/td><td>\u65e0<\/td><\/tr><tr><td>\u53cd\u9a8c\u8bc1\u87ba\u65cb\u7eaa\u5f8b\uff08commit \u5373\u8fd4\u56de \/ build \u4e00\u6b21\u5373 STOP\uff09<\/td><td><strong>\u9ad8<\/strong><\/td><td>\u9488\u5bf9 LLM \u4ee3\u7406\u771f\u5b9e\u5931\u6548\u6a21\u5f0f\uff0c\u7eaf\u63d0\u793a\u8bcd\u6761\u6b3e<\/td><td>\u7eaf\u62f7\u8d1d\uff08\u63aa\u8f9e\u53ef\u76f4\u63a5\u501f\u7528\uff09<\/td><td>\u65e0<\/td><\/tr><tr><td>vibecoding-webapp-swarm \u4e03\u9636\u6bb5\u4e50\u8c31<\/td><td>\u4e2d<\/td><td>\u89d2\u8272\u5206\u5de5\/\u5206\u7ec4\u7b56\u7565\u53ef\u501f\u9274\uff0c\u4f46\u6280\u672f\u6808\u9489\u6b7b + \u7248\u672c\u5de5\u5177\u8026\u5408\uff0cHermes \u9700\u6362\u6210\u81ea\u5df1\u7684\u6784\u5efa\u4ea4\u4ed8<\/td><td>\u9700\u91cd\u5199\uff08\u4fdd\u7559\u9aa8\u67b6\u66ff\u6362\u4ea4\u4ed8\u5c42\uff09<\/td><td>mshtools \u7248\u672c\u5de5\u5177\u3001AI \u5a92\u4f53\u751f\u6210\u5de5\u5177<\/td><\/tr><tr><td>backend init.sh \u5ac1\u63a5\u5f15\u64ce\uff089 \u4e2a mjs patcher\uff09<\/td><td>\u4e2d<\/td><td>&#8220;LLM \u4e0d\u624b\u5199 patch\uff0c\u8dd1\u786e\u5b9a\u6027\u811a\u672c&#8221;\u7684\u8303\u5f0f\u4ef7\u503c\u9ad8\u4e8e\u4ee3\u7801\u672c\u8eab\uff1bpatcher \u4e0e tRPC\/Hono \u6808\u5f3a\u7ed1\u5b9a<\/td><td>\u9700\u91cd\u5199\uff08\u8303\u5f0f\u7167\u642c\uff0c\u811a\u672c\u91cd\u5199\uff09<\/td><td>portal \u4f9b\u5e94 API\uff08\u9700\u66ff\u6362\u4e3a\u81ea\u6709 provisioning\uff09<\/td><\/tr><tr><td>skill-creator-swarm \u76f2\u8bc4\u56db\u89d2\u8272<\/td><td><strong>\u9ad8<\/strong><\/td><td>executor\/grader\/comparator\/analyzer + \u540c\u8f6e\u6210\u5bf9 + \u76f2\u8bc4\uff0c\u4ec5\u9700\u4e24\u4e2a\u5b50\u4ee3\u7406\u539f\u8bed\uff0cHermes \u53ef\u76f4\u63a5\u7528\u4e8e\u63d0\u793a\u8bcd\/\u6280\u80fd\u56de\u5f52\u8bc4\u6d4b<\/td><td>\u9700\u9002\u914d\uff08\u6620\u5c04\u5230 Hermes \u7684\u5b50\u4ee3\u7406 API\uff09<\/td><td>\u5b50\u4ee3\u7406\u521b\u5efa\/\u4efb\u52a1\u539f\u8bed<\/td><\/tr><tr><td>deep-research-swarm \u8def\u7531+\u7f6e\u4fe1\u5206\u7ea7<\/td><td>\u4e2d<\/td><td>\u56db\u8def\u7531\u3001Conflict Zone\u3001\u8bc1\u636e\u4e03\u5b57\u6bb5\u6a21\u677f\u662f\u9ad8\u8d28\u91cf\u7814\u7a76\u7f16\u6392\u6837\u672c<\/td><td>\u9700\u9002\u914d\uff08\u8f93\u51fa\u76ee\u5f55\u3001\u4ea4\u63a5\u7684\u5199\u4f5c\u6280\u80fd\u6539\u540d\uff09<\/td><td>\u641c\u7d22\u5de5\u5177<\/td><\/tr><tr><td>batch-download<\/td><td>\u4f4e<\/td><td>\u63d0\u793a\u8bcd\u7eaa\u5f8b\u53ef\u6458\u6284\uff08URL \u6a21\u5f0f\u53d1\u73b0\u3001\u7981\u4f2a\u9020 URL\uff09\uff0c\u4f46\u6574\u4f53\u662f\u5355\u57df playbook<\/td><td>\u9700\u9002\u914d<\/td><td>\u7f51\u7edc\u8bbf\u95ee<\/td><\/tr><tr><td>Designer \u540d\u5b57\u8def\u7531\u6a21\u578b<\/td><td>\u4f4e\uff08\u5bf9 Hermes\uff09\/ \u53c2\u8003<\/td><td>\u4f9d\u8d56\u6c99\u7bb1 runtime \u9690\u85cf\u7279\u6027\uff1b\u4f46\u542f\u53d1 Hermes \u53ef\u505a&#8221;\u89d2\u8272\u540d\u2192\u6a21\u578b\u8def\u7531&#8221;\u663e\u5f0f\u673a\u5236<\/td><td>\u9700\u91cd\u5199<\/td><td>runtime \u6a21\u578b\u8def\u7531<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 id=\"122-%25e5%25af%25b9-kimi-code%25e6%259c%25ac%25e6%259c%25ba-cliskillmd-%25e4%25b8%2589%25e7%25ba%25a7-scope-mcp-agentagentswarm\" class=\"wp-block-heading\">12.2 \u5bf9 Kimi Code\uff08\u672c\u673a CLI\uff0cSKILL.md \u4e09\u7ea7 scope + MCP + Agent\/AgentSwarm\uff09<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u7ec4\u4ef6<\/th><th>\u4ef7\u503c<\/th><th>\u7406\u7531<\/th><th>\u5de5\u4f5c\u91cf<\/th><th>\u786c\u4f9d\u8d56<\/th><\/tr><\/thead><tbody><tr><td>swarm-workspace + setup-local.sh<\/td><td><strong>\u9ad8<\/strong><\/td><td>Kimi Code \u6709 Agent \u5b50\u4ee3\u7406\u673a\u5236\uff1bworktree \u5951\u7ea6\u53ef\u5c01\u88c5\u4e3a\u4e00\u4e2a project scope \u6280\u80fd\uff0c\u811a\u672c\u76f4\u63a5\u53ef\u7528\uff08REPO_PATH \u6539\u9879\u76ee\u8def\u5f84\uff09<\/td><td>\u7eaf\u62f7\u8d1d+\u8584\u5c01\u88c5<\/td><td>git\uff1b\u5b50\u4ee3\u7406\u9700\u5171\u4eab\u6587\u4ef6\u7cfb\u7edf\uff08\u672c\u673a CLI \u5929\u7136\u6ee1\u8db3\uff0c\u6bd4\u4e91\u7aef\u66f4\u7b80\u5355\uff09<\/td><\/tr><tr><td>skill-creator-swarm \u672c\u4f53\uff08init\/validate\/package + \u76f2\u8bc4\u534f\u8bae\uff09<\/td><td><strong>\u9ad8<\/strong><\/td><td>\u683c\u5f0f\u540c\u6e90\uff08\u540c\u4e00\u5957 SKILL.md+frontmatter \u7ea6\u5b9a\uff0cvalidator \u767d\u540d\u5355\u517c\u5bb9 Kimi Code \u6280\u80fd\u683c\u5f0f\uff09\uff1b<code>\/mnt\/agents\/output<\/code> \u6539\u9879\u76ee\u76ee\u5f55\u5373\u53ef\uff1b\u76f2\u8bc4\u534f\u8bae\u6620\u5c04\u5230 Agent \u5b50\u4ee3\u7406\u8c03\u7528<\/td><td>\u9700\u9002\u914d\uff08\u8def\u5f84 + \u5b50\u4ee3\u7406 API \u540d\uff09<\/td><td>Agent \u5b50\u4ee3\u7406\u539f\u8bed<\/td><\/tr><tr><td>\u7f16\u6392\u63d0\u793a\u8bcd\u8303\u5f0f\uff08\u89d2\u8272\u6a21\u677f\u9010\u5b57\u9501\u5b9a\u3001Actor Reference \u8868\u3001\u6a21\u5f0f\u9009\u62e9\u8868\uff09<\/td><td><strong>\u9ad8<\/strong><\/td><td>\u4e0e runtime \u65e0\u5173\u7684 prompt \u5de5\u7a0b\u8d44\u4ea7\uff0cKimi Code \u6280\u80fd\u53ef\u76f4\u63a5\u5f15\u7528\u5199\u6cd5<\/td><td>\u7eaf\u62f7\u8d1d\uff08\u4f5c\u4e3a\u5199\u4f5c\u8303\u5f0f\uff09<\/td><td>\u65e0<\/td><\/tr><tr><td>vibecoding \u4e24\u4e2a\u7f16\u6392\u6280\u80fd<\/td><td>\u4e2d<\/td><td>\u9aa8\u67b6\u53ef\u79fb\u690d\uff0c\u4f46\u4f9d\u8d56\u4e91\u7aef\u4ea4\u4ed8\u5de5\u5177\u4e0e \/mnt\/agents \u5e03\u5c40\uff1bKimi Code \u573a\u666f\u4e0b\u4ea4\u4ed8=\u672c\u5730\u6784\u5efa\uff0c\u53ef\u7b80\u5316 Phase 7<\/td><td>\u9700\u9002\u914d<\/td><td>\u2014<\/td><\/tr><tr><td>backend-building-swarm<\/td><td>\u4f4e<\/td><td>tRPC\/Hono\/Kimi OAuth \u6808\u4e0e Kimi Code \u7528\u6237\u573a\u666f\u9519\u4f4d\uff0cportal \u4f9b\u5e94\u5b8c\u5168\u4e0d\u53ef\u7528<\/td><td>\u9700\u91cd\u5199<\/td><td>portal API\uff08\u786c\u8026\u5408\uff0c\u4e0d\u53ef\u7528\uff09<\/td><\/tr><tr><td>deep-research-swarm<\/td><td>\u4e2d<\/td><td>Kimi Code \u6709 MCP \u6570\u636e\u6e90\u4e0e\u641c\u7d22\uff1b\u8def\u7531+\u4ea4\u53c9\u9a8c\u8bc1\u9aa8\u67b6\u53ef\u7528\uff0c\u641c\u7d22\u9884\u7b97\u9700\u6309 CLI \u914d\u989d\u73b0\u5b9e\u4e0b\u8c03<\/td><td>\u9700\u9002\u914d<\/td><td>\u641c\u7d22\/\u53d6\u6570 MCP<\/td><\/tr><tr><td>batch-download<\/td><td>\u4f4e<\/td><td>\u5355\u57df playbook\uff0cKimi Code \u7528\u6237\u5c11\u6709\u6b64\u573a\u666f<\/td><td>\u9700\u9002\u914d<\/td><td>\u7f51\u7edc<\/td><\/tr><tr><td>product-knowledge.md \u5199\u6cd5<\/td><td>\u4e2d\uff08\u8303\u5f0f\uff09<\/td><td>&#8220;\u628a\u5e73\u53f0\u80fd\u529b\u8fb9\u754c\u5199\u6210\u6280\u80fd\u6587\u6863\u9632\u5e7b\u89c9&#8221;\u7684\u505a\u6cd5\u503c\u5f97 Kimi Code \u6280\u80fd\u4f5c\u8005\u6548\u4eff<\/td><td>\u7eaf\u62f7\u8d1d\uff08\u8303\u5f0f\uff09<\/td><td>\u65e0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 id=\"123-%25e5%25b9%25b3%25e5%258f%25b0%25e8%2580%25a6%25e5%2590%2588%25e7%2582%25b9%25e6%25b8%2585%25e5%258d%2595%25e7%25a7%25bb%25e6%25a4%258d%25e6%2597%25b6%25e5%25bf%2585%25e9%25a1%25bb%25e6%259b%25bf%25e6%258d%25a2%25e7%259a%2584%25e4%25b8%2589%25e4%25bb%25b6%25e4%25ba%258b\" class=\"wp-block-heading\">12.3 \u5e73\u53f0\u8026\u5408\u70b9\u6e05\u5355\uff08\u79fb\u690d\u65f6\u5fc5\u987b\u66ff\u6362\u7684\u4e09\u4ef6\u4e8b\uff09<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li><strong><code>\/mnt\/agents\/output<\/code> \u5171\u4eab\u76d8<\/strong>\uff1adrive9 FUSE \u6302\u8f7d\uff0c\u4e3b\u5b50\u6c99\u7bb1\u552f\u4e00\u5171\u4eab\u76ee\u5f55\u3002Hermes \u6362\u6210\u81ea\u5df1\u7684\u5171\u4eab\u5377\/\u76ee\u5f55\u7ea6\u5b9a\uff1bKimi Code \u672c\u673a\u573a\u666f\u76f4\u63a5\u7528\u9879\u76ee\u76ee\u5f55\u3002<\/li><li><strong><code>mshtools-website_version_manager<\/code><\/strong>\uff1a\u4e91\u7aef\u4ea4\u4ed8\/\u9884\u89c8\/\u56de\u6eda\u5de5\u5177\uff0cgit-native \u8bed\u4e49\u3002\u66ff\u6362\u4e3a\u4efb\u610f&#8221;commit + \u90e8\u7f72\u8bb0\u5f55&#8221;\u673a\u5236\u5373\u53ef\u4fdd\u6301\u534f\u8bae\u4e0d\u53d8\u3002<\/li><li><strong>portal <code>POST \/api\/v1\/apps<\/code> \u4f9b\u5e94<\/strong>\uff1aapp \u6ce8\u518c + MySQL\/OAuth\/S3 \u51ed\u8bc1\u4e0b\u53d1\uff0cbackend-building-swarm \u7684\u547d\u95e8\u3002\u65e0 portal \u5219 auth\/db \u7279\u6027\u6574\u4f53\u4e0d\u53ef\u7528\uff0c\u9700\u66ff\u6362\u4e3a\u81ea\u6709 provisioning \u6216\u5265\u6389\u5168\u6808\u8def\u5f84\u3002<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b21\u8981\u8026\u5408\uff1a\u5b50\u4ee3\u7406\u540d\u79f0\u2192\u6a21\u578b\u8def\u7531\uff08runtime \u9690\u85cf\u5951\u7ea6\uff09\u3001AI \u56fe\u50cf\/\u89c6\u9891\u751f\u6210\u5de5\u5177\u3001\u9759\u6001\u7ad9 <code>project_dir<\/code> \u5fc5\u987b\u6307\u5411 <code>\/mnt\/agents\/output\/app<\/code>\uff08\u5e73\u53f0\u6784\u5efa\u8def\u5f84\u952e\uff09\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"13-%25e5%25b7%25a5%25e7%25a8%258b%25e8%25b4%25a8%25e9%2587%258f%25e4%25ba%25ae%25e7%2582%25b9%25e4%25b8%258e%25e5%259d%2591%25e9%2580%259f%25e6%259f%25a5\" class=\"wp-block-heading\">13. \u5de5\u7a0b\u8d28\u91cf\u4eae\u70b9\u4e0e\u5751\uff08\u901f\u67e5\uff09<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4eae\u70b9<\/strong>\uff1a\u2460 git \u5bf9\u8c61\u5e93\u5f53 IPC\uff0c\u65e0\u8fdc\u7aef\u65e0 push\uff1b\u2461 .env \u501f gitignore \u8fb9\u754c + \u5171\u4eab\u4ed3\u4fe1\u7bb1\u5b9e\u73b0\u5bc6\u94a5\u7ee7\u627f\uff1b\u2462 <code>--force<\/code> + \u4e09\u6001\u91cd\u5165\u628a ephemeral \u6c99\u7bb1\u6062\u590d\u8bed\u4e49\u5199\u8fdb 105 \u884c\u811a\u672c\uff1b\u2463 \u786e\u5b9a\u6027 .mjs patcher \u66ff\u4ee3 LLM \u624b\u5de5 patch\uff0c\u5931\u8d25\u6709\u4eba\u5de5\u515c\u5e95\u6587\u6863\uff1b\u2464 \u521b\u610f\u6743\u5355\u70b9\u5316\uff08Designer\uff09+ \u4e3b\u4ee3\u7406\u804c\u6743\u6700\u5c0f\u5316\uff1b\u2465 \u4ea4\u4ed8\u5373 git commit\uff08\u7248\u672c ID=\u77ed\u54c8\u5e0c\uff09\uff0c\u56de\u6eda=roll-forward commit\uff0c\u65e0\u5386\u53f2\u6539\u5199\uff1b\u2466 \u76f2\u8bc4\u534f\u8bae\u96f6\u811a\u672c\uff0c\u4e24\u4e2a\u539f\u8bed\u641e\u5b9a\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u5751\/\u6742\u8d28<\/strong>\uff1a\u2460 <code>git worktree prune<\/code> \u662f\u5168\u57df\u7981\u4ee4\uff0c\u4efb\u4f55\u81ea\u52a8\u5316\u6e05\u7406\u90fd\u53ef\u80fd\u8bef\u4f24\uff08\u534f\u8bae\u9760\u4eba\u4eba\u9075\u5b88\uff0c\u65e0\u6280\u672f\u5f3a\u5236\uff09\uff1b\u2461 \u5171\u4eab\u4ed3 <code>.env<\/code> \u660e\u6587\u843d\u76d8\u5728\u5171\u4eab\u76d8\u4e0a\u2014\u2014\u5bc6\u94a5\u4fe1\u7bb1\u4fbf\u5229\u4e0e\u66b4\u9732\u9762\u4e00\u4f53\u4e24\u9762\uff1b\u2462 octopus merge \u4f9d\u8d56\u7f1d\u5408\u70b9\u51bb\u7ed3\u7eaa\u5f8b\uff0c\u5b50\u4ee3\u7406\u8d8a\u754c\u6539\u51bb\u7ed3\u6587\u4ef6\u6ca1\u6709\u786c\u963b\u65ad\uff08\u53ea\u6709\u63d0\u793a\u8bcd\u7981\u4ee4+\u4e8b\u540e grep\uff09\uff1b\u2463 wire-app-tsx.mjs \u7684\u5df2\u63a5\u7ebf\u68c0\u6d4b\u662f <code>src.includes(\"Login\")<\/code> \u8fd9\u79cd\u7c97\u5339\u914d\uff0c\u6781\u7aef\u547d\u540d\u4e0b\u4f1a\u8bef\u5224\uff1b\u2464 frontmatter validator \u767d\u540d\u5355\u4e0e\u6c99\u7bb1\u5b58\u91cf\u6280\u80fd\u65b9\u8a00\uff08type:\/openclaw.* \u7b49\uff09\u4e0d\u4e00\u81f4\uff0cskill-creator \u4ea7\u51fa\u7684\u6280\u80fd\u53cd\u800c\u662f&#8221;\u65b9\u8a00\u6700\u7a84&#8221;\u7684\uff1b\u2465 deep-research \u7684 \u2265200 \u6b21\u641c\u7d22\u9884\u7b97\u5728\u975e\u4e91\u7aef\u914d\u989d\u4e0b\u4e0d\u73b0\u5b9e\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u2190 \u8fd4\u56de\u4e3b\u62a5\u544a\uff1aKimi Agent\uff08\u4e91\u7aef\u6c99\u7bb1\uff09\u6280\u672f\u62a5\u544a \uff5c GitHub \u539f\u6587 \u5408\u89c4\u4e0e\u98ce\u9669\u58f0\u660e\uff1a\u672c\u62a5\u544a\u4e3a\u5b89\u5168 &hellip; <a href=\"https:\/\/tongchun.website\/index.php\/kimiagent-15-swarm\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">\u201c15-swarm \u2014 Swarm \u5168\u5bb6\u6df1\u5ea6\u62c6\u89e3\uff08\u7b2c\u4e8c\u8f6e \u00b7 \u660e\u661f\u6280\u80fd\u7ec4\uff09\u201d<\/span><\/a><\/p>\n","protected":false},"author":55404,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"wpai_generated_summary":"","wpai_meta_description":"","footnotes":""},"class_list":["post-1881","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/pages\/1881","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/users\/55404"}],"replies":[{"embeddable":true,"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/comments?post=1881"}],"version-history":[{"count":1,"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/pages\/1881\/revisions"}],"predecessor-version":[{"id":1901,"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/pages\/1881\/revisions\/1901"}],"wp:attachment":[{"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/media?parent=1881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}