Sparks of Weight-Space Programming, replicated:Can Claude also write neural network weights from scratch?

We gave Claude Opus 5.5 the prompts that GPT-6 Astra got in Experiment 5. Claude wrote working networks for all three games. Its best replies come close to Astra. Its typical replies do not.

TL;DR

Partly. Claude Opus 5.5 can write a working game-playing network as text, in one reply, with no tools and no training.

We used the paper's prompts byte for byte and the paper's scoring protocol. We changed only the model that writes the weights. Each game got three replies.

In each game, one of the three replies came close to Astra: 87%, 97% and 86% of its score. The median replies reached 51%, 14% and 62%. Eight of the nine networks beat PPO trained for 100 million steps.

In every game, at least one reply found Astra's strategy without access to Astra's replies. In Breakout and Asterix, the best networks lose to Astra mainly on sticky actions. A sticky action is a 10% chance that the game repeats the previous action.

We also replayed the paper's Qwen3.5-0.8B edit on one math problem. Astra wrote that edit, so this part tests the paper and not Claude. The base model repeated the same lines until the token limit. The edited model gave the correct answer.

The editor calls cost about $11.75.

Breakout, seed 7. Left: zero weights, the paddle does not move. Middle: Astra's network. Right: Claude's attempt 2. Both written networks follow the ball and clear bricks.
0.5Zero weights
517.4Astra (GPT-6)
449.7Claude, attempt 2
Figure 1. The same game seed (7), first 400 steps, for three networks: zero weights, Astra's network and Claude's best attempt. Nobody trained these networks. Each model wrote its weights as text. Scores are means over 1,000 episodes.

The question

The post by Takehi et al. shows that GPT-6 Astra can write neural network weights directly as text. In Experiment 5, Astra wrote a policy network for three MinAtar games, in one reply per game. It had no data, no gradients and no tools. Its networks beat PPO trained for 100 million steps.

One model is one data point. Thus we asked a simple question. Can another frontier model do this too? We kept the prompts, the network and the scorer the same. We changed only the model that writes the weights.

Claude Opus 5.5 has a training cutoff of June 2026. The post appeared on November 2, 2026. Thus Claude did not see Astra's replies or networks.

Experiment 5, replicated

Can Claude write weights from scratch?

Each game gets the paper's prompt, without changes. The prompt gives the game rules, the game source code, the network layout and the scoring rules. It asks for the weights as statements in a small edits language, for example W1[540:600:6, 0] = [0,-1,-2,...]. All weights start at zero.

Claude wrote one reply per attempt, with no tools. The network did not play before we scored it. We scored each network on 1,000 episodes with the paper's protocol.

Setup
  • Games: Breakout, Seaquest and Asterix from MinAtar 1.0.15, on a 10×10 grid
  • Network: 600 → 32 → 32 → 6 (tanh), the same shape as the PPO networks. Every weight starts at 0
  • Input and output: the grid in 6 channels (player, danger, reward, projectile, trail, gauge), and 6 action logits (no-op, left, up, right, down, fire)
  • Editor: Claude Opus 5.5 (claude-opus-5-5), adaptive thinking, effort high, one reply, no tools
  • Output cap: 64k tokens for Breakout and Asterix, 128k tokens for Seaquest
  • Scoring: 1,000 episodes on seeds 0 to 999. Actions are sampled from the softmax. Sticky actions 0.1. At most 10,000 steps per episode
  • Attempts: 3 per game. We report all three, the best and the median
  • Hardware for scoring: a Mac mini (Apple M4, 16 GB)

Claude's best networks reach 87%, 97% and 86% of Astra's score. In every game, the best network and the median network beat PPO trained for 100 million steps. All three Breakout networks also beat PPO trained for 500 million steps.

GameZeroPPO 100MPPO 500MAstraClaude #1#2#3
Breakout0.515.825.3517.430.0449.7261.5
Seaquest0.15.688.953.17.47.551.7
Asterix0.525.855.253.233.023.445.6
Table 1. Mean score over 1,000 episodes. PPO and Astra are the paper's published numbers. Zero weights and Claude were measured here. The best Claude attempt per game is in orange.Data: runs/scoreboard.txt and each attempt's run.json
Figure 2. One reply can land anywhere from PPO-100M level to near Astra. Each game has its own linear scale. The dashed line marks Astra's score. Zero weights score 0.1 to 0.5, at the left edge.

