Karakter roti saja dari logo CRUMB: seiris roti tersenyum dengan satu gigitan di sudut kanan atas
Kembali ke ruang pamer

CRUMB

Generative Game Studio · Demo

Dari ide gim satu baris hingga draf yang dapat dimainkan, dengan pekerjaan agen terlihat dan dapat diintervensi.

CRUMB adalah harness studio multi-agen untuk pembuatan prototipe gim kasual.

Desain dan pengembangan · dibangun dengan agen pemrograman AI

  • CLIDemo lokal
  • Studio webDemo lokal

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

Agen yang membangun gim, dipisahkan dari bukti yang menilainya.

Demo studio lokal yang membawa ide gim satu baris melalui spesifikasi, build, dan pemeriksaan eksekusi. Setiap langkah tercatat di transkrip JSONL, reducer murni menentukan efek berikutnya, dan hanya dispatcher yang menjalankan efek samping. QA eksekusi dan putusan model dipisahkan untuk menentukan antara lolos, desain ulang, perbaikan, dan pengarahan manusia.

Ajukan ide gim dalam satu baris, lalu agen Claude Code, Codex, dan Gemini CLI berkolaborasi melalui Planner → Builder → QA deterministik → Verifier, sementara CRUMB Studio menampilkan event, progres, dan keluaran serta menerima intervensi dalam bahasa alami.

Demo yang di-clone dari repositori publik dan dijalankan secara lokal.

Peta sistem · digambar dari jalur kode pada commit publik f5e17c0
Sistem studio CRUMBSeseorang mengajukan dan mengarahkan gim dari Studio, dan Studio menulis perintah ke inbox. Coordinator meneruskan event baru dari inbox dan transkrip ke reducer secara berurutan; reducer murni menentukan status dan efek berikutnya, dan hanya dispatcher yang menjalankan efek samping. Spesifikasi Planner, build dan keluaran Builder, hasil QA eksekusi, dan penilaian Verifier semuanya menjadi event transkrip. Verifier hanya menerima bukti yang diproyeksikan, dan reducer memeriksa serta mengoreksi skornya terhadap hasil QA: PASS mengakhiri sesi, PARTIAL menunggu seseorang, dan selainnya kembali untuk desain ulang atau perbaikan.Ide gim · pengarahanSeseorang, berjalan lokalpackages/studioTampilan event · keluaranTulis perintah inboxsrc/transcripttranscript.jsonl · append-onlysrc/loop/coordinator.tsLoop event · replay · tailsrc/reducerStatus → efek berikutnyaPerutean putusansession doneSelesai · PASS atau alasan berhentisrc/dispatcher/live.tsJalankan efek · spawn actorProyeksi input penilaimodel-config · presetActor → harness · modelagent actor · CLIPlanner Lead · spesifikasiBuilder · menulis gimartifacts/Berkas gimdispatcher/qa-runner.tsQA eksekusi · pemeriksaanVerifier actorVerifier · putusan modelsrc/validatorAnti-penipuan · koreksi skorManusia · StudioKendali eventtranskrip adalah sumber statusAgen kerja · keluaranVerifikasi · keputusan1ajukan · arahkan2event pengguna3reduce berurutan4efek5penyiapan actor6jalankan Planner7spec8jalankan Builder9berkas10catatan build11qa_check12yang dijalankan13qa.result1qa.result2bukti saja3input penilai4judge.score5skor · bukti QA6putusan terkoreksi7selesai1putusan terkoreksi2pemeriksaan PARTIAL3desain ulang · perbaiki4selesai5ajukan · arahkan1event baru · replay2reduce berurutan3baca · SSE

Dari ide hingga bermain

