开源 · MIT · 本地优先

你开口,
Witness 补全 证据。

像平时一样体验产品、用嘴说出哪里不对——“这个按钮点了没反应”。Witness 把你说的每句话焊死在那一秒的因果证据上,然后把证据包交给你的 AI 编码 agent。

$
00:00REC
01 · 问题

Agent 看不到你眼睛看到的。

人一眼就能注意到"这个按钮滚动时收缩得很奇怪",但把这个感受写给 AI agent,要十分钟截图、圈元素、组织 prompt——写出来的东西还是丢掉了为什么。说话是最便宜的标注通道,只是从来没有人给它做过记录仪。

00:18
02 · 实录

一次点击,全部后果归档。

这是一段真实录制——说话、标记、点了没反应的按钮、保存。下面的 Pay 按钮点了什么都没发生,而这个"没有发生"被如实记为证据。

localhost:5173/checkout
PLAYWRIGHT 实录 · 一镜到底
3条记录线
8个 MCP 工具
0云端 key 依赖
17项测试通过
MIT开源协议
03 · 工作原理

三条记录线,一条时间轴。

wit start <dev-url> 打开一个托管浏览器。从那一刻起三条流并行记录——零手动:

01 / 语音

你说的话

全程录音 + 实时转写。想到什么说什么——一段话可以报多个问题,不用切分不用打断。

02 / 操作

操作 + 因果爆发链

每次点击捕获随后 ~1.8s 的后果:请求、响应、console 报错、DOM 变化。点击后什么都没发生,本身就是证据。

03 / 状态

页面演变

rrweb 全量 DOM 回放 + 事件驱动截图 + 周期 DOM 快照。任何一秒的页面状态都能倒回去看。

wit start <url>→浏览 + 说话→Ctrl+点 / M 标记→■ 停止→证据包
01:12
04 · 产出

你的话,变成证据锚点。

每段语音成为时间轴上的一个块,挂载该时刻的因果事实——"因果爆发链"。点开一句话看看:

session.md — interactive点击一句话展开它的证据
SCROLLy=3936
MUTbutton.feedback · data-collapsed: false → true
MUTbutton.feedback · data-collapsed: true → false
└─ 属性在边界处来回抖动
CLICKbutton#submit “提交” · @482,701
└─ 点击后 1.8s 页面无任何反应——这本身就是证据
CLICKa[href="/orders"] “订单”
NET →GET /api/orders?page=1
NET ←200 /api/orders · items: []
└─ 响应体已捕获 → bodies/req_0041.json
01:48SAY ×3
05 · 两种受众

人看回放,Agent 读结构。

给人看

  • review.html语音卡片 + 音频跳转 + 截图
  • ▶ DOM 回放内嵌 rrweb 播放器,真实页面状态
  • 胶片条像视频一样拖扫整段会话
  • audio.webm原始录音

给 AI agent

  • PROMPT.md交接说明 + 页面词表
  • session.md上面的证据时间轴
  • events.jsonl全量原始事件流,崩溃安全
  • dom/ · bodies/ · shots/DOM 快照、请求体、截图帧
06 · 拉取,不是推送

wit mcp——把证据变成 API。

session 不是一坨死文件,而是一个 stdio MCP server。接进任何支持 MCP 的 agent,它按需查询精确的证据:

list_says

全部语音片段 + 时间戳——问题锚点。

events_around

按时间窗+类型过滤的原始事件。

get_dom_state

离某个时间点最近的完整 DOM。

get_errors

console 报错、页面异常、HTTP ≥400。

get_shot / get_body

按需取截图帧和响应体。

session_md

要全文时返回渲染好的时间轴。

02:31STOP ■
07 · 原则

证据不说谎。

本地优先,零配置

系统 Edge/Chrome + Edge SpeechRecognition——免费实时转写,不需要任何 API key,国内可用。云端 ASR 和 LLM 是可选增强层,永远不是主流程。

原话不改写

你的语音逐字落进 events.jsonl。合并、纠错、语义关联都只是展示层建议——原始证词永远可审计。

证据 ≠ 意图

点击和滚动是事实不是抱怨。没有语音锚点时,明确告诉 agent:永远不要从行为推断 bug。

隐私工程化

密码字段四通道打码;POST 体自动脱敏凭证字段;P 暂停期全部冻结包括麦克风;敏感应用可用 WIT_NO_BODIES。

08 · 安装与运行

两分钟拿到第一份证据包。

terminal
# 需要 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