Gaimer är en skrivbordsapp som gör ett litet spel utifrån en beskrivning. Du skriver vad du vill ha, till exempel "Pong". Appen ber den AI-leverantör du har kopplat in om ett komplett spel i JavaScript, som den sparar och kör i en isolerad sida. Leverantören kan vara OpenAI med din egen API-nyckel eller Claude via ditt eget Claude Code. Gaimer har öppen källkod under MIT-licensen och körs på macOS, Windows, Linux och iOS.

Fabriken, alltså den agentdrivna mjukvarufabriken bakom den här sajten, slog ihop 49 pull requests i Gaimer den 24 och 25 september 2026. Det blev 76 commits sammanlagt och varje pull request förklarar varför den gjordes och vad som kontrollerades. Längre ner visar Tetris, Pong och Space Invaders vad den nya systemprompten gör. Varje spel gjordes en gång med varje prompt och alla sex går att spela här.

De 49 pull requests som slogs ihop i Gaimer den 24 och 25 september 2026, en ruta för varje, på en rad för varje del av artikeln som berättar vad de ändrade, med antalet för varje rad: öppna och spara spel (5); fel i spelen (6); kopplingen till Claude (9); säkerhet (4); städning (6); tester och CI (2)49 pull requests24–25 sepöppna och spara spel5fel i spelen6kopplingen till Claude9säkerhet4städning6tester och CI2Samma 49 pull requests, resten av delarna: den nya systemprompten (1); automatisk rättning (2); ändra det öppna spelet (2); appens ikon (1); mindre ändringar (11)per del av artikelnden nya systemprompten1automatisk rättning2ändra det öppna spelet2appens ikon1mindre ändringar11
De 49 pull requests som fabriken slog ihop i Gaimer den 24 och 25 september 2026, en ruta för varje, på en rad för varje del av artikeln som berättar vad de ändrade, i artikelns ordning och med antalet för varje rad. Den sista delen, om mindre ändringar, tar upp åtta av sina elva.

Vad som ändrades

Öppna och spara spel

Ett sparat spel kunde vägra att öppnas ("Missing required field: title") när spelets framsteg väl hade sparats, eftersom appen ibland tog dem för själva spelet. Frågan "Restore progress?" kom aldrig upp: dialogrutan som behövs för den var inte installerad. Nu öppnas ett sparat spel direkt i stället för efter en sekund. Blir ett nytt spel klart medan ett sparat är öppet visas det nya i stället. Appen frågar innan den raderar ett spel. Går framstegen inte att spara får du veta varför direkt.

Fel i spelen

Förut stoppade ett syntaxfel i spelkoden sidans enda skript: spelaren såg en mörk spelyta och inget felmeddelande. Nu körs spelets kod i ett eget skript och alla fel når appen. I WebKit, som appen körs i på macOS och iOS, syntes felen bara som "Script error." och i den byggda appen stoppade säkerhetspolicyn skriptet som rapporterar dem. Båda skripten laddas nu från data:-adresser och det löser båda problemen. Ett fel anges med rad och kolumn i spelets kod eller med en upplysning om att det hittades efter kodens slut. Kod som har klippts av mitt i ett uttryck ger nu ett syntaxfel.

Kopplingen till Claude

Förut kördes en hel Claude Code-session för varje spel. Nu blir det ett enkelt anrop där det mesta av användarens egen konfiguration hålls utanför. Misslyckas ett anrop visar appen nu varför i stället för "Exit code 1".

Claude-anropet för ett spel, före och efter städningen. Före: en hel Claude Code-session med Claude Codes egen systemprompt. Gaimers prompt klistrades in i användarens meddelande före beskrivningen, de inbyggda verktygen var på, användarens CLAUDE.md-filer, hooks, plugins, skills och MCP-servrar var med och sessionen sparades. Efter: ett enkelt anrop. Gaimers prompt är systemprompten och ligger i en egen fil, användarens meddelande är bara beskrivningen, de inbyggda verktygen är av, användarens CLAUDE.md-filer, hooks, plugins, skills och MCP-servrar hålls utanför och ingen session sparas. När användaren valde Claude startades upp till fyra inloggningsskal; nu kontrolleras inloggningen en gång. Tidsgränsen var 5 minuter, men anropet fortsatte ändå; nu är den 15 minuter och sedan stoppas anropetClaude-anropet för ett spelföre städningenen Claude Code-sessionefter städningenett enkelt anropsystempromptClaude Codes egenGaimers, i en filanvändarens meddelandeGaimers + beskrivningbara beskrivningeninbyggda verktygpåavanvändarens CLAUDE.md-filer, hooks,plugins, skills och MCP-servrarvar medhålls utanförsessionensparadessparas intenär användaren väljer Claudeupp till fyrainloggningeninloggningsskalkontrolleras en gångtidsgränsen5 minuter, men15 minuter,anropet fortsattesedan stoppas det
Så anropade Gaimer Claude för ett spel före städningen och så gör appen nu. En hel Claude Code-session blev ett enkelt anrop: Gaimers prompt är systemprompten, användarens meddelande är bara beskrivningen och varken användarens CLAUDE.md-filer, hooks, plugins, skills eller MCP-servrar följer med.

