只取 CRUMB 標誌中的吐司角色:右上角被咬了一口、面帶微笑的吐司片
返回展廳

CRUMB

Generative Game Studio · Demo

從一句話的遊戲提案到可遊玩的草稿,代理的工作清楚可見,也可以介入。

CRUMB 是用於休閒遊戲原型製作的多代理工作室執行框架。

設計與開發 · 以 AI 程式開發代理打造

  • CLI本機示範
  • 網頁 Studio本機示範

CRUMB vocabulary

Lens
Game Pipeline
Build
Runtime Verification
Control Plane
Repair
Evidence
  1. spec
  2. build
  3. artifact
  1. qa check
  2. ac predicate
  3. verifier
  1. routing
  2. circuit breaker
  3. budget
  4. intervention
  1. transcript
  2. anti-deception
  3. studio

Spec: planner-lead · goal · question.socratic · step.design · spec · spec.update · acceptance_criteria · researcher · step.research.video · step.research_plan · ac_predicates · D1 spec_fit · research_plan_violationBuild: builder · build · spawn · sandwich.assembled.md · --append-system-prompt · agent-workspace · buildBuilderInputBundle · Phaser CDN · JuiceManager · PER_SPAWN_TIMEOUT_MS · juice_manager_missingArtifact: artifact.created · sha256 · artifacts/game.html · artifacts/game/index.html · pickEntry · artifact-watcher · version.released · manifest.toml · loc_own_bytes · VersionsQA Check: Phaser CDN · pickEntry · loc_own_bytes · qa_check · runQaCheck · qa.result · exec_exit_code · lint_passed · first_interaction · cross_browser_smoke · PLAYWRIGHT SMOKE · runtime_progress · qa-check-effect@v1 · QA_CHECK_TIMEOUT_MS · D2 exec · D6 portability · ac_results · ac_pass_count · deterministic · PASS WITHOUT EXEC · runtime_stalled_under_input · runtime_player_below_ground · forged_qa_result_attemptAC Predicate: acceptance_criteria · ACPredicateItem · predicate_js · runACInteractive · ac_predicates · ac_results · ac_pass_count · ACPredicateLedgerItem · verify_pass_with_ac_failureVerifier: D2 exec · D6 portability · verifier · judge.score · CourtEval · grader · critic · defender · regrader · step.judge · D1 spec_fit · verifier-llm · combineDimScore · PARTIAL · deviation · suggested_change · user_approve_partial · self_bias_risk_same_provider · cross_provider · buildVerifierInputBundle · ScorecardRouting: spawn · routeOnVerdict · verdict_pass · deviation · Critical · Important · Minor · suggested_change · rollback · handoff.rollback · sandwich_append · dispatch · adapter_swapped · user.veto · reduce(state, event)Circuit Breaker: circuit_breaker · CIRCUIT_OPEN_AT · adapter_override · adapter_swapped · circuit_open_auto_respawn · builder_circuit_open · claude-local · probeAdapter · adapter_substituted · intended_model · /swap · /reset-circuitBudget: spec.update · QA_CHECK_TIMEOUT_MS · builder_circuit_open · RESPEC_MAX · VERIFY_MAX · too_many_verify · TOKEN_BUDGET_HARD · token_exhausted · ratchet_revert · adaptive_stop · STUCK_THRESHOLD · budget_exhausted · PER_SPAWN_TIMEOUT_MSIntervention: PARTIAL · sandwich_append · STUCK_THRESHOLD · user.intervene · user.veto · user.approve · user.pause · user_approve_partial · ack · inbox.txt · parseInboxLine · /swap · /reset-circuit · consumed_intervene_ids · /api/sessions/:id/inboxTranscript: version.released · qa.result · qa-check-effect@v1 · dispatch · adapter_substituted · intended_model · ack · consumed_intervene_ids · transcript.jsonl · TranscriptWriter · ULID · O_APPEND · message.schema.json · reduce(state, event) · PURE REDUCER · REPLAY · replay_end_offset · CrumbState · parent_event_id · deterministic · audit_violations · applyEventFirewall · useTranscriptStream · otel.jsonlAnti-Deception: step.research_plan · buildBuilderInputBundle · JuiceManager · verify_pass_with_ac_failure · checkAntiDeception · PASS WITHOUT EXEC · self_bias_risk_same_provider · cross_provider · research_plan_violation · juice_manager_missing · runtime_stalled_under_input · runtime_player_below_ground · audit_violations · applyEventFirewall · forged_qa_result_attempt · buildVerifierInputBundleStudio: @crumb/studio · /api/stream · text/event-stream · useTranscriptStream · dockview-react · Pipeline · Scorecard · Waterfall · Versions · /api/sessions/:id/inbox · otel.jsonl

