← 返回主报告:Kimi Agent(云端沙箱)技术报告 | GitHub 原文
合规与风险声明:本报告为安全研究与互操作学习目的的逆向分析,全程只读采集,未对目标系统做任何修改;文中所有密钥、token、账号级标识(chat_id / project_id / tenant_id 等)均已脱敏;沙箱内发现的默认弱口令(VNC/SSH)属平台侧配置,仅作安全发现披露,请勿用于访问任何不属于自己的系统。docx/pdf/xlsx/kimi-slides 等引擎二进制为 Moonshot 专有许可(禁再分发/逆向),本文仅作行为级描述。报告基于单次分析窗口(约 50 分钟生命周期),软件版本与技能库存随镜像更新可能变化。
采集时间:2026-08-18(UTC+8 ~17:00–17:31)。采集方式:SSH(kimi 用户,只读)。 本节回答:沙箱里”用户自己的东西”放在哪、怎么进来、和系统预置内容的分界在哪。
0. 一张图看懂分界
沙箱把内容分成三层,来源和挂载方式完全不同:
| 层 | 路径 | 来源 | 挂载/落盘方式 |
|---|---|---|---|
| 系统预置层 | /app/.agents/skills/(269 个技能)、/app/.agents/plugins/ | 镜像内置(时间戳 Aug 11 15:07,构建时烤入) | 普通目录;plugins 是指向 portal FUSE 的符号链接 |
| 用户层(云同步) | /app/.user/skills/、/app/.user/auth/ | 用户账号的云端数据,按账号下发 | *符号链接 → /mnt/portal-overlay/.user/,portal FUSE 实时挂载** |
| 用户层(本地状态) | /home/kimi/.cli-tools/、.kimi-slides/、.dws/、.lark-cli/、.config/ | 镜像内置 + 运行时生成 | 容器本地 overlay2,会话内持久 |
关键证据(mount 输出摘录):
portal on /mnt/portal-overlay type fuse.portal (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,max_read=1048576)
drive9 on /mnt/agents type fuse.drive9 (...)
overlay2 on / type overlay (lowerdir=/run/blk-cube/vdc/60:...:/run/blk-cube/vdc/0, upperdir=/run/blk-cube/vda/disk/2d9b.../upper, ...)
- 根文件系统是 61 层 overlay2(blk-cube 块设备分层),镜像内容烤在 lower 层。
/mnt/portal-overlay是 portal 服务的 FUSE 挂载,沙箱启动时(08:43)建立符号链接:/app/.user/auth -> /mnt/portal-overlay/.user/auth/app/.user/skills -> /mnt/portal-overlay/.user/skills/app/.agents/plugins -> /mnt/portal-overlay/.agents/plugins(注意:系统插件也走 portal 下发,说明插件可热更新)/app/.vault -> /mnt/portal-overlay/.vault、/app/.websites-templates -> /mnt/portal-overlay/.websites-templates
- portal 挂载点的目录时间戳在采集期间持续变化(09:15→09:19→09:21),证明它是活的后端存储视图,不是一次性拷贝。
/mnt/portal-overlay/ 顶层内容:
-r--r--r-- .agent-gw.json # 只读,见 §4
dr-xr-xr-x .agents/plugins # 系统插件(audio_generation, github, lark, tianyancha... 共 17+ 个)
drwxr-xr-x .user/{auth,skills} # 用户层
drwxr-xr-x .vault # 空(保险库,未见内容)
drwxr-xr-x .websites-templates # 网站模板(0-origin, 1-cyber-rain-frontend ... 12 个)
1. /app/.user/skills/ —— 6 个用户自建技能
全部是目录(非符号链接),每个一个 SKILL.md,部分带 references/、scripts/、examples/。frontmatter 均为标准 name + 长 description(含触发关键词、正反例边界),格式与系统技能完全一致——用户技能和系统技能对 agent 是同构的,区别只在存放层。
| 技能 | 用途(description 摘要) | 附带文件 |
|---|---|---|
engineering-ppt-converter | 工程设计报告/论文 → 深蓝中式工程风 PPTX;触发词含”汇报/答辩/论文转PPT” | references/structure_contract.md, style_contract.md |
lecture-notes-digitizer | 拍照讲义(高数/电路考研)数字化:转写分章 Markdown+LaTeX、按页码重命名图片、合并、导出 CJK PDF | scripts/apply_page_mapping.py, fix_latex_backslashes.py |
openclaw-selfhost-ops | 自建 OpenClaw 实例运维 runbook(重点,见 §1.1) | references/ 3 个 md(共 293 行) |
stem-exercise-solver | 考研数学/电路习题拍照解题,输出考试风格逐步详解 | scripts/extract_docx_images.py + examples/ 4 个 |
translation-review-coach | 考研英语二翻译批改:逐句对照点评、15 分制估分、共性错误归类 | references/worked-example.md |
vocab-table-filler | 词汇书照片(新东方考研词汇 DAY 表)补全词性/中文释义列,输出 Markdown 表 | 仅 SKILL.md |
特征:description 里大量”observed 2026-08-11 across four sessions””user-verified”字样——这些技能明显是从真实用户会话中沉淀出来的经验型技能(用户自己或借助 skill-creator 创建),内容围绕该用户的固定场景(考研辅导 + 自托管 OpenClaw 运维)。
1.1 openclaw-selfhost-ops 重点解剖
这是 6 个技能里与 Hermes 关系最直接的一个,本质上是一份”如何运维用户自己的 Kimi Claw/OpenClaw 实例”的实战手册,全部标注了验证日期(2026-08-11,四个会话)。
核心内容:
- 托管 vs 自建的分流决策表:kimi.com 一键 bot / 桌面 App → 托管(不要手动升级,等官方推送);自己 VPS 上有 SSH +
openclawCLI → 自建(用户拥有升级决定权,警告一次后给命令,不要反复念官方”不要手动升级”——记录了用户三次反驳”你怎么这么烦,忽略那个skill”)。 - 手动升级流程(已验证 2026.4.14 → 2026.7.1-2):
- 备份
cp -r ~/.openclaw ~/.openclaw.bak.$(date +%F); - 环境检查
node -v(需 Node 24.15+ 或 22.22.3+)、which openclaw(nvm/volta 与 /usr/lib 重复安装是经典坑); openclaw update --channel stable或npm install -g openclaw@latest;openclaw doctor --fix(会对”Update gateway service config”答 Yes,重写 systemd user unit)→openclaw gateway restart→gateway status;- 按功能验证而非按状态:真实发消息过每个频道(微信/飞书/钉钉)、
/feishu doctor、确认 cron 仍触发。
- Config warnings 分诊(升级后第一困惑):频道能聊就不要重装插件,只清理
~/.openclaw/openclaw.json里plugins.entries/plugins.allow的孤儿条目。 - claw-install.sh 架构(references/install-architecture.md,103 行):
- 入口脚本本身不装东西,并行跑两个子脚本:
kimiim/install.sh(装kimiim-cli到~/.local/bin/+ 3 个技能 kimiim/worker-safety/time-awareness 到~/.openclaw/workspace/skills/)和主install.sh(装 kimi-claw 桥接插件)。 - 主插件流程:下载 tgz → 解压到
~/.openclaw/extensions/kimi-claw→npm install --omit=dev→openclaw plugins install注册 → 写 WSS 桥接配置进~/.openclaw/openclaw.json→gateway restart。 - 桥接机制:插件作为 WSS 客户端连
wss://www.kimi.com/api-claw/bots/agent-ws,用--bot-token(格式km_b_prod_...)认证;模型(K2.6/K3,model: kimi-coding/k3,上下文 1.0m)和额度来自 Kimi 会员,不需要本地 API key。 - 可选参数:
--with-search-plugin(装 kimi-search)、--gateway-url/--gateway-token/--agent-id(私有网关)、--shell-enabled、--log-enabled、prompt 超时默认 1800000ms。 - 频道连接器(weixin/feishu/qqbot)装在 OpenClaw 实例本地,不是云端——用户亲自下载插件包验证后纠正过这个错误说法。
- 入口脚本本身不装东西,并行跑两个子脚本:
- 无公网 IP 的域名暴露(references/networking-tunnel.md,92 行):推荐 Cloudflare Tunnel + 阿里云 DNS CNAME(不需要迁 NS):Zero Trust → Networks → Tunnels 建隧道 → 服务器装
cloudflared→ 加 Public Hostname 指localhost:<openclaw-port>(端口用ss -tlnp找)→ 阿里云解析加 CNAME 到<tunnel-id>.cfargotunnel.com。备选:EIP/SLB/NAT-DNAT/FRP/IPv6/Tailscale,附选型表。 - 5 条坑全部带”observed”标注,例如”global install verify ERROR ≠ 升级失败,先
which openclaw“。
2. /app/.user/auth/ —— 第三方凭证的注入点
结构:
/app/.user/auth/
├── dws/
│ ├── .dws/ # 空目录
│ └── .local/share/dws-cli/ # 空目录
└── lark/
├── .lark-cli/ # 空目录
└── .local/share/lark-cli/ # 空目录
当前全部为空(find 仅返回目录项,无任何文件)。结合 §3 的运行时状态可以确认设计意图:portal 把用户账号体系里已授权的第三方凭证(钉钉、飞书)按”CLI 各自的家目录布局”下发成目录树,CLI 启动时从这里读到 token 即是登录态。本次会话用户未授权钉钉/飞书,所以只有骨架目录。
这是值得注意的模式:凭证不进环境变量、不进配置文件明文,而是通过云存储视图按路径投放,沙箱本身不持久化(会话销毁即消失)。
3. /home/kimi/.cli-tools/ —— 预装的第三方平台 CLI
两个 npm 全局式布局的工具(bin/ 符号链接到 lib/node_modules/),均为镜像内置(Aug 6 03:46-03:47):
dws-cli(钉钉)
- 包:
dingtalk-workspace-cli@1.0.35(github.com/open-dingtalk/dingtalk-workspace-cli,Apache-2.0)。 bin/dws是 Node 包装器,真正干活的是vendor/dws(14.4 MB 编译二进制,Go 风格 CLI)。- 能力:
dws --help显示它把钉钉 MCP 服务包成命令树,共 20+ 个服务域——doc(钉钉文档读写/块级编辑)、drive(云盘)、chat、contact(通讯录)、calendar、attendance(考勤)、oa(审批)、todo、wiki、mail、minutes(AI 听记)、aitable、sheet、report等;另有api(裸 OpenAPI 调用)、auth、doctor、schema、plugin等工具命令。 - 包内自带技能包:
lib/node_modules/dingtalk-workspace-cli/share/skills/(SKILL.md + mono/multi/references/scripts),即”CLI + 教 agent 用 CLI 的 skill”捆绑分发。 - 运行时状态:
~/.dws/由 CLI 运行时创建(Aug 18 09:20,与本节采集同时),含identity.json(75B,mode 600)、logs/dws.log、cache/。未登录:dws auth status返回{"success":true,"authenticated":false,"message":"未登录"}。
lark-cli(飞书/Lark)
- 包:
@larksuite/cli@1.0.50(官方,github.com/larksuite/cli,MIT),同样是 Node 包装器 + 编译二进制(bin/lark-cli,支持自更新崩溃恢复.old回滚逻辑)。 - 用法:
lark-cli <command> [subcommand] [method],如lark-cli calendar +agenda、lark-cli contact +search-user --query "John"、通用lark-cli api GET /open-apis/...。 - 帮助里明确写着 “AI AGENT SKILLS: lark-cli pairs with AI agent skills (Claude Code, etc.)”,安装方式是
npx skills add larksuite/cli -g -y——这套 CLI 的设计目标就是给 agent 用。 - 认证:Device Flow(
lark-cli auth login输出验证 URL,浏览器扫码)。运行时状态:未配置(auth status返回not_configured,hint 让跑config init --new)。~/.lark-cli/只有空cache/。
注意:系统插件目录里也有一个
lark插件(portal 下发),与这里的 lark-cli 是两条路——插件走 Kimi 插件协议,CLI 走本地命令行+官方开放平台。
4. /home/kimi/ 下其余用户态目录
/home/kimi/.agents/skills/:空目录,不是符号链接(drwxr-xr-x 2 kimi kimi,Aug 6 03:47)。镜像预留的用户级技能安装位(对应npx skills add这类工具的家目录约定),本沙箱里用户技能实际走的是/app/.user/skills/(portal 云同步),所以这个目录空着。agent 进程 PATH 里也没有它。/home/kimi/.kimi-slides/:系统技能kimi-slides(Moonshot 第一方 PPT 技能,定义 .pptd YAML DSL over OOXML)的配套资源:fonts/:20+ 个编号 TTF(01-Liter … 12-MiSans、13-Noto-Sans-SC、14-SourceHanSerif、15-AlimamaDaoLiTi、22-SmileySans 等,中英文混排);install-state:schema_version=1+fonts_sha256=1ef2594...+fonts_installed=true——内容寻址的幂等安装标记,字体包变了才重装。- 配套 CLI 在 PATH 最前:
/app/.ppt(agent 进程 PATH 第一项,排在 skills 模板 node_modules/.bin 之前)。
/home/kimi/.config/:只有chromium/(Crash Reports 目录树,无 Preferences/Cookies 等可见内容,mode 700)。浏览器持久档案不放在标准位置或由 browser-guard 另行管理。.bashrc增补:export PATH=/home/kimi/.local/bin:/home/kimi/.npm-global/bin:$PATH+NODE_PATH=/home/kimi/.npm-global/lib/node_modules(注意:.cli-tools/*/bin不在 PATH,需全路径调用)。.gitconfig:user.email=agent@example.com / name=agent,safe.directory=*——agent 身份 + 任意目录可操作的宽松配置。.npmrc(mode 600):prefix=/home/ki...、cache=/home/ki...(指向 .npm-global / .npm-cache,已脱敏;未见 registry token 字段)。.dotnet/、.nuget/、.ipython/:预装的 .NET 与 Jupyter 生态用户态。.Xauthority:kasmvnc/Xvnc 会话的 X 认证 cookie(115B,mode 600)。
5. portal 下发的网关凭证(脱敏记录)
/mnt/portal-overlay/.agent-gw.json(只读 186B):
{
"api_key": "sk-kimi-8OQEd910...(已脱敏,64位 sk-kimi- 前缀密钥)",
"base_url": "https://agent-gw.kimi.com/coding",
"kimi_chat_id": "1a014098-****-****-****-********15cb"
}
- 存在:是。用途:agent 调 Moonshot 模型的网关凭证(base_url 路径
/coding表明是 coding 套餐通道),外加绑定会话的 chat_id。 - 存放位置:portal FUSE 只读文件,不进环境变量(进程 environ 里未见),由 agent 进程自行读取。
- 这印证 OpenClaw 技能里的说法:模型额度走 Kimi 会员体系 + 网关集中鉴权,本地不持有长期密钥;该 key 应为会话级短期凭证(随沙箱销毁失效)。
6. 用户态 vs 系统预置态的分界(结论)
- 系统层(镜像烤入,269 技能 + 运行时 + CLI 工具):时间戳集中在 Aug 5–11,属镜像构建产物;升级靠换镜像。
- portal 云同步层(
.user/skills、.user/auth、.agents/plugins、.vault、.websites-templates、.agent-gw.json):沙箱启动时建立符号链接接入 FUSE 视图,按账号实时下发、可热更新——这是”用户自带内容”与”平台动态配置”的统一通道。 - 本地运行态(
~/.dws、~/.lark-cli、.cache等):CLI/程序运行时在 overlay2 upper 层现建,会话级持久。 - 用户技能与系统技能同构(同样的 SKILL.md + frontmatter 规范),agent 侧大概率只是合并扫描
/app/.agents/skills+/app/.user/skills两个目录;/home/kimi/.agents/skills是另一个预留位但当前未启用。 - 第三方集成(钉钉/飞书)采取”CLI 预装 + 凭证按家目录布局从 portal 投放“的解耦设计:工具在镜像里,身份在云上,沙箱本身无秘密。
7. 对 Hermes 的启示(详见回报总结)
- 分层模型:镜像层 / 账号同步层(类 portal FUSE + 符号链接接入点)/ 会话本地层。
- 技能即数据:用户技能用与系统技能完全相同的格式从云端下发,无需特殊加载路径。
- CLI+skill 捆绑分发 + 凭证与工具分离的投放方式。
- openclaw-selfhost-ops 整份 runbook 可直接作为 Hermes 运维 Kimi Claw 自建实例的知识库素材。
附:采集受限说明
采集末段(约 17:25 起)沙箱 frpc 隧道断开(127.0.0.1:12222/18080 均 connection refused,本机 frps 正常、其余代理端口在听),多次重试未恢复。以下次要项未能补采:~/.dws/identity.json 的具体字段(仅知 75B/mode 600)、/app/.ppt/ 目录内容、.kimi-slides/fonts 精确数量(已列 20 个)。均不影响本节结论。