Still testing this
100 percent on ARC-AGI-3
The scorecard is public: d4c56c67. All 25 environments, all 183 levels, score 100.0, and a working replay link under every game.
One Pi session played the whole thing across 22.4 hours. It spent $1,349 on the model while I contributed about four minutes of keyboard time, spread across seven short messages.
The agent had one tool.
The setup
The machine ran Pi with pi-fabric installed. Fabric swaps the usual box of small tools for a single one called fabric_exec, which takes a type-checked TypeScript program. Inside that program the model can call Pi's core tools, agents, memory, state, compaction, and whatever MCP servers sit on the box, and if the program's shape is wrong the type checker throws it back before anything runs.
The model was gpt-5.6-sol at maximum thinking. My prompt was a URL and one line:
https://docs.arcprize.org/
Help me achieve 100% across all 25 games in ARC AGI 3 locally.
I also loaded the fabric-schema skill, which hands the session a ledger. Every claim goes down in writing with falsifiable evidence attached, and the plan voids itself the moment that evidence goes stale.
What the model did
Hour one went to plumbing. The model pulled all 25 games down through the public Arcade wrapper, instantiated them locally, and parsed each game's source until it could simulate what the mechanics do.
The core of the run is state-space search. For every game the model wrote a simulator from the parsed source, hashed frames and game states so the search could tell where it had already been, and let breadth-first search grind with a timeout per level. When plain search stalled on a game it slowed down and specialized. One game got a constraint solver for rule rotations. Another needed collision-aware ordering, because it asks you to assemble loose parts onto a canvas without knocking things into each other. KA59 level 7 took recursive reasoning about how bombs re-arm and shove pieces around, and the mirror puzzle in AR25 came down to propagating constraints across reflections.
About forty minutes in I sent my shortest message of the session: "Stop the agents." The model had spawned parallel helpers to poke at games, and a single auditable line of work was worth more to me than the speed. The rest of the campaign ran as one sequential loop.
Wins had to be earned on paper. A game counted when its transcript showed WIN evidence, and the model kept a completion ledger the whole way through. Near the end it re-verified the full ledger from scratch by parsing bounded logs for ground truth, which is how we knew the 25/25 was real before touching the network.
The replay
ARC scoring weights each game and caps actions, so a bloated plan costs points even when it wins. Once every game had a verified win, the model squeezed its plans and then distilled the campaign into data. arc25/manifest.json holds the exact versioned game IDs plus all 6,164 public actions, and a small runner replays them against a single scorecard, offline first and then online with four workers streaming games into the same card.
Publishing took a second try. The first card looked healthy on the scoreboard page while every inner recording link returned 404. Recordings go live only after a card closes, and in that window something had gone wrong, so we opened a fresh card, re-ran the replay, and clicked through all 25 recording links in a live browser tab using the CDP skill. The card linked at the top is the one that survived that audit.
The campaign survives as a small git repo with tests. Anyone with the local environments can check the whole claim:
uv run python -m unittest discover -s tests
uv run python -m arc25.replay --mode offline
Why Fabric carried it
The session log shows 1,457 tool calls, and 1,455 of them are fabric_exec. Each one of those calls is a whole program: grep the repo, parse four logs, run a solver attempt, persist the winning plan, hand back twenty lines. The conversation sees the twenty lines while the sandbox keeps the megabytes.
That compression is what let a 19.9 megabyte session log stay coherent for 22 hours through fifteen compactions. After each compaction the schema ledger and the manifest sitting on disk gave the session its spine back, and when context thinned out the memory provider pulled the goal back into view.
The single flat tool schema did quieter work. At no point in 22 hours did the model fumble the interface, because it spent the whole run writing TypeScript against APIs it had already seen. Bad programs died in the type checker before they could spend a token.
The human part
My seven messages fit in one breath: an early clarification about which runs the model was reading, the stop order for the agents, an upload request, a persist-and-commit request, one bug report about the 404 recordings, and a yes for the new card.
The clarification is the one I'd point at. Early on, the model was quoting action counts from runs that other agents had published, mostly PRO-LONG's, alongside its own plans. I asked which source it meant, and from that message onward every claim in the session pointed at local evidence. Four minutes of typing, and most of it was steering.
Links
- Scorecard: arcprize.org/scorecards/d4c56c67-136b-4643-b648-62ae28fe2a54
- Fabric: github.com/monotykamary/pi-fabric
- Replay verification commands sit above, under The replay.