打造遊戲的代理,與判定遊戲的依據分開。

把一句話的遊戲提案,依序經過規格、建置與執行檢查的本機工作室示範。每一步都寫入 JSONL transcript,純 reducer 決定下一個 effect,只有 dispatcher 執行副作用。執行 QA 與模型的判定分開,以決定通過、重新設計、修復或人的引導。

用一句話提出遊戲構想,Claude Code、Codex 與 Gemini CLI 代理便依 Planner → Builder → 確定性 QA → Verifier 協作,CRUMB Studio 則顯示事件、進度與產出物,並接受自然語言介入。

從公開儲存庫複製後在本機執行的示範。

系統架構圖 · 依公開提交 f5e17c0 的程式碼路徑繪製
CRUMB 工作室系統人在 Studio 中提出遊戲並加以引導,Studio 將命令寫入 inbox。coordinator 依序把 inbox 與 transcript 的新事件交給 reducer;純 reducer 決定狀態與下一個 effect,只有 dispatcher 執行副作用。Planner 的規格、Builder 的建置與產出物、執行 QA 的結果與 Verifier 的判定,全都成為 transcript 事件。Verifier 只接收投影後的依據,reducer 以 QA 結果檢查並修正其分數:PASS 結束工作階段,PARTIAL 等待人確認,其餘則退回重新設計或修復。遊戲提案 · 引導在本機使用的人packages/studio事件 · 產出物檢視寫入 inbox 命令src/transcripttranscript.jsonl · append-onlysrc/loop/coordinator.ts事件迴圈 · 重播 · tailsrc/reducer狀態 → 下一個 effect判定路由session done完成 · PASS 或停止原因src/dispatcher/live.ts執行 effect · spawn actor評判輸入投影model-config · presetactor → 執行框架 · 模型agent actor · CLIPlanner Lead · 規格Builder · 撰寫遊戲artifacts/遊戲檔案dispatcher/qa-runner.ts執行 QA · 檢查Verifier actorVerifier · 模型判定src/validatoranti-deception · 分數修正人 · Studio事件控制transcript 是狀態的來源工作代理 · 產出物驗證 · 決定1提案 · 引導2user 事件3依序 reduce4effect5actor 設定6執行 Planner7spec8執行 Builder9檔案10建置記錄11qa_check12執行對象13qa.result1qa.result2僅限依據3評判輸入4judge.score5分數 · QA 依據6修正後的判定7完成1修正後的判定2PARTIAL 確認3重新設計 · 修復4完成5提案 · 引導1新事件 · 重播2依序 reduce3讀取 · SSE

從提案到遊玩