Säkerhet

Huvudfönstrets Content Security Policy tillåter inte längre anrop till Anthropics API eller bilder från alla https-adresser – appen använder inget av dem. Behörigheten att köra kommandon lät förut alla skript i fönstret köra alla kommandon med användarens rättigheter. Nu tillåter den bara de tre kommandorader som appen själv bygger. API-nyckeln till OpenAI låg i ett valv, men valvets lösenord och salt fanns i kodförrådet. Nu ligger nyckeln i systemets nyckelring.

Städning

Det som inte användes togs bort: ett HTTP-plugin som var inbyggt i appen men aldrig anropades (utan det har Rust-bygget 31 crates färre), rester från projektmallen, anslutningsdata som skrevs men aldrig lästes, metoder som aldrig anropades och två engångsmigreringar som inte längre hittade några gamla data. Beroendena uppdaterades inom de versioner som redan var tillåtna och då försvann alla 22 anmärkningar i paketgranskningen.

Tester och CI

Tester som inte kunde misslyckas byttes ut och nya tester skrevs där en regression skulle märkas av användaren. Testtäckningen får nu inte sjunka under de nivåer som hade nåtts, avrundade nedåt: 94 % av satserna, 89 % av grenarna, 90 % av funktionerna och 96 % av raderna. Antalet enhetstester ökade från 101 till 408. CI gick över från Node 20, som saknar stöd sedan den 30 april, till Node 24 och aktuella versioner av sina actions. Den har nu en token som bara kan läsa. Dessutom kontrollerar den formatering och lints i Rust-koden och bygger appen för Linux, macOS, Windows och iOS på varje pull request. Efter den sista sammanslagningen gick alla fyra byggena igenom.

Den nya systemprompten

Varje spel görs i ett enda anrop, utifrån Gaimers systemprompt och användarens beskrivning. Den gamla prompten sa hur svaret skulle se ut, var spelet körs, att det måste gå att styra med både tangentbord och pekskärm och hur spelet sparar och återställer sitt läge. Om hur ett spel ska se ut eller kännas sa den ingenting. Omskrivningen behåller allt det och lägger till avsnitt om utseende, spelkänsla och prestanda: en enhetlig stil, partiklar och en lätt skakning av skärmen, en startskärm, ett sparat rekord, en svårighetsgrad som ökar jämnt, ljud som skapas i koden, hastigheter som räknas per sekund och inte per bildruta samt pointer events, så att en mus fungerar lika bra som ett finger. Den ber om "några hundra rader" kod och prompten växte från 2 830 till 6 873 tecken. I pull requesten kallas den ett utkast att läsa, skrivet utan att någon AI-leverantör anropades och utan att något spel gjordes med den.

Automatisk rättning

Om ett nytt spel får ett fel redan när det startar skickas det nu tillbaka en gång till leverantören som skrev det. Det rättade spelet ersätter sedan det trasiga.

Ändra det öppna spelet

När ett spel är öppet ändrar beskrivningsrutan nu det spelet.

Ett nytt spel: beskrivningen i rutan skickas i ett anrop till AI-leverantören tillsammans med Gaimers systemprompt. Svaret tolkas som ett spel, sparas och körs i den isolerade sidan. Får spelet ett fel när det startar, alltså innan det är redo eller inom 5 sekunder därefter eller efter spelarens första inmatning, skickas det tillbaka en gång, med koden och felet, till leverantören som skrev det. Det rättade spelet ersätter det och sedan kan man spelaett nytt spelen beskrivningskrivs i rutan när inget spel är öppetett anrop till AI-leverantörenmed Gaimers systempromptsvaret tolkas som ett speloch sparas som ett nytt spelspelet körs i den isolerade sidani en egen ramfel när spelet startar?ett fel innan det är redo, eller inom5 s därefter eller efter första inmatningjanejskickas tillbaka en gångtill leverantören som skrev det,med koden och feletdet rättade spelet ersätter detett rättat spel skickas inte igenspelaDet öppna spelet: en ändring som skrivs i rutan skickas i ett anrop tillsammans med spelet och önskemålen bakom det. Svaret är antingen ändringsblock, som förs in i spelets kod, eller hela det ändrade spelet, som används som det är. Går blocken inte att använda ber appen om hela spelet, en gång. Det ändrade spelet blir en ny version, som körs och som också kan rättas en gång. Undo change går en version tillbaka och New game stänger speletdet öppna speleten ändring i rutannär ett spel är öppet ändrar rutan detett anrop med speletoch önskemålen bakom dettvå möjliga svarändringsblockförs in i kodenhela speletanvänds som det ärgår blocken inte att använda?då ber appen om hela spelet, en gången ny versionden körs och kan också rättas en gångUndo changegår en version tillbakaNew gamestänger spelet
Så lever ett spel i Gaimer efter städningen, enligt koden på appens main-gren: ett nytt spel med fel vid starten får en chans att rättas och rutan ändrar det öppna spelet en version i taget.

