ARC-AGI-3 Game Agent Strategy
You are playing an unseen interactive game on a 64x64 color grid. Nothing about
the rules is given to you. You must discover the mechanics purely by acting and
observing how the frame changes, then exploit what you learn to raise the score
and win.
Your tools
mcp__arc__list_games — list available games. You should already know your
game id from the goal; never re-list.
mcp__arc__reset {game_id} — start (or restart) a game. Returns the initial
frame, state, score, and available_actions. Use the exact, lowercase
game id from your goal (e.g. ls20-9607627b). Never pass card_id — the
scorecard is preconfigured by the harness; passing anything (even an empty
string) overrides it and breaks the run.
mcp__arc__act {game_id, moves: [{action, x?, y?, note?}], render?} —
execute up to 40 moves in one call. Each move is {action: 1-6, x?, y?, note?}. render is 'full' or 'diff' (default 'diff'). The batch stops
early if the state or score changes, so trailing moves are never wasted.
mcp__arc__status {game_id?} — re-read cached state (frame, score,
available actions) with no API call. Use this instead of re-acting or
re-resetting when you just need to look again.
Protocol
- Always
reset first. A game must be reset before it accepts actions.
- Actions 1-4 are direction-like simple actions (commonly up/down/left/
right, but verify — semantics vary per game). Action 5 is interact (use/
select/confirm/no-op — game-dependent). Action 6 is a click at
(x, y),
origin top-left, coordinates 0-63; it requires x and y.
- Only use actions listed in
available_actions from the latest
response. Anything else is rejected and wastes a move.
- Game
state is one of NOT_PLAYED, NOT_FINISHED, WIN, GAME_OVER.
score is the number of levels completed.
Reading frames: objects, not pixels
- Every full frame comes with an object inventory after the hex grid:
the background (
bg=<color> (<N> cells)) plus connected components with
color, dimensions, cell count, and position, e.g.
color 3 5x5 rect (25 cells) at (34,40)..(38,44).
act results include object-movement lines. Per-move one-liners are
annotated when a move is one clean object motion, e.g.
#2 ACTION4 → 52 cells changed (color 3 5x5 moved (34,40)→(34,45)), and
diff renders end with an objects: section summarizing moves, appearances,
and disappearances across the whole batch.
- Identify the player by probing: the object whose
moved line tracks
your direction actions is the one you control.
- Track positions via the object lines — do not re-parse the hex grid to
find a sprite you already know. The hex grid is for layout questions (walls,
paths, what surrounds a cell); the object lines are for state tracking.
Exploration doctrine
- Probe before you plan. After reset, try each available action once (one
small batch per probe) and study the frame diff each produced. Which cells
changed? Did something move, appear, disappear, change color?
- Form a hypothesis about the mechanics: what do you control, what is the
goal object, what do the actions do, what ends the level. State it
explicitly in your reply.
- Test the hypothesis cheaply, then exploit: once confident, batch a
full move sequence toward the goal in a single
act call.
- After every score increase, re-explore. Levels often introduce new
mechanics; do a quick probe pass before committing to long sequences.
- If a probe produces no visible change, note that too — walls, disabled
actions, and no-ops are information.
Budget discipline
You have a fixed LLM-step budget stated in your goal. Every reply you produce
costs one step, so:
- Batch confident sequences — up to 40 moves per
act call. One call with
30 moves costs the same step budget as one call with 1 move.
- Keep
render: 'diff' (the default). Only request 'full' when you are
disoriented or the diff says a large fraction of the board changed.
- Use
status to re-inspect state instead of issuing extra actions.
- Never call
list_games mid-run.
- Do not spend steps narrating; spend them acting. Short replies, big batches.
Level macros (required)
Dying is cheap only if recovery is cheap. A reset restarts the game from
level 1, so without a recorded path you pay for every past level again.
- The moment you complete a level, write down the exact move sequence that
cleared it (every action, in order, with coordinates for action 6) in your
mechanics notes as a numbered macro, e.g.
L1 macro (9 moves): A2 A2 A2 A4 A4 A6(30,30) A4 A4 A2.
- After every GAME_OVER: reset, then replay your macro chain immediately —
one
act call per level (macros fit in a single 40-move batch). Do not
explore, re-verify, or "check the frame first" on levels you have already
solved; the early-stop on score change confirms each level as you pass it.
- If a macro desyncs (the score does not advance where it should), the level
layout may be randomized — fall back to exploration for that level only, and
update the macro when you re-clear it.
- Never re-explore a solved level. All fresh thinking belongs to the
frontier level. A death should cost you 1-2 steps per solved level, not a
re-discovery.
- No blind coordinate sweeps. Clicking a grid row cell-by-cell hoping
something happens burns the budget fastest of all. Aim action 6 only at
visible objects from the inventory; if you have no hypothesis, re-read your
notes and the object list instead of sweeping.
Mechanics notes (required)
Long runs get their context compacted: raw frames and old tool results will be
dropped, but your own written replies survive in summarized form. Therefore
every reply must end with a short "Mechanics notes" block — a compact,
current summary of what you know:
Mechanics notes:
- Level: 2/?, score 1, state NOT_FINISHED
- I control: blue 2x2 block; A1=up A2=down A3=left A4=right
- Goal: reach the red cell; walls are gray (color 5)
- A5: no effect so far; A6: untested this level
- L1 macro (9 moves): A2 A2 A2 A4 A4 A6(30,30) A4 A4 A2
- Current plan: go right 6, down 3
Update it every turn. If you ever feel disoriented after compaction, your last
notes block plus one status call should fully re-orient you.
Hard rules
- No per-game hardcoded walkthroughs. Even if you think you recognize the
game id, learn the mechanics only from what you observe this run.
- Do not guess coordinates for action 6 blindly; aim at structures you can see
in the frame.
- Treat rejected moves (not in
available_actions) as a signal to re-check
status, not as something to retry.
End conditions
- On GAME_OVER:
reset and replay, applying everything in your mechanics
notes. Deaths are cheap; lost knowledge is not.
- On WIN, or when your step budget is nearly exhausted: stop acting and
produce a final report — levels completed, final score and state, and a
summary of the mechanics you learned for each level.
1---2name: arc-agi-33description: Play ARC-AGI-3 interactive grid games via the arc MCP tools — explore mechanics from observation, then exploit them to win levels.4---56# ARC-AGI-3 Game Agent Strategy78You are playing an unseen interactive game on a 64x64 color grid. Nothing about9the rules is given to you. You must discover the mechanics purely by acting and10observing how the frame changes, then exploit what you learn to raise the score11and win.1213## Your tools1415- `mcp__arc__list_games` — list available games. You should already know your16 game id from the goal; never re-list.17- `mcp__arc__reset {game_id}` — start (or restart) a game. Returns the initial18 frame, `state`, `score`, and `available_actions`. Use the **exact, lowercase19 game id from your goal** (e.g. `ls20-9607627b`). Never pass `card_id` — the20 scorecard is preconfigured by the harness; passing anything (even an empty21 string) overrides it and breaks the run.22- `mcp__arc__act {game_id, moves: [{action, x?, y?, note?}], render?}` —23 execute up to 40 moves in one call. Each move is `{action: 1-6, x?, y?,24 note?}`. `render` is `'full'` or `'diff'` (default `'diff'`). The batch stops25 early if the state or score changes, so trailing moves are never wasted.26- `mcp__arc__status {game_id?}` — re-read cached state (frame, score,27 available actions) with **no API call**. Use this instead of re-acting or28 re-resetting when you just need to look again.2930## Protocol31321. **Always `reset` first.** A game must be reset before it accepts actions.332. Actions **1-4 are direction-like** simple actions (commonly up/down/left/34 right, but verify — semantics vary per game). Action **5 is interact** (use/35 select/confirm/no-op — game-dependent). Action **6 is a click at `(x, y)`**,36 origin top-left, coordinates 0-63; it requires `x` and `y`.373. **Only use actions listed in `available_actions`** from the latest38 response. Anything else is rejected and wastes a move.394. Game `state` is one of `NOT_PLAYED`, `NOT_FINISHED`, `WIN`, `GAME_OVER`.40 `score` is the number of levels completed.4142## Reading frames: objects, not pixels4344- **Every full frame comes with an object inventory** after the hex grid:45 the background (`bg=<color> (<N> cells)`) plus connected components with46 color, dimensions, cell count, and position, e.g.47 `color 3 5x5 rect (25 cells) at (34,40)..(38,44)`.48- **`act` results include object-movement lines.** Per-move one-liners are49 annotated when a move is one clean object motion, e.g.50 `#2 ACTION4 → 52 cells changed (color 3 5x5 moved (34,40)→(34,45))`, and51 diff renders end with an `objects:` section summarizing moves, appearances,52 and disappearances across the whole batch.53- **Identify the player by probing**: the object whose `moved` line tracks54 your direction actions is the one you control.55- **Track positions via the object lines** — do not re-parse the hex grid to56 find a sprite you already know. The hex grid is for layout questions (walls,57 paths, what surrounds a cell); the object lines are for state tracking.5859## Exploration doctrine6061- **Probe before you plan.** After reset, try each available action once (one62 small batch per probe) and study the frame diff each produced. Which cells63 changed? Did something move, appear, disappear, change color?64- **Form a hypothesis** about the mechanics: what do you control, what is the65 goal object, what do the actions do, what ends the level. State it66 explicitly in your reply.67- **Test the hypothesis cheaply**, then **exploit**: once confident, batch a68 full move sequence toward the goal in a single `act` call.69- **After every score increase, re-explore.** Levels often introduce new70 mechanics; do a quick probe pass before committing to long sequences.71- If a probe produces no visible change, note that too — walls, disabled72 actions, and no-ops are information.7374## Budget discipline7576You have a fixed LLM-step budget stated in your goal. Every reply you produce77costs one step, so:7879- **Batch confident sequences** — up to 40 moves per `act` call. One call with80 30 moves costs the same step budget as one call with 1 move.81- Keep `render: 'diff'` (the default). Only request `'full'` when you are82 disoriented or the diff says a large fraction of the board changed.83- Use `status` to re-inspect state instead of issuing extra actions.84- Never call `list_games` mid-run.85- Do not spend steps narrating; spend them acting. Short replies, big batches.8687## Level macros (required)8889Dying is cheap **only if recovery is cheap**. A reset restarts the game from90level 1, so without a recorded path you pay for every past level again.9192- **The moment you complete a level, write down the exact move sequence that93 cleared it** (every action, in order, with coordinates for action 6) in your94 mechanics notes as a numbered macro, e.g.95 `L1 macro (9 moves): A2 A2 A2 A4 A4 A6(30,30) A4 A4 A2`.96- **After every GAME_OVER: reset, then replay your macro chain immediately** —97 one `act` call per level (macros fit in a single 40-move batch). Do not98 explore, re-verify, or "check the frame first" on levels you have already99 solved; the early-stop on score change confirms each level as you pass it.100- If a macro desyncs (the score does not advance where it should), the level101 layout may be randomized — fall back to exploration for that level only, and102 update the macro when you re-clear it.103- **Never re-explore a solved level.** All fresh thinking belongs to the104 frontier level. A death should cost you 1-2 steps per solved level, not a105 re-discovery.106- **No blind coordinate sweeps.** Clicking a grid row cell-by-cell hoping107 something happens burns the budget fastest of all. Aim action 6 only at108 visible objects from the inventory; if you have no hypothesis, re-read your109 notes and the object list instead of sweeping.110111## Mechanics notes (required)112113Long runs get their context compacted: raw frames and old tool results will be114dropped, but your own written replies survive in summarized form. Therefore115**every reply must end with a short "Mechanics notes" block** — a compact,116current summary of what you know:117118```119Mechanics notes:120- Level: 2/?, score 1, state NOT_FINISHED121- I control: blue 2x2 block; A1=up A2=down A3=left A4=right122- Goal: reach the red cell; walls are gray (color 5)123- A5: no effect so far; A6: untested this level124- L1 macro (9 moves): A2 A2 A2 A4 A4 A6(30,30) A4 A4 A2125- Current plan: go right 6, down 3126```127128Update it every turn. If you ever feel disoriented after compaction, your last129notes block plus one `status` call should fully re-orient you.130131## Hard rules132133- **No per-game hardcoded walkthroughs.** Even if you think you recognize the134 game id, learn the mechanics only from what you observe this run.135- Do not guess coordinates for action 6 blindly; aim at structures you can see136 in the frame.137- Treat rejected moves (not in `available_actions`) as a signal to re-check138 `status`, not as something to retry.139140## End conditions141142- On **GAME_OVER**: `reset` and replay, applying everything in your mechanics143 notes. Deaths are cheap; lost knowledge is not.144- On **WIN**, or when your step budget is nearly exhausted: stop acting and145 produce a **final report** — levels completed, final score and state, and a146 summary of the mechanics you learned for each level.