提案依序成為規格、建置與執行 QA。每一步都經過 transcript;actor 之間不互相呼叫。

  1. 遊戲提案 · 引導執行 · 判定: 提案 · 引導寫入 inbox 命令packages/studio

    在 Studio 中輸入一句話的遊戲提案與自然語言引導,Studio 將命令寫入 inbox。Studio 從不直接編輯 transcript。

  2. 寫入 inbox 命令packages/studio資料: user 事件事件迴圈 · 重播 · tailsrc/loop/coordinator.ts

    coordinator 讀取 inbox 命令,並以 user 事件記錄到 transcript。

  3. 事件迴圈 · 重播 · tailsrc/loop/coordinator.ts執行 · 判定: 依序 reduce狀態 → 下一個 effectsrc/reducer

    即時事件從佇列中一次 reduce 一個,維持每個事件的 effect 順序;分派本身以非同步執行。

  4. 狀態 → 下一個 effectsrc/reducer執行 · 判定: effect執行 effect · spawn actorsrc/dispatcher/live.ts

    reducer 是純函式,只決定狀態與下一個 effect:goal 選 Planner,spec 選 Builder,build 選 qa_check。

  5. actor → 執行框架 · 模型model-config · preset執行 · 判定: actor 設定src/dispatcher/live.ts

    由哪個執行框架、供應商與模型執行 actor,依 CLI 旗標 > 設定 > 預設集 > ambient > 備援 的順序決定。actor 並非固定於某個供應商。

  6. 執行 effect · spawn actorsrc/dispatcher/live.ts執行 · 判定: 執行 PlannerPlanner Lead · 規格agent actor · CLI

    dispatcher 以投影後的輸入執行 Planner。有條件的研究經由 Planner 的研究計畫與證據交接繼續進行,在此架構圖中收合。

  7. Planner Lead · 規格agent actor · CLI資料: spectranscript.jsonl · append-onlysrc/transcript

    Planner 的規格成為 transcript 事件,reducer 據此選擇 Builder。actor 之間不互相呼叫。

  8. 執行 effect · spawn actorsrc/dispatcher/live.ts執行 · 判定: 執行 BuilderBuilder · 撰寫遊戲agent actor · CLI

    dispatcher 執行 Builder。若同一 actor 持續失敗,circuit 會開啟並更換轉接器,失敗仍持續則停止。

  9. Builder · 撰寫遊戲agent actor · CLI資料: 檔案遊戲檔案artifacts/

    Builder 將進入點檔案、原始碼與素材寫成產出物。

  10. Builder · 撰寫遊戲agent actor · CLI資料: 建置記錄transcript.jsonl · append-onlysrc/transcript

    build 事件與 artifact.created 連同產出物的識別資訊,記錄在 transcript 中。

  11. 執行 effect · spawn actorsrc/dispatcher/live.ts執行 · 判定: qa_check執行 QA · 檢查dispatcher/qa-runner.ts

    build 事件之後,reducer 發出帶有產出物與建置識別資訊及驗收條件的 qa_check effect,由 dispatcher 執行。

  12. 遊戲檔案artifacts/資料: 執行對象執行 QA · 檢查dispatcher/qa-runner.ts

    執行 QA 以程式碼與瀏覽器檢查實際執行產出物。預設逾時 120 秒是設定值。

  13. 執行 QA · 檢查dispatcher/qa-runner.ts資料: qa.resulttranscript.jsonl · append-onlysrc/transcript

    無論成功或失敗,結果都記錄為 system qa.result 事件。即使檢查拋出例外,也會記錄含失敗欄位的結果。

驗證的信任邊界

執行 QA 是實際執行產出物所得的依據;Verifier 是依投影依據進行判定的模型。reducer 先調和兩者,再選擇下一條路徑。

  1. 執行 QA · 檢查dispatcher/qa-runner.ts資料: qa.resulttranscript.jsonl · append-onlysrc/transcript

    無論成功或失敗,結果都記錄為 system qa.result 事件。即使檢查拋出例外,也會記錄含失敗欄位的結果。

  2. transcript.jsonl · append-onlysrc/transcript資料: 僅限依據評判輸入投影src/dispatcher/live.ts

    Verifier 的輸入由最新的 goal、spec、build、qa.result 與 artifact.created,加上選取的研究證據投影而成。它縮小上下文;並不證明隔離或沒有洩漏。

  3. 評判輸入投影src/dispatcher/live.ts資料: 評判輸入Verifier · 模型判定Verifier actor

    dispatcher 以投影後的輸入執行 Verifier。

  4. Verifier · 模型判定Verifier actor資料: judge.scoretranscript.jsonl · append-onlysrc/transcript

    Verifier 的判定記錄為 judge.score 事件。這是模型的判斷,不是關於執行的事實。

  5. 狀態 → 下一個 effectsrc/reducer執行 · 判定: 分數 · QA 依據anti-deception · 分數修正src/validator

    收到 judge.score 時,reducer 將它連同 QA 結果、Builder 的供應商,以及研究計畫與證據,一起交給 anti-deception 檢查。

  6. anti-deception · 分數修正src/validator資料: 修正後的判定判定路由src/reducer

    沒有成功執行的 PASS 改為 FAIL,執行相關分數依確定性 QA 修正。其他規則是有條件的修正,不是真實性的一般證明。

  7. 判定路由src/reducer資料: 完成完成 · PASS 或停止原因session done

    PASS 以 done 結束工作階段。因預算與 circuit 而停止也以 done 結束,但保留停止原因,因此 done 不一定是 PASS。