Three points help to read these numbers.

The paper reports one reply per game. Our three replies per game cover a wide range. Thus one reply is a weak measure of this ability. Our plan set a rule before the run: if Claude beats PPO at 100M steps in every game, frontier models probably share the ability. Claude meets this rule. It does so reliably only at PPO-100M level, and at Astra's level only in some replies.

How does Claude do it?

We read each reply and probed each network in the simulator. Nine analyst agents did this work, one per attempt. Eighteen checker agents tried to refute each claim, two per attempt. We removed the 28 claims that a checker refuted. All agents were Claude Opus 5.5 with tools. No human checked the mechanism claims.

Each network is exactly the edits in its reply. All 1,396 edit statements in the nine replies parsed with no errors. Thus no attempt failed because of the parser. Most mechanism counts below use seeds 0 to 199.

Breakout: the same machine as Astra, with a different aim

All three attempts found the same design as Astra, independently. The design predicts where the ball will land and moves the paddle there. Attempt 2 is the cleanest example. Its reply states the plan in one line: “Strategy: predict where the ball will land and wait there.”

# unit 0: R_D+ (descent, dx=+1), unit 1: L_D+
W1[3:600:6, 0] = [8,9,9,8,7,6,5,4,3,2,
 7,8,9,9,8,7,6,5,4,3,
 6,7,8,9,9,8,7,6,5,4,
 5,6,7,8,9,9,8,7,6,5,
 4,5,6,7,8,9,9,8,7,6,
 3,4,5,6,7,8,9,9,8,7,
 2,3,4,5,6,7,8,9,9,8,
 1,2,3,4,5,6,7,8,9,9,
 0,1,2,3,4,5,6,7,8,9,
 0,1,2,3,4,5,6,7,8,9]
W1[540:600:6, 0] = [0,-1,-2,-3,-4,-5,-6,-7,-8,-9]
W1[:, 0] *= 10
Figure 3. The first statements of Claude's Breakout attempt 2, as written in the reply. The 10×10 table gives each ball cell its predicted column on row 8, for a ball that falls to the right. Walls fold the path back. The paddle row subtracts the paddle column. The unit is on when the target is to the right of the paddle.Reply: runs/claude-opus-5-5/breakout/attempt2/answer.md

The three attempts differ in one design choice each.

AttemptScoreDesign choiceEffect
#130.0Aims at the cell where the ball lands in row 9.A catch there reverses the ball. After 21 bricks, the game repeats every 36 steps. Retargeting gives 147.5.
#2449.7Aims at the ball's column in row 8.This keeps the ball's direction. With sticky actions off, it never misses and scores 834.
#3261.5Same as #2, except the table for a rising ball.It assumes a bounce at row 2, not row 4. With #2's table, it scores the same as #2 on all 200 seeds.

Attempt 2 has one weak point. Astra accepts either valid catch cell in rows 6 to 8. Claude's network steps toward a single cell. If the game repeats that step, the paddle overshoots and misses. This causes 47 of its 149 misses. Astra has 4 such misses.

An analysis agent put two parts of Astra's network into attempt 2: the catch tolerance (54 weights) and the target for a ball on row 1 (40 weights). After this change, attempt 2 played the same as Astra on all 200 test seeds.

Seaquest: one attempt found Astra's plan, two built turrets

Attempt 3 (51.7) parks the submarine at column 8, faces left and fires. It moves only up and down. Astra uses the same plan at column 5. In the reply's own words: “The submarine parks at column 8, facing left, and fires along its row.”

Attempt 3 kills faster than Astra, 3.7 against 3.3 kills per 100 steps. It also dies sooner, after 1,241 steps against 1,432. It goes up for air late, when oxygen falls below 40. Astra goes up below 60. Thus attempt 3 runs out of oxygen in 35 of 200 episodes, and Astra in 5.

Attempts 1 and 2 (7.4 and 7.5) stay in the middle of the screen and turn to face enemies. They read their own position through windows fixed to absolute columns. Enemy trails and divers confuse these windows. The submarine dies after about 300 to 350 steps.

Asterix: Astra's strategy, without its lookahead

All three attempts lock the player to column 5. The player moves up and down to avoid enemies and collect treasure. Astra does the same.

No Claude attempt checks the row two steps away. A sticky repeat of an up or down move lands the player there. These repeats cause 116, 175 and 168 of 200 deaths in attempts 1, 2 and 3. Astra loses 45 of 200 this way.