Ide menjadi spesifikasi, build, dan eksekusi QA. Setiap langkah melewati transkrip; actor tidak saling memanggil.

  1. Ide gim · pengarahanEksekusi · penilaian: ajukan · arahkanTulis perintah inboxpackages/studio

    Ide gim satu baris dan pengarahan dalam bahasa alami dimasukkan di Studio, yang menulis perintah ke inbox. Studio tidak pernah mengedit transkrip secara langsung.

  2. Tulis perintah inboxpackages/studioData: event penggunaLoop event · replay · tailsrc/loop/coordinator.ts

    Coordinator membaca perintah inbox dan mencatatnya di transkrip sebagai event pengguna.

  3. Loop event · replay · tailsrc/loop/coordinator.tsEksekusi · penilaian: reduce berurutanStatus → efek berikutnyasrc/reducer

    Event langsung di-reduce satu per satu dari antrean, menjaga urutan efek setiap event; dispatch itu sendiri berjalan asinkron.

  4. Status → efek berikutnyasrc/reducerEksekusi · penilaian: efekJalankan efek · spawn actorsrc/dispatcher/live.ts

    Reducer adalah fungsi murni yang hanya menentukan status dan efek berikutnya: goal memilih Planner, spec memilih Builder, build memilih qa_check.

  5. Actor → harness · modelmodel-config · presetEksekusi · penilaian: penyiapan actorsrc/dispatcher/live.ts

    Harness, penyedia, dan model yang menjalankan actor ditentukan dengan urutan CLI flag > config > preset > ambient > fallback. Actor bukan penyedia yang tetap.

  6. Jalankan efek · spawn actorsrc/dispatcher/live.tsEksekusi · penilaian: jalankan PlannerPlanner Lead · spesifikasiagent actor · CLI

    Dispatcher menjalankan Planner dengan input yang diproyeksikan. Riset bersyarat berlanjut melalui rencana riset dan serah terima bukti Planner, yang dilipat pada peta ini.

  7. Planner Lead · spesifikasiagent actor · CLIData: spectranscript.jsonl · append-onlysrc/transcript

    Spesifikasi Planner menjadi event transkrip, dan reducer memilih Builder darinya. Actor tidak saling memanggil.

  8. Jalankan efek · spawn actorsrc/dispatcher/live.tsEksekusi · penilaian: jalankan BuilderBuilder · menulis gimagent actor · CLI

    Dispatcher menjalankan Builder. Bila actor yang sama terus gagal, circuit terbuka dan menukar adapter, dan berhenti bila kegagalan berlanjut.

  9. Builder · menulis gimagent actor · CLIData: berkasBerkas gimartifacts/

    Builder menulis berkas entri, sumber, dan aset sebagai keluaran.

  10. Builder · menulis gimagent actor · CLIData: catatan buildtranscript.jsonl · append-onlysrc/transcript

    Event build dan artifact.created dicatat di transkrip bersama identitas keluaran.

  11. Jalankan efek · spawn actorsrc/dispatcher/live.tsEksekusi · penilaian: qa_checkQA eksekusi · pemeriksaandispatcher/qa-runner.ts

    Setelah event build, reducer memancarkan efek qa_check yang membawa identitas keluaran dan build serta syarat penerimaan, lalu dispatcher menjalankannya.

  12. Berkas gimartifacts/Data: yang dijalankanQA eksekusi · pemeriksaandispatcher/qa-runner.ts

    QA eksekusi menjalankan keluaran sebenarnya dengan pemeriksaan kode dan browser. Timeout bawaan 120 detik adalah nilai konfigurasi.

  13. QA eksekusi · pemeriksaandispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Berhasil atau gagal, hasilnya dicatat sebagai event qa.result sistem. Bahkan bila pemeriksaan melempar exception, hasil dengan field yang gagal tetap dicatat.

Batas kepercayaan verifikasi

QA eksekusi adalah bukti dari benar-benar menjalankan keluaran; Verifier adalah model yang menilai bukti yang diproyeksikan. Reducer merekonsiliasi keduanya sebelum memilih jalur berikutnya.

  1. QA eksekusi · pemeriksaandispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Berhasil atau gagal, hasilnya dicatat sebagai event qa.result sistem. Bahkan bila pemeriksaan melempar exception, hasil dengan field yang gagal tetap dicatat.

  2. transcript.jsonl · append-onlysrc/transcriptData: bukti sajaProyeksi input penilaisrc/dispatcher/live.ts

    Input Verifier diproyeksikan dari goal, spec, build, qa.result, dan artifact.created terbaru ditambah bukti riset terpilih. Ini mempersempit konteks; ini tidak membuktikan isolasi atau tiadanya kebocoran.

  3. Proyeksi input penilaisrc/dispatcher/live.tsData: input penilaiVerifier · putusan modelVerifier actor

    Dispatcher menjalankan Verifier dengan input yang diproyeksikan.

  4. Verifier · putusan modelVerifier actorData: judge.scoretranscript.jsonl · append-onlysrc/transcript

    Putusan Verifier dicatat sebagai event judge.score. Ini penilaian model, bukan fakta tentang eksekusi.

  5. Status → efek berikutnyasrc/reducerEksekusi · penilaian: skor · bukti QAAnti-penipuan · koreksi skorsrc/validator

    Saat judge.score masuk, reducer meneruskannya ke pemeriksaan anti-penipuan bersama hasil QA, penyedia Builder, serta rencana dan bukti riset.

  6. Anti-penipuan · koreksi skorsrc/validatorData: putusan terkoreksiPerutean putusansrc/reducer

    PASS tanpa eksekusi yang berhasil menjadi FAIL, dan skor terkait eksekusi dikoreksi dari QA deterministik. Aturan lainnya adalah koreksi bersyarat, bukan bukti umum kejujuran.

  7. Perutean putusansrc/reducerData: selesaiSelesai · PASS atau alasan berhentisession done

    PASS mengakhiri sesi sebagai done. Penghentian karena anggaran dan circuit juga berakhir sebagai done tetapi menyimpan alasan berhentinya, sehingga done tidak selalu PASS.