Appens ikon

Gaimer hade ingen egen ikon: appen använde Tauris standardikon. Den 25 september bad grundaren om en logotyp som visar spel gjorda med AI, i appens gröna färg och som SVG så att den går att skala till appikoner. En agent skrev fyra förslag direkt som SVG-kod, utan någon bildgenerator. Vart och ett bygger på en enda idé och agenten förhandsvisade dem i ikonstorlekar och i efterbildningar av Docken på macOS och av hemskärmen på en iPhone. Grundaren valde det första, Spark pad. Den sista pull requesten gjorde det till appens ikon på alla plattformar.

Logoförslag 1 och 2 av de fyra som en agent skrev som SVG till Gaimers ikon, vart och ett på appens mörka rundade ruta: 1. Spark pad (vald): En handkontroll vars knappar är en AI-gnista: spel, gjorda av AI. 2. Prompt: Markören efter en skriven prompt får liv som en pixelvarelse: en beskrivning blir ett spel.4 logoförslag25 sep1. Spark padvaldEn handkontroll varsknappar är en AI-gnista:spel, gjorda av AI.2. PromptMarkören efter en skriven promptfår liv som en pixelvarelse:en beskrivning blir ett spel.Logoförslag 3 och 4: 3. Say and play: En pratbubbla som rymmer en handkontroll: beskriv spelet, spela det sedan. 4. Pixel spark: AI-gnistan i 8-bitarspixlar, med armar som ett styrkors: AI som talar i spel.skrivna som SVG-kod3. Say and playEn pratbubbla som rymmer enhandkontroll: beskriv spelet,spela det sedan.4. Pixel sparkAI-gnistan i 8-bitarspixlar,med armar som ett styrkors:AI som talar i spel.
De fyra logotyper som en agent föreslog till Gaimers ikon den 25 september 2026. Varje logotyp är skriven som SVG-kod och visas här på appens mörka rundade ruta, som på en hemskärm, med sitt namn och den idé som agenten gav den. Grundaren valde den första.

Mindre ändringar

Varje AI-leverantör har nu en egen modell. Förut gällde ett enda val för båda, så när användaren bytte leverantör kunde en modell som valts för OpenAI skickas till Claude. Då gick det inte att göra något spel förrän en modell hade valts igen. Listorna har inte längre med modeller som inte kunde fungera, till exempel OpenAI:s modeller för tal och transkribering. Nu finns också nio GPT-5-modeller, med ett anrop anpassat för dem: inget temperaturvärde och en gräns för svaret som räknar in både resonemanget och spelet.

Ett spel fick inga tangenttryck förrän spelaren klickade på det. Om spelet avbryter klicket, som en del spel gjorda med den nya prompten gör, fick det inga alls. Nu får ett spel tangentbordsfokus när det är redo och när någon klickar på det. Beskrivningsrutan släpper fokus när en beskrivning har skickats. Den nya prompten sa till modellen att tangenttryck når ett spel först efter ett klick eller ett tryck. Den raden är borta, men de tre nya spelen i artikeln gjordes med den.

Förut startade spelet om när fönstret ändrade storlek eller telefonen vändes. Det spelaren inte hade sparat gick förlorat. Nu fortsätter spelet, skalat för att få plats, i den form det startade med: vänds telefonen från stående till liggande blir spelet mindre, med tomma fält på sidorna.

Så gjordes spelen

