Doar personajul pâine din logoul CRUMB: o felie de pâine zâmbitoare, mușcată din colțul din dreapta sus
Înapoi în sală

CRUMB

Generative Game Studio · Demo

De la ideea unui joc într-un rând la o schiță jucabilă, cu munca agenților la vedere și deschisă intervenției.

CRUMB este un cadru de tip studio multi-agent pentru prototiparea jocurilor casual.

Design și dezvoltare · construit cu agenți AI de programare

  • CLIDemo local
  • Studio webDemo local

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ții care construiesc un joc, ținuți separat de dovezile care îl judecă.

Un demo de studio local care duce ideea unui joc într-un rând prin specificație, build și verificări de execuție. Fiecare pas ajunge într-o transcriere JSONL, un reducer pur decide efectele următoare, iar doar dispatcherul execută efecte secundare. QA-ul de execuție și verdictul modelului sunt ținute separat pentru a decide între trecere, reproiectare, reparare și ghidare umană.

Pentru un joc propus într-un singur rând, agenții Claude Code, Codex și Gemini CLI colaborează prin Planner → Builder → QA determinist → Verifier, în timp ce CRUMB Studio arată evenimentele, progresul și artefactele și acceptă intervenții în limbaj natural.

Un demo care se clonează din depozitul public și rulează local.

Harta sistemului · desenată după căile de cod din commitul public f5e17c0
Sistemul de studio CRUMBO persoană propune și ghidează un joc din Studio, iar Studio scrie comenzi într-un inbox. Coordonatorul transmite în ordine reducerului evenimentele noi din inbox și din transcriere; reducerul pur decide starea și efectele următoare, iar doar dispatcherul execută efecte secundare. Specificația Planner, build-ul și artefactele Builder, rezultatul QA-ului de execuție și judecata Verifier devin toate evenimente de transcriere. Verifier primește doar dovezi proiectate, iar reducerul îi verifică și corectează scorul față de rezultatul QA: PASS încheie sesiunea, PARTIAL așteaptă o persoană, iar orice altceva revine pentru reproiectare sau reparare.Ideea jocului · ghidareO persoană, rulând localpackages/studioVizualizarea evenimentelor · artefactelorScrierea comenzilor în inboxsrc/transcripttranscript.jsonl · append-onlysrc/loop/coordinator.tsBucla de evenimente · reluare · tailsrc/reducerStare → efectele următoareRutarea verdictuluisession doneÎncheiat · PASS sau motiv de opriresrc/dispatcher/live.tsExecutarea efectelor · pornirea actorilorProiecția intrării judecătoruluimodel-config · presetActor → cadru · modelagent actor · CLIPlanner Lead · specificațieBuilder · scrie joculartifacts/Fișierele joculuidispatcher/qa-runner.tsQA de execuție · verificăriVerifier actorVerifier · verdictul modeluluisrc/validatorAnti-înșelăciune · corectarea scoruluiOameni · StudioControlul evenimentelortranscrierea este sursa stăriiAgenți de lucru · artefacteVerificare · decizie1idee · ghidare2evenimente user3reducere în ordine4efecte5configurarea actorului6rularea Planner7spec8rularea Builder9fișiere10înregistrarea build-ului11qa_check12ce rulează13qa.result1qa.result2doar dovezi3intrarea judecătorului4judge.score5scor · dovezi QA6verdict corectat7încheiat1verdict corectat2verificare PARTIAL3reproiectare · reparare4încheiat5idee · ghidare1evenimente noi · reluare2reducere în ordine3citire · SSE

De la idee la joc

