Debug Mode 旨在把当前任务当作一次主动的调试会话,先从运行时证据诊断问题,再提出修复。
用途与核心思路
它的核心原则是证据优先:在证据指出原因之前不修复 bug,除非用户明确要求跳过诊断。开始会话时,需要检查失败路径、当前日志和相关测试,提出 1 至 3 个具体假设,并说明哪种观察结果能够区分它们。
主要能力
- 临时运行时探针:只在能够确认或排除假设的位置放置探针,例如分支入口、转换前的值、边界输入/输出和错误路径。每个探针需有稳定的描述性 ID。
- 本地 JSONL 收集器:收集器基于 Portless,需先确认 python3 与 portless 可用;若缺少 Portless,应停止并让用户通过 npm install -g portless 安装官方 Vercel Labs CLI。
- 探针请求格式:向会话的 log_endpoint 发送小型 JSON 对象,包含 run、probe、hypothesis、data 字段。浏览器 JavaScript 使用 fire-and-forget 请求,并在本地吞掉收集器错误。
- 两种复现模式:手动模式(用户自己操作)与自动驾驶模式(通过 Chrome DevTools MCP --autoConnect 驱动用户已打开的 Chrome)。两种模式使用相同的收集器和探针,区别仅在于由谁驱动复现。
- 会话监控:dm doctor 提供实时 TUI,扫描临时根目录下所有 debug-mode-* 会话,显示 running(绿)、degraded(黄)、starting、dead(红)等健康状态,并实时跟踪所选会话的 events.jsonl。无 TTY 时可使用 dm doctor --once 输出一次性 JSON 快照。
使用方式
开始会话:定位已安装的技能目录,确认 python3 和 portless 可用,执行 source <skill-dir>/scripts/dm.sh 启用短命令 dm(等同于 python3 <skill-dir>/scripts/debug_session.py)。若机器未使用过 Portless,先运行 portless doctor。然后执行 dm start 启动收集器,保存返回的 session_dir、session_id、log_endpoint、events_file 和 backend_port,并在修改应用代码前验证 health_url。
添加探针后运行最廉价的编译、类型或语法检查,确保临时插桩本身没有破坏流程。
选择复现模式:用户表示自行复现或回复 proceed 时使用手动模式;用户表示自动驾驶、驱动我的浏览器或已登录替我操作时使用自动驾驶模式;若是 UI bug 且未选择,则在一条简短消息中同时说明两种模式并等待,不擅自连接。
自动驾驶模式需先运行 dm mcp-setup(幂等),根据返回的 true 继续;reload_required 时让用户重载 chrome-devtools MCP 服务器;ready 为 false 时展示官方片段并切换手动模式。首次 MCP 调用前需告知用户已在自动驾驶模式,并让其打开 chrome://inspect/#remote-debugging 启用 Allow remote debugging(Chrome 144+)。
在 proceed 后检查证据:使用 dm logs <session-dir> --run run-1 读取证据,将事件顺序与值对照假设,得出已复现且结论明确、已复现但不明确、无应用事件或未复现四种结论之一。
结束后清理:移除所有 DEBUG_MODE:<session-id>: 探针及调试专用导入、辅助、配置或 CSP 改动,保留实际修复与有用的回归测试;停止 Chrome DevTools MCP 命令;仅拆除本次收集器并删除其临时目录(dm stop <session-dir>),确认报告 removed: true。
为用户持久安装 dm:可运行 sh <skill-dir>/scripts/install-dm.sh,向 shell rc 追加一行 source 语句,幂等。重载 shell 后可用 dm、dm help、dm start、dm status、dm logs、dm stop、dm mcp-setup、dm browser-check 等命令。
适用场景
需要在提出修复前用运行时证据定位 bug 的场景,尤其是可用浏览器或应用运行时探针观察具体值的调试任务。适用于 UI bug 及需要手动或自动复现的工作流。
限制与护栏
- 收集器必须保持本地,不得启用 Portless --tailscale、--funnel、--ngrok、LAN 模式或任何远程暴露。
- 不得采集凭据、令牌、cookie、授权头、个人数据、完整请求体或无关的应用状态;优先使用布尔值、计数、已安全的开发 ID、枚举值和窄摘要。
- 探针应尽量少,除非控制流确实需要,否则开始时最多五个;探针须非阻塞且失败隔离。
- 只停止当前会话,绝不运行 portless proxy stop、portless clean 或广泛的进程终止命令。
- 驱动 Chrome 时只连接,不保存 cookie 或令牌,不采集页面凭据,不退出用户的 Chrome,不关闭非自己打开的标签页,不通过 Portless 或任何远程暴露隧道传输 CDP。
- 不静默切换到 Playwright、Puppeteer、全新的空 Chrome、云浏览器或自定义扩展。
- 不得仅凭快照声称已复现。
关于收费、价格、平台支持范围等信息,资料中暂未提供。