Varje spel gjordes precis som Gaimer gjorde spel med Claude när den nya prompten infördes: samma kommandorad, körd på samma sätt, med "Tetris", "Pong" eller "Space Invaders" som enda beskrivning och med den modell som Gaimer använder för Claude när ingen är vald. Bara systemprompten skiljer sig: den gamla, oförändrad sedan den 1 april, eller omskrivningen. Space Invaders gjordes den 26 september, de andra två den 25. Svaren tolkades med appens egen kod. Varje spel körs på en spelsida byggd som den i motsvarande version av appen, men utan sådant som bara appen har, till exempel sparfilerna.

Anropet bakom varje spel, med den gamla och den nya systemprompten: Tetris: före 245 s (29 720 utdata-tokens, 478 rader), efter 476 s (58 031 utdata-tokens, 545 rader); Pong: före 68 s (9 093 utdata-tokens, 219 rader), efter 204 s (22 030 utdata-tokens, 370 rader); Space Invaders: före 169 s (22 223 utdata-tokens, 526 rader), efter 322 s (38 167 utdata-tokens, 509 rader)anropet bakom varje speldåvarande gräns: 300 sTetrisföre245 s29 720 utdata-tokens · 478 raderefter476 s58 031 utdata-tokens · 545 raderPongföre68 s9 093 utdata-tokens · 219 raderefter204 s22 030 utdata-tokens · 370 raderSpace Invadersföre169 s22 223 utdata-tokens · 526 raderefter322 s38 167 utdata-tokens · 509 radermodellens tänkande ingår i utdata-tokensett spel per prompt och beskrivningVad de sex spelen har: alla tre spelen efter städningen har startskärm, rekord, ljud och styrning med både mus och pekskärm. Av de tre spelen före städningen har bara Space Invaders en startskärm. Inget av dem har rekord eller ljud och alla tre fungerar med pekskärm men inte med musvad varje spel harTetrisPongSpace Invadersföreefterföreefterföreefterstartskärmrekordljudmus och pekskärmtrycktrycktryckden nya prompten ber om alla fyra
Vad den nya systemprompten kostade i de två körningar som gjorde de sex spelen: Tetris och Pong den 25 september och Space Invaders den 26 september, på samma sätt. Ett anrop per spel och prompt, med anropets tid i skala, antalet utdata-tokens och antalet kodrader i spelet, samt vad varje spel har. De streckade linjerna visar den gräns på 300 sekunder som appen hade när den nya prompten infördes. Båda körningarna använde den gränsen och de första anropen för det nya Tetrisspelet och det nya Space Invaders-spelet drog över den. Ett spel per prompt och beskrivning, ingen systematisk jämförelse.

De första anropen för Tetris och Space Invaders med den nya prompten drog över appens dåvarande gräns på 300 sekunder och stoppades där, precis som appen skulle ha gjort. I Gaimer betydde det felet "Command timed out" och inget spel. Spelen här kommer i båda fallen från ett andra anrop som gjordes på samma sätt men utan gräns. Fabriken har sedan dess höjt gränsen till 15 minuter. Alla sex spelen startade utan fel, så inget av de tre nya behövde skickas tillbaka för rättning.

Knappen Spela startar spelet i stället för bilden av startskärmen. Sedan går tangenterna till spelet och inte till sidan. Ett spel i taget kan vara igång.

Före städningen Classic Tetris
Tetris före städningen, direkt när det har öppnats: ingen startskärm och den första biten faller redan ner i den tomma spelplanen. Till höger syns poäng, nivå, rader och nästa bit, längs nederkanten fem pekknappar. Spela i helskärm: Classic Tetris, före städningen Kod: Classic Tetris, före städningen Tetris före städningen, några drag in i spelet: fyra bitar ligger längst ner i spelplanen och en femte faller, med platsen där den kommer att landa markerad. Poängen är 102.
Efter städningen Neon Block Drop
Tetris efter städningen, på startskärmen: rubriken TETRIS över en svagt synlig spelplan, instruktioner för tangenter och pekskärm på två rader och "Tap or click to start" i gult. Spela i helskärm: Neon Block Drop, efter städningen Kod: Neon Block Drop, efter städningen Tetris efter städningen, några drag in i spelet: rundade bitar längst ner i en inramad spelplan, en bit som faller med landningsplatsen markerad, 108 poäng uppe till vänster och nästa bit uppe till höger.

Det gamla Tetrisspelet startar direkt. Längs nederkanten visas alltid fem pekknappar och spelet reagerar bara på touch-händelser, så med en mus händer ingenting. Det visar poäng, nivå, rader och nästa bit, markerar var biten kommer att landa och pausar när man trycker på P. Det nya kallade sig Neon Block Drop och skrev TETRIS på startskärmen. Det väntar på ett tryck, ett klick eller en tangent och ritar rundade block i en inramad spelplan. Pekknapparna visas först när någon rör vid skärmen. När en rad rensas hörs ett ljud, partiklar sprutar och skärmen skakar lite.

