{"id":34667,"date":"2026-08-13T00:25:30","date_gmt":"2026-08-12T22:25:30","guid":{"rendered":"https:\/\/www.angulararchitects.io\/?p=34667"},"modified":"2026-08-13T01:46:25","modified_gmt":"2026-08-12T23:46:25","slug":"loop-engineering-with-super-mario-and-twelve-ai-coding-agents","status":"publish","type":"post","link":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/","title":{"rendered":"Loop Engineering with Super Mario and Twelve AI Coding Agents"},"content":{"rendered":"<p>I gave twelve AI coding agents the exact same job: implement a Koopa Troopa \u2014 Nintendo's shelled enemy \u2014 in the same small Angular-based Super Mario clone, working from the same two tickets, under the same automated agent loop. Then I watched what came back.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/koopa.png\" alt=\"Screenshot of the Angular Mario clone: Mario standing on a tiled level next to a green Koopa Troopa\" \/><\/p>\n<p>This is a <strong>backyard test setup<\/strong>, not a leaderboard \u2014 n=1, one codebase, one domain, no statistical significance. What I was after isn't a ranking of models but a <em>feel<\/em>: how an agent loop actually behaves when you swap the model underneath it.<\/p>\n<h2>The tasks<\/h2>\n<p>The project is a deliberately compact Mario clone: a tile-based level, a hero with jump physics, and one existing enemy \u2014 the Gumba \u2014 as the reference implementation. Each of the twelve agents got a pristine copy of this baseline and two GitHub issues:<\/p>\n<ol>\n<li><strong>koopa-troopa<\/strong> \u2014 implement a green Koopa Troopa: stomp it and it hides in its shell, touch the shell and it slides, a sliding shell kills other enemies and Mario (with a short immunity window after the kick).<\/li>\n<li><strong>enemy-bounce<\/strong> \u2014 when Mario stomps any enemy, he bounces; holding the jump key at that moment gives a higher bounce; and a held key must never trigger repeated jumps (release-latch).<\/li>\n<\/ol>\n<p>Both tickets are exactly the kind of work I wanted to test: a new feature woven deep into existing behavior (collision system, stomp mechanic, jump physics) rather than bolted on beside it, complexity well beyond CRUD demos, and a nearby example to steer by \u2014 the situation you find in large business systems, where new requirements almost always land next to something structurally similar.<\/p>\n<p>Each ticket read like one from sprint planning: a user-facing description, scope and out-of-scope lists, Given\/When\/Then acceptance criteria, and a verification section (&quot;all tests green, build passes&quot;). The refinement conversation was simulated up front: an LLM posed the clarifying questions a developer would ask, and the answers went back into each ticket as a <strong>Design Decisions<\/strong> section. Remediation was sprint-like too: bugs from the first review went into a single QA-style fix ticket, and each agent got exactly one more run. A wrong sprite tile as the <em>only<\/em> defect went un-ticketed \u2014 more on why below.<\/p>\n<h2>The harness<\/h2>\n<p><strong>Every model ran under its vendor's own official agent<\/strong> \u2014 Claude Code, Codex CLI, cursor-agent, Antigravity, Grok CLI \u2014 at stock configuration. So this doesn't compare bare models; it compares the <em>products<\/em> developers actually use, model plus agent plus system prompt and tooling.<\/p>\n<p>Each was wrapped in the same orchestration harness, Sandcastle \u2014 essentially a <strong>Ralph loop<\/strong> (the agent re-invoked over its own output until the work is done) with four stages: a <em>planner<\/em> reads the open tickets, an <em>implementer<\/em> takes each ticket on its own branch and writes tests as it goes, a <em>reviewer<\/em> passes over the diff, and a <em>merger<\/em> integrates what survives. Wired to GitHub, a run leaves the same paper trail a human sprint would \u2014 issues in, branches and comments out, including a token and wall-clock report per issue.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/sandcastle.png\" alt=\"Diagram of the Sandcastle harness: the four loop stages \u2014 planner, implementer, reviewer, merger \u2014 running against a GitHub issue tracker and a sandboxed working copy\" \/><\/p>\n<p>Each stage ran inside a sandbox. That matters beyond network hygiene: twelve solutions to the same tickets sat in adjacent directories, and each had to be arrived at independently. On the two agents whose transcripts I audited call by call (Grok and Opus 5), that held \u2014 no neighbor's repo was ever read.<\/p>\n<h2>The results<\/h2>\n<p>The numbers are sums across both tasks plus any fix rounds, covering all phases, taken from the reports Sandcastle posted on each GitHub issue. It all happened in July 2026.<\/p>\n<p>Costs are each run's metered usage (fresh input, cache writes\/reads, output, all phases and fix rounds) at public API list prices \u2014 a <strong>normalized what-if<\/strong>, not necessarily what a run costs <em>you<\/em>: under flat-rate subscriptions the marginal run is free until quota. Fine print: Composer's cache-read rate is assumed (unpublished), Sonnet uses its introductory price, GPT-5.6 the late-July cut.<\/p>\n<style>\nth, td {\n  text-align: left;\n  vertical-align: top;\n  padding: 5px;\n}\nth, td {\n  border-bottom: 1px solid black;\n}\ntable {\n  margin-left: -10px;\n  margin-bottom: 20px;\n  border-collapse: collapse;\n}\n<\/style>\n<table>\n<thead>\n<tr>\n<th>Agent (CLI)<\/th>\n<th>Model<\/th>\n<th style=\"text-align: right;\">Est. cost (API list price)<\/th>\n<th style=\"text-align: right;\">Wall clock<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>luna (Codex CLI)<\/td>\n<td>gpt-5.6-luna<\/td>\n<td style=\"text-align: right;\">$0.21<\/td>\n<td style=\"text-align: right;\">21 min<\/td>\n<\/tr>\n<tr>\n<td>Gemini Flash-Lite (Antigravity)<\/td>\n<td>Gemini 3.5 Flash (Low)<\/td>\n<td style=\"text-align: right;\">$2.26<\/td>\n<td style=\"text-align: right;\">7 min<\/td>\n<\/tr>\n<tr>\n<td>terra (Codex CLI)<\/td>\n<td>gpt-5.6-terra<\/td>\n<td style=\"text-align: right;\">$2.64<\/td>\n<td style=\"text-align: right;\">25 min<\/td>\n<\/tr>\n<tr>\n<td>sol (Codex CLI)<\/td>\n<td>gpt-5.6-sol<\/td>\n<td style=\"text-align: right;\">$2.79<\/td>\n<td style=\"text-align: right;\">15 min<\/td>\n<\/tr>\n<tr>\n<td>Grok (Grok CLI)<\/td>\n<td>grok-4.5<\/td>\n<td style=\"text-align: right;\">$2.88<\/td>\n<td style=\"text-align: right;\">16 min<\/td>\n<\/tr>\n<tr>\n<td>Gemini Pro (Antigravity)<\/td>\n<td>Gemini 3.1 Pro (High)<\/td>\n<td style=\"text-align: right;\">$2.95<\/td>\n<td style=\"text-align: right;\">18 min<\/td>\n<\/tr>\n<tr>\n<td>Composer (cursor-agent)<\/td>\n<td>composer-2.5<\/td>\n<td style=\"text-align: right;\">$6.12<\/td>\n<td style=\"text-align: right;\">33 min<\/td>\n<\/tr>\n<tr>\n<td>Gemini Flash (Antigravity)<\/td>\n<td>Gemini 3.5 Flash (High)<\/td>\n<td style=\"text-align: right;\">$6.19<\/td>\n<td style=\"text-align: right;\">15 min<\/td>\n<\/tr>\n<tr>\n<td>Opus 4.8 (Claude Code)<\/td>\n<td>claude-opus-4-8<\/td>\n<td style=\"text-align: right;\">$20.60<\/td>\n<td style=\"text-align: right;\">74 min<\/td>\n<\/tr>\n<tr>\n<td>Sonnet (Claude Code)<\/td>\n<td>claude-sonnet-5<\/td>\n<td style=\"text-align: right;\">$22.21<\/td>\n<td style=\"text-align: right;\">135 min<\/td>\n<\/tr>\n<tr>\n<td>Opus 5 (Claude Code)<\/td>\n<td>claude-opus-5<\/td>\n<td style=\"text-align: right;\">$25.07<\/td>\n<td style=\"text-align: right;\">72 min<\/td>\n<\/tr>\n<tr>\n<td>Fable (Claude Code)<\/td>\n<td>claude-fable-5<\/td>\n<td style=\"text-align: right;\">$34.29<\/td>\n<td style=\"text-align: right;\">67 min<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Every row is one clean, completed run from a pristine baseline. I judged the agents the way a tech lead reviews a pull request: I read every diff, ran each merged test suite locally, and played the level to see the enemy actually move \u2014 the only reason the moonwalk below is in this article at all, because no test suite in the field caught it.<\/p>\n<p>The spread: <strong>160\u00d7 in cost, 19\u00d7 in wall clock<\/strong>. One number worth decoding: Sonnet metered by far the most raw tokens \u2014 98% of them cheap cached re-reads, its loop re-sending an ever-growing context each step. What costs you isn't turns; it's turns times whatever you let accumulate in context. The cheapest runs were not the worst \u2014 though the most expensive one (Fable) was the only flawless one. <strong>More thoroughness is not automatically better<\/strong>: for a well-specified feature in a small codebase, the 7-to-25-minute runs were entirely sufficient.<\/p>\n<h2>Everyone can build a Koopa. Almost no one can <em>see<\/em> one.<\/h2>\n<p>The headline that would have been unthinkable two years ago: <strong>all twelve agents shipped a working Koopa Troopa<\/strong> \u2014 the full state machine (walking \u2192 shell \u2192 sliding \u2192 stopped), kick immunity, stomp bounce with release-latch. Four got there on the first attempt, the other eight after their single fix ticket.<\/p>\n<p>Cosmetically it was another story, and the failure was systematic: <strong>the sprites.<\/strong> The tasks asked the agents to extract the green Koopa's tiles from a PNG sprite sheet, &quot;analogous to the existing Gumba tiles.&quot; This was the hardest sub-problem in the entire setup \u2014 and the only one where the fix round didn't reliably help. Eight of the twelve agents picked wrong tiles and were ticketed for it:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/fish.png\" alt=\"The game running with a wrongly picked sprite: instead of a Koopa Troopa, a fish tile from the sprite sheet walks along the level\" \/><\/p>\n<p>Three more (sol, Grok and Opus 5) picked wrong tiles as their <em>only<\/em> defect; terra even gave its Koopa wings \u2014 explicitly out of scope. Opus 5 got both shell tiles right but took the walking frames from the wrong row, so its Koopa patrols the level as a Hammer Bro. <strong>Exactly one model chose the right tiles on its own: Fable<\/strong> \u2014 also the only agent with no defect of any kind.<\/p>\n<h2>The bugs traced back to my spec<\/h2>\n<p>The user-visible bugs clustered into three patterns, and checking each against the actual ticket text changed how I think about the failures.<\/p>\n<p><strong>The moonwalk.<\/strong> The most common bug: the Koopa walked to the right while facing left, gliding backwards across the level. Nearly every agent with a fix ticket had it.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/moonwalk-bottom-trimmed.gif\" alt=\"Animation of the moonwalk bug: the Koopa Troopa moves to the right while its sprite still faces left, sliding backwards across the level\" \/><\/p>\n<p>But the ticket never mentions facing direction. It says: &quot;Implement analogously to the existing Gumba&quot; \u2014 and the Gumba is <em>symmetric<\/em>, with no mirroring logic whatsoever. The agents faithfully replicated a reference that was silently missing the required property. The moonwalk isn't really a model bug; it's a spec bug.<\/p>\n<p><strong>The shell that wouldn't kick.<\/strong> terra shipped the one genuine state-machine bug: jumping on a stationary shell didn't kick it. The acceptance criteria had it right, but the code-shaped <strong>Design Decisions<\/strong> bullet silently omitted the resting-shell case. An agent that trusts that bullet over the prose produces exactly terra's bug \u2014 the two halves of my own ticket disagreed by omission.<\/p>\n<p><strong>The counterexample.<\/strong> The enemy-bounce ticket specified its trickiest corner explicitly \u2014 a held jump key must never re-trigger a jump \u2014 and eleven of twelve agents got it right; only Composer shipped an infinite-jump bug, fixed in its remediation round. Where the spec was explicit, failure was rare and idiosyncratic. Where it was silent or self-contradictory, failure was systematic and near-universal.<\/p>\n<p>That's the pattern: <strong>the agents didn't primarily fail at coding; they surfaced the ambiguities in my tickets \u2014 twelve times over, in parallel.<\/strong> A human developer bridges spec gaps with genre knowledge, often without noticing the gap. An LLM agent is a merciless literalist.<\/p>\n<h2>Code quality: what twelve agents deliver without guidance<\/h2>\n<p>Working code is a low bar, so I also measured <em>how<\/em> the solutions are built \u2014 with three instruments covering different angles. An AST tool parsed exactly the functions each loop had touched and recorded the hard numbers: function length and nesting depth. Every merged test suite was re-run locally, with coverage collected over the touched feature files \u2014 where a file no test even imports counts as 0%, because coverage tools silently drop such files and would flatter exactly the agents that tested least. And the structural qualities the numbers can't capture went to a <strong>blind LLM judge<\/strong> with a fixed 1\u20135 rubric for two criteria: SLAP and cohesion.<\/p>\n<p><strong>SLAP<\/strong> is the <em>Single Level of Abstraction Principle<\/em>: within one function, every statement should sit at the same level of abstraction. A function either states the <em>why<\/em> \u2014 orchestrating a behavior as a sequence of well-named steps like <code>stompEnemy()<\/code> or <code>startKickImmunity()<\/code> \u2014 or it carries the <em>how<\/em> of exactly one such step: the raw mechanics of a single mechanism. Never both, because the mix is what makes code hard to read: three well-named steps, then twenty lines of inline pixel math, then another step, and the reader has to change altitude mid-function. <strong>Cohesion<\/strong> is the sibling criterion: one responsibility per function \u2014 and one you can actually name.<\/p>\n<p>The judge saw only anonymized, leak-checked bundles \u2014 no model names, no agent-specific paths or branding. And to test the rubric's stability, I re-ran the entire judging pass: every score reproduced within one point.<\/p>\n<p><strong>With no quality guidance, the spread was enormous<\/strong> \u2014 from textbook layering to a 110-line collision function with a <code>switch<\/code> inside a <code>switch<\/code>, pixel math inline around both. Quality <strong>tracked the price tags \u2014 as a tendency, not a law<\/strong>: the Claude agents all upper-tier, Opus 5 the only 5\/5, the cheapest agents at the bottom \u2014 and Grok as the honest exception, top-tier layering for under three dollars. Testing spread just as widely: Sonnet wrote twice as much test code as production code, luna less than half.<\/p>\n<h2>Can rules buy the quality back?<\/h2>\n<p>I took the weakest agent and added explicit rules \u2014 SLAP, helpers must be nameable domain concepts, a hard nesting limit of 2 \u2014 enforced by <em>both<\/em> the implementer and the in-loop reviewer. Deliberately no line-count limit: numeric targets get gamed.<\/p>\n<table>\n<thead>\n<tr>\n<th><\/th>\n<th style=\"text-align: right;\">Flash-Lite<\/th>\n<th style=\"text-align: right;\">Flash-Lite + rules<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Blind judge (SLAP \/ cohesion)<\/td>\n<td style=\"text-align: right;\">2 \/ 2<\/td>\n<td style=\"text-align: right;\"><strong>4 \/ 4<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Longest function<\/td>\n<td style=\"text-align: right;\">90 lines<\/td>\n<td style=\"text-align: right;\">34 lines<\/td>\n<\/tr>\n<tr>\n<td>Max nesting<\/td>\n<td style=\"text-align: right;\">4<\/td>\n<td style=\"text-align: right;\"><strong>2<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Tests \/ coverage of the new code<\/td>\n<td style=\"text-align: right;\">12 \/ 38%<\/td>\n<td style=\"text-align: right;\">10 \/ <strong>31%<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Est. cost (API list price)<\/td>\n<td style=\"text-align: right;\">$2.26<\/td>\n<td style=\"text-align: right;\">$4.09<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>It cuts both ways. <strong>Two full points on a blind re-judging<\/strong> \u2014 the monolith gone, the hard rule held; recognizing violations is much easier than avoiding them, and the reviewer stage is where that asymmetry pays. But the top tier stayed out of reach, the cost nearly doubled \u2014 and <strong>the testing got worse<\/strong>: the rules said nothing about tests, so the model quietly reallocated effort from testing to structure. Guardrails steer attention; whatever you leave out of them pays the bill.<\/p>\n<h2>Three takeaways that held up<\/h2>\n<p><strong>1. The floor has risen further than most teams realize.<\/strong> A stateful game-mechanics feature, delivered working by twelve agent stacks, each within one ordinary bug-fix cycle. The question is no longer <em>whether<\/em> an agent can implement your ticket \u2014 it's what it consumes, what cleanup follows, and how you find the defects.<\/p>\n<p><strong>2. Your spec decides what you get.<\/strong> Every systematic failure traced back to something my tickets didn't say; every explicitly specified behavior was implemented near-universally correctly. A spec steers attention rather than adding it: whatever you leave out, the model decides on its own. Not waterfall: spec, run, read the bugs, file the next ticket, run again.<\/p>\n<p><strong>3. Quality follows the same rule.<\/strong> With no guidance, twelve agents delivered twelve different implementations \u2014 from textbook layering to a 110-line collision monolith. Explicit structure rules moved the weakest model two full points on a blind rubric. Treat quality as part of the spec and state it explicitly.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I gave twelve AI coding agents the exact same job: implement a Koopa Troopa \u2014 Nintendo&#8217;s shelled enemy \u2014 in the same small Angular-based Super Mario clone, working from the same two tickets, under the same automated agent loop. Then I watched what came back. This is a backyard test setup, not a leaderboard \u2014 [&hellip;]<\/p>\n","protected":false},"author":25,"featured_media":34654,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"_acf_changed":false,"_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-34667","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Loop Engineering with Super Mario and Twelve AI Coding Agents - ANGULARarchitects<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Loop Engineering with Super Mario and Twelve AI Coding Agents - ANGULARarchitects\" \/>\n<meta property=\"og:description\" content=\"I gave twelve AI coding agents the exact same job: implement a Koopa Troopa \u2014 Nintendo&#039;s shelled enemy \u2014 in the same small Angular-based Super Mario clone, working from the same two tickets, under the same automated agent loop. Then I watched what came back. This is a backyard test setup, not a leaderboard \u2014 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/\" \/>\n<meta property=\"og:site_name\" content=\"ANGULARarchitects\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-12T22:25:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-12T23:46:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/social-sujet-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2400\" \/>\n\t<meta property=\"og:image:height\" content=\"1260\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Manfred Steyer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/social-sujet-1.png\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Manfred Steyer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/\"},\"author\":{\"name\":\"Manfred Steyer\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a\"},\"headline\":\"Loop Engineering with Super Mario and Twelve AI Coding Agents\",\"datePublished\":\"2026-08-12T22:25:30+00:00\",\"dateModified\":\"2026-08-12T23:46:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/\"},\"wordCount\":1994,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/koopa.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/\",\"name\":\"Loop Engineering with Super Mario and Twelve AI Coding Agents - ANGULARarchitects\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/koopa.png\",\"datePublished\":\"2026-08-12T22:25:30+00:00\",\"dateModified\":\"2026-08-12T23:46:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#primaryimage\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/koopa.png\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/koopa.png\",\"width\":2043,\"height\":729},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.angulararchitects.io\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Loop Engineering with Super Mario and Twelve AI Coding Agents\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"name\":\"ANGULARarchitects\",\"description\":\"AngularArchitects.io\",\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\",\"name\":\"ANGULARarchitects\",\"alternateName\":\"SOFTWAREarchitects\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"width\":644,\"height\":216,\"caption\":\"ANGULARarchitects\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/github.com\/angular-architects\",\"https:\/\/www.linkedin.com\/company\/angular-architects\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a\",\"name\":\"Manfred Steyer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g\",\"caption\":\"Manfred Steyer\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Loop Engineering with Super Mario and Twelve AI Coding Agents - ANGULARarchitects","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/","og_locale":"en_US","og_type":"article","og_title":"Loop Engineering with Super Mario and Twelve AI Coding Agents - ANGULARarchitects","og_description":"I gave twelve AI coding agents the exact same job: implement a Koopa Troopa \u2014 Nintendo's shelled enemy \u2014 in the same small Angular-based Super Mario clone, working from the same two tickets, under the same automated agent loop. Then I watched what came back. This is a backyard test setup, not a leaderboard \u2014 [&hellip;]","og_url":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/","og_site_name":"ANGULARarchitects","article_published_time":"2026-08-12T22:25:30+00:00","article_modified_time":"2026-08-12T23:46:25+00:00","og_image":[{"width":2400,"height":1260,"url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/social-sujet-1.png","type":"image\/png"}],"author":"Manfred Steyer","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/social-sujet-1.png","twitter_misc":{"Written by":"Manfred Steyer","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#article","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/"},"author":{"name":"Manfred Steyer","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a"},"headline":"Loop Engineering with Super Mario and Twelve AI Coding Agents","datePublished":"2026-08-12T22:25:30+00:00","dateModified":"2026-08-12T23:46:25+00:00","mainEntityOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/"},"wordCount":1994,"commentCount":0,"publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/koopa.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/","url":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/","name":"Loop Engineering with Super Mario and Twelve AI Coding Agents - ANGULARarchitects","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#primaryimage"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/koopa.png","datePublished":"2026-08-12T22:25:30+00:00","dateModified":"2026-08-12T23:46:25+00:00","breadcrumb":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#primaryimage","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/koopa.png","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/08\/koopa.png","width":2043,"height":729},{"@type":"BreadcrumbList","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/loop-engineering-with-super-mario-and-twelve-ai-coding-agents\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.angulararchitects.io\/en\/"},{"@type":"ListItem","position":2,"name":"Loop Engineering with Super Mario and Twelve AI Coding Agents"}]},{"@type":"WebSite","@id":"https:\/\/www.angulararchitects.io\/en\/#website","url":"https:\/\/www.angulararchitects.io\/en\/","name":"ANGULARarchitects","description":"AngularArchitects.io","publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.angulararchitects.io\/en\/#organization","name":"ANGULARarchitects","alternateName":"SOFTWAREarchitects","url":"https:\/\/www.angulararchitects.io\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","width":644,"height":216,"caption":"ANGULARarchitects"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/github.com\/angular-architects","https:\/\/www.linkedin.com\/company\/angular-architects\/"]},{"@type":"Person","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a","name":"Manfred Steyer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g","caption":"Manfred Steyer"}}]}},"_links":{"self":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/34667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/comments?post=34667"}],"version-history":[{"count":7,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/34667\/revisions"}],"predecessor-version":[{"id":34682,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/34667\/revisions\/34682"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media\/34654"}],"wp:attachment":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media?parent=34667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/categories?post=34667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/tags?post=34667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}