agent-clinic
Agent 体检诊所 —— 用可复核证据诊断 Agent 使用体验问题,并开出可执行处方 适合需要排查Agent会话问题、获取优化建议的DSH用户。
설치
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:1687210989/agent-clinic使用
./run.sh report # 体检报告(推荐入口,同时写入 agent-clinic-report.md)
./run.sh scan # 扫描概览
./run.sh diagnose # 只跑诊断
./run.sh show "~/.dsh/sessions//session.v4.jsonl.zstd#L101-L108" # 展开证据
./run.sh catalog # 看插件目录(来源、能力标签、热度、中文简介覆盖情况)
./run.sh catalog-sync # 联网同步插件目录(唯一会写盘 + 联网的只读工具命令)
./run.sh catalog-sync --pool 900 --limit 150 --gh-discover 40 # 加大候选池与收录数
./run.sh fingerprints # 查看我本地的文本指纹快照(K1/K2 的数据基础;只存加盐哈希)
./run.sh fingerprints --clear # 删除该快照
./run.sh rx # 查看处方反馈(记住"这条别再给我看")
./run.sh rx reject --reason "我不拆会话" # 下次体检不再给这条,并写明是你撤掉的
./run.sh rx interested # 只标记(用户说感兴趣 ≠ 别再给我看)
./run.sh rx remove # 恢复这一条
./run.sh rx clear # 清空全部反馈
./scripts/smoke.sh # 自检(345 项)
node scripts/plugin-dom.test.mjs # 插件面板的零依赖 DOM 桩测试(106 项)
关于 show 的翻页(决策 D8):区间超过 200 行时默认只展开一页,并直接给出可复制的下一条命令:
./run.sh show "#L2-L211" --limit 20 # 每页 20 行
./run.sh show "#L2-L211" --offset 20 --limit 20 # 照抄提示里的 offset 看下一页
./run.sh show "#L2-L211" --limit 5000 # 一次看全(上限 5000 行)
关于指纹快照的隐私边界(决策 D4):~/.agent-clinic/text-fingerprints.json 里只有
sha256(盐 + 规范化用户文本) 的前 32 位十六进制 —— 正文不落盘、不进报告;短于 12 字符
("继续""好的")不生成指纹;设 AGENT_CLINIC_NO_FINGERPRINT_STORE=1 可整体关闭,
关闭或快照损坏时 K1/K2 会在报告里写明未采集(不是"没问题")。
若本工具跑在受限沙箱里(例如 DSH 的 workspace-write 模式),写 ~/.agent-clinic/ 可能被拒 ——
报告会明确说"已判定但没存下"(本次照样判定了,只是跨会话历史没累积),
而不是含糊地报一句"未判定"。
关于处方反馈(M3.5):~/.agent-clinic/rx-feedback.json 只存处方 ID、
你标记的状态(已拒绝 / 感兴趣)与你自己写的理由(可选)—— 不含会话内容。
每条处方在报告里都带「目标 ID」,直接复制就能用:
./run.sh rx reject behavior-split-session --reason "我不拆会话"
下次体检该条不再作为处方给出,并会在报告里单独列出"已按你的反馈撤掉的处方"
(写明目标 ID、标记日期与理由)—— 静默消失会让人以为建议凭空没了。
反馈读坏/写不进去都会如实报错(体检本身照常跑),rx remove/clear 可随时撤销。
自检两种跑法(第三方评估 §3.1 的整改):
-
完整自检(推荐,也是 CI 的跑法):先用合成语料装置造一份确定性会话, 再要求"跳过数必须为 0"—— 无数据时"跳过"会直接变成失败,降级不得冒充全绿:
node scripts/fixtures/synth-dsh.mjs --out .tmp/synth-home # 覆盖全部 22 项已实现指标,固定时间戳 node scripts/fixtures/synth-dsh.mjs --verify # 每项指标都要被触达,命中 0 即非零退出 DSH_HOME=.tmp/synth-home DSH_SMOKE_REQUIRE_DATA=1 \ AGENT_CLINIC_SKILL_DIRS=.tmp/synth-home/agents-skills node scripts/smoke.mjsA2「skill 闲置」的一半输入是"这台机器装了哪些 skill"(默认读
~/.agents/skills、~/.workbuddy/skills)—— CI 与合成自检用AGENT_CLINIC_SKILL_DIRS指向语料自带的 demo skill 目录,免得断言绑在宿主机上。 -
降级自检(无 DSH 会话的环境):跑得动的照跑,跳过项如实列出并以退出码 0 结束 (
通过 p · 失败 f · 跳过 s)。此时徽章不做核对(通过数不可比),且不会把跳过算成失败。 -
徽章守护:完整跑完且全绿时,smoke 会核对
README.md/SKILL.md里声称的条数 (徽章、冒烟测试 N/N 通过、自检(N 项))与实际是否一致,不一致即以退出码 1 结束; 确认无误后用node scripts/smoke.mjs --write-badge回写。
node 不必在 PATH 上 ——
./run.sh会自动定位(PATH → WorkBuddy 托管目录 → DSH 运行时 → nvm / volta / fnm / Program Files)。 若自动定位失败,用AGENT_CLINIC_NODE=/path/to/node ./run.sh scan显式指定。 若你环境里 node 已在 PATH 上,也可以直接用node src/cli.mjs scan。
scan 输出示例:
扫描目录:C:\Users\you\.dsh\sessions
会话文件:4
32fd3d17-6ab 帧=233 行=432 调用= 74 错误= 8 in=151,210 out=68,314 GitHub 高星项目可行性推断
...
===== 合计 =====
会话=4 帧=463 行=994 助手消息=85 用户消息=22
工具调用=220 错误=16 错误率=7.3%
input=421,174 output=112,140 cacheRead=6,447,872 cacheWrite=0
cacheRead 占比=93.9%
TOP 工具:web_fetch 156 · web_search 26 · pwsh 13 · list_agents 4