
CRUMB
Generative Game Studio · Demo
Yhden rivin peli-ideasta pelattavaan luonnokseen, agenttien työ näkyvillä ja ohjattavissa.
CRUMB on moniagenttinen studiokehys kevyiden pelien prototypointiin.
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
Pelin rakentavat agentit, erillään näytöstä, jolla se arvioidaan.
Paikallinen studiodemo, joka vie yhden rivin peli-idean määrittelyn, koonnin ja suoritustarkistusten läpi. Jokainen vaihe päätyy JSONL-transkriptiin, puhdas reducer-funktio päättää seuraavat vaikutukset, ja vain dispatcher suorittaa sivuvaikutukset. Suoritus-QA ja mallin tuomio pidetään erillään, kun valitaan läpäisyn, uudelleensuunnittelun, korjauksen ja ihmisen ohjauksen välillä.
Kuvaile peli yhdellä rivillä, ja Claude Code-, Codex- ja Gemini CLI -agentit työskentelevät yhdessä järjestyksessä Planner → Builder → deterministinen QA → Verifier, samalla kun CRUMB Studio näyttää tapahtumat, edistymisen ja artefaktit ja ottaa vastaan luonnollisen kielen ohjausta.
Demo, joka kloonataan julkisesta repositoriosta ja ajetaan paikallisesti.
Ideasta pelattavaksi
Ideasta tulee määrittely, koonti ja suoritus-QA-ajo. Jokainen vaihe kulkee transkriptin kautta; toimijat eivät kutsu toisiaan.
Peli-idea · ohjausSuoritus · arvio: idea · ohjausKomennot inboxiin
packages/studioYhden rivin peli-idea ja luonnollisen kielen ohjaus syötetään Studioon, joka kirjoittaa komennot inboxiin. Studio ei koskaan muokkaa transkriptia suoraan.
Komennot inboxiin
packages/studioData: käyttäjätapahtumatTapahtumasilmukka · uudelleentoisto · seurantasrc/loop/coordinator.tsCoordinator lukee inboxin komennot ja kirjaa ne transkriptiin käyttäjätapahtumina.
Tapahtumasilmukka · uudelleentoisto · seuranta
src/loop/coordinator.tsSuoritus · arvio: redusointi järjestyksessäTila → seuraavat vaikutuksetsrc/reducerLive-tapahtumat redusoidaan yksi kerrallaan jonosta, jolloin kunkin tapahtuman vaikutukset pysyvät järjestyksessä; itse välitys ajetaan asynkronisesti.
Tila → seuraavat vaikutukset
src/reducerSuoritus · arvio: vaikutuksetVaikutusten suoritus · toimijoiden käynnistyssrc/dispatcher/live.tsReducer on puhdas funktio, joka päättää vain tilan ja seuraavat vaikutukset: tavoite valitsee Plannerin, määrittely Builderin, koonti qa_check-tarkistuksen.
Toimija → kehys · malli
model-config · presetSuoritus · arvio: toimijan asetussrc/dispatcher/live.tsMikä kehys, mallitoimittaja ja malli ajaa toimijaa, ratkaistaan järjestyksessä CLI-valitsin > config > preset > ambient > fallback. Toimija ei ole kiinteä mallitoimittaja.
Vaikutusten suoritus · toimijoiden käynnistys
src/dispatcher/live.tsSuoritus · arvio: Plannerin ajoPlanner Lead · määrittelyagent actor · CLIDispatcher ajaa Plannerin projisoidulla syötteellä. Ehdollinen tutkimus jatkuu Plannerin tutkimussuunnitelman ja näytön luovutuksen kautta, ja se on tällä kartalla taitettu piiloon.
Planner Lead · määrittely
agent actor · CLIData: spectranscript.jsonl · append-onlysrc/transcriptPlannerin määrittelystä tulee transkriptitapahtuma, ja reducer valitsee sen perusteella Builderin. Toimijat eivät kutsu toisiaan.
Vaikutusten suoritus · toimijoiden käynnistys
src/dispatcher/live.tsSuoritus · arvio: Builderin ajoBuilder · kirjoittaa pelinagent actor · CLIDispatcher ajaa Builderin. Jos sama toimija epäonnistuu toistuvasti, katkaisija laukeaa ja vaihtaa sovittimen, ja ajo pysähtyy, jos epäonnistumiset jatkuvat.
Builder · kirjoittaa pelin
agent actor · CLIData: tiedostotPelitiedostotartifacts/Builder kirjoittaa aloitustiedoston, lähdekoodit ja resurssit artefakteina.
Builder · kirjoittaa pelin
agent actor · CLIData: koontikirjaustranscript.jsonl · append-onlysrc/transcriptKoontitapahtuma ja artifact.created kirjataan transkriptiin artefaktin tunnisteen kanssa.
Vaikutusten suoritus · toimijoiden käynnistys
src/dispatcher/live.tsSuoritus · arvio: qa_checkSuoritus-QA · tarkistuksetdispatcher/qa-runner.tsKoontitapahtuman jälkeen reducer lähettää qa_check-vaikutuksen, joka kantaa artefaktin ja koonnin tunnisteet ja hyväksymisehdot, ja dispatcher ajaa sen.
Pelitiedostot
artifacts/Data: mitä ajetaanSuoritus-QA · tarkistuksetdispatcher/qa-runner.tsSuoritus-QA ajaa varsinaisen artefaktin koodi- ja selaintarkistuksilla. 120 sekunnin oletusaikakatkaisu on konfiguraatioarvo.
Suoritus-QA · tarkistukset
dispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcriptOnnistui tai epäonnistui, tulos kirjataan järjestelmän qa.result-tapahtumana. Vaikka tarkistus heittäisi poikkeuksen, kirjataan tulos, jossa on epäonnistumista kuvaavat kentät.
Todentamisen luottamusraja
Suoritus-QA on näyttöä artefaktin todellisesta ajamisesta; Verifier on malli, joka arvioi projisoitua näyttöä. Reducer sovittaa nämä kaksi yhteen ennen seuraavan polun valintaa.
Suoritus-QA · tarkistukset
dispatcher/qa-runner.tsData: qa.resulttranscript.jsonl · append-onlysrc/transcriptOnnistui tai epäonnistui, tulos kirjataan järjestelmän qa.result-tapahtumana. Vaikka tarkistus heittäisi poikkeuksen, kirjataan tulos, jossa on epäonnistumista kuvaavat kentät.
transcript.jsonl · append-only
src/transcriptData: vain näyttöTuomarin syötteen projektiosrc/dispatcher/live.tsVerifierin syöte projisoidaan viimeisimmästä tavoitteesta, määrittelystä, koonnista, qa.resultista ja artifact.createdista sekä valitusta tutkimusnäytöstä. Se rajaa kontekstia; se ei todista eristystä tai vuotamattomuutta.
Tuomarin syötteen projektio
src/dispatcher/live.tsData: tuomarin syöteVerifier · mallin tuomioVerifier actorDispatcher ajaa Verifierin projisoidulla syötteellä.
Verifier · mallin tuomio
Verifier actorData: judge.scoretranscript.jsonl · append-onlysrc/transcriptVerifierin tuomio kirjataan judge.score-tapahtumana. Se on mallin arvio, ei tosiasia suorituksesta.
Tila → seuraavat vaikutukset
src/reducerSuoritus · arvio: pisteet · QA-näyttöHarhautuksen esto · pisteiden korjaussrc/validatorjudge.score-tapahtumassa reducer välittää sen harhautuksen estoon yhdessä QA-tuloksen, Builderin mallitoimittajan sekä tutkimussuunnitelman ja -näytön kanssa.
Harhautuksen esto · pisteiden korjaus
src/validatorData: korjattu tuomioTuomion reitityssrc/reducerPASS ilman onnistunutta suoritusta muuttuu FAILiksi, ja suoritukseen liittyvä pistemäärä korjataan deterministisen QA:n mukaan. Muut säännöt ovat ehdollisia korjauksia, eivät yleinen todiste totuudellisuudesta.
Tuomion reititys
src/reducerData: valmisValmis · PASS tai pysähtymissyysession donePASS päättää istunnon tilaan done. Budjetti- ja katkaisijapysähdykset päättyvät myös tilaan done mutta säilyttävät pysähtymissyynsä, joten done ei aina ole PASS.
Epäonnistuminen ja ihmisen ohjaus
PARTIAL menee ihmiselle, Critical uudelleensuunnitteluun, Important tai Minor korjaukseen, ja budjetti- tai katkaisijapysähdykset jättävät pysähtymissyyn.
Harhautuksen esto · pisteiden korjaus
src/validatorData: korjattu tuomioTuomion reitityssrc/reducerPASS ilman onnistunutta suoritusta muuttuu FAILiksi, ja suoritukseen liittyvä pistemäärä korjataan deterministisen QA:n mukaan. Muut säännöt ovat ehdollisia korjauksia, eivät yleinen todiste totuudellisuudesta.
Tuomion reititys
src/reducerSuoritus · arvio: PARTIAL-tarkistusPeli-idea · ohjausPARTIAL odottaa ihmisen tarkistusta.
Tuomion reititys
src/reducerSuoritus · arvio: uudelleensuunnittelu · korjaussrc/dispatcher/live.tsTuomioista FAIL ja REJECT Critical palaa Plannerille uudelleensuunniteltavaksi ja Important tai Minor Builderille korjauspalautteeksi, kaikki dispatcherin vaikutuksina ajettuina.
Tuomion reititys
src/reducerData: valmisValmis · PASS tai pysähtymissyysession donePASS päättää istunnon tilaan done. Budjetti- ja katkaisijapysähdykset päättyvät myös tilaan done mutta säilyttävät pysähtymissyynsä, joten done ei aina ole PASS.
Peli-idea · ohjausSuoritus · arvio: idea · ohjausKomennot inboxiin
packages/studioYhden rivin peli-idea ja luonnollisen kielen ohjaus syötetään Studioon, joka kirjoittaa komennot inboxiin. Studio ei koskaan muokkaa transkriptia suoraan.
Uudelleentoisto ja havainnointi
Tilan uudelleenrakentaminen transkriptista ei aja vaikutuksia, ja Studio näyttää saman kirjauksen lukemalla sen.
transcript.jsonl · append-only
src/transcriptData: uudet tapahtumat · uudelleentoistoTapahtumasilmukka · uudelleentoisto · seurantasrc/loop/coordinator.tsKirjoittaja validoi skeeman, antaa ULID-tunnisteen ja ajan ja lisää tapahtuman loppuun. Uudelleentoistossa menneet tapahtumat vain redusoidaan; niiden vaikutuksia ei ajeta uudelleen.
Tapahtumasilmukka · uudelleentoisto · seuranta
src/loop/coordinator.tsSuoritus · arvio: redusointi järjestyksessäTila → seuraavat vaikutuksetsrc/reducerLive-tapahtumat redusoidaan yksi kerrallaan jonosta, jolloin kunkin tapahtuman vaikutukset pysyvät järjestyksessä; itse välitys ajetaan asynkronisesti.
transcript.jsonl · append-only
src/transcriptHavainnointi · raportti: luku · SSETapahtuma- · artefaktinäkymäpackages/studioStudio lukee transkriptin ja artefaktit ja näyttää edistymisen, mittarit ja artefaktit SSE:n kautta. Se ei ole etäpalveluun lähetettävää telemetriaa.
Kaikki yhteydet samalla painolla. Valitse virta, niin vain sen polku korostuu numeroiduin vaihein.
- Yhtenäinen · syötteiden, tulosten ja kirjausten suunta
- Katkoviiva · suoritus, arvio, pyyntö
- Pitkät pisteet · havainnointi ja raportointi, erillään arviosta
- Paksu musta viiva · valittu virta; numerot kertovat järjestyksen
- Laatikko · koodin tai tilan raja, nimi otsakkeessa
- Sisälaatta · rajan komponentti
- Pisteviivalaatikko · rajan ulkopuolella
- Oranssi ääriviiva · kohta, jossa malli päättää
- Tapahtumasilmukka · reducer · dispatcher
- Kirjaukset · asetukset · artefaktit
- Deterministiset tarkistukset · korjaus
- Studio · toimijat
Piirretty julkisen commitin f5e17c0 koodipoluista. Toimijat ovat ajonaikaisia rooleja, erillään tämän repositorion rakentamiseen käytetyistä koodausagenteista.
- Tilan lähde
- Transkripti on tilan lähde ja reducer on puhdas funktio. Vain dispatcher suorittaa sivuvaikutukset (toimijoiden ajo, QA, tiedostojen kirjoitus), joten uudelleentoisto rakentaa tilan uudelleen ilman vaikutuksia.
- Mitä uudelleentoisto kattaa
- Uudelleentoisto tuottaa saman tilan; se ei tee LLM-generoinneista eikä selaimen ja verkon käyttäytymisestä determinististä.
- Mitä tuomio kattaa
- Suoritus-QA tarkistaa vain konfiguroidut tarkistukset, ja Verifierin pisteet ovat yksi näyttökanava. Kumpikaan ei mittaa jokaista pelin käyttäytymistä, hauskuutta tai käyttäjätyytyväisyyttä.