O idee devine o specificație, un build și o rulare QA de execuție. Fiecare pas trece prin transcriere; actorii nu se apelează între ei.

  1. Ideea jocului · ghidareRulare · judecată: idee · ghidareScrierea comenzilor în inboxpackages/studio

    O idee de joc într-un rând și ghidarea în limbaj natural sunt introduse în Studio, care scrie comenzi în inbox. Studio nu editează niciodată direct transcrierea.

  2. Scrierea comenzilor în inboxpackages/studioDate: evenimente userBucla de evenimente · reluare · tailsrc/loop/coordinator.ts

    Coordonatorul citește comenzile din inbox și le înregistrează în transcriere ca evenimente user.

  3. Bucla de evenimente · reluare · tailsrc/loop/coordinator.tsRulare · judecată: reducere în ordineStare → efectele următoaresrc/reducer

    Evenimentele în timp real sunt reduse unul câte unul dintr-o coadă, păstrând ordinea efectelor fiecărui eveniment; dispatch-ul însuși rulează asincron.

  4. Stare → efectele următoaresrc/reducerRulare · judecată: efecteExecutarea efectelor · pornirea actorilorsrc/dispatcher/live.ts

    Reducerul este o funcție pură care decide doar starea și efectele următoare: un goal selectează Planner, un spec selectează Builder, un build un qa_check.

  5. Actor → cadru · modelmodel-config · presetRulare · judecată: configurarea actoruluisrc/dispatcher/live.ts

    Ce cadru, furnizor și model rulează un actor se stabilește în ordinea flag CLI > configurație > preset > ambient > fallback. Un actor nu este un furnizor fix.

  6. Executarea efectelor · pornirea actorilorsrc/dispatcher/live.tsRulare · judecată: rularea PlannerPlanner Lead · specificațieagent actor · CLI

    Dispatcherul rulează Planner cu intrarea proiectată. Cercetarea condiționată continuă prin planul de cercetare și predarea dovezilor de către Planner, pliate pe această hartă.

  7. Planner Lead · specificațieagent actor · CLIDate: spectranscript.jsonl · append-onlysrc/transcript

    Specificația Planner devine un eveniment de transcriere, iar reducerul selectează Builder pe baza ei. Actorii nu se apelează între ei.

  8. Executarea efectelor · pornirea actorilorsrc/dispatcher/live.tsRulare · judecată: rularea BuilderBuilder · scrie joculagent actor · CLI

    Dispatcherul rulează Builder. Dacă același actor tot eșuează, se deschide un circuit care schimbă adaptorul și se oprește dacă eșecurile continuă.

  9. Builder · scrie joculagent actor · CLIDate: fișiereFișierele joculuiartifacts/

    Builder scrie fișierul de intrare, sursele și resursele ca artefacte.

  10. Builder · scrie joculagent actor · CLIDate: înregistrarea build-uluitranscript.jsonl · append-onlysrc/transcript

    Evenimentul build și artifact.created sunt înregistrate în transcriere împreună cu identitatea artefactului.

  11. Executarea efectelor · pornirea actorilorsrc/dispatcher/live.tsRulare · judecată: qa_checkQA de execuție · verificăridispatcher/qa-runner.ts

    După un eveniment build, reducerul emite un efect qa_check care poartă identitatea artefactului și a build-ului și condițiile de acceptare, iar dispatcherul îl rulează.

  12. Fișierele joculuiartifacts/Date: ce ruleazăQA de execuție · verificăridispatcher/qa-runner.ts

    QA-ul de execuție rulează artefactul real cu verificări de cod și de browser. Timeoutul implicit de 120 de secunde este o valoare de configurare.

  13. QA de execuție · verificăridispatcher/qa-runner.tsDate: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Cu succes sau cu eșec, rezultatul este înregistrat ca eveniment de sistem qa.result. Chiar dacă verificarea aruncă o excepție, este înregistrat un rezultat cu câmpurile eșuate.

Granița de încredere a verificării

QA-ul de execuție este o dovadă obținută prin rularea efectivă a artefactului; Verifier este un model care judecă dovezi proiectate. Reducerul le reconciliază pe cele două înainte de a alege calea următoare.

  1. QA de execuție · verificăridispatcher/qa-runner.tsDate: qa.resulttranscript.jsonl · append-onlysrc/transcript

    Cu succes sau cu eșec, rezultatul este înregistrat ca eveniment de sistem qa.result. Chiar dacă verificarea aruncă o excepție, este înregistrat un rezultat cu câmpurile eșuate.

  2. transcript.jsonl · append-onlysrc/transcriptDate: doar doveziProiecția intrării judecătoruluisrc/dispatcher/live.ts

    Intrarea Verifier este proiectată din cele mai recente goal, spec, build, qa.result și artifact.created, plus dovezile de cercetare selectate. Restrânge contextul; nu dovedește izolarea sau absența scurgerilor.

  3. Proiecția intrării judecătoruluisrc/dispatcher/live.tsDate: intrarea judecătoruluiVerifier · verdictul modeluluiVerifier actor

    Dispatcherul rulează Verifier cu intrarea proiectată.

  4. Verifier · verdictul modeluluiVerifier actorDate: judge.scoretranscript.jsonl · append-onlysrc/transcript

    Verdictul Verifier este înregistrat ca eveniment judge.score. Este judecata unui model, nu un fapt despre execuție.

  5. Stare → efectele următoaresrc/reducerRulare · judecată: scor · dovezi QAAnti-înșelăciune · corectarea scoruluisrc/validator

    La judge.score, reducerul îl transmite verificării anti-înșelăciune împreună cu rezultatul QA, furnizorul Builder și planul și dovezile de cercetare.

  6. Anti-înșelăciune · corectarea scoruluisrc/validatorDate: verdict corectatRutarea verdictuluisrc/reducer

    Un PASS fără o execuție reușită devine FAIL, iar scorul legat de execuție este corectat din QA-ul determinist. Celelalte reguli sunt corecții condiționate, nu o dovadă generală a veridicității.

  7. Rutarea verdictuluisrc/reducerDate: încheiatÎncheiat · PASS sau motiv de opriresession done

    PASS încheie sesiunea ca done. Opririle din cauza bugetului și a circuitului se încheie tot ca done, dar își păstrează motivul opririi, așa că done nu înseamnă mereu PASS.

