
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 决定下一步效果,只有 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 事件事件循环 · replay · tailsrc/loop/coordinator.tscoordinator 读取 inbox 命令,并作为 user 事件记录到 transcript。
事件循环 · replay · tail
src/loop/coordinator.ts运行 · 判定: 按顺序 reduce状态 → 下一步效果src/reducer实时事件从队列中逐个 reduce,保持每个事件的效果顺序;分派本身异步运行。
状态 → 下一步效果
src/reducer运行 · 判定: 效果执行效果 · spawn actorsrc/dispatcher/live.tsreducer 是纯函数,只决定状态和下一步效果:goal 选中 Planner,spec 选中 Builder,build 选中 qa_check。
actor → 执行框架 · 模型
model-config · preset运行 · 判定: actor 设置src/dispatcher/live.ts由哪个执行框架、提供商和模型运行 actor,按 CLI 标志 > 配置 > 预设 > ambient > 回退的顺序解析。actor 并不固定于某个提供商。
执行效果 · 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 之间不互相调用。
执行效果 · spawn actor
src/dispatcher/live.ts运行 · 判定: 运行 BuilderBuilder · 编写游戏agent actor · CLIdispatcher 运行 Builder。若同一 actor 持续失败,circuit 打开并更换 adapter;若仍然失败则停止。
Builder · 编写游戏
agent actor · CLI数据: 文件游戏文件artifacts/Builder 将入口文件、源码和资源作为产物写出。
Builder · 编写游戏
agent actor · CLI数据: 构建记录transcript.jsonl · append-onlysrc/transcriptbuild 事件和 artifact.created 连同产物的 identity 记录在 transcript 中。
执行效果 · spawn actor
src/dispatcher/live.ts运行 · 判定: qa_check执行 QA · 检查dispatcher/qa-runner.tsbuild 事件之后,reducer 发出一个携带产物与构建 identity 以及验收条件的 qa_check 效果,由 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 事件。这是模型的判断,不是关于执行的事实。
状态 → 下一步效果
src/reducer运行 · 判定: 分数 · QA 证据防欺骗 · 分数更正src/validator收到 judge.score 时,reducer 将其与 QA 结果、Builder 的提供商以及调研计划和证据一起交给防欺骗检查。
防欺骗 · 分数更正
src/validator数据: 更正后的判定判定路由src/reducer没有成功执行的 PASS 会改为 FAIL,与执行相关的分数依据确定性 QA 更正。其他规则是有条件的更正,并不普遍证明真实性。
判定路由
src/reducer数据: 完成完成 · PASS 或停止原因session donePASS 以 done 结束会话。因预算或 circuit 停止的也以 done 结束,但保留停止原因,因此 done 并不总是 PASS。
失败与人工引导
PARTIAL 交给人,Critical 进入重新设计,Important 或 Minor 进入修复,因预算或 circuit 停止时留下停止原因。
防欺骗 · 分数更正
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 效果执行。
判定路由
src/reducer数据: 完成完成 · PASS 或停止原因session donePASS 以 done 结束会话。因预算或 circuit 停止的也以 done 结束,但保留停止原因,因此 done 并不总是 PASS。
游戏构想 · 引导运行 · 判定: 构想 · 引导写入 inbox 命令
packages/studio在 Studio 中输入一句话游戏构想和自然语言引导,Studio 将命令写入 inbox。Studio 从不直接编辑 transcript。
重放与观测
从 transcript 重建状态时不执行任何效果,Studio 读取同一份记录进行展示。
transcript.jsonl · append-only
src/transcript数据: 新事件 · replay事件循环 · replay · tailsrc/loop/coordinator.tswriter 校验 schema,分配 ULID 和时间,然后追加写入。重放时,过去的事件只经过 reduce,不再执行其效果。
事件循环 · replay · tail
src/loop/coordinator.ts运行 · 判定: 按顺序 reduce状态 → 下一步效果src/reducer实时事件从队列中逐个 reduce,保持每个事件的效果顺序;分派本身异步运行。
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 的分数只是依据的一个来源。两者都不衡量游戏的全部行为、趣味性或用户满意度。