Före städningen Neon Pong
Pong före städningen, direkt när det har öppnats: ingen startskärm och bollen är redan i spel mellan en blå racket till vänster och en röd till höger. Ställningen är 0–0. Spela i helskärm: Neon Pong, före städningen Kod: Neon Pong, före städningen Pong före städningen en stund senare: datorns röda racket har tagit första poängen och det står 0–1. Bollen är i spel igen.
Efter städningen Neon Pong
Pong efter städningen, på startskärmen: mellan en lysande cyanfärgad racket och en lysande rosa står en ruta med NEON PONG, "Arrows/WASD or drag to move", "First to 7 wins" och "Tap or click to start". Spela i helskärm: Neon Pong, efter städningen Kod: Neon Pong, efter städningen Pong efter städningen, mitt i en bollväxling: den lysande bollen har just lämnat den rosa racketen och drar ett spår av partiklar efter sig. Raden överst visar ställningen 0 - 0.

Det gamla Pongspelet startar också direkt, med bollen redan i spel. Racketarna är enkla, platta rektanglar och spelet styrs med piltangenterna, W och S eller genom att man drar med fingret. Det har inget ljud. Det nya öppnar med en startskärm. Racketarna lyser, bollen sprutar partiklar där den träffar och längs överkanten visas poäng, rekord och nivå. Det har ljud, går att styra genom att dra med ett finger eller med musen och visar två pilknappar när någon har rört vid skärmen. Är skärmen högre än den är bred hamnar racketarna nertill och upptill.

Före städningen Space Invaders
Space Invaders före städningen, på startskärmen: rubriken SPACE INVADERS i grönt mot svart, "Press SPACE or TAP to start" i vitt och tangenterna i grått under. Spela i helskärm: Space Invaders, före städningen Kod: Space Invaders, före städningen Space Invaders före städningen, en stund in i spelet: fem rader fyrkantiga utomjordingar, där två saknas i den nedersta raden. Under dem faller en kapsel märkt M, ett skott är på väg uppåt och fiendens röda skott faller mot fyra gröna skydd. Poängen är 20.
Efter städningen Nebula Invaders
Space Invaders efter städningen, på startskärmen: rubriken NEBULA INVADERS i turkos över en nedtonad våg av utomjordingar, instruktioner för tangenter och pekskärm på två rader och "Tap or click to start" i gult. Spela i helskärm: Nebula Invaders, efter städningen Kod: Nebula Invaders, efter städningen Space Invaders efter städningen, en stund in i spelet: tre utomjordingar har skjutits bort mitt i formationen och två +20 stiger bland partiklar. Längre ner syns ett fientligt skott, fyra lila skydd och det turkosa skeppet. Överst står SCORE 50 och BEST 50.

Det gamla Space Invaders-spelet startar när man trycker på mellanslag eller på skärmen. En mus gör ingenting i det. Utomjordingarna är platta block, de gröna skydden smulas sönder när de träffas och ibland släpper en utomjording en kapsel som ger snabbare eld, tre skott åt gången, en sköld eller ett extra liv. Det nya kallade sig Nebula Invaders. Utomjordingarna är sexkantiga och marscherar fram i rosa, gult och lila. Varje träff ger partiklar och en poängsiffra som stiger uppåt. Knapparna för att styra och skjuta på en pekskärm ritas inte ut medan man spelar.

Spelparen visar att promptens nya avsnitt får genomslag i spelen. Anropen med den nya prompten gav 1,7 till 2,4 gånger så många utdata-tokens.

Anropen tog också längre tid. När fabriken senare tog tid på appens eget anrop med Claude Codes förvalda effort-nivå, tog ett Pongspel 194 sekunder och ett Tetrisspel 488. Det mesta av varje svar var tänkande: 63 respektive 79 % av utdata-tokens. På den lägsta nivån tog ett Pongspel 53 sekunder och två Tetrisspel 70 respektive 60, nästan helt utan tänkande. Ändå hade alla tre startskärm, rekord, ljud, pekstyrning, sparande och återställning av läget samt hastigheter som räknas per sekund. Det ena Tetrisspelet gick däremot inte att spela med mus. Det var ett spel per mätning, ingen systematisk jämförelse. Med PR #53 började Gaimer be om varje spel på den lägsta nivån. Nu kan användaren välja nivå i inställningarna. Med standardmodellen heter valen "Low · about a minute", "Medium · 1–5 minutes" och "High · 3–8 minutes".