{"id":1885,"date":"2026-08-18T20:14:14","date_gmt":"2026-08-18T12:14:14","guid":{"rendered":"https:\/\/tongchun.website\/index.php\/kimiagent-19-gaps\/"},"modified":"2026-08-18T20:26:36","modified_gmt":"2026-08-18T12:26:36","slug":"kimiagent-19-gaps","status":"publish","type":"page","link":"https:\/\/tongchun.website\/index.php\/kimiagent-19-gaps\/","title":{"rendered":"19-gaps \u2014 \u7b2c\u4e00\u8f6e\u7f3a\u53e3\u8865\u91c7 + \u65b0\u6c99\u7bb1\u5b9e\u4f8b\u6838\u67e5"},"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\/19-gaps.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\uff1b\u91c7\u96c6\u65b9\u5f0f\uff1aHTTP \u53ea\u8bfb <code>http:\/\/127.0.0.1:18080\/&lt;\u6c99\u7bb1\u7edd\u5bf9\u8def\u5f84&gt;<\/code>\uff08\u672c\u8f6e SSH 12222 \u4e0d\u53ef\u7528\uff09\u3002 <strong>\u91c7\u96c6\u6761\u4ef6\u8b66\u793a<\/strong>\uff1a\u4e0e\u7b2c\u4e00\u8f6e\u672b\u5c3e\u76f8\u540c\uff0c\u91c7\u96c6\u8fdb\u884c\u5230\u7ea6 70% \u65f6\u6c99\u7bb1\u4fa7 frpc \u518d\u6b21\u6389\u7ebf\uff0818080 connection refused\uff0c\u672c\u673a frps \u8fdb\u7a0b\u4ecd\u5728\uff09\uff0c\u6b64\u540e\u96a7\u9053\u5448&#8221;\u6570\u5341\u79d2\u7ea7\u77ed\u6682\u6062\u590d\u7a97\u53e3&#8221;\u7684\u6296\u52a8\u72b6\u6001\u3002\u4e2d\u65ad\u524d\u5df2\u5b8c\u6210\u4efb\u52a1\u2460\u2461\u2462\u2463\u7684\u5168\u90e8\u4e3b\u4f53\u5185\u5bb9\u4e0e\u4efb\u52a1\u2464\u7684\u62bd\u6837\uff1b<code>_meta.json<\/code> \u5168\u91cf\u603b\u6570\u666e\u67e5\u5728\u96a7\u9053\u6062\u590d\u7a97\u53e3\u5185\u8865\u8dd1\u5b8c\u6210\uff08\u7ed3\u679c\u89c1 \u00a75.3\uff09\u3002<\/p><\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"1-%25e5%2590%25af%25e5%258a%25a8%25e9%2593%25be%25e5%258e%259f%25e6%2596%2587initstage0rcinits6rcd-%25e6%259c%258d%25e5%258a%25a1%25e8%2584%259a%25e6%259c%25ac%25e4%25bb%25bb%25e5%258a%25a1%25e2%2591%25a0\" class=\"wp-block-heading\">1. \u542f\u52a8\u94fe\u539f\u6587\uff1a\/init\u3001stage0\u3001rc.init\u3001s6-rc.d \u670d\u52a1\u811a\u672c\uff08\u4efb\u52a1\u2460\uff09<\/h2>\n\n\n\n<h3 id=\"11-init-%25e4%25b8%258a%25e6%25b8%25b8%25e5%258e%259f%25e7%2589%2588%25e9%259b%25b6-kimi-%25e5%25ae%259a%25e5%2588%25b6\" class=\"wp-block-heading\">1.1 \/init \u2014\u2014 \u4e0a\u6e38\u539f\u7248\uff0c\u96f6 Kimi \u5b9a\u5236<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><code>\/init<\/code> \u5168\u6587 1012 \u5b57\u8282\uff0c\u4e0e s6-overlay 3.1.6.2 \u4e0a\u6e38\u53d1\u5e03\u7248<strong>\u9010\u5b57\u8282\u540c\u6784<\/strong>\uff08 shebang <code>#!\/bin\/sh -e<\/code>\u3001\u81ea\u4e3e PATH\uff08\/bin\u3001\/usr\/bin\u3001\/command\uff09\u3001\u7b49\u5f85 fd3 \u7684 Docker readiness \u901a\u77e5\u3001\u6700\u540e <code>exec s6-overlay-suexec \u2026 \/package\/admin\/s6-overlay-3.1.6.2\/libexec\/stage0<\/code>\uff09\u3002<strong>\u6ca1\u6709\u4efb\u4f55 Kimi \u5b9a\u5236\u884c<\/strong>\u2014\u2014\u7b2c\u4e00\u8f6e 01-system \u00a73.1 \u57fa\u4e8e\u6807\u51c6\u884c\u4e3a\u7684\u63a8\u6d4b\u88ab\u539f\u6587\u8bc1\u5b9e\u3002<\/p>\n\n\n\n<h3 id=\"12-stage0packageadmins6overlay3162libexecstage02073-%25e5%25ad%2597%25e8%258a%2582\" class=\"wp-block-heading\">1.2 stage0\uff08\/package\/admin\/s6-overlay-3.1.6.2\/libexec\/stage0\uff0c2073 \u5b57\u8282\uff09<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u540c\u6837\u662f\u4e0a\u6e38\u539f\u7248\uff1a\u89e3\u6790 <code>S6_LOGGING_SCRIPT<\/code>\/<code>S6_KEEP_ENV<\/code>\/<code>S6_LOGGING<\/code>\/<code>S6_CATCHALL_USER<\/code>\/<code>S6_KILL_GRACETIME<\/code>\/<code>S6_SYNC_DISKS<\/code> \u7b49\u8fd0\u884c\u65f6\u63a7\u5236\u53d8\u91cf\uff0c\u8c03 <code>s6-linux-init-maker -NC -D top -c \/run\/s6\/basedir \u2026<\/code> \u751f\u6210 stage1\uff0c\u518d\u5904\u7406\u73af\u5883\u5206\u53d1\u4e0e\u4fe1\u53f7\u4ee3\u7406\u3002<strong>\u7ed3\u8bba\uff1a\u6574\u4e2a s6 \u5f15\u5bfc\u5c42\u6ca1\u6709\u4efb\u4f55 Moonshot \u8865\u4e01\uff0c\u5b9a\u5236\u5168\u90e8\u5728&#8221;\u670d\u52a1\u5b9a\u4e49\u5c42&#8221;\uff08s6-rc.d \u7684 run \u811a\u672c\uff09\u800c\u975e init \u5c42\u3002<\/strong><\/p>\n\n\n\n<h3 id=\"13-rcinitruns6basedirscriptsrcinit2335-%25e5%25ad%2597%25e8%258a%2582-%25e7%25ac%25ac%25e4%25b8%2580%25e8%25bd%25ae%25e6%25a0%2587%25e6%25b3%25a8%25e6%259c%25aa%25e6%258a%2593%25e5%2588%25b0%25e5%258e%259f%25e6%2596%2587%25e6%259c%25ac%25e8%25bd%25ae%25e8%25a1%25a5%25e9%25bd%2590\" class=\"wp-block-heading\">1.3 rc.init\uff08\/run\/s6\/basedir\/scripts\/rc.init\uff0c2335 \u5b57\u8282\uff09\u2014\u2014 \u7b2c\u4e00\u8f6e\u6807\u6ce8&#8221;\u672a\u6293\u5230\u539f\u6587&#8221;\uff0c\u672c\u8f6e\u8865\u9f50<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u7b2c\u4e00\u8f6e 01-system \u00a76 \u7684\u672a\u7adf\u4e8b\u9879\u3002\u539f\u6587\u4e3a\u4e0a\u6e38\u6807\u51c6 stage2 \u811a\u672c\uff0c\u5173\u952e\u884c\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"sh\">s6-rc-compile -v\"$cv\" \/run\/s6\/db \"$etc\/s6-overlay\/s6-rc.d\" \/package\/admin\/s6-overlay-3.1.6.2\/etc\/s6-rc\/sources\ns6-rc-init -c \/run\/s6\/db \/run\/service\n\u2026\ns6-rc -v$v -u -t \"$timeout\" -- change \"$top\"   # $top = bundle \"user\"\uff08s6-overlay \u9ed8\u8ba4\u76ee\u6807\uff09<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u5373\uff1a\u670d\u52a1\u6570\u636e\u5e93\u7531 <strong><code>\/etc\/s6-overlay\/s6-rc.d<\/code>\uff08\u955c\u50cf\u5185\u670d\u52a1\u6e90\u5b9a\u4e49\uff09+ s6-overlay \u81ea\u5e26 sources<\/strong> \u7f16\u8bd1\u800c\u6210\uff0c\u968f\u540e\u628a <code>user<\/code> bundle \u62c9\u8d77\u3002<code>S6_BEHAVIOUR_IF_STAGE2_FAILS<\/code>\u3001<code>S6_STAGE2_HOOK<\/code>\u3001<code>S6_CMD_WAIT_FOR_SERVICES_MAXTIME<\/code>\uff08\u9ed8\u8ba4 5000ms\uff09\u7b49\u6269\u5c55\u70b9\u5747\u5b58\u5728\u4f46\u6c99\u7bb1\u672a\u6ce8\u5165 hook\u3002\u914d\u5957 <code>rc.shutdown<\/code>\uff08133 \u5b57\u8282\uff09\u4ec5 <code>exec s6-rc -v$v -bda change<\/code>\u3002<\/p>\n\n\n\n<h3 id=\"14-%25e6%259c%258d%25e5%258a%25a1%25e5%25ae%259a%25e4%25b9%2589etcs6overlays6rcd-%25e5%2585%25a8%25e9%2587%258f%25e5%258e%259f%25e6%2596%2587\" class=\"wp-block-heading\">1.4 \u670d\u52a1\u5b9a\u4e49\uff1a\/etc\/s6-overlay\/s6-rc.d \u5168\u91cf\u539f\u6587<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u6e90\u76ee\u5f55 9 \u4e2a\u6761\u76ee\uff1b\u8fd0\u884c\u65f6\u7f16\u8bd1\u7ed3\u679c <code>\/run\/s6-rc\/servicedirs\/<\/code> \u5b9e\u8bc1\u4e3a 7 \u4e2a\u771f\u5b9e\u670d\u52a1 + <code>s6rc-fdholder<\/code>\/<code>s6rc-oneshot-runner<\/code>\uff08s6-rc \u5185\u90e8\u4ef6\uff09\u3002<code>user<\/code> \u662f bundle\uff08contents.d = browser-guard\u3001envd\u3001kasmvnc\u3001kernel-server\u3001portal\u3001socat\u3001sshd\uff09\uff1b<code>user2<\/code> \u662f<strong>\u7a7a bundle<\/strong>\uff08contents.d \u76ee\u5f55\u4e3a\u7a7a\u2014\u2014\u4e0e\u7b2c\u4e00\u8f6e&#8221;user2 bundle \u4e3a\u7a7a&#8221;\u4e00\u81f4\uff09\uff1bsshd \u662f <code>longrun<\/code>\uff0crun \u4ec5\u4e00\u884c <code>exec \/usr\/sbin\/sshd -D -e<\/code>\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u516d\u4e2a\u5173\u952e\u670d\u52a1 run \u811a\u672c\u5168\u6587\u5df2\u91c7\uff0c\u8981\u70b9\u4e0e<strong>\u65b0\u589e\u8bc1\u636e<\/strong>\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u670d\u52a1<\/th><th>run \u811a\u672c\u8981\u70b9<\/th><th>\u672c\u8f6e\u65b0\u589e\/\u786e\u8ba4<\/th><\/tr><\/thead><tbody><tr><td>browser-guard<\/td><td><code>s6-svwait -u \/run\/service\/kasmvnc<\/code> \u7b49\u663e\u793a\u5c31\u7eea \u2192 <code>s6-setuidgid kimi python3 \/app\/browser_guard.py --wait-display --display :99 --timeout 60 --monitor<\/code><\/td><td>\u786e\u8ba4\u7b2c\u4e00\u8f6e 05-browser \u7684\u63cf\u8ff0\uff1b\u786c\u7f16\u7801 DISPLAY=:99\u3001HOME=\/home\/kimi<\/td><\/tr><tr><td>envd<\/td><td>\u4e2d\u6587\u6ce8\u91ca\u660e\u5199&#8221;AGS \u4e0d\u662f firecracker \u73af\u5883\uff0c\u6ca1\u6709 MMDS\u2026<code>-isnotfc<\/code> \u8ba9 envd \u8df3\u8fc7\u4e00\u5207 MMDS \u884c\u4e3a&#8221;\uff1b\u5e26\u5019\u9009\u8def\u5f84\u56de\u9000\uff08\/usr\/local\/bin\u2192\/usr\/bin\u2192PATH\uff09\uff0c\u627e\u4e0d\u5230\u5219 <code>sleep infinity<\/code> \u964d\u7ea7<\/td><td>\u786e\u8ba4\u7b2c\u4e00\u8f6e 04-gateway\uff1b<strong>\u4f18\u96c5\u964d\u7ea7\u6a21\u5f0f<\/strong>\uff08\u7f3a\u4e8c\u8fdb\u5236\u4e0d crash \u5bb9\u5668\uff09\u503c\u5f97\u6ce8\u610f<\/td><\/tr><tr><td>kasmvnc<\/td><td>\u4ec5 <code>exec \/bin\/bash \/root\/setup_kasmvnc.sh<\/code><\/td><td>\u5b9e\u9645\u5b89\u88c5\u903b\u8f91\u5728\u955c\u50cf\u5185 \/root\/setup_kasmvnc.sh\uff08\u672c\u8f6e\u672a\u91c7\uff0c\u96a7\u9053\u5df2\u65ad\uff09<\/td><\/tr><tr><td>kernel-server<\/td><td><code>WORKDIR=${KERNEL_SERVER_WORKDIR:-\/mnt\/agents}<\/code>\uff0c<code>s6-setuidgid kimi python3 \/app\/kernel_server.py --host 0.0.0.0 --port 8888<\/code><\/td><td>\u786e\u8ba4\u7b2c\u4e00\u8f6e 02-runtime\uff1bworkdir \u5373 drive9 \u6302\u8f7d\u70b9\uff0c\u6545\u6a21\u578b\u5199\u7684\u6587\u4ef6\u76f4\u63a5\u843d\u9879\u76ee\u5de5\u4f5c\u533a<\/td><\/tr><tr><td>portal<\/td><td><strong>\u89c1\u4e0b\u65b9\u5168\u6587\u7ea7\u6458\u5f55<\/strong><\/td><td>\u672c\u8f6e\u6700\u9ad8\u4ef7\u503c\u65b0\u8bc1\u636e<\/td><\/tr><tr><td>socat<\/td><td>execline \u5355\u884c\uff1a<code>python3 \/opt\/moonbox-project-template\/bin\/project-cdp-proxy.py<\/code><\/td><td>\u786e\u8ba4\u7b2c\u4e00\u8f6e 04-gateway \u7684&#8221;socat \u4e0d\u8dd1 socat\uff0c\u5b9e\u4e3a CDP \u4ee3\u7406&#8221;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>portal\/run \u5168\u6587\u8981\u70b9\uff08\u65b0\u8bc1\u636e\uff09<\/strong>\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"sh\"># Go portal overlay service (bind-token STS contract). Boots with an EMPTY\n# mount manifest and -http-bind (:8080): kimiwarden delivers the identity at\n# claim time \u2014 POST \/api\/v1\/bind_token (warden-signed HS256 JWT that portal\n# exchanges for scoped STS via kimiapi PortalService), then POST \/api\/v1\/bind\n# with the overlay manifest (skills\/plugins\/auth\/vault). drive9 keeps the\n# writable workspace at \/mnt\/agents; the reception preset init_script symlinks\n# \/app\/.user\/skills etc. into this mount when the overlay is enabled.<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>\u542f\u52a8\u5f00\u5173\u53cc\u901a\u9053<\/strong>\uff1a<code>KIMI_PROJECT_PORTAL_CAPABILITY_ENABLED=true<\/code>\uff08\u65b0\u5951\u7ea6\uff09\u6216\u9057\u7559 <code>KIMI_PROJECT_PORTAL_OVERLAY=1<\/code>\uff0c\u4e24\u8005\u7686\u65e0\u5219 <code>exec sleep infinity<\/code> \u7a7a\u8f6c\u3002<\/li><li><strong>\u9ed8\u8ba4 env=dev<\/strong>\uff08<code>KIMI_PROJECT_PORTAL_CAPABILITY_ENV<\/code> \u672a\u6ce8\u5165\u65f6\uff09\uff1a\u6ce8\u91ca\u5199\u660e\u5185\u7f6e\u9ed8\u8ba4\u7f51\u5173 <strong>dev=<code>https:\/\/kimi.kimi.team\/apiv2<\/code>\u3001prod=<code>https:\/\/kimi-api-sandbox.msh.team\/apiv2<\/code><\/strong>\uff1b\u751f\u4ea7\u6c99\u7bb1\u91cc\u7531 kimiwarden \u6ce8\u5165 <code>-env prod<\/code>\uff08\u7b2c\u4e00\u8f6e <code>ps<\/code> \u5b9e\u8bc1\uff09\u3002<\/li><li>\u652f\u6301 <code>KIMI_CANARY<\/code> \u7070\u5ea6\u53c2\u6570\uff08<code>-canary<\/code>\uff09\u3002<\/li><li>*<em>&#8220;Static K_OSS_<\/em> credentials are retired (the new portal fails closed on them)&#8221;<strong> \u2014\u2014 \u9759\u6001 OSS \u51ed\u8bc1\u5df2\u5e9f\u5f03\uff0cportal \u5bf9\u65e7\u51ed\u8bc1<\/strong>\u5931\u8d25\u5173\u95ed**\uff1b\u6388\u6743\u5b8c\u5168\u8d70 claim \u65f6 bind-token \u2192 STS \u4ea4\u6362\u3002\u8fd9\u4f50\u8bc1\u4e86\u7b2c\u4e00\u8f6e&#8221;\u4e24\u9636\u6bb5\u751f\u547d\u5468\u671f\u3001\u51ed\u8bc1\u5ef6\u8fdf\u7ed1\u5b9a&#8221;\u7684\u6838\u5fc3\u7ed3\u8bba\u3002<\/li><li>\u6302\u8f7d\u70b9\u9ed8\u8ba4 <code>\/mnt\/portal-overlay<\/code>\uff0c\u53ef\u88ab <code>KIMI_PROJECT_PORTAL_CAPABILITY_MOUNT<\/code> \u8986\u76d6\u3002<\/li><\/ul>\n\n\n\n<h3 id=\"15-%25e5%25af%25b9%25e7%25ac%25ac%25e4%25b8%2580%25e8%25bd%25ae%25e7%259a%2584%25e4%25bf%25ae%25e6%25ad%25a3%25e7%25a1%25ae%25e8%25ae%25a4%25e5%2590%25af%25e5%258a%25a8%25e9%2593%25be%25e9%2583%25a8%25e5%2588%2586\" class=\"wp-block-heading\">1.5 \u5bf9\u7b2c\u4e00\u8f6e\u7684\u4fee\u6b63\/\u786e\u8ba4\uff08\u542f\u52a8\u94fe\u90e8\u5206\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>\u786e\u8ba4<\/strong>\uff1a01-system \u00a73.1 \u5f15\u5bfc\u94fe\u7ed3\u8bba\u5168\u90e8\u4e0e\u539f\u6587\u4e00\u81f4\uff1b\/init\u3001stage0\u3001rc.init \u5747\u4e3a\u4e0a\u6e38\u539f\u7248\u3002<\/li><li><strong>\u8865\u9f50<\/strong>\uff1arc.init\u3001rc.shutdown\u3001stage0 \u539f\u6587\u5165\u6863\uff08\u7b2c\u4e00\u8f6e \u00a76 \u672a\u7adf\u4e8b\u9879\u52fe\u9500\uff09\u3002<\/li><li><strong>\u65b0\u53d1\u73b0<\/strong>\uff1aportal\/run \u6ce8\u91ca\u662f\u7b2c\u4e00\u624b\u7684\u8bbe\u8ba1\u81ea\u8ff0\uff08bind-token STS \u5951\u7ea6\u3001K_OSS_* \u5e9f\u5f03\u5e76 fails-closed\u3001dev\/prod \u53cc\u7f51\u5173\u5730\u5740\u3001\u7070\u5ea6\u5f00\u5173\uff09\uff0c\u6bd4\u7b2c\u4e00\u8f6e\u4ece <code>ps<\/code> \u53cd\u63a8\u7684\u4fe1\u606f\u66f4\u5b8c\u6574\u3002<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"2-backendbuildingswarm-%25e5%25ae%258c%25e6%2595%25b4%25e8%25a1%25a5%25e9%2587%2587%25e4%25bb%25bb%25e5%258a%25a1%25e2%2591%25a1\" class=\"wp-block-heading\">2. backend-building-swarm \u5b8c\u6574\u8865\u91c7\uff08\u4efb\u52a1\u2461\uff09<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u7b2c\u4e00\u8f6e 09-skills-d \u00a75 \u6807\u6ce8&#8221;\u76ee\u5f55\u6e05\u5355\u672a\u91c7&#8221;\u3002\u672c\u8f6e\u8865\u9f50\u3002<\/p>\n\n\n\n<h3 id=\"21-%25e5%25ae%258c%25e6%2595%25b4%25e6%2596%2587%25e4%25bb%25b6%25e6%25b8%2585%25e5%258d%2595\" class=\"wp-block-heading\">2.1 \u5b8c\u6574\u6587\u4ef6\u6e05\u5355<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>backend-building-swarm\/\n\u251c\u2500\u2500 .gitignore\n\u251c\u2500\u2500 SKILL.md                      \uff08\u7ea6 350 \u884c\uff0c\u5168\u6587\u5df2\u91c7\uff09\n\u251c\u2500\u2500 docs\/\n\u2502   \u251c\u2500\u2500 Authentication.md         242 \u884c\n\u2502   \u251c\u2500\u2500 Database.md               381 \u884c\n\u2502   \u251c\u2500\u2500 Development-Guide.md      260 \u884c\n\u2502   \u251c\u2500\u2500 Post-Init-Wiring.md        38 \u884c\n\u2502   \u251c\u2500\u2500 Project-Structure.md      147 \u884c\n\u2502   \u2514\u2500\u2500 tRPC.md                   161 \u884c\n\u2514\u2500\u2500 scripts\/\n    \u251c\u2500\u2500 .prepare-template.sh        7 \u884c\uff08\u955c\u50cf\u6784\u5efa\u671f npm install\uff09\n    \u251c\u2500\u2500 init.sh                   674 \u884c\uff08\u6838\u5fc3 graft \u811a\u672c\uff0c\u5168\u6587\u5df2\u8bfb\uff09\n    \u251c\u2500\u2500 lib\/                      9 \u4e2a Node \u8865\u4e01\u5668\uff1a\n    \u2502   \u251c\u2500\u2500 merge-package-json.mjs \/ merge-schema.mjs \/ merge-tsconfig.mjs\n    \u2502   \u251c\u2500\u2500 patch-boot-auth.mjs \/ patch-env-ts.mjs \/ patch-router-auth.mjs \/ patch-vite-config.mjs\n    \u2502   \u2514\u2500\u2500 wire-app-tsx.mjs \/ wire-main-tsx.mjs\n    \u2514\u2500\u2500 template\/                 base\/ + db\/ + auth\/ \u4e09\u5c42\u6a21\u677f\u6811 + node_modules\/\uff08\u9884\u6784\u5efa\uff0c\u5927\u5c0f\u672a\u91c7\uff09+ package.json + package-lock.json<\/code><\/pre>\n\n\n\n<h3 id=\"22-skillmd-%25e8%25be%2593%25e5%2585%25a5%25e8%25be%2593%25e5%2587%25ba%25e5%25a5%2591%25e7%25ba%25a6%25e4%25b8%258e%25e5%25b7%25a5%25e4%25bd%259c%25e6%25b5%2581%25e7%25a8%258b\" class=\"wp-block-heading\">2.2 SKILL.md \u8f93\u5165\u8f93\u51fa\u5951\u7ea6\u4e0e\u5de5\u4f5c\u6d41\u7a0b<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>\u5b9a\u4f4d<\/strong>\uff1aswarm \u4f53\u7cfb&#8221;\u5236\u54c1\u5c42&#8221;\u540e\u7aef\u4ef6\uff0c\u5ac1\u63a5 tRPC 11 + Drizzle ORM + Hono + MySQL + Kimi OAuth \u5230\u65e2\u6709 <code>webapp-building-swarm<\/code> \u524d\u7aef\u4e0a\uff1b<strong>\u663e\u5f0f\u58f0\u660e\u4f9d\u8d56 swarm-workspace \u7684\u53cc\u5c42\u6587\u4ef6\u7cfb\u7edf\u5951\u7ea6\u4e14\u4e0d\u91cd\u590d\u9648\u8ff0<\/strong>\uff08\u6280\u80fd\u95f4\u5f15\u7528\u5173\u7cfb\uff1a<code>swarm-workspace\/SKILL.md<\/code> \u662f\u5355\u4e00\u4e8b\u5b9e\u6e90\uff09\u3002<\/li><li><strong>\u8f93\u5165<\/strong>\uff1a<code>PROJECT_PATH<\/code>\uff08\u9ed8\u8ba4 <code>\/mnt\/agents\/output\/app<\/code>\uff0cswarm \u6d41\u7a0b\u4e2d\u5fc5\u987b\u6307\u5411\u4e3b\u4ee3\u7406\u7684 <code>$HOME\/app-backend<\/code> worktree\uff09\u3001<code>APP_TITLE<\/code>\u3001<code>--features db,auth<\/code>\uff08\u9ed8\u8ba4 auth\uff09\u6216 <code>--template<\/code>\uff08\u4e92\u65a5\uff09\u3002<\/li><li><strong>\u8f93\u51fa<\/strong>\uff1a\u5c31\u5730\u4fee\u6539 worktree\uff08\u65b0\u589e <code>api\/<\/code>\u3001<code>contracts\/<\/code>\u3001\u53ef\u9009 <code>db\/<\/code>\uff09\uff0c\u5199 <code>.env<\/code>\uff08gitignored\uff09\uff0c\u5728\u5f53\u524d\u5206\u652f commit\uff1b<strong>\u4e0d\u5efa worktree\u3001\u4e0d merge<\/strong>\uff08\u7f16\u6392\u8005\u804c\u8d23\uff09\u3002<\/li><li><strong>\u53cc\u6267\u884c\u8def\u5f84<\/strong>\uff1a<code>--features<\/code> \u8d70\u5b8c\u6574\u5ac1\u63a5\uff08\u62f7\u6587\u4ef6 + 9 \u4e2a mjs \u8865\u4e01\u5668\u6539 vite\/tsconfig\/package.json\/schema\/router\/boot\/env + portal \u5f00\u6237 + \u81ea\u52a8\u63a5\u7ebf main.tsx\/App.tsx\uff09\uff1b<code>--template<\/code> \u9762\u5411\u5168\u6808\u6a21\u677f\uff08zip \u5df2\u94fa\u597d\u6587\u4ef6\uff09\uff0c\u53ea\u505a portal \u5f00\u6237 + \u5199 .env + npm install\u3002\u7531 <code>.backend-features.json<\/code> manifest \u81ea\u52a8\u8bc6\u522b\u3002<\/li><li><strong>.env \u4f20\u9012\u8bbe\u8ba1\u7684\u5b8c\u6574\u95ed\u73af<\/strong>\uff08SKILL.md + init.sh \u6ce8\u91ca\u4e92\u8bc1\uff09\uff1ainit.sh \u5199\u7684 <code>.env<\/code> \u662f gitignored\uff0c\u4e0d\u968f merge \u8d70\uff0c\u6240\u4ee5<strong>\u5ac1\u63a5\u5fc5\u987b\u7531\u4e3b\u4ee3\u7406\u4eb2\u81ea\u8dd1<\/strong>\uff08\u5b50\u4ee3\u7406\u6c99\u7bb1\u91cc\u7684 .env \u4f1a\u968f\u6c99\u7bb1\u9500\u6bc1\u800c stranded\uff09\uff1b\u8dd1\u5b8c\u624b\u5de5 <code>cp $HOME\/app-backend\/.env \/mnt\/agents\/output\/app\/.env<\/code> \u6682\u5b58\u8fdb\u5171\u4eab\u4ed3\uff08gitignore \u5185\uff09\uff0c\u4e4b\u540e <code>setup-local.sh<\/code> \u7684 <code>ENV_SRC<\/code> \u9ed8\u8ba4\u4ece\u90a3\u91cc\u590d\u5236\u8fdb\u6bcf\u4e2a\u65b0 worktree\u2014\u2014<strong>\u7528&#8221;git \u4e0d\u7ba1\u7684\u6587\u4ef6 + \u663e\u5f0f\u590d\u5236\u7ba1\u9053&#8221;\u89e3\u51b3\u5bc6\u94a5\u8de8 ephemeral \u6c99\u7bb1\u4f20\u9012<\/strong>\u3002<\/li><\/ul>\n\n\n\n<h3 id=\"23-initsh674-%25e8%25a1%258c%25e9%2580%25bb%25e8%25be%2591%25e8%25af%25a6%25e8%25a7%25a3\" class=\"wp-block-heading\">2.3 init.sh\uff08674 \u884c\uff09\u903b\u8f91\u8be6\u89e3<\/h3>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>\u9519\u8bef\u9677\u9631\u5373\u7528\u6237\u6c9f\u901a<\/strong>\uff1a<code>trap \u2026 ERR<\/code> \u7684\u62a5\u9519\u6587\u6848\u662f&#8221;abort the current task and let the user provide feedback to Kimi&#8221;\u2014\u2014\u811a\u672c\u628a LLM \u5f53\u64cd\u4f5c\u5458\uff0c\u5931\u8d25\u65f6\u5f15\u5bfc agent \u5411\u7528\u6237\u6c42\u52a9\u800c\u975e\u76f2\u76ee\u91cd\u8bd5\u3002<\/li><li><strong>\u53c2\u6570\/\u7279\u6027\u89e3\u6790<\/strong>\uff1a<code>--features<\/code> \u7ecf <code>resolve_features()<\/code> \u505a\u4f9d\u8d56\u95ed\u5305\uff08auth \u81ea\u52a8\u542b db\uff09+ \u53bb\u91cd + \u672a\u77e5\u7279\u6027\u786c\u62a5\u9519\u3002<\/li><li><strong>\u5e42\u7b49\u95e8\u7981<\/strong>\uff1a<code>.backend-features.json<\/code>\uff08version\/features\/app_id\/initialized_at\uff09\u4e3a\u6743\u5a01\u72b6\u6001\uff1b\u9996\u6b21\u8fd0\u884c\u88c5 base\uff0c\u91cd\u5165\u53ea\u88c5 delta\uff08<code>NEW_FEATURES<\/code> \u5dee\u96c6\uff09\uff0cdelta \u4e3a\u7a7a\u76f4\u63a5 <code>exit 0<\/code>\u3002<strong>\u65e0 manifest \u4f46\u5b58\u5728 api\/ \u7684&#8221;\u9057\u4ea7\u9879\u76ee&#8221;\u4f1a\u88ab\u63a2\u6d4b\uff08\u68c0\u67e5 db\/schema.ts\u3001drizzle.config.ts\u3001api\/kimi\/\uff09\u5e76\u56de\u6eaf\u8865\u5199 manifest<\/strong>\u2014\u2014\u8fc1\u79fb\u8def\u5f84\u90fd\u60f3\u597d\u4e86\u3002<\/li><li><strong>git \u5b89\u5168<\/strong>\uff1a<code>safe.directory<\/code> \u81ea\u52a8\u52a0\u767d\uff1b\u7528 <code>-e<\/code> \u800c\u975e <code>-d<\/code> \u63a2\u6d4b <code>.git<\/code>\uff08\u517c\u5bb9 worktree \u7684 .git \u6587\u4ef6\uff09\uff1b\u6709\u672a\u63d0\u4ea4\u6539\u52a8\u5148\u81ea\u52a8 <code>wip: save changes<\/code> \u63d0\u4ea4\uff0c<strong>\u7edd\u4e0d\u4e22\u7528\u6237\u4ee3\u7801<\/strong>\u3002<\/li><li><strong>\u6587\u4ef6\u94fa\u8bbe\u7eaa\u5f8b<\/strong>\uff1a<code>safe_copy()<\/code>\uff08\u76ee\u6807\u5b58\u5728\u5373\u8df3\u8fc7\u5e76\u8bb0\u5f55\u5230 SKIPPED_FILES \u6c47\u603b\u62a5\u544a\uff09\u7528\u4e8e\u7528\u6237\u53ef\u6269\u5c55\u6587\u4ef6\uff08schema.ts\u3001seed.ts\u3001connection.ts\u3001drizzle.config.ts\uff09\uff1bgraft \u81ea\u6709\u7684 auth UI\uff08Login.tsx\u3001useAuth.ts\u3001AuthLayout*\uff09\u7528 <code>cp<\/code> <strong>\u6743\u5a01\u8986\u76d6<\/strong>\uff08\u6ce8\u91ca\uff1a\u8fd9\u662f\u552f\u4e00\u4e8b\u5b9e\u6e90\uff09\uff1bNotFound.tsx \u7528 <code>cp -n<\/code> \u8ba9\u4f4d\uff08\u5171\u4eab\u9886\u571f\uff09\u3002\u4e09\u79cd\u62f7\u8d1d\u8bed\u4e49\u5bf9\u5e94\u4e09\u79cd\u6240\u6709\u6743\u2014\u2014\u975e\u5e38\u7cbe\u7ec6\u7684&#8221;\u54ea\u4e9b\u6587\u4ef6\u5f52\u6846\u67b6\u3001\u54ea\u4e9b\u5f52\u7528\u6237&#8221;\u6a21\u578b\u3002<\/li><li><strong>portal \u5f00\u6237<\/strong>\uff1a<code>POST ${PORTAL_URL:-http:\/\/localhost:8080\/api\/v1\/apps}<\/code> body <code>{\"name\":\u6807\u9898,\"features\":[...]}<\/code>\uff0c\u671f\u671b\u8fd4\u56de <code>{app_id, app_secret, credentials:{KEY:value}}<\/code>\uff1b<strong>\u6709\u975e JSON \u54cd\u5e94\u9632\u62a4<\/strong>\uff08502\/proxy \u9519\u8bef\u9875\u4f1a\u5148\u628a node \u89e3\u6790\u70b8\u6210 SyntaxError\uff0c\u811a\u672c\u663e\u5f0f\u9884\u68c0 JSON \u5408\u6cd5\u6027\u518d\u7ed9\u53ef\u8bfb\u62a5\u9519\uff09\u3002\u51ed\u636e\u5199\u6210 <code>.env<\/code>\uff08APP_ID\/APP_SECRET + \u6d3e\u751f VITE_APP_ID\/VITE_KIMI_AUTH_URL + portal \u4e0b\u53d1\u7684 feature \u51ed\u636e\u5982 DATABASE_URL\/KIMI_AUTH_URL\/KIMI_OPEN_URL\uff09\u3002<\/li><li><strong>\u4f9d\u8d56\u5b89\u88c5<\/strong>\uff1a\u9996\u8dd1\/template \u6a21\u5f0f\u5148\u628a <code>template\/node_modules<\/code>\uff08\u9884\u6784\u5efa\uff09\u6574\u6811 <code>cp -r<\/code> \u8986\u76d6\uff0c\u518d <code>npm install --prefer-offline<\/code> \u589e\u91cf\u5bf9\u9f50\u2014\u2014\u51b7\u542f\u52a8\u96f6\u4e0b\u8f7d\u7684\u540c\u4e00\u624b\u6cd5\uff08\u4e0e webapp-building-swarm \u4e00\u81f4\uff09\u3002<\/li><li><strong>\u81ea\u52a8\u63a5\u7ebf<\/strong>\uff1a<code>wire-main-tsx.mjs<\/code> \u628a TRPCProvider \u5305\u8fdb <code>&lt;BrowserRouter&gt;<\/code> \u5185\u5c42\uff08\u987a\u5e8f\u5199\u6b7b\uff1aStrictMode\u2192BrowserRouter\u2192TRPCProvider\u2192App\uff09\uff1bauth \u65f6 <code>wire-app-tsx.mjs<\/code> \u52a0 <code>\/login<\/code> \u548c <code>*<\/code> \u8def\u7531\uff1b\u5931\u8d25\u964d\u7ea7\u4e3a WIRING_TODO \u6e05\u5355 + \u6307\u5411 docs\/Post-Init-Wiring.md\uff0838 \u884c\u4eba\u5de5\u515c\u5e95\u6587\u6863\uff09\u3002<\/li><li><strong>commit \u8bed\u4e49\u5316\u6536\u5c3e<\/strong>\uff1a\u4e09\u79cd commit message \u533a\u5206 provision\/graft\/add-features\uff1b\u7ed3\u5c3e\u6253\u5370\u5206\u652f\u540d\u5e76\u63d0\u9192&#8221;Swarm: the main agent merges this branch&#8221;\u3002<\/li><\/ol>\n\n\n\n<h3 id=\"24-docs-%25e5%2585%25ad%25e7%25af%2587%25e8%25a6%2581%25e7%2582%25b9\" class=\"wp-block-heading\">2.4 docs\/ \u516d\u7bc7\u8981\u70b9<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Project-Structure.md<\/strong>\uff1a\u76ee\u5f55\u6811 + \u4e09\u4e2a import alias \u7eaa\u5f8b\uff08<code>@\/<\/code>=src \u4ec5\u524d\u7aef\u3001<code>@contracts\/<\/code> \u53cc\u5411\u3001<code>@db\/<\/code> \u4ec5 api\u2014\u2014<code>@\/db\/schema<\/code> \u662f\u9519\u7684\uff09\u3002<\/li><li><strong>Authentication.md<\/strong>\uff1aOAuth 2.0 \u6388\u6743\u7801\u6d41 + JWT session\uff081 \u5e74\uff09+ \u9996\u767b upsert \u81ea\u52a8\u5f00\u6237\uff08<strong>\u65e0\u6ce8\u518c\u6d41\u7a0b<\/strong>\uff0c\u6ce8\u518c CTA \u4e00\u5f8b\u6307\u5411 LOGIN_PATH\uff09\uff1bLogin.tsx \u5168\u6587\u5185\u5d4c\u5e76\u58f0\u660e&#8221;\u7981\u6b62\u81ea\u5199\u767b\u5f55\u9875&#8221;\uff1badmin \u7531 <code>OWNER_UNION_ID<\/code>\uff08portal \u8fd4\u56de\u7684 creator_user_id\uff09\u9996\u767b\u5339\u914d\u6388\u4e88\uff1b\u4e09\u7ea7 procedure\uff08publicQuery\/authedQuery\/adminQuery\uff09\u3002<\/li><li><strong>Database.md<\/strong>\uff1aDrizzle + mysql2\uff0c<code>getDb()<\/code> \u61d2\u8fde\u63a5\uff1bMySQL \u65e0 <code>.returning()<\/code> \u7528 <code>.$returningId()<\/code>\uff1b\u7981\u88f8 SQL\u3002<\/li><li><strong>tRPC.md<\/strong>\uff1a\u6309 feature \u5206 router \u6ce8\u518c\u8fdb <code>api\/router.ts<\/code>\uff1bZod input \u6821\u9a8c\u5f3a\u5236\uff1bsuperjson \u5e8f\u5217\u5316\uff08Date\u2194string \u5751\uff0c<code>$inferSelect<\/code> \u5bf9\u9f50\uff09\u3002<\/li><li><strong>Development-Guide.md<\/strong>\uff1aschema\u2192queries\u2192router\u2192\u9875\u9762 \u7684\u7aef\u5230\u7aef\u52a0\u7279\u6027\u8303\u4f8b\u3002<\/li><li><strong>Post-Init-Wiring.md<\/strong>\uff1a\u81ea\u52a8\u63a5\u7ebf\u5931\u8d25\u65f6\u7684\u4e24\u6b65\u624b\u5de5\u515c\u5e95\u3002<\/li><\/ul>\n\n\n\n<h3 id=\"25-%25e5%25b7%25a5%25e7%25a8%258b%25e8%25b4%25a8%25e9%2587%258f%25e4%25ba%25ae%25e7%2582%25b9%25e4%25b8%258e%25e5%259d%2591\" class=\"wp-block-heading\">2.5 \u5de5\u7a0b\u8d28\u91cf\u4eae\u70b9\u4e0e\u5751<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u4eae\u70b9\uff1a\u4e09\u6001\u62f7\u8d1d\u6240\u6709\u6743\u6a21\u578b\uff1bmanifest \u95e8\u7981 + \u9057\u4ea7\u63a2\u6d4b\uff1b\u628a&#8221;\u4e3a\u4ec0\u4e48\u4e3b\u4ee3\u7406\u5fc5\u987b\u4eb2\u81ea\u8dd1 graft&#8221;\u5199\u6210\u6ce8\u91ca\uff08.env gitignored \u7684\u56e0\u679c\u94fe\uff09\uff1b\u95e8\u6237\u975e JSON \u9632\u62a4\uff1bWIRING_TODO \u964d\u7ea7\u800c\u975e\u5931\u8d25\u3002 \u5751\/\u8026\u5408\uff1aportal :8080\u3001Kimi OAuth\u3001MySQL\u3001superjson\u3001<code>mshtools-website_version_manager<\/code> \u5168\u662f\u5e73\u53f0\u8026\u5408\u70b9\uff1b<code>docs\/<\/code> \u4e0e <code>template\/<\/code> \u4e4b\u95f4\u6709\u77e5\u8bc6\u91cd\u590d\uff08SKILL.md \u7684 Common Mistakes \u4e0e docs \u90e8\u5206\u91cd\u53e0\uff0c\u7ef4\u62a4\u53cc\u4efd\uff09\uff1b\u6280\u672f\u6808\u5b8c\u5168\u9501\u6b7b\uff08React19\/Vite7\/tRPC11\/Drizzle\/MySQL\uff09\uff0c\u79bb\u5f00 Kimi \u5e73\u53f0\u7b49\u4e8e\u91cd\u5199\u6a21\u677f\u6811\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"3-%25e4%25b8%25a4%25e4%25b8%25aa%25e5%2590%258e%25e5%258d%258a%25e6%25ae%25b5%25e6%259c%25aa%25e9%2587%2587%25e9%2595%25bf%25e6%258a%2580%25e8%2583%25bd%25e8%25a1%25a5%25e9%25bd%2590%25e4%25bb%25bb%25e5%258a%25a1%25e2%2591%25a2\" class=\"wp-block-heading\">3. \u4e24\u4e2a&#8221;\u540e\u534a\u6bb5\u672a\u91c7&#8221;\u957f\u6280\u80fd\u8865\u9f50\uff08\u4efb\u52a1\u2462\uff09<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u7b2c\u4e00\u8f6e 09-skills-d \u00a75 \u6807\u6ce8\u7684\u4e24\u4e2a\uff1a<code>trading-strategy-backtest<\/code>\uff08L120 \u4e4b\u540e\uff09\u4e0e <code>xlsx\/SKILL.md<\/code>\uff08L130 \u4e4b\u540e\uff09\u3002\u672c\u8f6e\u5747\u5df2\u5168\u6587\u8865\u9f50\u3002<\/p>\n\n\n\n<h3 id=\"31-tradingstrategybacktest-l120543%25e5%2585%25a8%25e6%2596%2587-543-%25e8%25a1%258c\" class=\"wp-block-heading\">3.1 trading-strategy-backtest L120\u2013543\uff08\u5168\u6587 543 \u884c\uff09<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u540e\u534a\u6bb5\u662f\u7eaf<strong>\u6267\u884c\u7eaa\u5f8b\u4e0e\u8f93\u51fa\u5951\u7ea6<\/strong>\uff0c\u4fe1\u606f\u5bc6\u5ea6\u6700\u9ad8\u7684\u65b0\u589e\u5185\u5bb9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>On-Demand Loading \u8868<\/strong>\uff1a13 \u4e2a reference \u6587\u4ef6\u9010\u4e00\u6807\u6ce8\u52a0\u8f7d\u65f6\u673a\u4e0e\u5f3a\u5236\u6027\u2014\u2014<code>pitfalls\/pandas.md<\/code> \u548c <code>common_pitfalls.md<\/code> \u662f<strong>\u5f3a\u5236\u8bfb<\/strong>\uff0c<code>dashboard_template.html<\/code> \u5219<strong>\u660e\u4ee4\u7981\u6b62\u8bfb<\/strong>\uff08&#8221;2000+ \u884c CSS\/JS \u662f\u7ed9\u6d4f\u89c8\u5668\u7684\uff0c\u4ee3\u7801\u53ea\u9700 open+replace&#8221;\uff09\u2014\u2014\u5bf9\u4e0a\u4e0b\u6587\u9884\u7b97\u7684\u7cbe\u7ec6\u7ba1\u63a7\u3002<\/li><li><strong>\u7b56\u7565\u56de\u6d4b vs \u4e8b\u4ef6\u7814\u7a76\u7684\u4e00\u9636\u5206\u6d41\u8868<\/strong>\uff1a\u4e8b\u4ef6\u7814\u7a76\u65e0\u8d44\u91d1\u6982\u5ff5\u3001\u9ed8\u8ba4\u65e0\u8d39\u7387\uff08\u5426\u5219\u5e73\u5747\u6536\u76ca\u5931\u771f\uff09\u3001\u6307\u6807\u662f\u4e8b\u4ef6\u7ea7\uff08\u5747\u503c\/\u4e2d\u4f4d\u6570\/\u80dc\u7387\/\u6700\u597d\u6700\u574f\u4e8b\u4ef6\uff09\u800c<strong>\u7981\u6b62\u62a5 Sharpe\/\u5e74\u5316\/\u6700\u5927\u56de\u64a4<\/strong>\u3002<\/li><li><strong>\u786c\u89c4\u5219\u7ec6\u5316<\/strong>\uff1a<code>signal_time &lt;= order_time &lt;= fill_time<\/code> \u7684\u4e0d\u7b49\u5f0f\u5224\u636e\uff1b\u811a\u672c\u5934\u5951\u7ea6\uff08\u6587\u4ef6\u9876\u90e8\u5fc5\u987b\u58f0\u660e <code>SIGNAL_TIMING\/EXECUTION_TIMING\/EXECUTION_NOTE<\/code>\uff09\uff1b<code>enter_when_flat<\/code> assert \u6a21\u677f\u539f\u6587\uff1blot \u7ea7 helper \u5b8c\u6574\u7b7e\u540d\u53c2\u8003\uff08buy_lot\/close_lots_fifo\/close_lot\/compute_lot_equity + aggregate \u8def\u5f84\u4e09\u4e2a\u51fd\u6570\uff09\u2014\u2014<strong>\u8c03\u7528\u8005\u53ea\u770b\u7b7e\u540d\u8868\uff0c\u51fa\u9519\u6216\u6269\u5c55\u624d\u8bfb\u6e90\u7801<\/strong>\u3002<\/li><li><strong>Warmup vs \u8bc4\u4f30\u7a97<\/strong>\uff1a\u6570\u636e\u52a0\u8f7d\u8d77\u70b9 = \u8bc4\u4f30\u8d77\u70b9 \u2212 max\uff08\u6307\u6807\u7a97\u53e3\uff09\u00d71.5\uff08MA120\u2192\u524d 180 \u5929\uff09\uff1bwarmup bar \u53ef\u66f4\u65b0\u6307\u6807\/\u8ba1\u6570\u5668\u7b49\u7eaf\u5386\u53f2\u72b6\u6001\u4f46<strong>\u7981\u6b62\u4ea7\u751f\u4ea4\u6613\/\u6743\u76ca\u8bb0\u5f55\/pending \u4fe1\u53f7<\/strong>\uff1b<code>export_results(start,end)<\/code> \u5207\u7247\u91cd\u7b97\u6307\u6807\u9632 warmup \u6c61\u67d3\u3002<\/li><li><strong>Self-Check \u56db\u6b65\u5f3a\u5236<\/strong>\uff08\u4e0d\u53ef\u8df3\u8fc7\uff09\uff1a\u2460 \u53ef\u64cd\u4f5c\u6027\uff08.py \u5b58\u5728\u3001cwd \u53ef\u8dd1\u3001\u4e09\u4e2a\u4ea7\u7269\u6587\u4ef6\u5b58\u5728\uff09\u2192 \u2461 common_pitfalls \u6e05\u5355\u9010\u884c \u2192 \u2462 <strong>\u5e38\u8bc6\u6821\u9a8c + \u5bf9\u6297\u8bc4\u5ba1<\/strong>\uff08\u62a5\u8b66\u9608\u503c\u8868\uff1aSharpe&gt;3 \/ \u5e74\u5316&gt;50% \/ \u80dc\u7387&gt;70% \/ \u56de\u64a4=0 \/ \u5e74\u4ea4\u6613&lt;3 \u6216 &gt;252 \u90fd\u8981\u627e\u6839\u56e0\uff1b\u5bf9\u6297\u8bc4\u5ba1\u8981\u6c42&#8221;\u5047\u8bbe\u4ee3\u7801\u91cc\u6070\u597d\u6709\u4e00\u4e2a bug&#8221;\u9010\u884c\u56db\u95ee\uff1b<strong>\u627e\u4e0d\u5230\u4e5f\u5fc5\u987b\u5217\u51fa\u81f3\u5c11 3 \u4e2a\u6392\u67e5\u8fc7\u5e76\u6392\u9664\u7684\u7591\u70b9\uff0c\u5426\u5219\u91cd\u505a<\/strong>\uff09\u2192 \u2463 \u90e8\u7f72\u540e dashboard \u81ea\u68c0\uff08\u6e32\u67d3\u5b8c\u6574\u6027\/\u5185\u5bb9\u5408\u89c4\/\u6027\u80fd &gt;5MB \u6216 &gt;5000 \u70b9\u5fc5\u987b\u964d\u91c7\u6837\uff09\u3002<\/li><li><strong>\u8f93\u51fa\u5951\u7ea6<\/strong>\uff1a\u4e09\u6587\u4ef6 <code>&lt;prefix&gt;_equity.csv|_trades.csv|_summary.json<\/code>\uff08\u5b57\u6bb5\u8868\u7cbe\u786e\u5230 meta\/summary \u7684\u6bcf\u4e2a key\uff09\uff1bdashboard \u4e09\u6761 UI \u94c1\u5f8b\uff08\u4e00\u5207 HTML \u5fc5\u987b\u7ecf <code>render_dashboard()<\/code> + <code>dashboard_template.html<\/code>\uff0c<strong>\u624b\u5199\u5bfc\u822a\u9875=\u65e0\u6548\u4ea7\u51fa<\/strong>\uff09\uff1b\u6700\u7ec8\u56de\u590d A\/B\/C \u4e09\u6bb5\u5f3a\u5236\uff08\u5b9e\u73b0\u7ec6\u8282\/\u5c40\u9650\u4e0e\u504f\u5dee\/\u7ed3\u679c\u89e3\u8bfb\uff09\uff0c<strong>\u7981\u6b62\u7f57\u5217\u4ea4\u4ed8\u6587\u4ef6\u540d<\/strong>\uff0c\u8bed\u8a00\u9501\u8ddf\u968f\u7528\u6237 query\u3002<\/li><li><strong>\u6570\u636e\u6e90\u7eaa\u5f8b<\/strong>\uff1a\u884c\u60c5\u4f18\u5148 <code>mshtools<\/code> datasource\uff1b\u9009\u80a1\/\u5b87\u5b99\u4f18\u5148 mshtools \u5185 <code>ifind<\/code>\uff0c<strong>\u7981\u6b62\u7528\u6caa\u6df1 300\/500 \u5f53\u5168\u5e02\u573a\u4ee3\u7406<\/strong>\u3002<\/li><\/ul>\n\n\n\n<h3 id=\"32-xlsx-l130992%25e5%2585%25a8%25e6%2596%2587-992-%25e8%25a1%258c\" class=\"wp-block-heading\">3.2 xlsx L130\u2013992\uff08\u5168\u6587 992 \u884c\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Xlsx CLI \u516d\u547d\u4ee4\u5168\u5951\u7ea6<\/strong>\uff08<code>.\/scripts\/Xlsx<\/code>\uff0cC#\/OpenXML \u5b9e\u73b0\uff09\uff1a<code>recheck<\/code>\uff08\u516c\u5f0f\u9519\u8bef+\u96f6\u503c\u5355\u5143\u683c+<strong>\u9690\u5f0f\u6570\u7ec4\u516c\u5f0f\u68c0\u6d4b<\/strong>\u2014\u2014LibreOffice \u80fd\u7b97\u4f46 MS Excel \u663e\u793a #N\/A \u7684 <code>MATCH(TRUE(),range&gt;0,0)<\/code> \u6a21\u5f0f\uff0c\u7ed9\u51fa SUMPRODUCT \u66ff\u4ee3\uff09\u3001<code>reference-check<\/code>\uff08\u8d8a\u754c\u5f15\u7528\/\u8868\u5934\u6df7\u5165\/\u805a\u5408\u8303\u56f4\u22642 \u683c\/\u5217\u5185\u5b64\u7acb\u516c\u5f0f\u56db\u7c7b\u6a21\u5f0f\u5f02\u5e38\uff09\u3001<code>inspect<\/code>\uff08\u7ed3\u6784\u2192JSON\uff09\u3001<code>pivot<\/code>\uff08<strong>\u552f\u4e00\u5408\u6cd5\u7684\u900f\u89c6\u8868\u9014\u5f84<\/strong>\uff0c\u81ea\u52a8\u914d\u56fe\uff0cmonochrome\/finance \u4e24\u4e3b\u9898\uff09\u3001<code>chart-verify<\/code>\uff08\u7a7a\u56fe\u8868 exit 1\uff09\u3001<code>validate<\/code>\uff08OpenXML Office2013 schema + \u4e0d\u517c\u5bb9\u51fd\u6570 + .rels \u8def\u5f84\u6821\u9a8c\uff0c<strong>\u4e0d\u8fc7=\u7981\u4ea4\u4ed8\uff0c\u4e14\u4e0d\u8bb8\u4fee\u53ea\u8bb8\u91cd\u65b0\u751f\u6210<\/strong>\uff09\u3002<\/li><li><strong>\u9010 sheet \u6821\u9a8c\u5faa\u73af<\/strong>\uff08\u8fdd\u53cd=\u7ea7\u8054\u5931\u8d25\uff09\uff1aPlan\u2192Create\u2192Save\u2192recheck+reference-check\u21920 \u9519\u8bef\u624d\u8bb8\u505a\u4e0b\u4e00\u4e2a sheet\uff1b\u5168\u90e8\u5b8c\u6210\u540e validate \u7ec8\u9a8c\u3002<\/li><li><strong>\u516c\u5f0f\u4fdd\u771f\u7981\u533a\u8868<\/strong>\uff1aFILTER\/UNIQUE\/SORT\/XLOOKUP\/LET\/LAMBDA\/SEQUENCE\/RANDARRAY\/ARRAYFORMULA\/QUERY\/IMPORTRANGE \u7b49 12 \u4e2a Excel 365\/2021+ \u6216 Google Sheets \u4e13\u5c5e\u51fd\u6570<strong>\u5168\u90e8\u7981\u7528<\/strong>\uff08\u517c\u5bb9 Excel 2019 \u4e0b\u9650\uff09\uff0c\u6bcf\u4e2a\u7ed9\u4e86\u4f20\u7edf\u66ff\u4ee3\u3002<\/li><li><strong>Pivot \u987a\u5e8f\u94c1\u5f8b<\/strong>\uff1aopenpyxl \u5efa\u5168\u90e8 sheet \u2192 <code>pivot<\/code> \u547d\u4ee4\u6536\u5c3e \u2192 validate \u2192 \u4ea4\u4ed8\uff1b<strong>openpyxl \u518d\u78b0 pivot \u4ea7\u7269=\u635f\u574f pivotCache<\/strong>\u3002<\/li><li><strong>\u6837\u5f0f\u7cfb\u7edf<\/strong>\uff1a\u9690\u85cf\u7f51\u683c\u7ebf\u5f3a\u5236\u3001B2 \u8d77\u59cb\u3001\u53cc\u98ce\u683c\uff08Minimalist Monochrome \u9ed8\u8ba4\uff1a\u9ed1\u767d\u7070+\u552f\u4e00\u84dd\u8272 accent\uff1bProfessional Finance \u8d22\u52a1\u7528\uff0c\u542b<strong>\u5730\u533a\u6da8\u8dcc\u8272\u7ea6\u5b9a\u8868<\/strong>\uff1a\u4e2d\u56fd\u7ea2\u6da8\u7eff\u8dcc\/\u56fd\u9645\u7eff\u6da8\u7ea2\u8dcc\uff09\u3001\u91d1\u878d\u5b57\u4f53\u8272\u89c4\u5219\uff08\u84dd=\u8f93\u5165\/\u9ed1=\u516c\u5f0f\/\u7eff=\u8de8\u8868\u5f15\u7528\/\u7ea2=\u5916\u90e8\u5f15\u7528\uff09\u3001\u6761\u4ef6\u683c\u5f0f\u4e3b\u52a8\u4f7f\u7528\u8868\uff08DataBar\/ColorScale\/IconSet \u89e6\u53d1\u6761\u4ef6\uff09\u3001\u5c01\u9762\u9875\u5f3a\u5236\uff08\u6807\u9898\/\u5173\u952e\u6307\u6807\/Sheet \u7d22\u5f15\/\u900f\u89c6\u8868\u5237\u65b0\u63d0\u793a\uff09\u3002<\/li><li><strong>\u56fe\u8868\u7eaa\u5f8b<\/strong>\uff1a\u89e6\u53d1\u8bcd\uff08visual\/chart\/\u56fe\uff09\u5373\u5fc5\u987b\u4ea7\u51fa\u771f\u5b9e\u5d4c\u5165\u56fe\u8868\uff0c<code>chart-verify<\/code> \u5931\u8d25&#8221;\u6ca1\u6709\u4efb\u4f55\u501f\u53e3&#8221;\uff1b\u7981\u6b62&#8221;\u6570\u636e sheet + \u8ba9\u7528\u6237\u81ea\u5df1\u63d2\u5165\u56fe\u8868&#8221;\u3002<\/li><li><strong>\u5916\u90e8\u6570\u636e\u6eaf\u6e90<\/strong>\uff1a\u5fc5\u987b <code>Source Name|Source URL<\/code> \u4e24\u5217\u6216\u72ec\u7acb Sources sheet\uff0c\u7981 HYPERLINK \u51fd\u6570\u3002<\/li><\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"4-%25e6%2596%25b0%25e6%25b2%2599%25e7%25ae%25b1%25e5%25ae%259e%25e4%25be%258b%25e5%25b7%25ae%25e5%25bc%2582%25e6%25a0%25b8%25e6%259f%25a5%25e4%25bb%25bb%25e5%258a%25a1%25e2%2591%25a3\" class=\"wp-block-heading\">4. \u65b0\u6c99\u7bb1\u5b9e\u4f8b\u5dee\u5f02\u6838\u67e5\uff08\u4efb\u52a1\u2463\uff09<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u6838\u67e5\u9879<\/th><th>\u7b2c\u4e00\u8f6e\uff08\u65e7\u5b9e\u4f8b\uff09<\/th><th>\u672c\u8f6e\uff08\u65b0\u5b9e\u4f8b\uff09<\/th><th>\u5224\u5b9a<\/th><\/tr><\/thead><tbody><tr><td><code>\/app\/.agents\/skills<\/code> \u6570\u91cf<\/td><td>269<\/td><td><strong>269<\/strong>\uff08\u76ee\u5f55\u5217\u8868 href \u8ba1\u6570\uff0c\u65e0 <code>..\/<\/code> \u5e72\u6270\u9879\uff09<\/td><td>\u4e00\u81f4<\/td><\/tr><tr><td>\u6280\u80fd\u540d\u79f0\u96c6\u5408<\/td><td>269 \u4e2a\uff08sections 06\u201309 \u56db\u6279\u6e05\u5355\uff09<\/td><td>\u540d\u79f0\u96c6\u5408 diff\uff1a\u7b2c\u4e00\u8f6e\u8868\u683c\u53ef\u63d0\u53d6\u7684 254 \u4e2a\u540d\u5b57<strong>\u5168\u90e8\u547d\u4e2d<\/strong>\uff1b\u8868\u9762\u5dee\u503c 17 \u4e2a\u9010\u4e00\u6838\u5bf9\u5747\u4e3a\u63d0\u53d6\u4f2a\u5dee\uff08\u7b2c\u4e00\u8f6e\u8868\u683c\u7684&#8221;A \/ B-cn&#8221;\u5408\u5e76\u5199\u6cd5\u5982 <code>retro-tech-illustration \/ -cn<\/code>\u3001\u6216 prose \u8986\u76d6\u7684 kimi-*\/musepool \u7b49\u5728 REPORT \u4ed6\u7ae0\u6709\u8bb0\u5f55\uff09<\/td><td><strong>\u96f6\u5b9e\u5dee<\/strong><\/td><\/tr><tr><td><code>_meta.json<\/code> \u62bd\u67e5<\/td><td>kubectl\/browse\/edge-tts \u7b49\u6709<\/td><td>\u540c\u8def\u5f84\u540c\u5185\u5bb9\uff08kubectl publishedAt=1769247843962 \u4e0e\u7b2c\u4e00\u8f6e\u8bb0\u5f55\u4e00\u81f4\uff09<\/td><td>\u4e00\u81f4<\/td><\/tr><tr><td><code>\/app\/.user\/skills<\/code><\/td><td>6 \u4e2a\u7528\u6237\u6280\u80fd<\/td><td><strong>\u540c\u540d\u540c 6 \u4e2a<\/strong>\uff1aengineering-ppt-converter\u3001lecture-notes-digitizer\u3001openclaw-selfhost-ops\u3001stem-exercise-solver\u3001translation-review-coach\u3001vocab-table-filler\uff08frontmatter \u62bd\u67e5\u4e00\u81f4\uff09<\/td><td>\u4e00\u81f4<\/td><\/tr><tr><td><code>\/root\/.kimi\/agent-gw.json<\/code><\/td><td>kimi_chat_id=<code>1a014098-*<em><strong>-<\/strong><strong>-<\/strong><strong>-<\/strong><\/em>*****15cb<\/code>\uff0capi_key \u524d\u7f00 <code>sk-kimi-8OQEd910<\/code><\/td><td><strong>\u5b8c\u5168\u76f8\u540c\u7684 chat_id \u4e0e key \u524d\u7f00<\/strong>\uff1b\u6574\u6587\u4ef6 sha256=<code>983fd57b943c26bdad77a7b770d923221c1996d9e124b4bee6fa342f57dfb743<\/code>\uff08\u5b58\u6863\u5907\u6bd4\u5bf9\uff09<\/td><td>\u4e00\u81f4<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u7ed3\u8bba<\/strong>\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>\u6280\u80fd\u5e93\u662f\u955c\u50cf\u56fa\u5b9a\u7684\uff0c\u4e0d\u662f\u4f1a\u8bdd\u52a8\u6001\u4e0b\u53d1<\/strong>\u2014\u2014\u65b0\u65e7\u5b9e\u4f8b 269 \u4e2a\u6280\u80fd\u540d\u79f0\u96c6\u5408\u96f6\u5dee\u5f02\uff0c<code>_meta.json<\/code> \u7684 publishedAt \u65f6\u95f4\u6233\u90fd\u4e0e\u7b2c\u4e00\u8f6e\u76f8\u540c\u3002\u52a8\u6001\u5c42\u53ea\u6709 portal overlay\uff08<code>.user\/skills<\/code> \u6309\u8d26\u53f7\u3001<code>.agents\/plugins<\/code> \u6309\u914d\u7f6e\uff09\uff0c\u4e0e\u7b2c\u4e00\u8f6e 11-user-layer \u7684\u4e09\u5c42\u6a21\u578b\u543b\u5408\u3002<\/li><li><strong>agent-gw.json \u4e0d\u53d8<\/strong>\u8bf4\u660e\u8fd9\u662f\u540c\u4e00 chat \u91cd\u65b0 claim \u4e86\u65b0\u6c99\u7bb1\uff08\u7b2c\u4e00\u8f6e 03-storage \u00a74 \u7684&#8221;\u5de5\u4f5c\u533a\u53ef\u88ab\u4e0d\u540c chat \u590d\u7528\/\u91cd\u65b0\u7ed1\u5b9a&#8221;\u673a\u5236\u7684\u53cd\u5411\u5b9e\u8bc1\uff1a\u540c\u4e00 chat \u7ed1\u65b0\u6c99\u7bb1\u65f6\u51ed\u8bc1\u539f\u6837\u91cd\u653e\uff09\uff0capi_key \u662f\u957f\u671f\u51ed\u8bc1\u800c\u975e\u6bcf\u6b21\u4f1a\u8bdd\u8f6e\u6362\u3002<\/li><li>\u65b0\u5b9e\u4f8b <code>\/run\/s6-rc\/servicedirs\/<\/code> \u53ea\u542b 7 \u57fa\u7840\u670d\u52a1 + s6-rc \u5185\u90e8\u4ef6\u2014\u2014drive9-fuse\/watchdog \u7684\u786e\u4e0d\u8fdb s6-rc \u7f16\u8bd1\u5e93\uff0c\u800c\u662f claim \u540e\u76f4\u63a5\u6ce8\u5165\u626b\u63cf\u76ee\u5f55\uff08\u4e0e\u7b2c\u4e00\u8f6e 01-system \u751f\u547d\u5468\u671f\u63cf\u8ff0\u4e00\u81f4\uff09\u3002<\/li><\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"5-metajsonclawhub-%25e5%2585%2583%25e6%2595%25b0%25e6%258d%25ae-schema%25e4%25bb%25bb%25e5%258a%25a1%25e2%2591%25a4\" class=\"wp-block-heading\">5. _meta.json\uff1aClawHub \u5143\u6570\u636e schema\uff08\u4efb\u52a1\u2464\uff09<\/h2>\n\n\n\n<h3 id=\"51-schema-%25e7%25a1%25ae%25e8%25ae%25a45-%25e4%25b8%25aa%25e5%2585%25a8%25e6%2596%2587%25e6%25a0%25b7%25e6%259c%25ac\" class=\"wp-block-heading\">5.1 Schema \u786e\u8ba4\uff085 \u4e2a\u5168\u6587\u6837\u672c\uff09<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u683c\u5f0f\u4e3a 4 \u5b57\u6bb5 JSON\uff0c\u65e0\u5d4c\u5957\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"json\">{\n  \"ownerId\": \"kn79ajadezq44ydpssrcdgbytn7ztm19\",   \/\/ Convex \u98ce\u683c\u6587\u6863 ID\uff08kn7\u2026 \u524d\u7f00\uff09\uff0c\u6280\u80fd\u4f5c\u8005\/\u4e0a\u67b6\u8005\n  \"slug\": \"kubectl\",                                \/\/ \u5e02\u573a\u5185\u7684\u552f\u4e00\u6807\u8bc6\n  \"version\": \"1.0.0\",                               \/\/ \u5e02\u573a\u4e0a\u67b6\u7248\u672c\uff08\u8bed\u4e49\u5316\uff09\n  \"publishedAt\": 1769247843962                      \/\/ ms \u65f6\u95f4\u6233\uff082026-01-24\uff09\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u6837\u672c\uff1akubectl\uff081.0.0\uff09\u3001browse\uff082.0.2\uff0cownerId \u6307\u5411 browserbase\uff09\u3001edge-tts\uff082.0.0\uff09\u3001imap-smtp-email\uff080.0.9\uff09\u3001email-manager\uff08\u89c1\u4e0b\uff09\u3002<\/p>\n\n\n\n<h3 id=\"52-%25e5%2585%25b3%25e9%2594%25ae%25e5%258f%2591%25e7%258e%25b0%25e7%259b%25ae%25e5%25bd%2595%25e5%2590%258d%25e4%25b8%258e%25e5%25b8%2582%25e5%259c%25ba-slug-%25e8%25a7%25a3%25e8%2580%25a6\" class=\"wp-block-heading\">5.2 \u5173\u952e\u53d1\u73b0\uff1a\u76ee\u5f55\u540d\u4e0e\u5e02\u573a slug \u89e3\u8026<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong><code>email-manager\/_meta.json<\/code> \u7684 slug \u662f <code>imap-smtp-email<\/code><\/strong>\uff08ownerId\u3001version\u3001publishedAt \u4e0e imap-smtp-email \u5b8c\u5168\u76f8\u540c\uff09\u2014\u2014\u5373 email-manager \u76ee\u5f55\u662f imap-smtp-email \u6280\u80fd\u7684<strong>\u6539\u540d\u518d\u5206\u53d1\u514b\u9686<\/strong>\uff0c_meta.json \u539f\u6837\u4fdd\u7559\u3002\u8fd9\u4e0e\u7b2c\u4e00\u8f6e\u89c2\u5bdf\u5230\u7684&#8221;cn-finance-data \u539f\u540d tushare-finance\u3001chart-gen \u539f\u540d chart-image&#8221;\u4e92\u8bc1\uff1aKimi \u5bfc\u5165\u6d41\u6c34\u7ebf\u4f1a\u91cd\u547d\u540d\u76ee\u5f55\u4f46\u4e0d\u52a8\u5e02\u573a\u5143\u6570\u636e\uff0c<strong><code>_meta.json.slug<\/code> \u662f\u8ffd\u6eaf\u6280\u80fd\u771f\u5b9e\u6765\u6e90\u7684\u6700\u53ef\u9760\u5b57\u6bb5<\/strong>\uff08\u6bd4\u76ee\u5f55\u540d\u53ef\u9760\uff09\u3002 \u53e6\u5916 edge-tts \u76ee\u5f55\u9664 <code>_meta.json<\/code> \u5916\u8fd8\u6709 <code>skill-info.json<\/code>\u3001<code>DISTRIBUTION.md<\/code>\u3001<code>install.sh<\/code>\u2014\u2014\u5e02\u573a\u5206\u53d1\u5305\u7684\u53bb\u5305\u75d5\u8ff9\u672a\u6e05\u7406\u3002<\/p>\n\n\n\n<h3 id=\"53-%25e6%2580%25bb%25e6%2595%25b0%25e6%2599%25ae%25e6%259f%25a5\" class=\"wp-block-heading\">5.3 \u603b\u6570\u666e\u67e5<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u6700\u7ec8\u7ed3\u679c\uff1a269 \u4e2a\u6280\u80fd\u76ee\u5f55\u4e2d 31 \u4e2a\u5e26 <code>_meta.json<\/code>\u2014\u2014\u4e0e\u7b2c\u4e00\u8f6e\u62a5\u544a\u7684\u6570\u5b57\u7cbe\u786e\u4e00\u81f4<\/strong>\uff0c\u518d\u6b21\u5750\u5b9e\u6280\u80fd\u5e93\u955c\u50cf\u56fa\u5b9a\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5e26 <code>_meta.json<\/code> \u7684 31 \u4e2a\u6280\u80fd\u5b8c\u6574\u540d\u5355\uff08\u62ec\u53f7\u5185\u4e3a\u5df2\u77e5\u6765\u6e90\u7ebf\u7d22\uff09\uff1a<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">adhd-assistant\u3001adhd-daily-planner\u3001browse\uff08browserbase\uff09\u3001chart-gen\u3001chart-image\u3001cn-finance-data\uff08\u539f tushare-finance\uff09\u3001code-mentor\u3001competitive-seo-intel\u3001competitor-analysis\u3001edge-tts\u3001email-manager\uff08slug=imap-smtp-email \u7684\u514b\u9686\uff09\u3001email-to-calendar\u3001fast-browser-use\u3001gitlab-cli-guide\u3001gitlab-cli-skills\u3001imap-smtp-email\u3001iso-27001-evidence-collection\u3001k8s-cluster-ops\u3001kubectl\u3001playwright-scraper-skill\uff08Simon Chan\uff09\u3001programming-tutor\u3001r2-upload\u3001rust-browser-pilot\u3001seo-content-writer\u3001seo-copywriting-guide\u3001smart-web-scraper\u3001speech-synthesis\uff08\u539f edge-tts \u7684\u672c\u5730\u5316\u7248\uff09\u3001sun-path\u3001sunlight-analysis\u3001whatsapp-integration\uff08Membrane\uff09\u3001xhs-note-creator\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u7279\u5f81\uff1a31 \u4e2a \u2248 \u6280\u80fd\u5e93\u7684 11.5%\uff0c\u51e0\u4e4e\u5168\u90e8\u5e26\u7b2c\u4e09\u65b9\u4f5c\u8005\/\u5e02\u573a\u6765\u6e90\u75d5\u8ff9\uff0c\u5373&#8221;ClawHub\/\u793e\u533a\u5bfc\u5165&#8221;\u5b50\u96c6\uff1b\u5176\u4f59 238 \u4e2a\u4e3a Kimi \u4e00\u65b9\u81ea\u7814\u6216 Anthropic \u751f\u6001\u642c\u8fd0\uff08\u65e0\u5e02\u573a\u5143\u6570\u636e\uff09\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u91c7\u96c6\u8fc7\u7a0b\u5907\u6ce8\uff08\u9632\u8bef\u8bfb\uff09<\/strong>\uff1a\u672c\u666e\u67e5\u5148\u540e\u6709\u4e24\u8f6e\u540e\u53f0 watcher \u8865\u8dd1\u66fe\u5f97\u51fa&#8221;0 \u4e2a&#8221;\u7684\u9519\u8bef\u7ed3\u8bba\u5e76\u4e00\u5ea6\u5199\u5165\u672c\u8282\uff0c\u6839\u56e0\u662f shell \u53d8\u91cf\u62fc\u63a5 bug\uff08<code>$d_meta.json<\/code> \u88ab\u89e3\u6790\u4e3a\u672a\u5b9a\u4e49\u53d8\u91cf <code>d_meta<\/code> \u800c\u975e <code>${d}_meta.json<\/code>\uff0c\u5bfc\u81f4 269 \u6b21\u63a2\u6d4b\u5168\u90e8\u6253\u5230 <code>skills\/.json<\/code> \u8fd4\u56de 404\uff09\u53e0\u52a0\u96a7\u9053\u6296\u52a8\uff0c\u5747\u5df2\u4f5c\u5e9f\uff1b\u4e0a\u8868\u6570\u5b57\u6765\u81ea\u96a7\u9053\u7a33\u5b9a\u671f\u7684\u524d\u53f0\u4e00\u6b21\u6027\u666e\u67e5\uff0c\u5e76\u4ee5 kubectl \u7b49 5 \u4e2a\u6837\u672c\u7684\u6b63\u53cd\u53cc\u5411\u590d\u6838\u786e\u8ba4\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"6-%25e7%25ac%25ac%25e4%25b8%2580%25e8%25bd%25ae%25e7%25bb%2593%25e8%25ae%25ba%25e4%25bf%25ae%25e6%25ad%25a3%25e7%25a1%25ae%25e8%25ae%25a4%25e6%25b8%2585%25e5%258d%2595%25e6%25b1%2587%25e6%2580%25bb\" class=\"wp-block-heading\">6. \u7b2c\u4e00\u8f6e\u7ed3\u8bba\u4fee\u6b63\/\u786e\u8ba4\u6e05\u5355\uff08\u6c47\u603b\uff09<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u786e\u8ba4\uff08\u8bc1\u636e\u52a0\u5f3a\uff09<\/strong>\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>01-system \u00a73.1 \u5f15\u5bfc\u94fe\uff1a\/init\u3001stage0\u3001rc.init \u539f\u6587\u5747\u4e3a s6-overlay 3.1.6.2 \u4e0a\u6e38\u539f\u7248\uff0c\u96f6\u5b9a\u5236\u2014\u2014\u63a8\u6d4b\u5347\u7ea7\u4e3a\u5b9e\u8bc1\u3002<\/li><li>01-system \u751f\u547d\u5468\u671f\uff1a&#8221;boot \u7a7a\u58f3\u6c60 + claim \u65f6\u6ce8\u5165&#8221;\u2014\u2014portal\/run \u6ce8\u91ca\uff08EMPTY manifest \u542f\u52a8\u3001bind_token STS\u3001K_OSS_* \u5e9f\u5f03 fails-closed\uff09\u63d0\u4f9b\u4e86\u7b2c\u4e00\u624b\u8bbe\u8ba1\u81ea\u8ff0\u3002<\/li><li>04-gateway &#8220;socat \u5b9e\u4e3a CDP \u4ee3\u7406&#8221;\u3001&#8221;envd -isnotfc \u5b9a\u5236\u8865\u4e01&#8221;\u300105-browser &#8220;browser-guard \u7b49 kasmvnc \u5c31\u7eea&#8221;\u2014\u2014\u5168\u90e8\u6709 run \u811a\u672c\u539f\u6587\u5750\u5b9e\u3002<\/li><li>11-user-layer \u4e09\u5c42\u6a21\u578b\uff1a\u65b0\u5b9e\u4f8b\u6280\u80fd\u96c6\/\u7528\u6237\u6280\u80fd\/\u51ed\u8bc1\u4e09\u91cd\u4e00\u81f4\uff0c\u955c\u50cf\u56fa\u5b9a vs portal \u52a8\u6001\u7684\u5206\u754c\u6210\u7acb\u3002<\/li><li>09-skills-d \u00a72.4\/\u00a72.5 \u5bf9 backend graft \u7684\u8f6c\u8ff0\uff08Phase 4.5\u3001.env \u6682\u5b58\u673a\u5236\uff09\u4e0e init.sh\/SKILL.md \u539f\u6587\u4e00\u81f4\u3002<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u4fee\u6b63\/\u8865\u5145<\/strong>\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>09-skills-d \u00a75 \u5168\u90e8\u672a\u7adf\u4e8b\u9879\u52fe\u9500\uff1atrading-strategy-backtest \u4e0e xlsx \u5168\u6587\u8865\u9f50\uff1bbackend-building-swarm \u6e05\u5355\u4e0e\u5168\u6587\u8865\u9f50\uff1b<code>_meta.json<\/code> \u5168\u91cf\u666e\u67e5\u5b8c\u6210\uff0831 \u4e2a\uff0c\u4e0e\u7b2c\u4e00\u8f6e\u4e00\u81f4\uff0c\u89c1 \u00a75.3\uff09\u3002<\/li><li>01-system \u00a76 &#8220;rc.init \u672a\u6293\u5230&#8221;\u2014\u2014\u5df2\u8865\uff0c\u4e14\u5185\u5bb9\u4e0e&#8221;\u6807\u51c6\u884c\u4e3a\u63a8\u6d4b&#8221;\u65e0\u51fa\u5165\u3002<\/li><li><strong>\u7ec6\u8282\u4fee\u6b63<\/strong>\uff1aportal \u9ed8\u8ba4 env \u662f <strong>dev<\/strong>\uff08kimi.kimi.team\uff09\uff0c\u751f\u4ea7\u9760 kimiwarden \u6ce8\u5165 <code>-env prod<\/code>\uff1b\u7b2c\u4e00\u8f6e\u53ea\u8bb0\u5f55\u4e86 prod \u8fdb\u7a0b\u6001\uff0c\u672a\u63d0 dev \u9ed8\u8ba4\u503c\u4e0e <code>KIMI_CANARY<\/code> \u7070\u5ea6\u53c2\u6570\u3002<\/li><li><strong>\u65b0\u53d1\u73b0<\/strong>\uff1a<code>_meta.json.slug<\/code> \u4e0e\u76ee\u5f55\u540d\u89e3\u8026\uff08email-manager\u2192imap-smtp-email\uff09\uff0c\u8ffd\u6eaf\u6765\u6e90\u5e94\u4ee5 slug \u4e3a\u51c6\u3002<\/li><li><strong>\u65b0\u53d1\u73b0<\/strong>\uff1abackend-building-swarm \u7684 <code>.backend-features.json<\/code> manifest + \u9057\u4ea7\u9879\u76ee\u63a2\u6d4b + \u4e09\u6001\u62f7\u8d1d\u6240\u6709\u6743\u6a21\u578b\uff0c\u7b2c\u4e00\u8f6e\u53ea\u63d0\u5230\u4e86&#8221;\u76ee\u5f55\u6e05\u5355\u7f3a\u5931&#8221;\uff0c\u5176\u5e42\u7b49\/\u589e\u91cf\u8bbe\u8ba1\u6df1\u5ea6\u8d85\u51fa\u5f53\u65f6\u4f30\u8ba1\u3002<\/li><\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"7-%25e7%25a7%25bb%25e6%25a4%258d%25e8%25af%2584%25e4%25bc%25b0%25e8%25a1%25a8%25e6%259c%25ac%25e8%25bd%25ae%25e6%25b6%2589%25e5%258f%258a%25e7%25bb%2584%25e4%25bb%25b6\" class=\"wp-block-heading\">7. \u79fb\u690d\u8bc4\u4f30\u8868\uff08\u672c\u8f6e\u6d89\u53ca\u7ec4\u4ef6\uff09<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u7ec4\u4ef6<\/th><th>\u5bf9 Hermes \u4ef7\u503c<\/th><th>\u5bf9 Kimi Code \u4ef7\u503c<\/th><th>\u79fb\u690d\u5de5\u4f5c\u91cf<\/th><th>\u786c\u4f9d\u8d56<\/th><\/tr><\/thead><tbody><tr><td>portal\/run \u7684 bind-token STS \u6a21\u5f0f\uff08\u7a7a manifest \u542f\u52a8 + claim \u65f6\u7ed1\u5b9a\uff09<\/td><td><strong>\u9ad8<\/strong>\uff1aHermes \u591a\u6c99\u7bb1\u573a\u666f\u53ef\u76f4\u63a5\u501f\u9274&#8221;\u51ed\u8bc1\u5ef6\u8fdf\u7ed1\u5b9a + fails-closed&#8221;<\/td><td>\u4e2d\uff08Kimi Code \u672c\u5730 CLI \u65e0\u6c99\u7bb1\u6c60\uff0c\u4f46\u63d2\u4ef6\u6309\u4f1a\u8bdd\u4e0b\u53d1\u53ef\u53c2\u8003\uff09<\/td><td>\u9700\u91cd\u5199\uff08Go \u670d\u52a1 + \u63a7\u5236\u9762\u914d\u5408\uff09<\/td><td>kimiwarden\u3001PortalService\u3001kimiapi \u5168\u95ed\u6e90<\/td><\/tr><tr><td>s6-overlay \u670d\u52a1\u7f16\u6392\u5c42\uff08run \u811a\u672c\u6a21\u5f0f\uff1awith-contenv\/s6-setuidgid\/s6-svwait\/\u964d\u7ea7 sleep infinity\uff09<\/td><td>\u4e2d\uff1a\u82e5 Hermes \u6c99\u7bb1\u8981\u591a\u670d\u52a1\u7f16\u6392\uff0c\u8fd9\u5957\u811a\u672c\u8303\u5f0f\u5373\u62f7\u5373\u7528<\/td><td>\u4f4e\uff08\u672c\u5730\u5355\u8fdb\u7a0b\u4e3a\u4e3b\uff09<\/td><td>\u7eaf\u62f7\u8d1d\uff08\u811a\u672c\uff09<\/td><td>s6-overlay \u5957\u4ef6\uff08\u5f00\u6e90\uff09<\/td><\/tr><tr><td>backend-building-swarm \u7684 init.sh graft \u673a\u5236\uff08manifest \u95e8\u7981\/\u4e09\u6001\u62f7\u8d1d\/\u8865\u4e01\u5668\/\u81ea\u52a8\u63a5\u7ebf\u964d\u7ea7\uff09<\/td><td><strong>\u9ad8<\/strong>\uff1a\u4efb\u4f55&#8221;\u5411\u73b0\u6709\u9879\u76ee\u6ce8\u5165\u6a21\u677f\u4ee3\u7801&#8221;\u7684 Hermes \u6280\u80fd\u90fd\u53ef\u590d\u523b\u5176\u5e42\u7b49+\u6240\u6709\u6743\u6a21\u578b<\/td><td>\u4e2d\uff1a\u53ef\u6539\u9020\u4e3a kimi-code \u7684\u9879\u76ee\u811a\u624b\u67b6\u6280\u80fd<\/td><td>\u9700\u91cd\u5199\uff08\u6a21\u677f\u6811\u662f Kimi \u6808\uff1b\u673a\u5236\u53ef\u62bd\uff09<\/td><td>portal :8080 \u5f00\u6237 API\u3001Kimi OAuth\u3001MySQL\uff1b\u673a\u5236\u672c\u8eab\u65e0\u4f9d\u8d56<\/td><\/tr><tr><td>swarm \u4f53\u7cfb\u7684 .env \u8de8 worktree \u4f20\u9012\u8bbe\u8ba1\uff08gitignore \u8fb9\u754c + \u663e\u5f0f\u590d\u5236\u7ba1\u9053\uff09<\/td><td><strong>\u9ad8<\/strong>\uff1a\u591a\u4ee3\u7406\u534f\u4f5c\u7684\u5bc6\u94a5\u4f20\u9012\u901a\u7528\u89e3<\/td><td>\u4f4e<\/td><td>\u7eaf\u62f7\u8d1d\uff08\u601d\u8def\uff09<\/td><td>\u65e0<\/td><\/tr><tr><td>trading-strategy-backtest \u540e\u534a\u6bb5\uff08Self-Check \u56db\u6b65\/\u5bf9\u6297\u8bc4\u5ba1\/\u8f93\u51fa\u5951\u7ea6\/dashboard \u94c1\u5f8b\uff09<\/td><td><strong>\u9ad8<\/strong>\uff1a\u6700\u5b8c\u6574\u7684&#8221;\u9632 LLM \u91cf\u5316\u56de\u6d4b\u7ffb\u8f66&#8221;prompt \u5de5\u7a0b\u6837\u672c\uff0c Hermes \u6570\u636e\u5206\u6790\u7c7b\u6280\u80fd\u53ef\u76f4\u63a5\u5f15\u7528<\/td><td>\u4e2d\uff1a\u53ef\u62c6\u6210\u72ec\u7acb\u7684&#8221;\u56de\u6d4b\u7eaa\u5f8b&#8221;\u6280\u80fd<\/td><td>\u9700\u9002\u914d\uff08mshtools\/ifind \u6570\u636e\u6e90\u8c03\u7528\u6362\u6210\u81ea\u5df1\u7684\uff1baccounting.py\/render_dashboard.py \u662f\u6587\u4ef6\u8d44\u4ea7\u53ef\u76f4\u63a5\u62f7\uff09<\/td><td>mshtools \u90e8\u7f72\u94fe\u8def\uff08dashboard deploy\uff09\uff1b\u6838\u5fc3\u903b\u8f91\u96f6\u4f9d\u8d56<\/td><\/tr><tr><td>xlsx \u540e\u534a\u6bb5\uff08Xlsx CLI \u516d\u547d\u4ee4\/\u9010 sheet \u6821\u9a8c\/\u7981\u533a\u51fd\u6570\u8868\/\u53cc\u98ce\u683c\u7cfb\u7edf\uff09<\/td><td>\u4e2d\uff1a\u6821\u9a8c\u7eaa\u5f8b\u4e0e\u7981\u533a\u8868\u53ef\u76f4\u63a5\u501f\u9274\uff1bCLI \u672c\u8eab\u662f\u4e8c\u8fdb\u5236\u8d44\u4ea7<\/td><td>\u4e2d\uff1aKimi Code \u82e5\u63a5 Excel \u4efb\u52a1\uff0c\u7981\u533a\u51fd\u6570\u8868+\u9010 sheet \u6821\u9a8c\u662f\u73b0\u6210\u7684\u8d28\u91cf\u95e8<\/td><td>\u9700\u9002\u914d\uff08Xlsx CLI \u662f\u9884\u7f16\u8bd1 C#\/OpenXML \u4e8c\u8fdb\u5236\uff0cxlsx\/scripts\/Xlsx \u9700\u4ece\u955c\u50cf\u63d0\u53d6\uff1b\u7eaf prompt \u90e8\u5206\u53ef\u62f7\uff09<\/td><td>Xlsx \u4e8c\u8fdb\u5236\uff08\u95ed\u6e90\u7f16\u8bd1\u4ea7\u7269\uff09\uff1bopenpyxl\/pandas<\/td><\/tr><tr><td><code>.backend-features.json<\/code> manifest \u6a21\u5f0f<\/td><td>\u4e2d\uff1aHermes \u4efb\u4f55\u589e\u91cf\u811a\u624b\u67b6\u90fd\u53ef\u501f\u9274<\/td><td>\u4f4e<\/td><td>\u7eaf\u62f7\u8d1d\uff08\u601d\u8def\uff09<\/td><td>\u65e0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 id=\"8-%25e5%25af%2586%25e9%2592%25a5%25e4%25b8%258e%25e5%2587%25ad%25e8%25af%2581%25e8%25ae%25b0%25e5%25bd%2595%25e8%2584%25b1%25e6%2595%258f\" class=\"wp-block-heading\">8. \u5bc6\u94a5\u4e0e\u51ed\u8bc1\u8bb0\u5f55\uff08\u8131\u654f\uff09<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u4f4d\u7f6e<\/th><th>\u5185\u5bb9<\/th><th>\u7528\u9014<\/th><th>\u5904\u7f6e<\/th><\/tr><\/thead><tbody><tr><td><code>\/root\/.kimi\/agent-gw.json<\/code><\/td><td><code>api_key=sk-kimi-8OQEd910\u2026<\/code>\uff0864 \u4f4d\u540e\u7f00\uff0c\u4ec5\u8bb0\u524d\u7f00\uff09\u3001<code>kimi_chat_id=1a014098-****-\u2026<\/code><\/td><td>agent \u56de\u4e91\u7aef\uff08agent-gw.kimi.com\/coding\uff09\u4e3b\u51ed\u8bc1 + \u4f1a\u8bdd\u8eab\u4efd<\/td><td>\u5df2\u8131\u654f\uff1b\u6574\u6587\u4ef6 sha256=<code>983fd57b\u2026<\/code> \u5b58\u6863\u5907\u6bd4\u5bf9<\/td><\/tr><tr><td>portal\/run \u6ce8\u91ca<\/td><td>dev\/prod \u7f51\u5173\u5730\u5740\uff08kimi.kimi.team\/apiv2\u3001kimi-api-sandbox.msh.team\/apiv2\uff09<\/td><td>PortalService STS \u4ea4\u6362\u7aef\u70b9<\/td><td>\u516c\u5f00\u7aef\u70b9\uff0c\u4ec5\u8bb0\u5f55<\/td><\/tr><tr><td>init.sh \u8fd0\u884c\u4ea7\u7269 <code>.env<\/code><\/td><td>APP_ID\/APP_SECRET\/DATABASE_URL\/KIMI_AUTH_URL \u7b49<\/td><td>\u7531 portal \u5f00\u6237\u52a8\u6001\u4e0b\u53d1\u5230\u5404\u9879\u76ee<\/td><td>\u672c\u8f6e\u672a\u8bfb\u5230\u4efb\u4f55\u5b9e\u9645 .env \u6587\u4ef6\uff08worktree \u5185\u4ea7\u7269\uff0c\u91c7\u96c6\u65f6\u65e0\u6d3b\u52a8\u9879\u76ee\uff09<\/td><\/tr><\/tbody><\/table><\/figure>\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-19-gaps\/\" class=\"more-link\">\u7ee7\u7eed\u9605\u8bfb<span class=\"screen-reader-text\">\u201c19-gaps \u2014 \u7b2c\u4e00\u8f6e\u7f3a\u53e3\u8865\u91c7 + \u65b0\u6c99\u7bb1\u5b9e\u4f8b\u6838\u67e5\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-1885","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/pages\/1885","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=1885"}],"version-history":[{"count":1,"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/pages\/1885\/revisions"}],"predecessor-version":[{"id":1905,"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/pages\/1885\/revisions\/1905"}],"wp:attachment":[{"href":"https:\/\/tongchun.website\/index.php\/wp-json\/wp\/v2\/media?parent=1885"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}