Astra's reply adds a sticky-action lookahead on purpose. An analysis agent set its 12 lookahead weights to zero. Astra's score then fell from 57.7 to 16.6.

Claude's choices for a single step are cleaner than Astra's. Attempt 3 never chose a fatal move when a safe move was available. Astra did so in 101 of its 200 deaths. With sticky actions off, attempt 3 scores 174.8 and Astra scores 70.9. Attempt 3 also collects 76% of the treasure, and Astra 68%.

“an unavoidable but minor risk”

Claude's reasoning summary for Asterix attempt 3, about a sticky repeat into a blocked row. The checkers found no evidence that this remark caused the missing check.

Sticky actions separate the best networks from Astra

In each game, at least one Claude attempt found Astra's strategy. In Breakout and Asterix, all three attempts did. For the best attempts in these two games, the remaining gap to Astra comes from sticky actions. Claude's designs look one step ahead. Astra's designs absorb a repeated action.

GameFailures after a sticky repeat (seeds 0 to 199)ClaudeAstra
BreakoutMisses after a repeated paddle step47 of 149 misses (#2)4
SeaquestDeaths after a repeated move into a flagged row129 of 200 (#3)127 of 200
AsterixDeaths after a repeated up or down move116, 175, 168 of 20045 of 200
Table 2. In Seaquest, Claude and Astra use the same one-row check and lose about equally to sticky actions. With sticky actions off, they score 113 and 106. In Seaquest, the clearer difference is the late trip up for air.Data: runs/analysis/analysis_*.json

The weaker attempts fail for other reasons. Breakout attempt 1 aims at the wrong catch cell. Seaquest attempts 1 and 2 misread their own position. Asterix attempt 1 collects too little treasure.

Small patches close the gap for the best attempts. Analysis agents changed 26 to 94 parameters in each best network. These patches brought each best attempt to Astra's level or higher on seeds 0 to 199. The agents had Astra's network for comparison. Thus these patches do not show what Claude can write by itself in one reply.

The paper's Qwen edit, replayed

This part does not test Claude. Claude did not write this edit. Astra wrote it for the paper. We ran the paper's published edited model next to the base model. This part shows only whether the paper's edit works as the paper says.

Experiment 8, replayed

Does the paper's Qwen edit stop reasoning loops?

In the paper, Astra had to make Qwen3.5-0.8B better at math, with no gradients. Astra found weights that cause reasoning loops. Qwen's own model card warns about these loops. Astra changed 131,072 weights, 0.016% of the model. These are 64 columns in each of two matrices: the down_proj matrices of layers 15 and 19.

The edit raised MATH-500 accuracy from 7.9% to 48.1%. Answers cut off at the token limit fell from 93% to 33%.

We did not make a new edit. We replayed the paper's edit on one problem and compared the base and edited models. The edited checkpoint is a rebuild on Hugging Face. Its two edited tensors match the sha256 hashes in the paper's manifest. We did not compare its other tensors with the base model.

Setup
  • Problem: MATH-500 number_theory/572, “How many positive whole-number divisors does 196 have?” The answer is 9
  • Models: Qwen/Qwen3.5-0.8B and RikiyaT/Qwen3.5-0.8B-weight-space-programming, at pinned revisions
  • Sampling: the paper's profile. Thinking on, the paper's prompt suffix, temperature 0.6, top_p 0.95, top_k 20, presence penalty 1.5, at most 32,768 new tokens
  • Runtime: Hugging Face transformers on the Mac's GPU (MPS, bfloat16). The paper used vLLM. We wrote the presence penalty by hand with vLLM's rule
  • Seeds: 0 and 1, for each model
Base model, seed 032,768 tokens · limit reached
...
*   Wait, $14^2 = 196$.
*   So divisors of $196$ are
    divisors of $14^2$.
*   Wait, $14^2 = 196$.
*   So divisors of $196$ are
    divisors of $14^2$.
*   Wait, $14^2 = 196$.
*   So divisors of $196$ are
    divisors of $14^2$.
*   Wait, $14^2 = 196$.
*   So divisors of $196$ are
    divisors of $14^2$.
*   Wait, $14^2 = 196$.
*   So divisors of $196$ are
    divisors of $14^2$.
[token limit: no answer]
Edited model, seed 013,106 tokens · finished
...
For $n = 196 = 2^2 \times 7^2$:
*   The exponent of 2 is $e_1 = 2$.
*   The exponent of 7 is $e_2 = 2$.

Using the formula:
$$d(196) = (2 + 1)(2 + 1)$$
$$d(196) = 3 \times 3$$
$$d(196) = 9$$

So, the total number of positive
whole-number divisors is 9.

\boxed{9}
Figure 4. The last lines of each output. The base model repeats two lines until the token limit. The edited model finishes its reasoning and gives the correct answer.Transcripts: runs/act2/act2_transcripts.json
ModelSeedTokensAnswerTail compression
Base032,768none, repeats “Wait, 14² = 196”41.2×
Base132,768none, repeats “Wait, 196 / 56?”39.2×
Edited013,1069, correct3.5×
Edited112,6129, correct2.6×
Table 3. Tail compression is the zlib ratio of the last 4,000 characters. A high ratio means the text repeats.

Seed 1 shows the change most clearly. The base model checks if 56 divides 196, then repeats the same check until the limit. The edited model makes the same check once, rules out 56 and continues. It then lists all nine divisors: 1, 2, 4, 7, 14, 28, 49, 98 and 196.

One problem is a demonstration, not a measurement. We chose a problem where the paper's base model failed in 4 of 4 samples and the edited model passed in 4 of 4. 86 of the 500 problems show this pattern.

The paper also shows that the edit removes loops. It does not add ability. On Gemma 3 270M, which rarely loops, no edit by Astra changed MATH-500 by more than about 1 point.

Checks on the harness

A replication is only as good as its harness. Before we changed the model, we made sure that the harness reproduces the paper.

Differences from the paper

Paper (Astra)This replication (Claude)
Replies per game13, reported as best and median
Reasoning effortxhigh (Codex CLI)high (adaptive thinking). Opus 5.5 also accepts xhigh and max. We did not change the effort, so its effect is unknown
Output capnot stated64k for Breakout and Asterix (never reached). 128k for Seaquest
Contextprompt, plus Codex instructions and notices (about 3k tokens)prompt, plus the same one-line system text
Reasoning shownsummariessummaries (does not change behaviour or cost)
AnalysisnoneClaude Opus 5.5 agents with tools

Cost and time

≈ $11.75API cost of the editor calls
547,286output tokens in the 10 logged calls
4.7–14.1minutes per reply
≈ 1.5 hfrom the first API call to the draft report

Claude used more output tokens than Astra in 8 of 9 attempts. Most of these tokens are thinking. The Seaquest replies used 71.7k to 80.4k tokens each.

Figure 5. Output tokens per reply, thinking included. The first Seaquest reply at a 64k cap used all its tokens for thinking and returned no network. We then ran all three Seaquest attempts at a 128k cap.Data: runs/cost.json

Limits of this replication

What comes next?

Four tests can answer the open questions. First, run many more replies per game, to measure how often Claude finds each plan. Second, run Claude at effort xhigh and max, to match the paper's setting. Third, run the same prompts on other frontier models. If more models pass the PPO-100M bar, the evidence becomes stronger that weight-space programming is a general skill of frontier models. Fourth, give Claude the task of Experiment 8: remove the loops in Qwen3.5-0.8B by editing its weights. Then score that edit on all 500 MATH-500 problems. This test measures Claude, not the paper's edit.

Code, data and logs

All code, replies, thinking summaries, networks, scores and agent outputs are at github.com/dhaneshnm/wsp-replication. Start with RESULTS.md. The original logs are at github.com/RikiyaT/lm_understand-logs (CC BY 4.0).

Writing style

This report follows the rules of ASD-STE100 Simplified Technical English where possible: short sentences, active voice, simple tenses and one topic per sentence.

Acknowledgements

Thanks to Rikiya Takehi, Jayden Teoh, Alex Zhang and Omar Khattab for the post and for the public logs. Without the logs, this replication was not possible. The games come from MinAtar by Kenny Young and Tian Tian (GPL-3.0). The math problem comes from MATH-500 (MIT).

License

The code and results of this replication are under the MIT License. Third-party material keeps its own license. See NOTICE.md.

Original work

Takehi, R., Teoh, J., Zhang, A., and Khattab, O. (2026).
Sparks of Weight-Space Programming: LLMs can natively read
and write neural network weights. Blog post, MIT CSAIL.
https://rikiyat.github.io/blog/weight-space-programming/