能跑起来 dsh web 就行。没有其它依赖,插件本身零运行时依赖。
dsh plugin --profile web add dsh-abyss
dsh web打开 http://127.0.0.1:3080 ,右下角出现一枚坞:
🐋🐙 暂无成员
深海所
点它展开面板。到这里就装完了,不需要配置。
想卸载:
dsh plugin --profile web remove dsh-abyss,重启 web 后生效。
在 dsh 里正常发起一个任务,比如:
用 subagent 委派一个子任务:让子代理运行 `ls | wc -l` 并报告数量,然后你转述结果。
盯着面板看,你会依次看到:
| 你看到的 | 它对应的日志事件 |
|---|---|
| 主理人卡片出现,状态「思考中」 | turn/start |
| 状态变「派活中 · subagent」,气泡弹出任务简述 | tool/call subagent |
| 一位新同事入职,头像是另一种海洋生物 | subagent/descriptor |
| 他状态变「敲终端 · bash」 | tool/call bash |
| 气泡里出现他的汇报原文 | tool/call report |
| 卡片变灰、标注「已收工」 | turn/end(one-shot 子代理) |
| 令牌数和工资实时往上走 | assistant/message.usage |
气泡里的每一句都是日志原文,不是模板句。
每张卡片是一个 agent 会话:
- 头像:颜色由 session id 哈希得到,所以同厂商的两位同事一眼可辨;主理人固定是鲸鱼,其余从 7 种海洋生物里按 id 分配。
- 右下角小圆点:厂商徽标(DeepSeek / Claude Code / Codex / ACP / SDK)。
- 状态行:思考中 / 敲终端 / 查资料 / 写代码 / 上网中 / 派活中 / 沟通中 / 整理档案…
- 标签:厂商、正式/临时、模型、preset、委派层级 L1/L2。
- 底部细条:上下文水位(只有当路由广播了上下文窗口时才画)。
- 徽章:⚠ 失败次数、↻ 重拨次数、⏳ 正在等你批准(含已等多久)、🗄 归档次数。
点任意一张卡片进入员工档案:他的全部事实、汇报关系(双向可点)、自己的待办清单,以及他参与过的每一场戏。
按真实时间从旧到新,一行一件事:派活、私聊、汇报、发言、被拦、等批准、已批复、重拨、出错、归档、收工。
超过 80 条会自动折叠,顶部一个「展开更早的 N 条」。新消息只在你已经在底部时才自动跟随——往上翻历史时不会被拽走。
八个数字,全部是整棵会话树的汇总(不只是主会话):
| 指标 | 含义 |
|---|---|
| 成本 | 按你配的价目表算出来的钱 |
| 令牌 | 输入 + 输出 + 推理 + 缓存读 |
| 工具调用 | 全案子的 tool/call 次数 |
| 失败 | 工具真的报错的次数(shell 退出码非零不算,dsh 把它当普通输出) |
| 重拨 | provider 重试次数 |
| 归档 | 上下文压缩次数 |
| 等人 | 卡在等你批准的累计时长 |
| 历时 | 从第一个人入职到最近一次活动 |
下面还有两块:
- 上下文水位:每人
已占用 / 上下文窗口,70% 转黄、90% 转红。路由没广播窗口的成员不画——编一个分母等于编一个假警报。 - 考勤:每人一条泳道,
turn的开合就是班次;十个会话同时跑时,重叠、空档一眼看完。
再往下是过往案子:磁盘上的会话日志就是档案库。
委派谱系,从真实的父子会话关系长出来。层级来自 SessionHeader.parentSession 和 delegationDepth——harness 建子会话时盖的章,不是猜的。
在统计页,任意案子右上角点「导出复盘」。宿主会从磁盘上的日志重建整个案子,返回 Markdown:
# 五个 Agents 调查游戏逻辑
- Case: `session-9af1dd1b-…`
- Started: 2026-08-15 21:19 · Last activity: 2026-08-15 21:22
- Elapsed: 2m 45s
- Staff: 6 (1 still on)
- Spend: $0.0903 over 312,000 tokens
- Tool calls: 72 · failures: 0 · provider retries: 0
## Staff
| Member | Firm | Depth | Tools | Fails | Tokens | Spend | Blocked |
…
## Transcript
- `21:19:59` **assign** 五个Agents调查游戏逻辑 → 调查动作战斗与打击感逻辑: …面板里可直接阅读,点「复制」进剪贴板(浏览器不给权限时会退化成"已选中,按 ⌘C")。
统计页底部的「过往案子」列出磁盘上的全部案子,任意一个都能:
- 回放:从第一件事开始重演整个过程,可暂停、可重头看,节奏按事件之间的真实间隔压缩。
- 导出复盘:同上。
这就是事件溯源运行时的好处:面板不需要当时开着,日志就是完整记录。
在 profile 的 cordis.yml 里加 config。最常改的是价目表和货币:
- id: dsh-abyss
config:
currency: "¥"
prices:
deepseek-v4-pro: { input: 4.0, output: 16.0, cacheRead: 0.5 }改完重启 dsh web。写错了会在启动时大声报错,不会默默按默认值跑。
面板是空的? 说明当前会话还没有事件。发起一个任务;或者切到「全部」范围看看别的案子。如果你打开的是一个旧会话,面板会自动从磁盘重建它。
面板挡住了输入框? 按住标题栏把它拖走,位置会记住;双击标题栏放回右下角;右下角还能拖拽调整大小。
看不到「统计」里的上下文水位?
说明这条模型路由没有广播 contextWindow。这时不画是刻意的——见上文。
报告顶部写着「有 N 位成员的日志读不出来」? 那位成员的会话日志损坏了(dsh 的持久化层会拒绝读取,比如 seq 断档)。报告里的数字不含他们,这行字就是提醒你别把它当全量。
我的会话数据会被发到哪里去吗?
不会。数据只挂在产品自己的 origin 下 /abyss,没有跨域头、没有外部请求、没有遥测。