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.



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.
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, efforthigh, 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.
| Game | Zero | PPO 100M | PPO 500M | Astra | Claude #1 | #2 | #3 |
|---|---|---|---|---|---|---|---|
| Breakout | 0.5 | 15.8 | 25.3 | 517.4 | 30.0 | 449.7 | 261.5 |
| Seaquest | 0.1 | 5.6 | 88.9 | 53.1 | 7.4 | 7.5 | 51.7 |
| Asterix | 0.5 | 25.8 | 55.2 | 53.2 | 33.0 | 23.4 | 45.6 |
run.jsonThree points help to read these numbers.
- PPO is a best-of-seeds number. Astra and each Claude attempt are single replies. PPO is the best of 10 training seeds, or of 3 seeds for Seaquest at 100M and for every game at 500M. For example, Seaquest PPO at 500M scored 88.9 on one seed, and 7.5 and 4.4 on the other two.
- We rescored Astra on our harness. Astra's published networks scored 502.9, 54.6 and 55.4 on the same 1,000 seeds. These agree with the published numbers within about 2 standard errors.
- The spread is real. The standard errors of Claude's scores are 0.2 to 9.3 points. Only Seaquest attempts 1 and 2 (7.41 ± 0.21 and 7.45 ± 0.24) are the same within noise. Seaquest attempt 3 is within noise of Astra (51.7 against 53.1).
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.”
- Layer 1, units 0 to 7, store four lookup tables in the ball weights. Each ball cell holds the column where the ball will reach row 8.
- Units 8 and 9 read the direction of the ball from the ball cell minus the trail cell.
- Layer 2 has 8 AND gates. Only the gate for the current ball direction sends its comparison to the output.
- No unit reads the bricks. All brick-channel weights are zero.
# 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
The three attempts differ in one design choice each.
| Attempt | Score | Design choice | Effect |
|---|---|---|---|
| #1 | 30.0 | Aims 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. |
| #2 | 449.7 | Aims at the ball's column in row 8. | This keeps the ball's direction. With sticky actions off, it never misses and scores 834. |
| #3 | 261.5 | Same 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.
| Game | Failures after a sticky repeat (seeds 0 to 199) | Claude | Astra |
|---|---|---|---|
| Breakout | Misses after a repeated paddle step | 47 of 149 misses (#2) | 4 |
| Seaquest | Deaths after a repeated move into a flagged row | 129 of 200 (#3) | 127 of 200 |
| Asterix | Deaths after a repeated up or down move | 116, 175, 168 of 200 | 45 of 200 |
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.
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.8BandRikiyaT/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
... * 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]
... 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}
| Model | Seed | Tokens | Answer | Tail compression |
|---|---|---|---|---|
| Base | 0 | 32,768 | none, repeats “Wait, 14² = 196” | 41.2× |
| Base | 1 | 32,768 | none, repeats “Wait, 196 / 56?” | 39.2× |
| Edited | 0 | 13,106 | 9, correct | 3.5× |
| Edited | 1 | 12,612 | 9, correct | 2.6× |
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.
- Parser. The parser reads Astra's three replies to Astra's published networks exactly. The maximum difference is 0.
- Scorer. Astra's networks score within about 2 standard errors of the published means.
- Audit. A workflow of 51 agents compared the parser, observation channels, policy, scorer and run settings with the prompts. It found 13 distinct candidate issues. Three verifiers voted on each issue.
- Result of the audit. Four issues passed, each by 2 votes to 1. All four are edge cases in the parser or in cut-off replies. A stricter reader then read every reply again. All 10 networks were identical, so the scores stand.
- Clean areas. The audit found no problem in the channels, the action map, sticky actions, softmax sampling or the 10,000-step cap.
Differences from the paper
| Paper (Astra) | This replication (Claude) | |
|---|---|---|
| Replies per game | 1 | 3, reported as best and median |
| Reasoning effort | xhigh (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 cap | not stated | 64k for Breakout and Asterix (never reached). 128k for Seaquest |
| Context | prompt, plus Codex instructions and notices (about 3k tokens) | prompt, plus the same one-line system text |
| Reasoning shown | summaries | summaries (does not change behaviour or cost) |
| Analysis | none | Claude Opus 5.5 agents with tools |
Cost and time
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.
- Editor calls. The 10 logged calls cost $11.15: 50,295 input tokens and 547,286 output tokens at $4 and $20 per million. A stopped Seaquest call returned no usage. We estimate it at $0.60.
- Agent workflows. The analysis, audit and fact-check workflows used 86 agents and about 9M tokens. They ran in Claude Code and are not in the $11.75.
- Local work. Scoring, GIFs and Act 2 ran on the Mac mini at no cost. Act 2 ran in parallel for 67 minutes.
Limits of this replication
- Small sample. We have three replies per game. The data cannot tell how often Claude finds each plan.
- One effort level. Claude ran at effort
high, one level below the paper'sxhigh. - Patches by agents with tools. All patches and counterfactuals came from analysis agents with a simulator and Astra's network. They measure how much a mechanism matters. They do not measure what Claude writes in one reply.
- Seeds. Most mechanism counts use seeds 0 to 199. Only the headline scores use all 1,000 episodes.
- The Qwen check is small. It uses one problem that favours the edit, and two seeds per model. It ran in transformers, not vLLM, with a presence penalty that we wrote by hand. Its result applies to the paper's edit, not to Claude.
- Single source. The original paper is a blog post. It is not peer reviewed. Astra's numbers come from its logs.
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/