Kegagalan dan pengarahan manusia

PARTIAL menuju seseorang, Critical ke desain ulang, Important atau Minor ke perbaikan, dan penghentian karena anggaran atau circuit meninggalkan alasan berhenti.

  1. Anti-penipuan · koreksi skorsrc/validatorData: putusan terkoreksiPerutean putusansrc/reducer

    PASS tanpa eksekusi yang berhasil menjadi FAIL, dan skor terkait eksekusi dikoreksi dari QA deterministik. Aturan lainnya adalah koreksi bersyarat, bukan bukti umum kejujuran.

  2. Perutean putusansrc/reducerEksekusi · penilaian: pemeriksaan PARTIALIde gim · pengarahan

    PARTIAL menunggu seseorang memeriksa.

  3. Perutean putusansrc/reducerEksekusi · penilaian: desain ulang · perbaikisrc/dispatcher/live.ts

    Di antara FAIL dan REJECT, Critical kembali ke Planner untuk desain ulang dan Important atau Minor ke Builder sebagai umpan balik perbaikan, semuanya dijalankan sebagai efek dispatcher.

  4. Perutean putusansrc/reducerData: selesaiSelesai · PASS atau alasan berhentisession done

    PASS mengakhiri sesi sebagai done. Penghentian karena anggaran dan circuit juga berakhir sebagai done tetapi menyimpan alasan berhentinya, sehingga done tidak selalu PASS.

  5. Ide gim · pengarahanEksekusi · penilaian: ajukan · arahkanTulis perintah inboxpackages/studio

    Ide gim satu baris dan pengarahan dalam bahasa alami dimasukkan di Studio, yang menulis perintah ke inbox. Studio tidak pernah mengedit transkrip secara langsung.

Pemutaran ulang dan observasi

Membangun ulang status dari transkrip tidak menjalankan efek apa pun, dan Studio membaca catatan yang sama untuk menampilkannya.

  1. transcript.jsonl · append-onlysrc/transcriptData: event baru · replayLoop event · replay · tailsrc/loop/coordinator.ts

    Writer memvalidasi skema, memberikan ULID dan waktu, lalu menambahkannya. Saat pemutaran ulang, event lama hanya di-reduce; efeknya tidak dijalankan lagi.

  2. Loop event · replay · tailsrc/loop/coordinator.tsEksekusi · penilaian: reduce berurutanStatus → efek berikutnyasrc/reducer

    Event langsung di-reduce satu per satu dari antrean, menjaga urutan efek setiap event; dispatch itu sendiri berjalan asinkron.

  3. transcript.jsonl · append-onlysrc/transcriptObservasi · laporan: baca · SSETampilan event · keluaranpackages/studio

    Studio membaca transkrip dan keluaran lalu menampilkan progres, metrik, dan keluaran melalui SSE. Ini bukan telemetri yang dikirim ke layanan jarak jauh.

Setiap koneksi dengan bobot yang sama. Pilih alur untuk menyorot hanya jalurnya, dengan langkah bernomor.

  • Garis utuh · arah input, hasil, dan catatan
  • Garis putus · eksekusi, penilaian, permintaan
  • Titik panjang · observasi dan pelaporan, terpisah dari penilaian
  • Garis hitam tebal · alur yang dipilih; angka menunjukkan urutan
  • Kotak · batas kode atau status, namanya di bagian kepala
  • Chip dalam · komponen dari batas itu
  • Kotak bertitik · di luar batas itu
  • Garis tepi oranye · tempat model memutuskan
  • Loop event · reducer · dispatcher
  • Catatan · penyiapan · keluaran
  • Pemeriksaan deterministik · koreksi
  • Studio · actor

Digambar dari jalur kode pada commit publik f5e17c0. Actor adalah peran saat runtime, berbeda dari agen pemrograman yang dipakai untuk membangun repositori ini.

Sumber status
Transkrip adalah sumber status dan reducer adalah fungsi murni. Hanya dispatcher yang menjalankan efek samping (menjalankan actor, QA, menulis berkas), sehingga pemutaran ulang membangun ulang status tanpa efek.
Cakupan pemutaran ulang
Pemutaran ulang menghasilkan status yang sama; ini tidak membuat pembuatan oleh LLM atau perilaku browser dan jaringan menjadi deterministik.
Cakupan putusan
QA eksekusi hanya memeriksa pemeriksaan yang dikonfigurasi, dan skor Verifier adalah satu saluran bukti. Keduanya tidak mengukur setiap perilaku gim, keseruan, atau kepuasan pengguna.