07 · Agentic workflow

How the fleet was run, and how the ship was steered

One human, one orchestrating Claude session that lived for the whole project, and 147 subagents working in 96 git worktrees. The human never opened an editor. The human held the only console, the only SD card, and the only pair of eyes that could be trusted.

223
messages typed by the user across the project
147
subagent transcripts (background agents + workflow agents)
96
git worktrees under ~/code/gdx-3ds
98
feat/3ds-* branches
10
deep-research workflow runs
15
active days between 08-11 and 09-03

The topology

One long-lived session was the orchestrator. It held the project memory, wrote the briefs, merged the branches, and talked to the user. Work was fanned out to background agents, each given a worktree, a branch named for its lever, a brief file committed into docs/research/, and a progress file it had to write before it was allowed to finish. Agents never talked to the user; the orchestrator relayed. Agents never touched mainline; the orchestrator merged after an emulator smoke test and, for anything risky, after a hardware verdict.

user ──(prompt, screenshots, SD card)──▶ orchestrator session
                                            │  briefs, merges, memory, reports
                    ┌───────────────────────┼───────────────────────┐
                    ▼                       ▼                       ▼
            worktree A (lever)      worktree B (lever)      deep-research workflow
            branch feat/3ds-a       branch feat/3ds-b       5 search agents → fetch → verify → synth
            killswitch + receipt    killswitch + receipt
            progress.md + commits   progress.md + commits
                    └───────── merge into feat/3ds-hwtestN ─────────┘
                                            │
                                   .3dsx + .cia + TEST-PLAN.txt ──▶ SD card ──▶ New 3DS ──▶ log.txt back

The rules the fleet lived by

These accreted from failures (see Difficulties) and were copied into every brief as a "common rules" block:

RuleBorn from
Patch as pure delta. Upstream submodules stay pristine; every change is a patch generated against the full current stack; the README lists the order; a clean-stack round-trip must pass.Double-carried hunks in the rival-detail patch, twice.
Killswitch for everything. Every lever has an ini key defaulting on, and later a row in the bottom-screen DBG tab, so hardware can A/B without a rebuild.The first hardware rounds could only compare builds.
Receipt for everything. A lever must print a log line proving it engaged ([rt] mode=ahead, [c3d] anchor=…, texcacheMainMut=0).A silent audio agent whose run was attributed to the wrong binary.
Commit early, progress file first. Agents die on token limits and API overloads; a dead agent with zero commits costs a day.Traffic, sky3b, P2 and the first bridge-cache agent.
One emulator, one lock. /tmp/azahar.lock, touched every 30 s while held; wait in turn; never kill another run.Agents killing each other's Azahar and deleting SD artifacts.
Combined-lever screenshot before staging. A race frame with every lever on, captured through the window id, inspected by eye.The HUD-destroying interaction between trifast and the atlas.
Merge ini keys, never overwrite. The user's SD ini holds their 3D and display choices.A round that shipped with stereo silently off.
Never re-apply the patch list onto a patched tree. Reset both submodules first.A corrupted decomp tree in the final week.

How the ship was steered

The user's messages are short, frequent, and almost entirely about direction, evidence and verdicts. Reading all 223 of them in order, the pattern is a captain, not a programmer: set the goal, demand parallelism, bring the physical evidence, say yes or no, and protect the budget.

Setting the goal and refusing the safe path

08-11 03:44lets create a plan for team of agents to work. can we segment plan so we can have multiple work trees and multiple contributing agents ?
08-14 05:05only list options that work towards this running acceptably in 3D at 60fps
08-21 22:49played a bunch, running well. no hitches. music still plays. rest of issues are what's left. would love to see the framerate at a crispy 60. then... maybe 3D?
08-28 04:27moonshot! lets go for it

Demanding parallelism

08-14 01:10i didnt see any hard crashes right now, so lets see about the visual fixes. any work that can be done in parallel ?
08-20 05:38definitely run ! run as many subagents on plausible tasks
08-21 03:48btw are we wasting time in general ? is there work that can be done in tandem ? spawn subagents if so
09-02 21:59lets do /deep-research on whats left, come up with plan, and execute subagents for all parallel work

Being the oracle

The agents could not see the console. The user ran the SD-card loop dozens of times ("SD in", "SD returned", "SD card is back in" appear 36 times) and reported what a human sees: shapes, colours, hitches, feel. Those reports were the only ground truth for the visual bugs and for every fps number on the Road to 60 page.

08-14 13:21yep definitely looks like the game but its still quite buggy. some of the elements jitter/shimmer, textures change. opening tunnel doesnt have a roof, might have to do with backface culling?
08-21 15:54wow it runs amazing ! like you were suggesting, maybe even better than the emu. sound doesn't work btw. sound has never worked on the emu either.
08-28 04:22minimal appears to be a 8 to 9 fps gain ! sometimes a little more. def worth it.
09-03 16:32next thing to consider: 3D works great for 3D elements, but UI elements are a little less consistent. one thing thats really jarring is the 1P/2P/3P markers during a race. they sit on the most foreground in 3D but the ships are somewhere in the distance

Pushing back on the machine

08-21 00:23nothing new to report here. all the same issues. anything we can do ? instanity is doing the same things and expecting different results. /deep-research different methods of fixing these issues.
08-21 20:40uh dude no, i heard the tone sound before even. and i heard the music fine earlier. its not azahar.
08-15 16:33also mark that it was done with opus and not fable so it should be reconsidered if this is the best approach

Guarding the budget and the record

08-14 14:06we ran out of fable credits until next week, lets capture all the inflight tasks and store state so we can pick up the work later.
08-28 13:17lets try pushing the last lever. lets also write up the README for release. lets make sure we clearly declare this was just for educational purposes, not affiliated with nintendo, doesnt provide ROM or assets
09-03 13:20also, is there any way you could create a webpage with some histograms of the performance + documentation on how the changes all affected performance?

Working through the night

Twice (08-20 and 08-21) the user went to sleep with the instruction to keep working. Each night session ran a fleet against a frozen mainline, wrote a morning-status document, and left a candidate branch to promote after the user's eyeball. The 08-20 candidate was promoted with "sure, promote it. i dont see any large regressions. probably better"; the 08-21 night produced the S7 interpreter memo and the async frame-mirror copy that took the menus from 15 to 20 fps in the emulator.

What the orchestrator did that an agent could not

Where the workflow was pioneering

Multi-agent coding is usually demonstrated on web apps with a test suite. This project ran it against a target the agents could not observe, with a human-in-the-loop measurement cycle measured in SD-card round trips, on a codebase made of three repositories (decomp, runtime, port) with a patch stack instead of a fork. The devices that made that work (receipts, killswitches, briefs with measurement protocols, the emulator lock, the morning-status documents, the hardware test plans) are the transferable result. They are what let 147 agents contribute to one binary without a single regression reaching the user's console unflagged.