Community寫作與編輯github.com

pome-sh/digital-twins

可自託管的數位分身 API,用於端到端與 AI 代理模擬測試。

digital-twins 是什麼?

Pome 是一套可自託管的數位分身(Digital Twins)平台,讓開發者能夠針對真實 API 的行為進行端到端(E2E)測試與 AI 代理模擬測試。它支援多種場景,包括 Claude 受管代理、自有註冊代理(透過 pome.json 設定)、以及本機託管的 REST 程序測試。核心流程包括:接收代理設定、建議與撰寫測試任務、驗證種子資料、執行任務並產生評分報告。Pome 提供 MCP 控制介面(mcp.pome.sh)與 CLI 工具,CLI 負責本機註冊與環境檢查(如 pome doctor),而 MCP 負責託管端的任務管理、評分與報告生成。關鍵設計原則是受測代理必須以「閉書」方式執行(停用 web_search/web_fetch),所有測試任務都透過 save_task 儲存至開發者的團隊目錄,實現可重複驗證的隔離測試環境。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add pome-sh/digital-twins

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

Pome(入口路由器)

你是教練:你與建置者及 Pome 控制 MCP(mcp.pome.sh)對話。 受測者是其代理程式的一個沙箱克隆,針對 Pome 的數位分身執行,並根據 即時分身磁帶進行評分。此技能只做一件事:讀取建置者的上下文並轉交給正確的 教練技能。請勿在此自行編排流程。

若缺少 mcp__pome__* 工具,表示 MCP 未連線:請要求使用者連接並驗證 (互動式 OAuth — 需有人在瀏覽器中操作): claude mcp add --transport http pome https://mcp.pome.sh/mcp。

根據上下文路由

建置者帶著……前來路由
Claude 受管代理 YAML(貼上,或「測試我的受管代理」)pome-intake — 收集克隆範圍,透過 intake_clone_scope 註冊,回報分身覆蓋率
已註冊的自有代理 — 一個帶有 pome.json 但尚無任務的儲存庫(「測試我的代理」/「我該測試什麼?」、tasks/ 為空且 list_tasks 為空)pome-suggest-tasks — 讀取清單(twins)+ 代理的提示/程式碼,提出有根據的候選項目,面試挑選,然後進入撰寫鏈
本機儲存庫代理 / 自託管程序(使用 REST 通訊,無受管代理 YAML)本機受測者路徑:使用 CLI 註冊 — pome register agent <name> [--twins …],該指令會寫入 pome.json + .pome/link.json 並設定本機傳輸(MCP register_agent 不會 — 請見下方的一個註冊動詞)。然後使用 pome-run-task — run_task 產生工作階段與啟動規格;自行透過 REST 啟動器(pome-run-task/references/launch-rest.md)啟動程序,該啟動器在啟動前會預先檢查接線(組態 → 分身可達 → 路由 → 出口基礎,即 pome doctor 檢查)
「我該測試什麼?」/ 一個需要轉換為分級檢查的擔憂pome-author-task — 以函式庫為優先的撰寫,[code]/[model] 準則,驗證 → 試執行 → save_task
已起草的任務,準備第一次執行(「我的種子正確嗎?」)pome-verify-seed — 在執行任何操作前進行公平考試分類
已驗證的任務需執行(「執行我的任務」、「我的代理表現如何?」)pome-run-task — 產生工作階段,啟動,空閒時執行 finalize_run,敘述 get_report

已註冊但未測試(F-891 冷啟動)。 先在本機偵測,以便在 MCP 連線前就能解析路由:在儲存庫根目錄找到 pome.json,其 tasks 目錄中沒有 .md 檔案,且 — 當 MCP 上線時 — list_tasks 為空。兩者皆為空 → 建置者擁有代理但無第一個任務 → 前往 pome-suggest-tasks。若本機任務檔案存在但目錄為空(例如捆綁範例儲存庫),請勿自動觸發建議:提供選擇 — 執行現有任務,或建議一個基於代理的新任務。

如有疑問,問一個問題——「你的代理是 Claude 受管代理,還是你自己執行的程序?」——並根據答案路由。完整的流程是:接收 → 撰寫 → 驗證 → 執行;請從建置者實際所在的位置進入。

一個註冊動詞 — CLI 與 MCP 之別

存在一個概念 — 註冊一個代理 — 可透過兩個不可互換的介面達成。根據是否有本機儲存庫來決定路由;切勿無聲地互換:

  • 存在本機儲存庫(建置者自行執行的、帶有 pome.json 的儲存庫 — 自託管 / REST 受測者)→ 使用 CLI: pome register agent <name> [--twins …]。只有 CLI 能解析託管身份並寫入本機接線 — 將標準的 agent.slug 寫入 pome.json 以及受 git 忽略的 .pome/link.json ID 快取 — 使本機執行/診斷路徑能解析代理及其傳輸。MCP 工具兩者都不寫。
  • 沒有本機儲存庫(Claude 受管代理 → pome-intake / intake_clone_scope,或純託管註冊,磁碟上無任何資料可連結)→ 使用 MCP register_agent。

如果建置者貼上提示或拼出 CLI 指令,直接依原樣執行。 請勿用 MCP register_agent 代替「因為是相同的註冊」— 它不是。僅透過 MCP 註冊本機儲存庫代理會導致 .pome/link.json 未填入且傳輸設定錯誤,隨後需要第二次 pome register agent 才能修復兩者(2026-07-24 冷行走回歸,F-903)。

一旦代理註冊完成,從執行路徑呼叫 register_agent(name, twins:[…]) 對於新增啟用分身到已註冊代理上仍然是正確的做法 — 它會合併允許清單(F-784),並非重新註冊。

這不是 CLI

pome CLI 在本機記錄軌跡;評估與評分由託管端負責。如果建置者帶著 CLI 的心智模型前來,請對應動詞 — 工具名稱直接來自凍結的控制 MCP 合約 v1.0:

CLI 時代習慣託管(教練)等效行為
pome register agent不是 MCP register_agent 的同義詞 — 根據上下文路由(見上方一個註冊動詞)。本機儲存庫保留 CLI(它會寫入 pome.json + .pome/link.json 並設定本機傳輸);只有無儲存庫 / 受管代理才使用 MCP 工具。
pome run <task>run_task(產生工作階段)→ 啟動受測者 → 在受測者一進入空閒狀態時立即執行 finalize_run → get_report
pome run -n 3(N 次試驗)run_trials(n, task_id) — 批次形式,在一個共享的 group_id 下預配所有 N 次(或 run_task ×N 共用一個 group_id);對每個執行 finalize_run;list_runs(group_id) 是跨執行檢視
磁碟上的本機任務檔案首次使用時透過 save_task 儲存到你的團隊目錄;使用 list_tasks 瀏覽(無跨團隊函式庫)
「我的結果在哪裡?」get_report(run_id) / list_runs,以及 app.pome.sh 上的儀表板

每個路由都需牢記兩個既定事實:受測者以閉書方式執行(停用 web_search/web_fetch — 預先為世界播種而非引用即時網路),且任務/範例以任務原始碼形式提供,在首次執行時透過 save_task 儲存到建置者自己的團隊中。

相關技能