人一眼就能注意到"这个按钮滚动时收缩得很奇怪",但把这个感受写给 AI agent,要十分钟截图、圈元素、组织 prompt——写出来的东西还是丢掉了为什么。说话是最便宜的标注通道,只是从来没有人给它做过记录仪。
这是一段真实录制——说话、标记、点了没反应的按钮、保存。下面的 Pay 按钮点了什么都没发生,而这个"没有发生"被如实记为证据。
wit start <dev-url> 打开一个托管浏览器。从那一刻起三条流并行记录——零手动:
全程录音 + 实时转写。想到什么说什么——一段话可以报多个问题,不用切分不用打断。
每次点击捕获随后 ~1.8s 的后果:请求、响应、console 报错、DOM 变化。点击后什么都没发生,本身就是证据。
rrweb 全量 DOM 回放 + 事件驱动截图 + 周期 DOM 快照。任何一秒的页面状态都能倒回去看。
每段语音成为时间轴上的一个块,挂载该时刻的因果事实——"因果爆发链"。点开一句话看看:
wit mcp——把证据变成 API。session 不是一坨死文件,而是一个 stdio MCP server。接进任何支持 MCP 的 agent,它按需查询精确的证据:
list_says全部语音片段 + 时间戳——问题锚点。
events_around按时间窗+类型过滤的原始事件。
get_dom_state离某个时间点最近的完整 DOM。
get_errorsconsole 报错、页面异常、HTTP ≥400。
get_shot / get_body按需取截图帧和响应体。
session_md要全文时返回渲染好的时间轴。
系统 Edge/Chrome + Edge SpeechRecognition——免费实时转写,不需要任何 API key,国内可用。云端 ASR 和 LLM 是可选增强层,永远不是主流程。
你的语音逐字落进 events.jsonl。合并、纠错、语义关联都只是展示层建议——原始证词永远可审计。
点击和滚动是事实不是抱怨。没有语音锚点时,明确告诉 agent:永远不要从行为推断 bug。
密码字段四通道打码;POST 体自动脱敏凭证字段;P 暂停期全部冻结包括麦克风;敏感应用可用 WIT_NO_BODIES。
# 需要 Node 18+ 和系统 Edge/Chrome——零下载零 key npm i -g github:wookat/witness wit start http://localhost:5173 # 托管浏览器打开——说话 + 点击 # 停止 → .witness/sessions/<ts>/ 把 PROMPT.md + 目录喂给 agent wit list # 你的 sessions wit mcp # 把最新 session 挂成 MCP server