1687210989/agent-clinic ↗★ 1

agent-clinic

Agent 体检诊所 —— 用可复核证据诊断 Agent 使用体验问题,并开出可执行处方 适合需要排查Agent会话问题、获取优化建议的DSH用户。

패키지
agent-clinic
호환성
미검증
Harness peer 범위
*
버전
0.2.0
라이선스
MIT
최근 업데이트
2026. 10. 15.

설치

$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.mjs
    

    A2「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