Eșec și ghidare umană

PARTIAL merge la o persoană, Critical la reproiectare, Important sau Minor la reparare, iar opririle din cauza bugetului sau a circuitului lasă un motiv de oprire.

  1. Anti-înșelăciune · corectarea scoruluisrc/validatorDate: verdict corectatRutarea verdictuluisrc/reducer

    Un PASS fără o execuție reușită devine FAIL, iar scorul legat de execuție este corectat din QA-ul determinist. Celelalte reguli sunt corecții condiționate, nu o dovadă generală a veridicității.

  2. Rutarea verdictuluisrc/reducerRulare · judecată: verificare PARTIALIdeea jocului · ghidare

    PARTIAL așteaptă verificarea unei persoane.

  3. Rutarea verdictuluisrc/reducerRulare · judecată: reproiectare · repararesrc/dispatcher/live.ts

    Dintre FAIL și REJECT, Critical revine la Planner pentru reproiectare, iar Important sau Minor la Builder ca feedback de corectare, toate rulate ca efecte ale dispatcherului.

  4. Rutarea verdictuluisrc/reducerDate: încheiatÎncheiat · PASS sau motiv de opriresession done

    PASS încheie sesiunea ca done. Opririle din cauza bugetului și a circuitului se încheie tot ca done, dar își păstrează motivul opririi, așa că done nu înseamnă mereu PASS.

  5. Ideea jocului · ghidareRulare · judecată: idee · ghidareScrierea comenzilor în inboxpackages/studio

    O idee de joc într-un rând și ghidarea în limbaj natural sunt introduse în Studio, care scrie comenzi în inbox. Studio nu editează niciodată direct transcrierea.

Reluare și observare

Reconstruirea stării din transcriere nu rulează niciun efect, iar Studio citește aceeași înregistrare pentru a o afișa.

  1. transcript.jsonl · append-onlysrc/transcriptDate: evenimente noi · reluareBucla de evenimente · reluare · tailsrc/loop/coordinator.ts

    Scriitorul validează schema, atribuie un ULID și o oră și adaugă la final. La reluare, evenimentele trecute sunt doar reduse; efectele lor nu sunt rulate din nou.

  2. Bucla de evenimente · reluare · tailsrc/loop/coordinator.tsRulare · judecată: reducere în ordineStare → efectele următoaresrc/reducer

    Evenimentele în timp real sunt reduse unul câte unul dintr-o coadă, păstrând ordinea efectelor fiecărui eveniment; dispatch-ul însuși rulează asincron.

  3. transcript.jsonl · append-onlysrc/transcriptObservare · raport: citire · SSEVizualizarea evenimentelor · artefactelorpackages/studio

    Studio citește transcrierea și artefactele și arată progresul, metricile și artefactele prin SSE. Nu este telemetrie trimisă unui serviciu la distanță.

Fiecare conexiune cu aceeași grosime. Alegeți un flux pentru a evidenția doar traseul lui, cu pași numerotați.

  • Continuă · direcția intrărilor, rezultatelor și înregistrărilor
  • Întreruptă · rulare, judecată, cerere
  • Puncte lungi · observare și raportare, separate de judecată
  • Linie neagră groasă · fluxul selectat; numerele dau ordinea
  • Casetă · graniță de cod sau de stare, cu numele în antet
  • Etichetă interioară · o componentă a acelei granițe
  • Casetă punctată · în afara acelei granițe
  • Contur portocaliu · locul în care decide un model
  • Bucla de evenimente · reducer · dispatcher
  • Înregistrări · configurare · artefacte
  • Verificări deterministe · corectare
  • Studio · actori

Desenat după căile de cod din commitul public f5e17c0. Actorii sunt roluri de rulare, distincte de agenții de programare folosiți pentru a construi acest depozit.

Sursa stării
Transcrierea este sursa stării, iar reducerul este o funcție pură. Doar dispatcherul execută efecte secundare (rularea actorilor, QA, scrierea fișierelor), așa că reluarea reconstruiește starea fără efecte.
Ce acoperă reluarea
Reluarea produce aceeași stare; nu face deterministe generările LLM sau comportamentul browserului și al rețelei.
Ce acoperă un verdict
QA-ul de execuție verifică doar verificările configurate, iar scorul Verifier este un singur canal de dovezi. Niciunul nu măsoară fiecare comportament al jocului, cât de distractiv este sau satisfacția utilizatorilor.