
CRUMB
Generative Game Studio · Demo
從一句話的遊戲提案到可遊玩的草稿,代理的工作清楚可見,也可以介入。
CRUMB 是用於休閒遊戲原型製作的多代理工作室執行框架。
CRUMB vocabulary
- spec
- build
- artifact
- qa check
- ac predicate
- verifier
- routing
- circuit breaker
- budget
- intervention
- transcript
- anti-deception
- 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 則顯示事件、進度與產出物,並接受自然語言介入。
從公開儲存庫複製後在本機執行的示範。
從提案到遊玩
提案依序成為規格、建置與執行 QA。每一步都經過 transcript;actor 之間不互相呼叫。
遊戲提案 · 引導執行 · 判定: 提案 · 引導寫入 inbox 命令
packages/studio在 Studio 中輸入一句話的遊戲提案與自然語言引導,Studio 將命令寫入 inbox。Studio 從不直接編輯 transcript。
寫入 inbox 命令
packages/studio資料: user 事件事件迴圈 · 重播 · tailsrc/loop/coordinator.tscoordinator 讀取 inbox 命令,並以 user 事件記錄到 transcript。
事件迴圈 · 重播 · tail
src/loop/coordinator.ts執行 · 判定: 依序 reduce狀態 → 下一個 effectsrc/reducer即時事件從佇列中一次 reduce 一個,維持每個事件的 effect 順序;分派本身以非同步執行。
狀態 → 下一個 effect
src/reducer執行 · 判定: effect執行 effect · spawn actorsrc/dispatcher/live.tsreducer 是純函式,只決定狀態與下一個 effect:goal 選 Planner,spec 選 Builder,build 選 qa_check。
actor → 執行框架 · 模型
model-config · preset執行 · 判定: actor 設定src/dispatcher/live.ts由哪個執行框架、供應商與模型執行 actor,依 CLI 旗標 > 設定 > 預設集 > ambient > 備援 的順序決定。actor 並非固定於某個供應商。
執行 effect · spawn actor
src/dispatcher/live.ts執行 · 判定: 執行 PlannerPlanner Lead · 規格agent actor · CLIdispatcher 以投影後的輸入執行 Planner。有條件的研究經由 Planner 的研究計畫與證據交接繼續進行,在此架構圖中收合。
Planner Lead · 規格
agent actor · CLI資料: spectranscript.jsonl · append-onlysrc/transcriptPlanner 的規格成為 transcript 事件,reducer 據此選擇 Builder。actor 之間不互相呼叫。
執行 effect · spawn actor
src/dispatcher/live.ts執行 · 判定: 執行 BuilderBuilder · 撰寫遊戲agent actor · CLIdispatcher 執行 Builder。若同一 actor 持續失敗,circuit 會開啟並更換轉接器,失敗仍持續則停止。
Builder · 撰寫遊戲
agent actor · CLI資料: 檔案遊戲檔案artifacts/Builder 將進入點檔案、原始碼與素材寫成產出物。
Builder · 撰寫遊戲
agent actor · CLI資料: 建置記錄transcript.jsonl · append-onlysrc/transcriptbuild 事件與 artifact.created 連同產出物的識別資訊,記錄在 transcript 中。
執行 effect · spawn actor
src/dispatcher/live.ts執行 · 判定: qa_check執行 QA · 檢查dispatcher/qa-runner.tsbuild 事件之後,reducer 發出帶有產出物與建置識別資訊及驗收條件的 qa_check effect,由 dispatcher 執行。
遊戲檔案
artifacts/資料: 執行對象執行 QA · 檢查dispatcher/qa-runner.ts執行 QA 以程式碼與瀏覽器檢查實際執行產出物。預設逾時 120 秒是設定值。
執行 QA · 檢查
dispatcher/qa-runner.ts資料: qa.resulttranscript.jsonl · append-onlysrc/transcript無論成功或失敗,結果都記錄為 system qa.result 事件。即使檢查拋出例外,也會記錄含失敗欄位的結果。
驗證的信任邊界
執行 QA 是實際執行產出物所得的依據;Verifier 是依投影依據進行判定的模型。reducer 先調和兩者,再選擇下一條路徑。
執行 QA · 檢查
dispatcher/qa-runner.ts資料: qa.resulttranscript.jsonl · append-onlysrc/transcript無論成功或失敗,結果都記錄為 system qa.result 事件。即使檢查拋出例外,也會記錄含失敗欄位的結果。
transcript.jsonl · append-only
src/transcript資料: 僅限依據評判輸入投影src/dispatcher/live.tsVerifier 的輸入由最新的 goal、spec、build、qa.result 與 artifact.created,加上選取的研究證據投影而成。它縮小上下文;並不證明隔離或沒有洩漏。
評判輸入投影
src/dispatcher/live.ts資料: 評判輸入Verifier · 模型判定Verifier actordispatcher 以投影後的輸入執行 Verifier。
Verifier · 模型判定
Verifier actor資料: judge.scoretranscript.jsonl · append-onlysrc/transcriptVerifier 的判定記錄為 judge.score 事件。這是模型的判斷,不是關於執行的事實。
狀態 → 下一個 effect
src/reducer執行 · 判定: 分數 · QA 依據anti-deception · 分數修正src/validator收到 judge.score 時,reducer 將它連同 QA 結果、Builder 的供應商,以及研究計畫與證據,一起交給 anti-deception 檢查。
anti-deception · 分數修正
src/validator資料: 修正後的判定判定路由src/reducer沒有成功執行的 PASS 改為 FAIL,執行相關分數依確定性 QA 修正。其他規則是有條件的修正,不是真實性的一般證明。
判定路由
src/reducer資料: 完成完成 · PASS 或停止原因session donePASS 以 done 結束工作階段。因預算與 circuit 而停止也以 done 結束,但保留停止原因,因此 done 不一定是 PASS。
失敗與人的引導
PARTIAL 交給人,Critical 進入重新設計,Important 或 Minor 進入修復,因預算或 circuit 停止時留下停止原因。
anti-deception · 分數修正
src/validator資料: 修正後的判定判定路由src/reducer沒有成功執行的 PASS 改為 FAIL,執行相關分數依確定性 QA 修正。其他規則是有條件的修正,不是真實性的一般證明。
判定路由
src/reducer執行 · 判定: PARTIAL 確認遊戲提案 · 引導PARTIAL 會等待人確認。
判定路由
src/reducer執行 · 判定: 重新設計 · 修復src/dispatcher/live.ts在 FAIL 與 REJECT 中,Critical 退回 Planner 重新設計,Important 或 Minor 則作為修正回饋交給 Builder,全部以 dispatcher 的 effect 執行。
判定路由
src/reducer資料: 完成完成 · PASS 或停止原因session donePASS 以 done 結束工作階段。因預算與 circuit 而停止也以 done 結束,但保留停止原因,因此 done 不一定是 PASS。
遊戲提案 · 引導執行 · 判定: 提案 · 引導寫入 inbox 命令
packages/studio在 Studio 中輸入一句話的遊戲提案與自然語言引導,Studio 將命令寫入 inbox。Studio 從不直接編輯 transcript。
重播與觀測
從 transcript 重建狀態時不執行任何 effect,Studio 讀取同一份記錄來顯示。
transcript.jsonl · append-only
src/transcript資料: 新事件 · 重播事件迴圈 · 重播 · tailsrc/loop/coordinator.tswriter 驗證 schema、指定 ULID 與時間後附加寫入。重播時,過去的事件只做 reduce,其 effect 不會再次執行。
事件迴圈 · 重播 · tail
src/loop/coordinator.ts執行 · 判定: 依序 reduce狀態 → 下一個 effectsrc/reducer即時事件從佇列中一次 reduce 一個,維持每個事件的 effect 順序;分派本身以非同步執行。
transcript.jsonl · append-only
src/transcript觀測 · 回報: 讀取 · SSE事件 · 產出物檢視packages/studioStudio 讀取 transcript 與產出物,透過 SSE 顯示進度、指標與產出物。這不是傳送到遠端服務的遙測。
所有連線以相同粗細顯示。選擇一個流程,即只突顯其路徑,並標出步驟編號。
- 實線 · 輸入、結果與記錄的流向
- 虛線 · 執行、判定、請求
- 長點劃線 · 觀測與回報,與判定分開
- 粗黑線 · 所選流程;數字表示順序
- 方框 · 程式碼或狀態邊界,名稱在標題列
- 內層小框 · 該邊界的元件
- 虛線框 · 該邊界之外
- 橘色外框 · 模型做出判斷之處
- 事件迴圈 · reducer · dispatcher
- 記錄 · 設定 · 產出物
- 確定性檢查 · 校正
- Studio · actor
依據公開提交 f5e17c0 的程式碼路徑繪製。actor 是執行環境中的執行角色,與建構本儲存庫所用的程式開發代理不同。
- 狀態的來源
- transcript 是狀態的來源,reducer 是純函式。只有 dispatcher 執行副作用(執行 actor、QA、寫入檔案),因此重播只重建狀態,不產生副作用。
- 重播的範圍
- 重播得到的是相同的狀態,並不會讓 LLM 的生成或瀏覽器與網路的行為變得確定。
- 判定的範圍
- 執行 QA 只檢查已設定的檢查項目,Verifier 的分數只是依據的一個來源。兩者都不衡量遊戲的全部行為、趣味性或使用者滿意度。