-
-
Real Twitch ballot: one agent-operated account; credited charge and labelled House alternatives.
-
Actual Twitch encounter: charge activation, author credit and the locked-direction telegraph.
-
The block collision exposes the axle: the authored flaw becomes executable counterplay.
-
The attachment breaks and its ability stops. Same author, actual agent-operated technical test.
-
Accepted encounter result and credited showbill. One operator account; genuine viewer acceptance remains pending.
Inspiration
Live chat can be a wonderful writer’s room. We wanted its contribution to survive longer than a poll result or a momentary distraction.
ARAGOZ takes inspiration from Egyptian Al-Aragoz hand puppetry and its relationship between audience and performer. Our original miniature theatre turns that relationship into a rule: every boast needs a BUT. The crowd gives a ridiculous villain its power and the weakness the performer can use to defeat it.
What it does
A viewer submits a round-coded command such as !make CODE charges at you BUT cannot turn once it starts. The host reviews supported contracts, chat votes, and the selected rule becomes a visible attachment on the boss.
The charge has wheels—and a commitment problem. Once it locks direction, the performer can bait it into a striped stage block. The impact exposes its axle. Strike the opening, break the assembly, and charging stops. The same author is credited when the rule is chosen, when it activates, when it breaks, and in the showbill.
Steam and delayed echo create different puzzles. Steam overheats after its burst sequence and exposes its valve. Echo records the performer’s movement, previews a translated route, then follows it; a stage-block collision exposes the mirror. Each encounter combines two different modules across two original boss shells.
A show has three acts. Encore keeps the immutable recipe; Remix replaces one module. Clearly labelled House Suggestions keep quiet channels playable, while account-free rehearsal and a complete solo House show let people learn the counterplay immediately.
How we built it with Codex
Codex helped turn the creative brief into the shared contracts, fixed-step combat, Twitch/server integration, original asset scripts, browser interface and validation. The work included concrete debugging: making a module break cancel damage in the same simulation step, protecting counter windows, preventing stale attempts from advancing a show, bounding proposal-compiler timeouts, and recovering an authenticated Twitch connection after a server restart.
Babylon.js renders locally packaged Blender GLBs. A pure TypeScript simulation advances at 60 Hz independently of React, rendering speed or network requests. Fastify, WebSockets and SQLite own broadcaster permissions, proposals, voting, deadlines and immutable recipes. The browser owns responsive movement and combat, with queued encounter events during a connection gap.
This preview’s live proposal path matches a strict supported grammar to six authored profiles. Runtime generative-model calls are disabled. An optional structured mapping/moderation path exists in source and has mocked tests, but has not been verified with real model calls. Codex-assisted development is separate from the game’s runtime behaviour.
Challenges
The difficult part was making authorship visible and executable. A drawback cannot be decorative text: it has to create a reachable opening, and a broken part has to remove both its geometry and its damage. Multiple modules also need time to finish their tells, hazards and promised counter windows without competing for the stage.
Live operation adds another kind of timing problem. Commands need fresh round codes, hard deadlines, replacement votes and duplicate protection. Interrupted authoring must restart honestly; a committed fight should remain responsive. We built separate recovery rules for those two moments.
Accomplishments
One genuine Twitch broadcaster account submitted a proposal and a vote, produced a credited charge module, and completed an accepted encounter with both modules broken. The same author appeared through selection, activation, break and result. The account and gameplay were agent-operated for this technical test; they are not a claim of genuine viewer acceptance.
The current source passed 173 unit/server checks, 31 browser checks and a fresh LinuxARM64 release build with 13 container startup/persistence/backup checks. Original Blender sources, rights records and measured 30-minute M1/OBS capture evidence are included. The measured 1080p30 presentation profile keeps the 60 Hz simulation unchanged; those OBS measurements retain their original source bounds. Exact sources, dates and limitations accompany the receipts in the repository.
Further genuine single-account hosted checks exercised interrupted authoring, explicit two-window takeover, retained offline progress and repeated server recovery. Findings led to fixes for a pause/upload race, phantom abandonment results and stale synchronization feedback. These remain operator technical checks, separate from genuine host/viewer acceptance.
What we learned
A useful creative constraint can make participation more interesting: asking for the weakness gives the streamer a response and the audience a payoff. We also learned to keep presentation and evidence separate. A clear House label, a named author and a visible missing wheel communicate more than a claim of unlimited generation.
What’s next
The next release gate is genuine broadcaster/viewer testing: whether first-time hosts discover the counters and viewers understand what their rule changed. Remaining real-provider lifecycle and multichannel cases are tracked separately. Full Arabic localization and additional mechanics come after that validation.
Built With
- babylon.js
- blender
- fastify
- ffmpeg
- node.js
- openai-codex
- playwright
- react
- sqlite
- twitch
- typescript
- vite
- vitest
- websockets

Log in or sign up for Devpost to join the conversation.