人一眼就能注意到「這個按鈕捲動時收縮得很奇怪」,但把這個感受寫給 AI agent,要十分鐘截圖、圈元素、組織 prompt——寫出來的東西還是丟掉了為什麼。說話是最便宜的標註通道,只是從來沒有人幫它做過記錄儀。
這是一段真實錄製——說話、標記、點了沒反應的按鈕、儲存。下面的 Pay 按鈕點了什麼都沒發生,而這個「沒有發生」被如實記為證據。
wit start <dev-url> 打開一個託管瀏覽器。從那一刻起三條流並行記錄——零手動:
每段語音成為時間軸上的一個區塊,掛載該時刻的因果事實——「因果爆發鏈」。點開一句話看看:
wit mcp——把證據變成 API。session 不是一坨死檔案,而是一個 stdio MCP server。接進任何支援 MCP 的 agent,它按需查詢精確的證據:
list_saysevents_aroundget_dom_stateget_errorsget_shot / get_bodysession_mdget_asr / set_asr……共 12 個註冊工具——session 是可查詢的 API,不是一坨死檔案。
證據包自描述、零廠商鎖定。兩條路,按 agent 能力選:
wit config asr 可切)。不需要任何 API key;LLM 只是可選增強層,永遠不是主流程。WIT_NO_BODIES。手寫一份 bug 報告也行,發段錄影也行。各自落到哪一步:
| 手寫的報告 | 一段錄影 | Witness | |
|---|---|---|---|
| 報一個問題的成本 | ≈10 分鐘:截圖、圈選、組織語言 | 幾分鐘——但每次回放都要重看 | 說一句話,證據已掛好 |
| agent 能直接修嗎 | 只覆蓋你記得寫下的 | 全是像素,需要人重新推導 | session.md + events.jsonl + MCP |
| 「點了沒反應」 | 容易漏寫 | 影片裡根本看不出來 | 顯式記為證據 |
| 點擊的因果後果 | — | — | ~1.8s 內 請求/回應/console/DOM |
| 回到那一秒的頁面 | — | 影片 ≠ DOM | rrweb 全量回放 |
| 資料留在本機 | — | 看傳到了哪 | 永遠在 .witness/sessions |
N 鍵切問題邊界。session 交給 agent,或者把 review.html 掛進工單。wit 錄製,而不是一張截圖:selector、console、網路請求一次到齊。Node 18+ 和系統 Edge/Chrome——優先用你機器上的真瀏覽器,找不到才裝內建 chromium。npm i -g github:wookat/witness,完事。
證據包全部落在本地 .witness/sessions/(自動 gitignore)。即時字幕按你選的引擎串流麥克風音訊(預設 doubao-web);--asr sr 走系統/瀏覽器辨識,--asr off 直接不要即時字幕。終稿轉寫走 bcut(免費)或你自己的 OPENAI_API_KEY 走 whisper——--no-transcribe 可全跳過。LLM 糾錯/關聯只有顯式傳 flag 且有 key 才跑。
能跑 CLI 的 agent 就能讀 session.md + PROMPT.md。支援 MCP 的(Devin、Claude Code、Cursor、Codex……)直連 wit mcp——12 個查詢工具按需挖證據,而不是一次性塞全文。Devin 另有原生 skill 驅動錄製全流程。
密碼欄位四通道遮罩;POST 內容自動脫敏憑證欄位;P 隨時全凍結(含麥克風);敏感應用設 WIT_NO_BODIES=1 直接不存回應內容。
--lang 設辨識語言(預設 zh-CN,如 en-US、zh-TW)。原話永遠逐字寫入——辨識錯字保留可稽核,LLM 糾錯只是可選的展示層。
任何 URL——託管瀏覽器就是你的真實瀏覽器,登入照樣用。不過在本地開發站上最鋒利:agent 修的時候能同時看到原始碼。
events.jsonl 逐行串流寫入,最多丟最後幾百毫秒。wit recover <dir> 隨時從事件流重建 session.md、review.html、PROMPT.md。
MIT 開源,無帳號、無必需 key。免費 ASR 是預設鏈路;付費模型全是自帶 key 的可選增強。
你下指令,agent 敲命令。Witness 本體是 CLI(wit)——agent 驅動它開託管瀏覽器錄製,結束後產出本地證據包:人看 review.html,agent 走 session.md/PROMPT.md/wit mcp。Node 18+、系統 Edge/Chrome、不上雲、不要 key。