CATT 0.2.1 釋出 CI 測試代理/服務工具
Show HN: CATT 0.2.1: Test agents/services against a Muse/Instinct-alike, in CI
CATT 0.2.1 讓開發者能在 CI 中自動測試代理與服務的互動,支援 Muse 與 Instinct 模擬目標,並提供可重現的測試流程與報告。
- 版本:0.2.1,包含指令碼化、模型驅動與瀏覽器/HTTP API 測試。
CATT 0.2.1 讓開發者能在 CI 中自動測試代理與服務的互動,提供可重現的測試流程與多種模擬目標,方便評估服務在不同 Agent 環境下的表現。
譯文尚未完整,完整內容請切換至原文。
消費者代理測試工具(CATT)用來測試助手如何使用您的服務。 執行指令碼化或模型驅動的代理對抗 MCP 伺服器、MCP 應用程式、網站或 HTTP API。檢查服務執行了什麼,檢視證據,並比較不同版本的結果。
Muse 與 Instinct 為支援的代理模擬目標。 Muse 仍為預設。兩者皆使用 共用聯結器測試合約,包含路由、記憶體、支付、瀏覽器/HTTP 任務與排程。 參考 Instinct 研究 以瞭解其來源與限制。驅動試驗的模型與被模擬之助手分離。
測試主機。 CATT 為代理:它近似助手的主機,而非其私有實作。通過測試並不代表相容於 Muse 或任何託管助手。每個 Muse 專屬行為都有記錄基礎:
documented、unofficial、assumed或unknown。 此專案並未與 Meta、Instinct、OpenAI 或 Anthropic 相關或獲得其背書。
您今天可測試的專案
| Lane | Command | 檢查專案 | 狀態與範圍 |
|---|---|---|---|
| MCP 聯結器 | connector-run SCENARIO |
使用伺服器工具,套用帳戶與審核規則,保護私有值,並檢查服務記錄的結果與代理的回答。 | Muse 與 Instinct 代理:--emulation-target muse|instinct。參見 connector lane。 |
| 聯結器擴充功能 | connector-run SCENARIO with extensions: |
路由、記憶體、客製化 API 客戶端、瀏覽器動作、錢包卡片、背景工作、不受信任內容、頻道限制與模擬使用者。 | 在車道中支援。user_simulator 為探索性功能,無法在指令碼化測試或決策合約中執行。參見 extensions。 |
| 情境指令碼化 | scaffold URL --output FILE、scaffold --from-run RUN --output FILE |
閱讀工具目錄或將代理執行轉換為指令碼化呼叫。呼叫不使用服務工具。在執行前替換每個 TODO(scaffold)。 |
支援。單一可串流 HTTP 聯結器;不接受 OpenAPI 輸入。 |
| Muse 聯結器就緒度 | check URL --suite muse-guidelines |
檢閱目錄與可選清單,對照固定聯結器指南,無需呼叫工具。 | 已檔案化的限制,非准入。參見 readiness checks。 |
| 共用代理就緒度 | check URL --suite surrogate --emulation-target instinct |
檢查目錄、允許清單、結構語法及選擇投影,而不呼叫工具。 | CATT 的合約適用於任一目標;參見 shared contract。 |
| 個人代理協定 | check ORIGIN --suite poppy |
閱讀 poppy.json。使用 manifest、探測會話、登入以及在公司主機上宣告的一項操作。 |
草案 0.1;無生產 Muse 證據。 |
| Muse 裝置註冊 | check FILE --suite gadget |
檢查 link.register 訊息與指令規格是否符合固定 SDK 限制。不開啟任何連線。 |
已記錄的限制,而非准入。SDK 條款表示它不是開發者平臺。 |
| MCP 協定合約 | check TARGET |
檢查結構、版本協商、會話與操作合約;執行固定相容性測試套件。 | 支援。通用 MCP 證據;參見 readiness checks。 |
| 嵌入式 MCP 應用程式 | surface-run SCENARIO |
在 Chromium 中渲染應用程式並檢查表單、工具呼叫、資源與服務回應。代理驅動程式從場景指令碼步驟中選擇。 | 支援。通用 MCP 應用程式主機,而非 Muse。參見 host scope。 |
| 網站 | browse POLICY, run --surface browser |
根據請求規則對可存取性快照採取行動。接管會暫停執行(退出 3);CLI 不會回傳。 | 原生 Chromium,無 OS 隔離。瀏覽器場景僅使用封裝的預約入口。 |
| HTTP API | run --surface api-tools, inspect, check |
將批准繫結到每個建議的呼叫並檢查後端結果。 | 已支援對映。您的 API 也需要一個 loopback 部署和私人控制介面卡。參見 API 場景 與 API 試用。 |
| 證據 | report, export, replay, diff |
檢查報告、刪除匯出、驗證回放並比較執行。 | 已支援。回放與差異比較需要封閉執行。 |
| 開發擴充功能 | --development-extensions COMMAND |
CLI 二進位、隔離瀏覽器、雲端工作者、本機 Glimmer、產生的 OpenAPI 與 Prism 模擬。 | 不在支援版本內。參見 development extensions。 |
connector lane 會記錄每個 Muse 特定行為的基礎。工具類別與審核提示遵循檔案化指引。muse-cli 投影與範本客戶端遵循非官方映象;原生投影則是假設的通用基準。中性 cli 投影將兩個目標皆視為 CATT 處理。Instinct 執行擁有獨立的來源記錄,並將共享主機演算法標記為假設。Native/CLI MCP 為 CATT 的測試介面卡;未發現公開的 Instinct MCP 整合契約。
在 Instinct 下執行本機預約範例,無需模型或帳號:
uv run consumer-agent-testing-tool connector-run examples/connector/instinct-booking.yaml \
--driver scripted --script examples/connector/fixture-booking.calls.json \
--start "python -m consumer_agent_testing_tool.connector_fixture --port {port} --variant good --auth none"在您的情境中設定 emulation_target: instinct 或傳遞
--emulation-target instinct。兩個目標皆使用 native 或 cli 投影與通用 MCP 客戶端。Instinct 預設為純文字回覆,並不執行 Muse 指南檢查。其本機錢包範例涵蓋支付行為;實際支付軌道、trusted-network 協定、Vault 與 Files 仍在
shared contract 之外。
接下來三個快速入門。connector lane 與 popular MCP server 快速入門在 loopback 執行,無需帳號;Coverage Cat sandbox 快速入門呼叫託管沙盒。Test your own service 將它們轉成工作流程,且 documentation index 列出 每一頁。
設定
您需要 Python 3.12 或更新版(CI 於 Linux 測試 3.12、macOS 測試 3.14),
uv,以及 Node.js 20 或更新版與 npm(已安裝套件宣告 >=20;已於 25.9 測試)。記錄的發行證據涵蓋 macOS。從此倉庫的克隆版本,安裝 Python 與 Node 依賴,並編譯瀏覽器通道所使用的 Chromium:
uv sync --extra openrouter --extra dev
npm --prefix tooling ci --ignore-scripts
npm --prefix tooling/payment-ui ci --ignore-scripts
PLAYWRIGHT_BROWSERS_PATH="$PWD/.cache/ms-playwright" node tooling/payment-ui/node_modules/playwright/cli.js install chromiumconnector lane、就緒檢查與指令碼化執行僅需
uv sync。Node 與 Chromium 用於 MCP 應用程式與瀏覽器通道。
在 Linux(Debian 或 Ubuntu)上,改以系統函式庫安裝 Chromium。Linux 未包含於記錄發行證據:以下指令符合 CI workflow,但尚未在此驗證。
sudo apt-get update && sudo apt-get install -y nodejs npm # or Node 20+ from nodesource or nvm curl -LsSf https://astral.sh/uv/install.sh | sh uv sync --extra openrouter --extra dev npm --prefix tooling ci --ignore-scripts npm --prefix tooling/payment-ui ci --ignore-scripts PLAYWRIGHT_BROWSERS_PATH="$PWD/.cache/ms-playwright" \ node tooling/payment-ui/node_modules/playwright/cli.js install --with-deps chromium
三項功能依賴 macOS Seatbelt (sandbox-exec) 並在 Linux 報告不支援或被阻擋,而非執行未受限制:--offline 就緒模式、run --surface api-tools 背後的網路拒絕驗證工作者,以及本機模型記憶體概況。connector lane、指令碼化執行、就緒檢查與 Docker 支援的 stdio 目標不依賴此功能。
使用 doctor 檢查設定:
uv run consumer-agent-testing-tool doctor
它會檢查 Node 與已安裝套件所宣告的最低版本相符,tooling/payment-ui 套件與其固定版本相符,以及 Chromium 與其在 .cache/ms-playwright 下的無頭殼。它會報告可選的協定工具,並僅在開發通道或已設定的 stdio MCP 與 CLI 目標時檢查 Docker。即使已有設定或 --model-profile 選擇模型,亦不會傳送模型請求。每一次失敗或被阻擋的檢查,會在 stderr 輸出一行並說明原因,若是設定問題,亦會列出修正指令。
若要明確執行供應商預檢,該檢查會傳送兩個簡短模型請求並可能產生費用,請加入 --model-preflight:
uv run consumer-agent-testing-tool doctor --config agent.yaml --model-preflight
指令碼執行不需要模型帳號,且所有三個快速入門中的指令碼指令也不需要設定檔。代理執行則需要模型設定檔與 API 金鑰;模型供應商說明如何建立。透過環境變數提供憑證,並將其保持在情境與共用證據之外。consumer-agent-testing-tool.yaml,預設設定檔,為本機且已 git-ignore,且不附帶任何設定檔。
快速入門:聯結器通道
此快速入門僅在 loopback 上執行,且不需要帳號。完成設定後,在第二個終端機啟動類似 Cedar Stays 的測試服務。當服務準備就緒時,它會輸出一行 JSON 並附上其 URL;按 Ctrl-C 可停止它:
uv run python -m consumer_agent_testing_tool.connector_fixture --port 8765 --variant good --auth none
重播範例的指令碼呼叫,無模型:
uv run consumer-agent-testing-tool connector-run examples/connector/fixture-booking.yaml \ --driver scripted --script examples/connector/fixture-booking.calls.json
指令碼會搜尋房間、取得報價、預訂並給出最終答案。主機從情境的 private: 值中填寫客戶的電子郵件,模型永遠看不到;指令碼使用者則根據情境的 permissions: 規則回答每張審核卡。執行完成後,主機檢查測試件的私有預言機(確定一筆預訂、無重複收費)以及透過 get_booking 檢視預訂狀態。它還會檢查每一次呼叫是否符合其審核卡(approval.dispatches_match、approval.disclosure_bound),以及最終答案是否沒有虛假陳述,並傳遞總額與確認(answer.no_false_claims、answer.relay_complete)。
此指令會列印執行目錄與 Connector report: .../report.html,並在所有必要檢查通過時以 0 退出。執行結果被封存於 runs/connector-<id>/。請分享 export 的輸出,而非執行目錄:其 private/ 資料夾儲存主機私有值。
對於代理執行,請於 模型供應商中使用 init 指令建立 agent.yaml,於您的 shell 中設定 OPENROUTER_API_KEY,然後執行:
uv run consumer-agent-testing-tool connector-run examples/connector/fixture-booking.yaml --config agent.yaml
模型預檢先執行並列印其自身證據路徑。代理接著將四個允許的工具視為原生函式,並將主機私有電子郵件從其 schema 中移除,然後自行寫入其餘引數。此流程使用付費模型推論。若要在不編輯情境的情況下改變處理方式,--projection cli 透過一個 exec 指令為任一目標提供相同工具,--exposure search-only 透過 tool_search 載入其引數,--output-schema strict 僅接受不違反工具 outputSchema 的結果,正如官方 MCP SDK 所做,且 --trials N 進行獨立試驗並列印 pass^k。執行鎖記錄投影、曝光、客戶檔案與輸出 schema 的覆寫,皆在 overrides 下。
connector-run 在所有必要檢查通過時以 0 退出;若檢查失敗、答案作出虛假陳述或達到代理限制,則以 1 退出;設定、基礎設施或報告錯誤時以 2 退出;若試驗被阻擋或不支援,例如因不確定寫入以調和、不可觀測檢查或客戶檔案限制,則以 3 退出。若要從自己的伺服器啟動,執行 scaffold;若要重播已錄製、可分享的代理試驗且不使用模型,請使用 scaffold --from-run 將其轉為呼叫檔。聯結器通道參考涵蓋情境、旗標與證據。範例列出每個已發行情境及其測試件指令,通道擴充則涵蓋路由、客製聯結器、瀏覽器子代理、錢包、排程與其他擴充。
快速入門:熱門 MCP 伺服器
聯結器通道支援任何透過 Streamable HTTP 的 MCP 伺服器,而不僅限於內建測試服務。此快速入門將其指向「Everything」(@modelcontextprotocol/server-everything,MIT),MCP 專案為客戶作者維護的參考伺服器。其天氣工具回傳模擬資料,故不需要帳號或金鑰。於第二個終端機啟動;首次執行時會從 npm 下載已鎖定的版本:
PORT=3001 npx -y @modelcontextprotocol/server-everything@1.0.0 streamableHttp
檢視主機從即時目錄推斷的內容。scaffold 執行握手,tools/list 不呼叫任何工具,並寫入一個場景骨架,包含從伺服器註解中建議的工具類別:
uv run consumer-agent-testing-tool scaffold http://127.0.0.1:3001/mcp --output my-everything.yaml uv run consumer-agent-testing-tool check http://127.0.0.1:3001/mcp --suite muse-guidelines
第二個指令會靜態審核目錄,與已固定的 Muse 聯結器指引比對。接著重放已提供的範例,該範例要求查詢芝加哥天氣,先使用原生工具,再透過非官方 Muse 範本客戶端的 Muse 風格命令列投影:
uv run consumer-agent-testing-tool connector-run examples/connector/everything-weather.yaml \ --driver scripted --script examples/connector/everything-weather.calls.json uv run consumer-agent-testing-tool connector-run examples/connector/everything-weather.yaml \ --projection muse-cli --client-profile muse-template-unofficial-2026-10 \ --driver scripted --script examples/connector/everything-weather-cli.calls.json
兩者皆以 0 退出。此場景為模型提供三個伺服器工具;經審核的允許清單將其餘工具排除在外,包括 get-env,它會回傳伺服器程序的環境變數;以及 gzip-file-as-resource,它會抓取所提供的任何 URL。伺服器沒有私有預言機,故在代理停止後,結果檢查會呼叫 get-structured-content 本身,答案檢查則尋找伺服器回傳的溫度與天氣狀況。以模型檔案為例,讓代理重複執行相同任務三次並輸出 pass^k(付費推論)。此場景未宣告重置 URL;因此 connector-run 警告各次試驗共用伺服器狀態;此天氣工具不保留任何資料:
uv run consumer-agent-testing-tool connector-run examples/connector/everything-weather.yaml \ --config agent.yaml --trials 3
就緒檢查
check 亦會執行就緒測試套件,讀取目錄與檔案而非執行代理。使用 connector-lane 快速入門的 fixture 仍在執行時,審查其目錄與範例清單,對照已固定的 Muse 聯結器指引:
uv run consumer-agent-testing-tool check http://127.0.0.1:8765/mcp --suite muse-guidelines \ --manifest examples/connector/readiness.yaml
| 測試套件 | 指令 | 退出碼 |
|---|---|---|
muse-guidelines |
check URL --suite muse-guidelines [--manifest FILE] |
0 無失敗發現,1 有失敗發現,2 設定錯誤,3 客戶端配置無法連線伺服器 |
muse-guidelines 漂移 |
check --suite muse-guidelines --drift-check |
0 未變,1 漂移,2 未抓取 |
poppy |
check ORIGIN --suite poppy [--manifest FILE] |
0 無失敗發現,1 有失敗發現,2 設定錯誤,3 被阻擋 |
gadget |
check FILE --suite gadget |
0 沒有失敗發現,1 有失敗發現,2 檔案無法讀取 |
contract (預設) |
check TARGET [--interface-profile PROFILE] |
0 所有必須檢查均通過,1 有檢查失敗,2 設定、工具或報告錯誤,3 被阻止或不支援 |
指南審查列出了伺服器的工具並呼叫無;--drift-check\n抓取即時指南,僅在提供時。Poppy discovery 只讀取。\n其探測器僅在 --manifest 下執行並作用於公司的自有主機:他們\n啟動會話、登入宣告的測試帳號並確認一項宣告的\n操作。Gadget 套件讀取一個本地檔案。Contract 套件檢查\n在設定檔中命名的目標 (--config)。對於一個 kind: mcp 目標\n若未宣告 contract_cases,其 operation-contracts 檢查不支援,執行將以 3 結束。
乾淨的就緒結果並不是接受。Meta 以手動方式審查聯結器,\nPoppy 是 0.1 草稿,沒有生產 Muse 證據,Gadget SDK 的條款\n表示它不是開發者平臺。Readiness checks\n描述規則、清單、--offline 行為以及\nmcp-contract-2026-07-28 檔案。
快速入門:Coverage Cat sandbox
從原始碼檢出或解壓原始碼發行版,完成\nSetup,然後執行:
uv run consumer-agent-testing-tool surface-run examples/coveragecat-sandbox.yaml --driver scripted
範例在 Coverage Cat 主機的\nsandbox 於 https://www.coveragecat.com/api/consumer/mcp 建立一個虛構購物者的草稿。它不需要\nCoverage Cat 帳號、操作員憑證或模型 API 金鑰。
第一個 umbrella_consumer_prefill 呼叫設定 sandbox: true,如 consumer MCP manifest 所指定。\n此引數啟動伺服器的 sandbox。場景的 test_only: true\n旗標僅記錄測試作者的意圖。
主機修正工具引數並保留返回的存取權杖為私有。\n它允許兩個工具,umbrella_consumer_prefill 與 consumer_intake_issues,\n並檢查:
- Prefill 回傳
sandbox: true。 - Follow-up 保留
sandbox: true。 - Follow-up 回傳原始申請 ID。
- 伺服器回報
application_submitted: false。
每一次執行都會產生一份新草稿,並在提交前停止。若 sandbox 檢查失敗或遺失,工作流程將停止。這些檢查涵蓋草稿建立與後續流程,並不包括付款元件、瀏覽器行為或獨立後端檢查.
若要讓模型自行選擇步驟,請於Model providers中使用 init 指令建立 agent.yaml,在 shell 中設定 OPENROUTER_API_KEY,然後執行:
uv run consumer-agent-testing-tool surface-run examples/coveragecat-sandbox.yaml \ --driver agent --config agent.yaml
代理程式驅動為 指令碼化動作選單:Spark Open 每回合挑選一個已就緒的情境步驟,並由主機以該情境的引數執行。模型永遠不會看到伺服器的工具、架構或原始結果,僅能存取情境所暴露的結果欄位,且證據標記為 scripted action menu。
主機提供測試輸入並檢查結果。本版本透過 Together 進行付費模型推論,預設啟用 ZDR 並停用回退。
驗證日期 2026 年 10 月 15 日:指令碼化與 Spark Open 代理執行皆通過所有四項 sandbox 檢查。兩個模型回應皆識別到 Together;兩個請求均使用已設定的 ZDR 政策。請參閱 錄製的快速開始結果。
每個指令會列印一行結果,例如 Surface run completed (exit 0),接著是 Surface report: .../report.html。開啟報告以檢視工作流程及其檢查。相同目錄包含 result.json(結構化結果)與 events.jsonl(已刪除的事件時間軸)。代理執行亦會將模型與工具記錄存於 agent/。
將以下佔位符替換為您指令輸出的執行目錄:
uv run consumer-agent-testing-tool report runs/surface-YOUR_RUN_ID
uv run consumer-agent-testing-tool export runs/surface-YOUR_RUN_ID
uv run consumer-agent-testing-tool diff runs/surface-BASELINE_ID runs/surface-CANDIDATE_ID分享已生成的匯出檔案。請保留完整執行資料夾的私密性。雖然執行可恢復,checkpoint.private.json 內包含執行所需的憑證、工具結果與主機輸入;已完成或因退出 1 失敗且未留下未確認寫入的執行僅保留已清理的紀錄。
若要測試您自己的 MCP 服務,請複製範例並替換其端點、允許來源、工具政策、測試資料及回應檢查。 Surface workflows說明 UI 步驟、代理驅動與執行恢復。
延伸至提交與 sandbox 結帳
該 checkout example 新增了審核、提交、Monoline 方案選擇、同意、繫結後續、檔案上傳以及模擬付款方式設定。其 14 個步驟包含 62 個斷言。七項工具皆使用消費者 umbrella MCP,且每個服務步驟必須回傳相同的 sandbox intake。
目前整合狀態,2026 年 10 月 15 日:提交時被阻擋。
Coverage Cat 回傳的報價欄位被其 MCP 輸出架構排除。它亦將 minimum_auto_limits 回傳為字串,而架構要求為物件。
主機拒絕此回應。草稿快速開始已通過,但完整結帳測試尚未「端對端」通過。請參閱
失敗報告與獨立診斷。
執行此指令以重現失敗,或在服務合約修正後重新測試:
uv run consumer-agent-testing-tool surface-run examples/coveragecat-sandbox-checkout.yaml \ --driver scripted \ --replies examples/coveragecat-sandbox-checkout-replies.json
回覆檔案提供一份 虛構購物者的答案:批准提交、信用同意、Monoline 200 萬美元方案以 389 美元、足夠的自動限額、拒絕超額 UM/UIM,以及兩個運營商問題均為「否」。這些範例並未授權真實購物者的交易。若報價變更、缺失或否決批准,將停止下一筆寫入。兩份產生的宣告 PDF 標記為 SYNTHETIC TEST ONLY。
一旦提交成功,範例會在 sandbox_document_review_poll 位置以退出碼 3 暫停。僅在此檢查點,請至少等待報告的 60 秒,然後恢復列印的執行:
sleep 60 uv run consumer-agent-testing-tool surface-run examples/coveragecat-sandbox-checkout.yaml \ --driver scripted --resume runs/surface-YOUR_RUN_ID \ --replies examples/coveragecat-sandbox-checkout-after-review.json
主持人等待您的回覆,但不會測量您等待的時間。後續審核的測試環境會批准模擬付款回撥。
對於代理驅動的執行,請在兩個命令上將 --driver scripted 替換為 --driver agent --config agent.yaml。恢復執行時必須保留原始情境、驅動程式和模型設定。
沙盒提供模擬付款憑證。範例會將返回的 seti_sandbox_... 與測試環境 pm_sandbox_consumer_agent_testing_tool 一起傳送,然後需要 payment_method_on_file、waiting_on_carrier,且不需要扣款確認。計費檢查會檢視設定元資料,而非呈現欄位。沒有開啟 Stripe 表單,亦未收集卡片資訊,也不會使用回退 URL。此測試不會建立任何高階收款或啟用保險。請分別測試嵌入式付款 UI 與 Stripe 測試模式設定。
測試您自己的服務
上述快速入門是單一工作流程的各個部份。對於您所擁有的 MCP 伺服器:
- 編寫情境。
scaffold URL --output my-connector.yaml讀取即時目錄(--auth-env VAR用於 API 金鑰,或--auth-from FILE搭配包含 OAuth 區塊的情境)並寫入骨架。將每個TODO(scaffold)取代為:使用者以自身語言表達的目標、審核聯結器會公開的工具白名單、您的檔案所決定的工具類別、指令碼使用者的審批規則、主機私有值(如使用者電子郵件),以及從私有狀態 URL(oracle)或您的讀取工具之一讀取真實結果的檢查。 - 檢查就緒。
check URL --suite muse-guidelines --manifest FILE依照固定聯結器指引審核目錄與您的宣告。乾淨的結果是檔案化的限制,而非承認。 - 鎖定順利流程。 用
--driver scripted重播指令碼呼叫檔;它不需要模型,並適合放入 CI。經過您信任的代理試驗後,scaffold --from-run RUN --output FILE將其轉換為一個。 - 執行代理試驗。
--trials N搭配模型設定可得到 pass^k。在 Muse 風格的主機可能使用的每種處理方式下執行相同情境:--projection muse-cli、--exposure search-only、--client-profile muse-template-unofficial-2026-10與--output-schema strict。執行鎖會記錄每一項。 - 加入真實性。 Lane extensions 加入競爭聯結器與按需連線、單次使用卡片付款、背景工作、非受信內容、頻道限制以及模擬使用者。
- 比較建置。
diff比較兩個封閉執行並在結果回歸時退出 1。分享export的輸出;執行目錄的private/資料夾存放主機私有值。
對於具有自身 UI 的 MCP 應用程式,請從 Coverage Cat 情境開始並 surface-run。對於網站,使用 browse 搭配瀏覽器政策,或使用聯結器 lane 的 browser 擴充。對於 HTTP API,編寫 run --surface api-tools 的對映,或測試代理是否能從您的檔案使用 custom_connector 擴充自行建立客戶端。執行消費者測試涵蓋其他 lane。
模型供應商
使用 init 建立一個設定檔。此設定使用 Muse Spark Open(meta/muse-spark-open)透過 OpenRouter,只路由至 Together,並要求零資料保留(ZDR)且停用回退;在代理執行前於您的 shell 中設定 OPENROUTER_API_KEY:
uv run consumer-agent-testing-tool init --provider openrouter --model meta/muse-spark-open \ --routing-provider together --config agent.yaml
init 亦會佈署除設定外的 API 情境、瀏覽器情境以及對映 API 範例。它僅佈署受支援 CLI 可執行的情境,並拒絕僅有設定範本的供應商(openai、anthropic、gemini、azure-openai、vertex-gemini、openai-compatible),除非 --development-extensions 先於 init。init --provider none --config scripted.yaml 為需要的指令碼命令寫入設定;init 則不會覆寫已存在的檔案。
init 所寫的檔案被標記為 specified/unverified。
doctor --model-preflight、run 以及 connector-run、surface-run 與 browse 的代理驅動程式會對任何未被標記為 supported 的檔案印出警告,且執行鎖會記錄該標籤。包含 contributor 的模型 ID 會選擇一種模式,供給者可在此模式下使用您的提示進行訓練;此類檔案需要 allow_training_on_prompts: true(init --allow-training-on-prompts)。請參閱 model providers 以瞭解每個介面卡、其檢查專案與失敗標籤。
OpenRouter 模型與隱私設定
Consumer Agent Testing Tool 預設請求 零資料保留 (ZDR),即使省略 routing.zdr。若要更改此設定,請編輯 consumer-agent-testing-tool.yaml 中選取的檔案或傳遞給 --config 的檔案:
model_profiles: openrouter-dev: provider: openrouter api: chat-completions model_id: meta/muse-spark-open auth: mode: api_key env: OPENROUTER_API_KEY routing: only: [together] allow_fallbacks: false require_parameters: true data_collection: deny zdr: true # Set to false to disable this tool's per-request ZDR requirement. defaults: model_profile: openrouter-dev
使用未加引號的 YAML 布林值:true 或 false。Consumer Agent Testing Tool 將此設定套用於每一次 OpenRouter 請求,包括在工具結果後繼續的請求,並將其記錄於路由證據中。
設定 zdr: false 會移除此請求層級的要求。它仍保留 data_collection: deny、已固定的供應商以及禁止回退。您的 OpenRouter 帳號或防護措施仍可能執行 ZDR。請求日誌會顯示已傳送的政策;它們無法獨立驗證供應商的保留做法。參閱 OpenRouter 的 ZDR 檔案。
檢查日期 2026 年 10 月 15 日:OpenRouter 在其模型與 ZDR 端點目錄中同時列出 Spark Open 的 Together。一次實際工具呼叫測試以上述路由設定通過。兩個回應都識別出 Together,且模型正確使用了工具結果。請參閱 測試記錄。
若要選擇其他供應商,請設定 routing.only 或將 --routing-provider 傳遞給 init。請求永不會靜默切換供應商或模型。
執行使用 Inspect 專用的 openrouter 供應商,該供應商以結構化形式重播先前的推理,而非純文字。每個回應必須標明已固定的供應商。回應不會標明端點變體,因此像 nebius/fp4 這樣的固定會被記錄為 variant unverified。不支援串流。請參閱 model providers。
使用 zdr: true 時,僅符合 ZDR 列名的端點才符合資格。於 2026 年 10 月 15 日,Muse Spark 1.3 與 Muse Wonder 只由 Meta 在 OpenRouter 提供,且未列入 ZDR,因而不存在符合 ZDR 的 OpenRouter 路線。對它們的請求預期會失敗,但尚未有實際執行記錄錯誤。當 OpenRouter 的錯誤引用資料政策時,會被標記為 no endpoint satisfies the routing/ZDR policy。使用 routing.only: [together](init 預設)時,可能被標記為 routing policy: no allowed provider。
來源:Meta 公告、OpenRouter 模型、供應商端點 與 ZDR 端點。
獨立的 Smoke 測試與舊版消費者協助程式讀取相同的 --config 與 --model-profile,包含隱私設定。init 所寫的檔案未設定推理工作量。
.venv/bin/python scripts/openrouter_smoke.py --config agent.yaml \ --model-profile openrouter-dev
此指令使用合成工具資料測試模型連線。它需要一個 API 金鑰以及可用於已固定供應商的路由。它不會向您計畫測試的服務傳送任何請求。
Meta Model API
init --provider meta 為 Meta 的 Model API 撰寫一個檔案:
uv run consumer-agent-testing-tool init --provider meta --model muse-spark-1.3 --config meta.yaml
該檔案使用 Responses API 位於 https://api.meta.ai/v1,並從 MODEL_API_KEY 或 META_API_KEY 讀取金鑰;若兩者皆設定,必須相符。加入 --api chat-completions 用於 Chat Completions,或 --key-env NAME 以使用其他變數,該變數將成為唯一讀取項。該介面卡使用 OpenAI SDK 來自 openrouter 擴充套件。
主機拒絕 Meta 拒絕的請求,例如強制工具選擇, 在傳送前(exit 3)。Meta 在其伺服器上為每個提示新增引導上下文, 因此捕獲的請求不完整,且每次 Meta 執行都將此視為觀測缺口。流式傳輸不支援,API 為 按使用付費。參見 Meta Model API。 尚未記錄任何實際 Meta Model API 執行;介面卡已使用本地 fixture 進行測試。
執行消費者測試
本節涵蓋嵌入式 MCP 應用程式 (surface-run)、瀏覽器 (browse)
以及 HTTP API 通道。若要讓代理使用您 MCP 伺服器自己的工具,請使用
connector lane。
情境定義端點、允許的來源、工具、私有引數、UI
操作、同意要求和結果檢查,並可選擇為 MCP 連線提供 API 金鑰
(auth)。使用您有權測試的端點和合成交易。
consumer-agent-testing-tool surface-run path/to/scenario.yaml --driver scripted consumer-agent-testing-tool surface-run path/to/scenario.yaml --driver agent --config agent.yaml consumer-agent-testing-tool surface-run path/to/scenario.yaml --resume runs/existing-run consumer-agent-testing-tool browse path/to/browser-policy.json --actions path/to/actions.json
主機將 MCP 應用程式支援宣告為客戶端,透過其
tools/list 定義尋找每個工具的 UI,並在原生瀏覽器中渲染。使用
--driver agent 時,模型在情境步驟(指令碼化操作選單)中挑選,永遠不會看到伺服器的工具、原始結果或私有輸入。服務檢查決定結果;渲染的表單或模型對成功的聲稱
無法證明交易已完成。
browse 透過可存取性快照和元素參照驅動受限瀏覽器,沒有選擇器、指令碼或 CDP。其政策檔案設定起始
url、允許的 origins 以及請求 rules、snapshot_max_chars
(預設 20,000)、history_snapshots(2)和 dialogs(agent、accept 或
dismiss),如 examples/browser-policy.json 所示。
長快照以 {"kind": "snapshot", "offset": N} 分頁。被拒絕或失敗的操作以觀測值回傳給代理,附帶 status,對話方塊和檔案選擇器以
kind: dialog 或 kind: upload 回覆。
使用 --driver agent 時,供應商在瀏覽器開啟前進行預檢。
結果的 observations 區塊統計截斷快照和被拒絕的操作。當代理請求接管時,執行暫停(exit 3)。CLI
沒有回傳,故該執行中控制權不會回到代理。原生模式下,專用工作者開啟的 WebSocket 與 WebRTC TCP 中繼未被強制。政策欄位 webmcp: true,預設關閉,列出快照中已註冊的 WebMCP 工具,並允許代理以
kind: webmcp 呼叫;該通道標示為「generic WebMCP page tools, not Muse」
(基礎:assumed),其證據指出 Meta 為其 AI 眼鏡檔案 WebMCP,這是非 Muse 的 Meta 產品。參見
restricted browser behavior。
HTTP API 測試使用與情境執行器的明確對映。對映可
傳送宣告的請求標頭,並將目標憑證放入自訂 API‑key 標頭。於 API 與瀏覽器試驗中,無效的工具建議會以工具錯誤回傳給模型,且耗盡限制會失敗試驗;參見
API scenarios。若要測試代理是否能從 API 文件自行構建客戶端,請使用 connector lane 的 custom_connector 擴充。Prism、Schemathesis 與
generated‑OpenAPI 工具僅作為開發擴充可用。其五個套件因原始授權通知未解決而被排除於支援版本之外,未被視為已清除。
結果與退出碼
surface-run 遵循規範 §18 中的退出碼:
| 退出 | 含義 |
|---|---|
| 0 | 已完成 |
| 1 | 失敗:斷言、服務拒絕、UI 互動失敗或代理錯誤 |
| 2 | 設定、基礎設施、整合或報告失敗 |
| 3 | 被阻塞或不支援:等待回覆或批准、未確認寫入、限制或缺少覆蓋範圍 |
在 Surface report: ... 之前,它會輸出一行:
Surface run <status> (exit N) at <stage> [<class>]: <reason>。 result.json
記錄相同的 failure_class 和 failure_stage,以及執行是否
resumable。完成的執行,或因退出 1 失敗的執行,除非
失敗留下未確認的寫入:該寫入可能已生效,因此
執行仍可恢復以調和它。被阻塞的執行和設定失敗可以恢復。
run 和 browse 使用相同的四個程式碼,除了耗盡一輪、
工具呼叫或時間限制算作失敗(退出 1)。只有 Inspect 運算子和自訂
限制,以及在 run 中,先前已過期的截止時間在嘗試的第一次
生成之前,會阻塞(退出 3)。run 在標準輸出列印每個證據路徑。
browse 在執行完成或暫停接管時列印最終觀測值及其證據路徑,否則在標準輸出不列印任何內容。對於任何
非完成的結果,兩者也會在標準錯誤列印一行:
<label> <status> (<class>) at <check>: <reason>. Evidence: <path>。標籤
命名該步驟,例如 Model preflight、Trial 2/10 of stale_total、
Resumed trial of stale_total 或 Browse(doctor 使用 Doctor check)。一個
run 失敗或被阻塞的試驗,或 --trials 大於 1,亦會列印
摘要行及計數。若 --trials 大於 1,則加入套件
pass^k,即各場景的平均值,例如
Run completed: 0 failed, 0 blocked and 4 completed of 4 trials; pass^1 1.00, pass^2 1.00. Evidence: ...。
套件的度量還會按場景拆分試驗
(統計決策)。run DIR 拒絕
(退出 2),在預檢之前,目錄中場景檔案共享相同 id。
connector-run 列印相同的標準錯誤行,並以例如
Connector trial 1/1 of fixture-booking-happy-path 為標籤;其程式碼列於
connector-lane 快速入門。使用 --trials N 時,一個
程式碼代表所有試驗:若任何試驗的證據不可分享則為 2,否則 1
若任何試驗失敗,否則 2 若任何試驗遇到設定、框架或驗證
錯誤,否則 3 若任何試驗被阻塞,否則 0。Connector trials: 行在
標準錯誤中給出 pass^k 並列出不可分享或結束於錯誤的試驗。就緒套件的程式碼列於 就緒檢查。
MCP Apps 主機實作的功能
嵌入式應用程式通道是通用的 MCP Apps 主機證據(MCP Apps 2026-01-26),
適用於 ChatGPT 或 Claude 等主機。它不是 Muse 證據:Muse 檔案中沒有
第三方 UI。每個 result.json 在 mcp_apps_host 下說明此點。
主機實作:
- 客戶端能力(
io.modelcontextprotocol/ui與text/html;profile=mcp-app),從工具的tools/list定義進行 UI 發現,以及以文字或 base64 片段形式的 HTML 資源; tool-input與呼叫引數、tool-result以及一個hostContext(主題、顯示模式、語言環境、時區、平臺、容器寬度和 最大高度,以及工具資訊);- 以資源的
_meta.ui.csp建立的內容安全政策,或若資源未宣告則採用 規範的限制預設,以及已宣告的相機、麥克風、地理位置和剪貼簿寫入許可權; - 在原生渲染器中,使用與主機頁面不同來源的沙盒代理。使用
browser_origins時,主機頁面還擁有 Chromium 的 本地網路存取許可權,每一次重定向跳轉再次檢查(僅允許 GET 或 HEAD 到已列入白名單的來源),並且每一次直接寫入在傳送前會被記錄為 未經同意的host_action; - 檢視
tools/call請求以取得該步驟已列入白名單的工具,以及resources/read與resources/list以取得該步驟的callback_resources; ui/message,一旦傳遞給代理執行於下一次觀測模型 讀取時,作為app_messages;若主機未交付,檢視會收到通知。ui/update-model-context、ui/open-link、顯示模式、日誌與 拆除請求被記錄,最新的模型上下文更新會以app_context方式傳遞給代理執行;- 尺寸變化,
ui/resource-teardown在檢視關閉前,以及tool-cancelled當檢視未收到呼叫結果時; _meta.ui.visibility,用於檢視呼叫與工具步驟;- MCP 2026-07-28 伺服器,在場景設定
version_negotiation: auto時。 預設為 2025initialize握手; - MCP 連線上的 API 金鑰(
auth),作為 bearer token、客製化標頭或查詢引數; - 一個舊式的
window.openai閘道器。
它不會為檢視的訊息、資源範本、_meta.ui.domain、除 inline 之外的顯示模式、部分工具輸入、主機上下文變更通知、MCP 連線上的 OAuth,或檢視在原生渲染器中的直接寫入授權。舊式閘道器與獨立渲染器沒有沙盒代理。參見
MCP Apps host。
檢查保留證據
consumer-agent-testing-tool report runs/existing-run
consumer-agent-testing-tool export runs/existing-run
consumer-agent-testing-tool replay runs/existing-run
consumer-agent-testing-tool diff runs/baseline runs/candidate重放會檢查證據封印並在不符時停止。它永不替換即時請求。若要再次測試服務,請啟動新執行。報告將缺失測量值標記為未知,並將部分總計與完整總計區分。
報告以判決開啟,列出失敗的步驟與檢查,接著是檢查專案與主機功能,以及每一步的時間線,顯示模型完整收到的資訊。接著是多個聯結器執行的聯結器表、表面檢視(服務發布的內容、模型被提供的內容、每一步接收到的內容,以及僅開發者可見的內容)、指標、觀察者與連結證據:代理與預檢執行、他們的 Inspect 日誌與 inspect view 指令,以及本機捕獲的 Playwright 追蹤。隨後列出缺口與限制,然後是執行鎖與完整記錄結果,每項均可摺疊;參見
report layout。report 在封存執行的代理子執行上返回其封存報告不變。
證據檔案與匯出會隱藏憑證、序號產生器密、聯絡資訊以及其他個人欄位(如姓名與地址)。模型檢視保持使用者自身資料可見:僅隱藏憑證與已宣告的機密,還有瀏覽器密碼欄位,以及在恢復瀏覽器情境時先前輸入的文字。供應商邊界會拒絕任何仍包含註冊憑證的模型請求。匯出亦套用執行自身的私有值,這些值永不匯出,並在階段化檔案或 Inspect 日誌或其他歸檔仍持有時拒絕(退出 2)。參見 redaction。
diff 比較兩個封存執行,例如表面、瀏覽器或聯結器執行。更改套件來源視為執行鎖變更,因此比較來自同一檢出版本的執行。若兩者可比且無結果回歸,則退出 0;若結果回歸(狀態惡化,或先前通過的檢查不再通過或缺失),則退出 1。若因 --treatment 之外的執行鎖變更或未封存/無法驗證的執行而無法比較,則退出 3。生成的 ID 與服務時間戳已標準化;執行鎖精確比較。--ignore POINTER(可重複)排除位於 /outcomes、/capabilities 或 /milestones 下的 JSON 指標,且 --treatment /server 宣告意圖的伺服器建置變更。參見
replay and diff。
欲瞭解更多細節,請參閱 documentation index、connector lane、lane extensions、readiness checks、consumer tests、browser diagnostics、measurement coverage、model timing 與 release extensions,其中包含開發歷史。
在 CI 中使用
指令碼化的聯結器執行不需要模型也不需要金鑰,且每次都重放相同的呼叫,因此可作為 pull‑request 檢查。connector-run 可以自行啟動服務並寫入 CI 系統可讀取的報告:
uv run consumer-agent-testing-tool connector-run my-connector.yaml \
--driver scripted --script my-connector.calls.json \
--start "python -m my_service --port {port}" \
--junit reports/connector.xml --summary-json reports/connector.json--start COMMANDruns the service on a free loopback port. The command is split like a shell command but not run in a shell.- 命令中的
{port}為該埠號。服務亦以PORT取得,情境則為${PORT}。 - 工具會等待直到
--ready-url(或情境中的第一個聯結器端點)回應 HTTP。最多等待--ready-timeout秒(預設 30)。 - 執行結束時,服務的程序組會收到 SIGTERM,5 秒後再收到 SIGKILL。
- 其輸出會寫到
runs/service-<id>.log,在封閉執行之外。該日誌未被隱藏,因此請透過環境變數將機密傳遞給服務。執行鎖會記錄已隱藏機密的指令。 - 若服務過早退出或永遠無法就緒,則退出碼為 2。
- 命令中的
--junit FILE每次嘗試寫一個測試套件,並為每個檢查寫一個測試案例。被阻塞的檢查是<skipped>。check --suite muse-guidelines也接受它。--summary-json FILE會寫下判決、退出碼、檢查、嘗試、pass^k 以及執行路徑。其格式為schemas/summary-v1.schema.json。--summary-json -只在標準輸出顯示該 JSON,並將其他行移至標準錯誤。- 當指令因錯誤停止時,兩份報告也會被寫入。參見 CI 輸出與服務。
在 Outcomes and exit codes 中的退出碼決定步驟。退出碼 3(被阻塞或不支援)不算通過。examples/ci/connector-lane.yml 是一個 GitHub Actions 範本,包含兩個工作。對於 Pull Request,會執行指令碼化呼叫與就緒審查。夜間或按需時,它會在每種 Muse 風格處理下執行代理試驗,且僅在設定了模型金鑰機密時執行。.github/workflows/ci.yml 會在 macOS 和 Linux 上執行本倉庫的測試與隨附範例。編碼代理應以 AGENTS.md 開始。所有矩陣工作都會提供所需的 CI 檢查;Linux 失敗不允許靜默通過。工作流程驗證、追蹤檔案衛生、機密掃描與模式新鮮度亦會被檢查。
執行測試
普通 pytest 執行支援的集合:
uv run pytest -q
tests/conftest.py 為每個會話提供一個臨時目錄、在 .cache/pytest/ 下的家目錄與快取,並在會話成功後移除它們,同時刪除其測試在 runs/ 下建立的表面與瀏覽器執行目錄。完整集合大約需要二十分鐘,且僅在迴環回 (loopback) 之外不傳送任何網路請求,也不傳送模型請求。pytest --development-extensions 也會收集實驗性測試,這些測試可能需要其他執行環境、工具與外部證據。非同步清理與未處理的執行緒例外將使測試失敗,而非僅留下警告。參見 CONTRIBUTING.md 以瞭解審查工作流程,並參閱 the launch checklist 以瞭解私有到公開的過渡。
發布審核
支援的發布為 local-consumer-v1:聯結器通道及其擴充、就緒檢查、消費者 MCP 應用、受限瀏覽器、對映 HTTP API、交易同意、繼續、證據與重放、測量、發行、以及 OpenRouter 與 Meta Model API 介面卡。Real-Muse 校準、雲端配置、本地 Glimmer、瀏覽器 OS 隔離與即時 Bedrock 驗證不在其範圍內;參見 release scope 以瞭解完整邊界。
發布證據會為每一次發布產生,且不會提交。docs/release-gates.json 為已提交的政策:閘道、範圍與排除項。release workflow 於 v* 標籤上執行。它會在 macOS 上記錄每個閘道,要求審核通過,並將三件事附加至 GitHub 發布:
- wheel 與原始碼壓縮檔,並附上簽署的建置來源;
release-evidence-<commit>.tar.gz,其中包含release/release-gates.json(已記錄的分類帳)和release/evidence/。
使用 consumer-agent-testing-tool release-audit 來檢查發行準備。它在證據已錄製或提取時會讀取 release/release-gates.json。若沒有,則會讀取已提交的政策並報告每個未驗證的門。退出碼 0 表示 發行就緒於 local-consumer-v1;退出碼 3 表示至少有一個必要的門需要注意。證據繫結源的摘要,因此源變更或門過期(錄製後七天)不能繼承先前通過的結果。要審核已釋出的發行,請檢出其標籤,在倉庫根目錄提取其證據存檔,並在門過期前執行審核。
日常操作中,你不需要這些。只執行你更改部分的測試,並讓 CI 在每次 pull request 時執行完整測試集。
一個獨立的即時 Spark Open 測試在啟用 ZDR 的情況下通過了 Together。它驗證了本機工具呼叫、工具結果後的繼續執行以及所請求的路由策略。它未測試串流、獨立驗證保留實踐,亦未確保與每個消費者工作流程的相容性。上述 Coverage Cat 檢出失敗仍是未解決的整合問題。
審核需要五個門:
| 門 | 需要證據 |
|---|---|
| 回歸 | 預設支援集合中的每個測試均通過,且無跳過 |
| 發行 | 全新離線安裝、原始相依通知、產物完整性及打包的消費者工作流程 |
| 交易同意 | 在目前回歸中通過同意、繼續及效果檢查 |
| 重播/差異 | 在目前回歸中通過證據完整性與比較檢查 |
| 代理相容性 | 精確 Muse/Instinct 原生/CLI 案例、記憶體生命週期、路由、支付、就緒度與擴充覆蓋 |
若想本地錄製證據,例如在標籤前,請按此順序執行與工作流程相同的步驟。verify_distribution.py 重新產生相依通知,這些是源指紋的一部分,因此發行先於回歸。回歸大約需要二十分鐘。所有內容都寫入 release/,git 會忽略它:
.venv/bin/python scripts/verify_distribution.py .venv/bin/python scripts/record_distribution.py .venv/bin/python scripts/run_regression.py release/evidence/regression-run.xml .venv/bin/python scripts/record_regression.py release/evidence/regression-run.xml .venv/bin/python scripts/record_release_tests.py release/evidence/regression-run.xml consumer-agent-testing-tool release-audit
run_regression.py 拒絕已存在的報告路徑,因此請移除 release/ 或選擇新名稱重新錄製。它會記錄相對工作空間的路徑,並將主目錄寫為 ~ 在日誌中。
發行檢查使用工作空間及已安裝瀏覽器中的快取。它們不需要 Docker VM、雲端工作者或模型憑證。若缺少相依快取,請使用 scripts/verify_distribution.py --prepare-cache 分別填充;該設定步驟會使用網路。安裝證據僅涵蓋 macOS。
審核驗證源指紋、產物雜湊、必要檢查及到期日期。當所有必要門通過時返回 0,否則返回 3。被排除的功能仍標記為 excluded。Qualification inputs 說明每個門所需的專案。
開發者擴充功能
倉庫保留 worker、隔離、local-model、校準以及生成的 OpenAPI 實驗,還有為開發者自己的 CLI 二進位檔 (run --surface cli-skill) 所設的 CLI/skill lane,該二進位檔需要 Docker 及回傳預約 fixture 快照結構的 oracle。正常的 CLI 會拒絕這些路徑。若要使用,請在子指令前放置 --development-extensions,並安裝獨立的 development-extensions 相依群組與任何必要工具。這些實驗不屬於支援的發行。支援的方式是讓代理在 MCP 伺服器上擁有 CLI 為\nconnector-run --projection muse-cli。
可選的 Node API 工具存在 已知相依性建議。在這些發現仍未解決時,請勿將它們用於不可信的輸入。
原始規格 原始規格 以及早期測試記錄記錄了專案的歷史;它們並未定義本次發布的範圍。
授權
MIT;請參閱 LICENSE。此授權不涵蓋 Coverage Cat 和 CATT 名稱或標誌;請參閱 TRADEMARKS.md。第三方元件保留其自身授權;發行版將其通知隨 third_party/ 一同釋出。