失敗與人的引導

PARTIAL 交給人,Critical 進入重新設計,Important 或 Minor 進入修復,因預算或 circuit 停止時留下停止原因。

  1. anti-deception · 分數修正src/validator資料: 修正後的判定判定路由src/reducer

    沒有成功執行的 PASS 改為 FAIL,執行相關分數依確定性 QA 修正。其他規則是有條件的修正,不是真實性的一般證明。

  2. 判定路由src/reducer執行 · 判定: PARTIAL 確認遊戲提案 · 引導

    PARTIAL 會等待人確認。

  3. 判定路由src/reducer執行 · 判定: 重新設計 · 修復src/dispatcher/live.ts

    在 FAIL 與 REJECT 中,Critical 退回 Planner 重新設計,Important 或 Minor 則作為修正回饋交給 Builder,全部以 dispatcher 的 effect 執行。

  4. 判定路由src/reducer資料: 完成完成 · PASS 或停止原因session done

    PASS 以 done 結束工作階段。因預算與 circuit 而停止也以 done 結束,但保留停止原因,因此 done 不一定是 PASS。

  5. 遊戲提案 · 引導執行 · 判定: 提案 · 引導寫入 inbox 命令packages/studio

    在 Studio 中輸入一句話的遊戲提案與自然語言引導,Studio 將命令寫入 inbox。Studio 從不直接編輯 transcript。

重播與觀測

從 transcript 重建狀態時不執行任何 effect,Studio 讀取同一份記錄來顯示。

  1. transcript.jsonl · append-onlysrc/transcript資料: 新事件 · 重播事件迴圈 · 重播 · tailsrc/loop/coordinator.ts

    writer 驗證 schema、指定 ULID 與時間後附加寫入。重播時,過去的事件只做 reduce,其 effect 不會再次執行。

  2. 事件迴圈 · 重播 · tailsrc/loop/coordinator.ts執行 · 判定: 依序 reduce狀態 → 下一個 effectsrc/reducer

    即時事件從佇列中一次 reduce 一個,維持每個事件的 effect 順序;分派本身以非同步執行。

  3. transcript.jsonl · append-onlysrc/transcript觀測 · 回報: 讀取 · SSE事件 · 產出物檢視packages/studio

    Studio 讀取 transcript 與產出物,透過 SSE 顯示進度、指標與產出物。這不是傳送到遠端服務的遙測。

所有連線以相同粗細顯示。選擇一個流程,即只突顯其路徑,並標出步驟編號。

  • 實線 · 輸入、結果與記錄的流向
  • 虛線 · 執行、判定、請求
  • 長點劃線 · 觀測與回報,與判定分開
  • 粗黑線 · 所選流程;數字表示順序
  • 方框 · 程式碼或狀態邊界,名稱在標題列
  • 內層小框 · 該邊界的元件
  • 虛線框 · 該邊界之外
  • 橘色外框 · 模型做出判斷之處
  • 事件迴圈 · reducer · dispatcher
  • 記錄 · 設定 · 產出物
  • 確定性檢查 · 校正
  • Studio · actor

依據公開提交 f5e17c0 的程式碼路徑繪製。actor 是執行環境中的執行角色,與建構本儲存庫所用的程式開發代理不同。

狀態的來源
transcript 是狀態的來源,reducer 是純函式。只有 dispatcher 執行副作用(執行 actor、QA、寫入檔案),因此重播只重建狀態,不產生副作用。
重播的範圍
重播得到的是相同的狀態,並不會讓 LLM 的生成或瀏覽器與網路的行為變得確定。
判定的範圍
執行 QA 只檢查已設定的檢查項目,Verifier 的分數只是依據的一個來源。兩者都不衡量遊戲的全部行為、趣味性或使用者滿意度。