Neural networks · interpretability · direct weight editing

Weight-Space
Programming

How an LLM can turn a program into neural weights—and diagnose a failure inside another model.

A visual tutorial built from the MIT CSAIL research post, its released experiment logs, a video analysis, one local-model replication, and two published critiques. Numbers checked against those records on November 3, 2026.

Intuition → mathematics → evidenceLabs run on the released weightsNo external assets required
The central idea: instead of asking an optimizer to discover every weight update from a loss, ask a capable language model to reason about what a network computes and write a structured change. In the headline test, GPT-6 Astra edited Qwen3.5-0.8B: MATH-500 rose from 7.9% to 48.1% while the share of answers that hit the output limit fell from 93.0% to 33.1%. That measures the repair of one failure. It does not show a general method for installing new mathematical ability: the test on a model that rarely loops, Gemma 3 270M, moved MATH-500 from 6.8% to at most 7.7%.
00 / The essential result

What happened—and what to learn from it

Weight-Space Programming (WSP) is the authors’ name for using a general-purpose large language model (LLM) to inspect, repair, or construct a neural network’s numerical parameters directly, without an optimizer writing the numbers. Takehi, Teoh, Zhang and Khattab’s November 2 research post reports eight experiments, ranging from tiny game policies to a pretrained language model. [1]

The editor in every experiment is Astra: OpenAI’s gpt-6-astra, called through the Codex command-line tool with every built-in tool switched off. The harness audited all 1,125 released turns as free of built-in tool calls. Where code was allowed, Astra wrote a Python block and the authors’ sandbox ran it. [27] The headline target is Qwen3.5-0.8B, a 0.8-billion-weight open model that can write out its reasoning before it answers (“thinking mode”). MATH-500 is a 500-problem mathematics benchmark.

7.9 → 48.1%Reported MATH-500 mean accuracy
93.0 → 33.1%Answers hitting the output limit
2 matrices64 selected columns in each

The video’s first practical rule is about method: before you read a benchmark jump as new intelligence, identify which failures disappeared. Here, 576 of the 579 rescued practice answers (99.5%) had been cut off at the output limit before the edit, after repetitive reasoning. The gain holds under the measured protocol. “Six times smarter” claims more than that measurement supports, because the protocol measures finished, graded answers. [22] [2] [3]

Construction

Write an algorithm into weights

With the architecture and game rules in hand, reason out a policy and encode its operations in neurons. This can start from an all-zero network.

Repair

Alter a learned computation

Inspect a pretrained model, find a recurring failure, propose a small intervention, and test whether it fixes that behavior without damaging useful behavior.

Three published responses to test against the data

Simon Willison separates two questions the post combines: what a model can do with raw weights and no tools, and what a model armed with code can do to another model. Willison then showed that a laptop model, Qwen 3.8 27B, named 3 of 4 games from the same prompts. [19] Matthew Honnibal calls the post misleading on this point: raw weights in the prompt appear only in Experiments 1, 2 and 4, on networks of 17,253 to 171,664 weights, and every experiment on a real language model uses Python. [20] Sean Goedecke argues that a competent human researcher could do the same tasks, and that the game test reduces to a three-line norm calculation. [21] Section 02 reruns that calculation on the released weights, and sections 04 to 08 check the other claims against the logs.

Evidence labels throughout: “reported” refers to the authors’ measurements; “real data” means this page computed the values from a released file; “derivation” is mathematical explanation; “illustration” denotes a teaching example, not a reconstruction of their model.

01 / Foundations

Weights are a program’s numerical machinery

A weight is a numerical parameter used in a network’s computation. A bias is an additive parameter; both belong to the parameter collection. An activation is an intermediate value produced for a particular input. Weights usually persist across inputs; activations change with the input. A multilayer perceptron (MLP) is a stack of layers of the kind defined next. A policy network maps a game observation to one score per action. PPO (proximal policy optimization) is a reinforcement-learning algorithm that trains such a policy from experience of playing.

Let x be an input vector, W a weight matrix, b a bias vector, h a hidden activation, and φ a nonlinear function such as ReLU, which replaces negative values with zero. One layer computes:

h=φ(Wx+b)

A forward pass evaluates this computation through the network. A gradient tells us how a loss—a numerical error measure—changes with each parameter. Let θ denote all model parameters, L the loss, η the step size, and ∇ the gradient operator. A basic training update is:

θ′=θ−η∇θL(θ)

For a WSP edit, let Δ be the change designed by the LLM. Then the update is simply θ′ = θ + Δ. The difficult work is choosing a meaningful Δ: for instance, implementing a paddle controller or changing a particular direction written into a language model’s internal state.

MethodWhat changes?Where does the change come from?
Prompt engineeringInput textInstructions and examples
Fine-tuningModel parametersTraining loss and an optimizer
LoRAA low-rank parameter updateUsually gradient-based training; LoRA means low-rank adaptation
Activation steeringIntermediate values during executionA chosen intervention applied when the model runs
Weight-Space ProgrammingPersistent parametersAn LLM’s proposed numerical construction or repair, sometimes tested with feedback

No gradients does not mean no optimization. The Qwen experiment iterates over candidate edits using practice results. At the system level, it is a feedback-driven search over interventions. “No training” means no target-model training procedure was allowed in this experiment. The editor’s own prior training, the target’s pretraining, evaluation compute, and human-designed tools still matter.

02 / Reading a network

How can numbers reveal behavior?

Experiment 1. The authors trained PPO policies on their own 10 × 10 grid versions of four games. All four networks have the same shape (500 → 32 → 32 → 5, tanh, 17,253 weights), the same 5 input channels per cell (agent, moving objects, reward targets, obstacles, previous frame), and the same 5 actions. Astra received one network per conversation: the channel and action meanings, and all the weights as text rounded to 3 decimals. No game was named and no candidate list was given. It had no tools and one reply. It named a correct game for 4 of 4 networks. [4]

Three limits apply to that 4 of 4. The Freeway answer was “Frogger”, which the scorer maps to Freeway by keywords. Each network is the best of 3 seeds for its game. Four networks do not estimate an accuracy rate.

The prompt gives the numbers a coordinate system. Input i = (row × 10 + column) × 5 + channel. So input 405 is row 8, column 1, channel 0. Astra quoted weights of 4.066 and −4.013 for that input, and the released file holds those two values. If many strong connections read the player channel along the bottom row and the outputs separate left from right, a paddle controller is a plausible explanation. This is inference from structure, not a general decoder that translates arbitrary weights into English.

The hidden dependency: representation. A weight value has meaning only in relation to its inputs, outputs, neighboring layers, and nonlinearities. A large number alone is not a “math neuron” or a “loop neuron.”

A symmetry that makes this difficult

Let W₁ and W₂ be the input and output matrices of a hidden layer, with biases omitted. Let P be a permutation matrix that reorders hidden neurons. For an elementwise activation φ, define new matrices W₁′ = PW₁ and W₂′ = W₂Pᵀ, where superscript T denotes transpose. Then:

W2′φ(W1′x)=W2φ(W1x)

The network’s function is unchanged even though many weight positions move. Raw coordinates are not a unique description of a learned function. Reliable interpretation must track relationships rather than attach permanent meanings to neuron numbers.

What survives the symmetry when inputs are labeled

Let ej be the vector with a one in position j and zeros elsewhere. Then W₁ej is the column of W₁ that holds every weight leaving input j. A permutation matrix only reorders entries, so it keeps Euclidean length: PᵀP = I. Therefore:

‖W1′ej‖2=‖PW1ej‖2=‖W1ej‖2

The total weight leaving a labeled input has the same size under every reordering of the hidden neurons. This is why Experiment 1 is tractable: each input already names a cell and a channel, so one number per input gives a map of the board. The argument requires labeled inputs. Experiment 3 removes the input layer, so this map does not exist there. The released files store inputs as rows (h1 = tanh(x @ W1 + b1)), so the code below computes the same quantity as a row norm.

Real data · released weights

Name the game from the first layer

Pick a network by its ID. Each square is one grid cell. Brightness is the length of the 32 weights leaving that input; the initialization-scale floor is about 0.37. The orange outline marks a cell Astra quoted. Form your guess, then open the reveal.

Per-input weight norm for one policy, one panel per input channel, from actor/dense1/kernel in the network’s .npz file. Rows 0–9 run top to bottom. Bright cells show where the first layer learned to read; they do not show what the game is called.
Reveal the game and Astra’s answer

NetworkLargest row, agent channelLargest column, agent channelReward cells with norm above 1.0Geometry a script can report
Breakout a9f535cc95.9% (row 8)32.9% (column 8)23, all in rows 1–3Agent stays on one row; targets form a band above it
Pong dfc6cb6524.1% (row 2)94.5% (column 1)0Agent stays on one column at the left edge
Pac-Man bdf9927917.1% (row 4)16.4% (column 5)17, across rows 1–8Agent roams; the agent panel shows a symmetric corridor pattern
Freeway 0bbcc3ea25.6% (row 6)28.6% (column 4)8, all in row 1Columns 3–5 hold 75.7% of the agent channel; targets form one row at the top

Shares are of squared norm. An even spread over the 8 playable rows would give 12.5% per row.

Reproduce the table: the NumPy recipe
import numpy as np

d = np.load("a9f535cc.npz")  # exp1_which_game/networks/ in the logs
W1 = d["actor/dense1/kernel"]  # 500 x 32, inputs as rows
norms = np.linalg.norm(W1, axis=1).reshape(10, 10, 5)
agent = norms[:, :, 0] ** 2
print("share per row:", np.round(agent.sum(axis=1) / agent.sum(), 3))
print("share per col:", np.round(agent.sum(axis=0) / agent.sum(), 3))

What this shows and does not show. Goedecke published this same norm calculation and its heatmaps as the case that the task is within a person’s reach. [21] The table supports part of that case: a script with no game knowledge finds a one-row agent, a one-column agent, and a band of targets. The script does not name a game. That final step needs knowledge of what small grid games look like, and Astra supplied it in 833 to 1,034 reasoning tokens. The logs do not establish how: the released reasoning summaries quote individual weights and patterns, and they do not show a norm calculation.

The same prompts on other models

Willison ran the released prompts unchanged on other models, one run per prompt. [19]

ModelBreakoutPongPac-ManFreeway
GPT-6 Astra (hosted)Correct, 99%, 107 sCorrect, 96%, 83 sCorrect, 96%, 71 s“Frogger” (scored correct), 97%, 71 s
Qwen 3.8 27B (17 GB file, on a laptop)Correct, 88%, 52 m 25 sCorrect, 75%, 1 h 4 m 54 sCorrect, 72%, 46 m 12 sWrong: “Pac-Man-like grid game”
Kimi K3.1 Pro (via OpenRouter)Correct, 9 m 41 sNot reportedNot reportedNot reported

On Pac-Man, Qwen 3.8 used 43,506 reasoning tokens against Astra’s 1,034, about 42 times as many. Elapsed times are not comparable, because the hardware differs. So the ability to name these games from weights is not limited to one hosted frontier model, on this evidence of 3 correct answers in 4 runs. Two details of the Qwen answers need a check against the files. They describe an “8×8” board, which matches the playable interior of the 10 × 10 grid in the prompt. The Pong answer places the paddle on the right side, while column 1, at the left edge, holds 94.5% of the agent channel: the game name is right and that detail is wrong. Willison’s judgment is that a sufficiently experienced person with a notepad and a pencil could get there with enough effort.

Experiment 2: a diffusion model’s output layer

A diffusion model generates an image by removing noise step by step. The authors trained three such models (DDPM, MLP 160 → 64 → 64 → 144, ReLU, 23,824 weights) on filled circles, filled squares, and filled triangles at 12 × 12 pixels. Astra received all the weights as text and an instruction not to compute any forward pass. It named the right shape for 3 of 3 models at 84%, 77% and 88% confidence. It also described every shape as a hollow outline. A shape classifier sorted 99.4%, 98.4% and 100% of 1,000 generated samples into the intended shape, and those samples are filled. [5]

Real data · released weights
Left to right: the three strongest output units of W3 as 12 × 12 images (teal positive, orange negative), Astra’s drawing from its answer, and one sample the model generates. Only the top 3 of 64 units per model are shown. Several pair an orange edge with a teal patch beside it. The generated shapes are solid.

The post says each hidden unit’s output weights draw one piece of the shape’s edge. Fig. 2 supports the edge and adds a detail: a pixel value of −1 is black and +1 is white, so an orange edge writes dark pixels, and in several of these units a teal patch beside it writes bright ones. A patch next to an edge is compatible with a solid shape, which the outline drawings omit. This is a visual reading of 9 of the 192 output units, so treat it as a lead and not a measurement. The authors read the outline error as evidence that Astra reads weight geometry and does not simulate the network. That is their inference from one kind of mistake on three models.

Experiment 3: no labeled inputs, Python allowed

The third test removes the labels. Three character-level language models (4 layers, 6 attention heads per layer, 7.16 million weights) were trained on Python code, Japanese in Latin letters (romaji), or English Wikipedia. Astra received only the four middle blocks, 7,084,032 numbers, loaded in a Python sandbox rather than pasted into the prompt. It could compute linear algebra on the matrices, used 6 to 11 of 100 allowed runs, and could not run the network or any layer on any input. It was told the three candidate texts and asked which applied, and what each head does. [6]

A copying (induction) head is an attention head that finds an earlier occurrence of the current text and attends to what followed it. The authors measured each head by running the network on a random 40-character string repeated twice. Astra never saw this measurement.

Real data · released ground truth
Measured induction score for all 24 heads of each network (rows are layers 0–3, columns are heads 0–5), from eval/heads.json. Teal cells exceed the cutoff. Orange outlines mark the heads Astra labeled “copy” in both of its conversations, from eval/scores.json.

Move the cutoff in Fig. 3 and read the match. At the post’s cutoff of 0.2, Astra named exactly the 5 measured copying heads, in both conversations for each network. The result does not depend on the exact cutoff: measured scores fall into two groups, at most 0.019 and at least 0.220, so any cutoff between them returns the same 5 heads. The logs’ own scoring field true_copy_heads uses 0.3 instead, which keeps only 2 of the 5 heads; the experiment’s README documents this difference. [6]

The language answer is weaker evidence than the heads. Astra was correct for all 3 networks, but this is a choice among 3 stated candidates, and its stated probabilities were 0.48 to 0.62. A uniform random guess would get all 3 right 3.7% of the time ((1/3)³), and the two conversations per network are not independent draws. The authors note that Astra’s method matches Elhage and colleagues’ framework, which the prompt did not mention. [25]

Experiment 7: the case where weights alone failed

The authors fine-tuned pairs of Gemma 3 270M, a 270-million-weight model, in the same way. One copy learned to give the correct answer. The other learned sycophancy: following the user’s suggested answer even when it is wrong. In four attempts with weights and Python, Astra could not tell them apart. Attempts 1–3 answered P = 0.5 for every pair, with “A” as a forced tie-break. The authors stopped attempt 4 after 29–30 runs per pair, with one pair finished. [10]

Astra then received a tool that runs both models on up to 16 texts of its choice and returns only the attention patterns, meaning how strongly each position attends to each other position. It picked the sycophant in all 3 pairs, at 90%, 97% and 55% confidence. In one measurement, from pair 2 over 8 texts, head 10.2 of the honest model puts 94.3% of its attention on the question’s numbers and 0.75% on the user’s answer; the sycophant puts 3.5% and 85.7%. One fact changes how to read this test: the unedited starting model already follows every wrong guess. So the sycophant keeps the starting behavior, and the honest fine-tune is the copy that learned something new (it follows 0.7% to 2.8% of wrong guesses). [10]

All eight experiments, sorted by what Astra could access

ExperimentWeightsWeights in prompt?Python?Runs the target?Reported outcome / limit
1. Identify a game17,253YesNoNo4/4 game identities; best seed per game; one “Frogger” mapped to Freeway [4]
2. Identify generated shapes23,824YesNoNo3/3 shape categories; described outlines although the models generate filled shapes [5]
3. Identify training language7.16MNoYesNo3/3 from 3 stated candidates at 0.48–0.62; all 5 copying heads named [6]
4. Repair a car policy171,664YesNoNo; one recorded episode shown1,024/1,024 test episodes after changing 6,073 weights (3.54%) [7]
5. Write game policies20,486All zeroNoNoBeats PPO at 100M steps in 3 of 3 games; beats PPO at 500M steps in 1 of 3 [8]
6. Write a Go policy1,480,274All zeroYes0–50 passes54.1% and 54.9% wins at 0 passes; 84.0% and 80.8% at 50 passes [9]
7. Identify sycophancy270MNoYesNo, then attention onlyWeights alone failed in 4 attempts; attention tool gave 3/3 [10]
8. Improve math outputs0.8BNoYes10, 25, 50 passesMATH-500 7.9% → 48.1% at 50 passes; Gemma follow-up 6.8% → at most 7.7% [2] [11]

The access columns follow Honnibal’s table [20], checked here against each experiment’s README. Raw floats in the prompt with no tools occur in Experiments 1, 2 and 4 only. The larger the network, the more the result depends on code and on running the target. So the small-network results do not show that Astra read a 0.8-billion-weight model the same way.

03 / Writing a network from zero

Think “compile an algorithm into neurons”

In the writing experiment, Astra received MinAtar game source code and the input/output layout, then specified edits to an all-zero network. MinAtar is a set of small Atari-style games on a 10 × 10 grid. It had no opportunity to try the policy first. The network architecture was 600 → 32 → 32 → 6, with tanh hidden activations, totaling 20,486 parameters. The final reply used a compact weight-edit language, so Astra did not write out every entry: the Breakout reply has 92 statements and sets 815 of the 20,486 parameters (4.0%) to nonzero values, in 501 seconds. [8]

1 / ALGORITHMEstimate where the ball is going.
2 / NEURAL OPERATIONSRepresent prediction and paddle error with hidden units.
3 / PARAMETERSSet connections so the output favors the appropriate action.

A tiny network you can understand completely

The following is our teaching example, not the authors’ policy. Let b be ball position, v horizontal velocity, p paddle position, and τ = 2 the prediction horizon. Ignore walls and collisions. Define the predicted target t = b + τv and error e = t − p. Two ReLU neurons encode leftward and rightward error:

hL=max(0,−e)hR=max(0,e)

For the input column vector x = (b, v, p)ᵀ, the first matrix has rows (−1, −2, 1) and (1, 2, −1). Its biases are zero. The output logits—unnormalized action scores—are 8hL for left, 0.2 for stay, and 8hR for right. Choose the largest logit.

Interactive illustration · exact toy computation

Move the inputs. Watch the weights execute.

BallProjected landing lineHorizontal units 0–9 · no wall reflections · fixed weights

This deliberately simple controller does not play Breakout. It shows how an understood rule becomes matrix entries without any learning step.

Runnable NumPy version: the complete toy network
import numpy as np

# x = [ball position, horizontal velocity, paddle position]
W1 = np.array([[-1., -2., 1.], [1., 2., -1.]])
b1 = np.zeros(2)
W2 = np.array([[8., 0.], [0., 0.], [0., 8.]])
b2 = np.array([0., 0.2, 0.])


def policy(ball, velocity, paddle):
    x = np.array([ball, velocity, paddle])
    h = np.maximum(W1 @ x + b1, 0)
    logits = W2 @ h + b2
    return ["left", "stay", "right"][int(np.argmax(logits))]


assert policy(5, 1, 3) == "right"
assert policy(3, -1, 5) == "left"
assert policy(5, 0, 5) == "stay"
print("All three toy checks passed.")

What the actual game scores establish

GamePPO, 100M stepsPPO, 500M stepsAstra, one reply
Breakout15.825.3517.4
Seaquest5.688.953.1
Asterix25.855.253.2

Reported mean scores over 1,000 episodes per policy, with sampled actions and sticky actions at 0.1. The table uses the authors’ best trained seed for each baseline. [8]

Against 500M-step PPO, Astra’s network scores about 20 times as much in Breakout (517.4 against 25.3), 96% as much in Asterix, and 60% as much in Seaquest. So the video’s point stands that knowing the rules does not guarantee the better player. The result demonstrates useful neural program construction. It is not an equal-information contest: the editor has explicit source code and extensive prior knowledge, while PPO learns through interactions. An additional baseline would separate those effects: a human-written controller compiled into the same architecture under the same information access. Goedecke notes that people have already written small networks by hand, such as the AdderBoard challenge. [21] [28]

Experiment 4: a repair that adds a small program

Kinetix is a physics-control environment. The task is a car that must back up, then drive fast enough to jump a red strip. The trained policy (171,664 weights, PPO, about 1 billion steps) never succeeded in 256 episodes: it drives onto the ramp and stalls. Astra received all the weights as text, the scene, and one recorded episode, with no tools and one reply. It wrote 51 edit statements. The edited policy succeeded in 1,024 of 1,024 test episodes. [7]

The 3.54% figure describes a structural change. Astra took over a few units per layer, set their rows and columns to zero, and wired a separate path that reads position and speed, reverses from rest, switches to full drive at body x ≈ 3.8, and turns off once the green wheel passes x = 0.95. Most of the 6,073 changed entries are those zeroed rows and columns. The trained network keeps control after that point. So the repair is a short hand-written controller placed inside the weights. It does not retune what the policy learned.

Experiment 6: writing past the size of the prompt

A 9 × 9 Go network (243 → 512 × 6 → 82, ReLU, 1,480,274 weights) does not fit in a prompt. Astra wrote it through Python from all-zero tensors, with no training, no fitting to data, and no search. A pass let it play up to 128 games against practice opponents or inspect up to 256 positions. Each budget was run once. [9]

Passes allowedPython runsWins vs small PPO, seed 0Wins vs small PPO, seed 2Wins vs same-size PPO, seeds 0 / 1 / 2
0154.1%54.9%42.6 / 26.3 / 36.3%
101772.9%60.0%Not reported
253076.0%62.3%Not reported
503984.0%80.8%74.2 / 70.0 / 78.5%

Win rates over 2,000 games per opponent. The post’s chart shows only seed 0 of the same-size baseline; all three seeds are listed here.

The 50-pass run used 47 game passes, so it saw at most 47 × 128 = 6,016 games. The same-size PPO baseline trained on 20.5 million games, about 3,400 times as many. That ratio compares different things: Astra starts with general Go knowledge and writes rule code, and PPO starts from nothing. The zero-pass run shows what prior knowledge alone reached: a single 336-line Python run that won 54.1% and 54.9% against small PPO networks and lost to all three same-size PPO networks.

04 / The Qwen experiment

How a loop repair became a math-score jump

The target was the text component of Qwen3.5-0.8B, with 24 layers. Astra could inspect and change weight tensors in a persistent CPU Python session, with at most 300 code runs. A controlled tool executed generations or returned internal measurements. Gradient descent, any fitting of weights to a loss, and running the model in the kernel were forbidden. The editor did not read 0.8 billion decimal numbers in its prompt. It wrote code to inspect selected tensors and propose changes. [2]

  1. Diagnose the failure. Inspect representative generations. The initial batch had 85 of 96 answers reaching the 32,768-token output cap and 11 of 96 correct, and about 95% of the phrases at the end of cut-off answers were duplicates.
  2. Construct a contrast. Compare productive and repetitive continuations of matched contexts, from four matched pairs. A teacher-forced read evaluates supplied text instead of sampling a new continuation.
  3. Locate candidate writers. Find internal directions associated with repetition and MLP components that strongly write along them. Here the MLP is the feed-forward block within a model layer.
  4. Intervene and test. Try different strengths and sites. The records include layer-isolation tests and a norm-matched random-direction control, which test causation more directly than a correlation does.
  5. Freeze the candidate. Retain a sparse edit in the MLP output matrices of layers 15 and 19. Confirm it on practice problems excluded from edit selection, then evaluate separate benchmarks.

The sequence above summarizes the released p50c records; it is not a complete transcript of the search. Layer numbers follow the code’s zero-based indexing. [3] [12]

“50 forward passes” is a budget label, not 50 token predictions. A generation request could answer up to 512 practice problems; an internal read could process up to 1,024 texts. Autoregressive generation itself runs repeated model steps to produce many tokens. There were also 80 Python runs across 158 turns in the reported 50-pass search. [2]

The editor’s kernel had no GPU, but target-model execution occurred through the forward tool. This does not establish that the whole experiment was CPU-only or computationally cheap. The recorded p50c wall time was 20.3 hours, including a 4.7-hour service interruption. That is historical run information, not an estimate for your machine.

The 17 edits of the 50-pass run, in order
TurnWhat Astra did
10Switches off neuron 11 of layer 19, the strongest writer of the loop, as a probe
13One neuron helped (+6 points); removes the loop direction from all of layer 19’s MLP
26Removes the direction from the MLPs of layers 15 and 19
48Strength 1 gained 12.5 points on 256 answers; doubles the strength
51Strength 2 gained 24.6 points; tries strength 3
60Generation will not start; tests two copying attention heads at half output
64The head test never ran; restores strength 1
68Strength 1 makes looping text less likely on new examples; tries strength 2
72Strength 2 holds on new problems (8.2% → 43.0%); tries strength 3
76Strength 3 reaches 48.0% with no answers lost; tries strength 4
88Control: a random direction of the same size
92The control gains +1.6 points; restores strength 4
94, 96Tests layer 15 alone, then layer 19 alone
98Edits only the 64 neurons per layer that write the loop most
103The 64 neurons gained 26.6 points; switches back to the full edit to compare
105The full edit gained the same; keeps the 64 neurons at strength 6, its final edit

Condensed from the post’s run viewer. [1] Two steps failed for harness reasons, which shows the search was not a straight line.

Dose and control

InterventionChange in log-probability of repetitive text, nats per tokenProductive text
Full direction, strength 1−0.02410Reported as “barely changed”
Full direction, strength 2−0.04870
Full direction, strength 4−0.10372
Final edit: 64 columns per layer, strength 6−0.10311−0.00903

A nat is a unit of log-probability. Doubling the strength about doubled the effect (2.0 times from strength 1 to 2, 4.3 times from 1 to 4). The final edit lowers repetitive text about 11 times as much as productive text. The random-direction control gained 1.56 points with a standard error of 3.52, so it cannot be distinguished from zero. [12] These measurements come from a small set of matched contexts inside the run, and Astra chose them.

Three budgets, three different edits

PassesFinal editAstra’s own held-out practice gainMATH-500Cap rate
10Rank-one removal of repetition directions from 30 attention and MLP matrices, layers 8–22, strength 1.5+3.71 ± 1.79 (n = 512)12.3%87.2%
25Zeroes attention head 7 of layer 15 (256 columns)+8.33 ± 1.43 (n = 768)14.1%86.4%
50Direction removal from 64 MLP columns each in layers 15 and 19, strength 6+49.83 ± 1.50 (n = 1,152)48.1%33.1%

Each budget is one run, and the three runs reached three different mechanisms. [29] [30] [12] So the table cannot separate the effect of more passes from run-to-run variation in the search, which matches the video’s point that one run reached 48% and each ran once. The results table in the logs adds other Qwen rows that the post does not report: two runs that submitted no edit under v2 and v3 prompts (0 and 5 passes), a v4 prompt at 10 passes (no edit, 7.9%) and at 25 passes (14.1%), and two candidates that were evaluated but not submitted (8.6% and 10.1%). Four v5 rows have no scores. No row other than the 50-pass run exceeds 14.1%, and the table holds no second 50-pass score. [26]

05 / The mathematics of the edit

A sparse, rank-one intervention at each site

The residual stream is the running hidden-state vector to which model blocks add their outputs. For one edited MLP, let a be its 3,584-dimensional hidden activation and W its 1,024 × 3,584 output matrix. Its contribution is y = Wa. Column j of W says what direction hidden neuron j writes into that 1,024-dimensional state. [13]

What is a “repetition direction”?

It is a vector in internal activation space, not an English instruction and not necessarily one neuron. As a pedagogical construction, let μrep and μprod be the mean hidden states for repetitive and productive contexts. A normalized contrast direction u can be defined by:

u=μrep−μprod‖μrep−μprod‖2

Here ‖·‖₂ is Euclidean length. This equation explains a standard contrast idea; it is not a claim that this single line reconstructs the exact released edit. The final report says the run used four matched contexts and layer-specific unit directions measured at residual outputs 16 and 20. The intermediate activation files and direction files are not included. [12]

The actual final formula

Let m be a vector with 64 entries equal to one and all other entries zero, selecting MLP columns. Let ⊙ denote entrywise multiplication and α the edit strength. With a layer-specific u and m at each site, the logged final edit is:

W′=W−αu[m⊙(uTW)],α=6

The outer product of a column vector and a row vector has rank at most one: its changes all lie along one output direction. The mask makes the change sparse across columns. “Rank-one” describes the structure of the update, not the number of entries it touches. The formula applies before the evaluated checkpoint is rounded to bfloat16, a 16-bit numerical format. [12] [14]

Strength 6 reverses and amplifies; it does not erase

For a selected output column w, write w = w⊥ + cu, where w⊥ is perpendicular to the unit vector u and c = uᵀw. The edited column is:

w′=w⊥+(1−α)cu

At α = 1, the selected column’s component along u disappears. At α = 2, it reverses with equal magnitude. At the actual α = 6, it becomes −5cu: reversed and five times as large. The video says “remove” and the post says “subtracted”; both describe the operation, and neither states this end result. This is a derivation from the logged formula. It does not imply the entire model state is projected or globally reversed; unselected neurons, other blocks, and nonlinear dynamics remain.

Interactive derivation · one selected column in 2D

See what the edit strength actually does

Choose coordinates with u vertical. The original column is w = (2, 1). Its perpendicular component is (2, 0). Values are illustrative.

u direction (+)perpendicular axisoriginal (2, 1)unchanged perpendicular componentedited (2, −5)

The slider shows exact linear algebra for one column. It does not simulate Qwen’s output or predict benchmark accuracy.

How small is “0.016%”?

Two layers × 64 columns × 1,024 rows = 131,072 targeted scalar entries. Dividing by the model’s rounded 0.8-billion parameter label gives approximately 0.0164%. The exact released bfloat16 diff has 130,188 entries with changed bits; 884 targeted values round back to their originals. Thus “targeted entries” and “numerically changed entries” are slightly different counts. [14]

Count is also different from magnitude. The two edited matrices change by about 10.64% and 8.11% in relative Frobenius norm—the square-root-of-sum-of-squares measure of matrix size—while the edit touches 0.0164% of the parameters. The headline percentage uses an approximate denominator; it should not be treated as an exact universal parameter fraction. [13]

06 / Read the benchmark correctly

A real gain with a specific causal story

Reported measurements

Different budgets are separate search runs. These bars are not a learning curve from repeated checkpoints of one run. [2]

Qwen runMATH-500GSM8KIFEvalMATH-500 cap rate
Base7.9%13.8%21.0%93.0%
10-pass edit12.3%25.7%49.0%87.2%
25-pass edit14.1%25.1%39.9%86.4%
50-pass edit48.1%67.1%62.3%33.1%

MATH-500 is a 500-problem mathematics evaluation; GSM8K contains grade-school math word problems. IFEval tests compliance with verifiable instructions. MATH-500 values average four generations per problem; GSM8K and IFEval average two. These are mean accuracies, not “at least one successful answer out of four.” [2]

The MATH-500 increase is 40.2 percentage points, or approximately 6.09 times the baseline score. The ratio is sensitive to how badly the baseline fails: on MMLU-Pro, where the base model hits the cap on 28.9% of answers, the score moves from 40.3% to 45.5%, a ratio of 1.13. Both models used thinking mode, temperature 0.6, top-p 0.95, top-k 20, presence penalty 1.5, and a 32,768-new-token cap.

BenchmarkAccuracy, base → 50-passCap rate, base → 50-passMean tokens, base → 50-pass
MATH-5007.9 → 48.1%93.0 → 33.1%30,868 → 22,037
GSM8K13.8 → 67.1%87.5 → 7.2%29,289 → 11,993
IFEval21.0 → 62.3%74.9 → 2.2%25,296 → 4,241
AMC230.5 → 23.4%99.5 → 50.5%32,680 → 27,465
Minerva Math1.5 → 25.4%98.2 → 25.8%32,302 → 22,486
OlympiadBench1.3 → 21.8%98.7 → 46.7%32,485 → 26,680
MMLU-Pro (1,000 questions)40.3 → 45.5%28.9 → 0.5%13,706 → 7,559
GPQA Diamond22.7 → 36.6%59.5 → 2.4%23,193 → 12,261
AIME 20240.0 → 0.6%100 → 65.2%32,768 → 29,259
AIME 20250.0 → 2.3%100 → 64.6%32,768 → 29,408

From the merged.json files. [31] The two AIME rows are not in the post. The post’s figure shows GPQA Diamond’s base score as 24.5, an interim value at 149 of 198 questions; the finished score is 22.7. [2]

The AIME rows test the claim directly. These harder competition problems saw about a third of answers finish that had not finished before, and accuracy reached only 0.6% and 2.3%. Finishing does not supply the ability to solve them. Across the table, the cap rate falls on all ten benchmarks, and the accuracy gain varies from 0.6 to 53.3 points.

An independent re-run of the frozen checkpoint. Ahsen Khaliq rebuilt the edit from the logs, verified its hashes, and ran the full MATH-500 protocol (500 problems × 4 samples, seed 0) on the public checkpoint. The edited model scored 51.0% with 31.6% of answers hitting the cap, against the post’s 48.1% and 33.1%: 2.9 points higher on accuracy. A 25-problem smoke test of the base model gave 5.0% with 95% hitting the cap. [23] This re-run checks the evaluation of one frozen edit. It does not repeat Astra’s search.

Completion and correctness are different quantities

Let F be the event that an answer finishes before the cap, and C the event that it is graded correct. The exact identity is:

P(C)=P(F)P(C|F)+P(¬F)P(C|¬F)

The symbol ¬F means “did not finish before the cap,” and P denotes probability. A cut-off response can still contain an extractable correct answer, so its contribution must not automatically be set to zero. In particular, 7.9% accuracy with only 7.0% finishing proves that “all truncated answers are wrong” is inconsistent with these aggregate measurements.

When the second term is small, improving the completion rate can substantially raise measured accuracy even without a comparable improvement in mathematical knowledge. But finished answers form a selected subset: easy questions may finish disproportionately. Comparing correctness conditional on finishing is diagnostic, not a clean experiment isolating “pure reasoning.”

The strongest supporting practice result

QuantityOriginalEdited
P(F): finished before the cap114 / 1,152 = 9.90%940 / 1,152 = 81.60%
P(C | F): correct, given finished107 / 114 = 93.86%695 / 940 = 73.94%
P(C | ¬F): correct, given cut off15 / 1,038 = 1.45%1 / 212 = 0.47%
P(C): identity above122 / 1,152 = 10.59%696 / 1,152 = 60.42%
Real data · released report
Original model, 1,152 practice problems
Edited model, the same problems
Finished, correctFinished, wrongFinished, no answerCut off, correctCut off, wrong
Outcomes of the same 1,152 practice problems before and after the edit, from submission_evidence.json. The grey band shrinks from 1,023 to 211. The orange and amber bands grow from 7 to 245: a new group of answers now finishes and fails.

The practice evidence. The 1,152 confirmation problems were excluded from edit selection, and no problem overlaps the 352 used earlier in generation-based selection. The records report 579 rescues (wrong before, correct after) and five regressions (correct before, wrong after). Of the rescues, 576 were originally truncated. On the 114 originally finished outputs, accuracy was 93.86% before and after, with three rescues and three regressions. The pooled gain is 49.83 points with a standard error of 1.50 and a 95% normal interval of 46.89 to 52.76 points; the five independent splits gain between 46.9 and 55.1 points. These are held-out practice results, not unseen benchmark scores. [3]

How far “already knew the answer” goes. The video summarizes the edit as letting the model finish answers it already knew how to solve. Among the 1,038 originally truncated problems, 589 became correct (56.7%) and 449 did not (43.3%). Accuracy among finished answers falls from 93.86% to 73.94%. That fall is not damage, because the problems that finished before keep their 93.86%. The likely cause is selection: easier problems finished first, and the originally truncated problems reach 56.7% correct after the edit. The logs do not measure difficulty directly. A footnote in Goedecke’s post, that all problems under the limit were solved, comes close but is not exact: 107 of 114 finished answers were correct. [21] The logs also cannot show that the 589 solutions were present before the edit, because the unedited model never wrote them. The edit can change the whole subsequent reasoning trajectory, and median tokens in correct answers rose from 5,310.5 to 9,171.5. “No new capability was demonstrated” is better supported than the universal claim “weight editing cannot ever add capabilities.”

A bound for the benchmark. The second term of the identity is not negative, so P(C | F) ≤ P(C) / P(F). On MATH-500 after the edit, this gives at most 48.1 / 66.95 ≈ 72%. So at least about 28% of finished MATH-500 answers are not correct. The benchmark files store the cut share per job, not per sample, so this page reports the bound and not the exact value.

What the model card changes

Qwen’s card states that this model runs in non-thinking mode by default, and warns that in thinking mode, “when using the recommended sampling parameters”, it is more prone to thinking loops than other Qwen3.5 models. The text-thinking recommendation is temperature 1.0. Temperature controls the sharpness of token sampling; lower values concentrate probability on the most likely tokens. The experiment used 0.6, and separate research reports greater looping at low temperatures, while noting that higher temperature does not solve the underlying learning errors. [15] [16]

Two more lines of the card narrow that point. The card’s own thinking-mode benchmark table uses the same settings as the experiment, including temperature 0.6 and presence penalty 1.5, so 0.6 is not an unusual choice. And the warning concerns the recommended parameters, so temperature 1.0 is not reported to remove the loops. The card’s example also allows 81,920 output tokens, 2.5 times the experiment’s 32,768 cap. None of these settings was tested against the edit in the released runs. [15]

Two comparisons answer different questions. Holding the sampling protocol fixed isolates the effect of the weight intervention under that protocol. Comparing the edited model against a carefully tuned base model tests whether weight editing is the best practical remedy. The reported jump establishes the first comparison; the second needs additional experiments.

A larger token cap could help a long but productive solution. An endless loop may simply consume the larger budget. Changing mode, sampling, stopping, or weights can each alter the outcome; measure accuracy, completion, and compute together.

Gemma: a useful negative result with caveats

The Gemma 3 270M follow-up started at 6.8% MATH-500 and reported 7.0%, 7.6%, 7.7%, and 7.0% after budgets of 5, 10, 25 and 50 passes. Astra’s final answers in three of the four runs reported the gain as not established. It had a much lower cap rate, 8.5%, consistent with fewer looping failures to repair. Astra’s notes describe ordinary reasoning errors, such as wrong arithmetic and invalid algebraic steps. [11]

Four other Gemma runs in the results table, which the post does not report, scored 6.7%, 6.7%, 6.1% and 6.2% on the same scale. [26] So across eight runs the range is 6.1% to 7.7% around a 6.8% base. Gemma is not a controlled clone of Qwen: size, architecture, generation settings (no thinking mode, temperature 1.0, 8,192 tokens), and prompt version differ. Its headline scores use a format-tolerant extractor, and under the strict boxed-answer rule that Qwen’s scores use the base is 2.8%, with reported runs at 3.5%, 3.1%, 3.8% and 2.6%. The authors conclude that editing “could not add an ability the model lacked”. The evidence for that is this one model. It limits the demonstrated claim; it does not prove a theorem about what WSP can never do.

07 / An actionable path

Learn the mechanism, then test the claim

The video’s two rules, with this page’s numbers. First, when a small reasoning model scores badly, count how many answers never reach a final answer before you change anything. A 93.0% cap rate calls for a test of mode, temperature, and token limit first. Second, do not expect weight editing to make a weaker model more able: the one model without a blocking failure ranged from 6.1% to 7.7% around a 6.8% base.

Path A — Five minutes, no model download

  1. Set the direction slider to 0, 1, 2, and 6. Explain the change in the selected column’s parallel component.
  2. Run the toy NumPy controller above. Replace all weights and biases with zero and observe that all actions tie. Restore the designed parameters: the rule reappears without training.
  3. Open the final report and exact diff manifest. Check the formula and two changed tensors yourself.
  4. Use the recipe in section 02 on a network from exp1_which_game/networks. Confirm the 95.9% in row 8.

Path B — Repeat the game test on your own model

Each prompt is a self-contained text file, so any model with a long enough context can take it. The commands below are the ones Willison used, with the LLM command-line tool and LM Studio. [19]

llm install llm-lmstudio
LMSTUDIO_TIMEOUT=900 llm \
  -f https://raw.githubusercontent.com/RikiyaT/lm_understand-logs/refs/heads/main/exp1_which_game/runs/pacman/prompt.txt \
  -m lmstudio/qwen/qwen3.8-27b

Set the context window above the prompt size: Astra’s input count was about 73,700 tokens, and Willison reports that an 8,192 context failed with errors. The Qwen runs in that post took 46 minutes to 1 hour 5 minutes. Replace pacman with breakout, pong, or freeway. The URL names the game; the prompt text does not.

Path C — Reconstruct the published parameter edit

This replays the final artifact; it does not rerun Astra’s discovery process. To skip the rebuild, use the published edited checkpoint or the hosted demo, which shows the base and edited models side by side. On Windows, use Git Bash. First clone the logs, create an isolated Python environment, and install NumPy:

git clone https://github.com/RikiyaT/lm_understand-logs.git
cd lm_understand-logs
git rev-parse HEAD
python -m venv .venv
source .venv/Scripts/activate
python -m pip install numpy

Record the printed repository commit. Download the original model.safetensors from the pinned Qwen revision 2fc06364715b967f1860aea9cf38778875588b17 using the model’s file browser. Put it in a new base-qwen folder. Then run the authors’ reconstruction script:

python exp8_math/code/apply_edit.py \
  base-qwen/model.safetensors \
  exp8_math/runs/p50c/edit \
  edited-qwen.safetensors

The script checks the base tensor hashes and rebuilt tensor hashes. Expect two “hash OK” messages. It supports the public single-file release and needs no PyTorch for reconstruction. A hash mismatch means the input is not the expected revision; do not bypass the check. [17]

Reconstruction works on CPU and needs the base weights, output storage, and RAM for the arrays. Allow several GB of headroom. On macOS/Linux, activation is source .venv/bin/activate. The command above follows the authors’ script interface; this tutorial did not download or execute the full Qwen checkpoint.

A weights file alone is not a complete runnable model folder. For inference you also need compatible configuration, tokenizer, chat template, and a runtime supporting this Qwen architecture. Do not overwrite a configuration with the wrong architecture. Reconstructing exact tensors verifies the patch; generating answers verifies behavior; rerunning the editor tests discovery reproducibility. These are three distinct tasks.

Path D — Test whether the edit earns its complexity

Use a fixed set of math problems that neither the editor nor your tuning process sees. Keep a development set for choosing settings. Evaluate both the base and edited checkpoint under every configuration below:

ConfigurationWhy include it?
Thinking, temperature 0.6, 32,768 capMatch the reported protocol
Thinking, model-card text samplingTest the inexpensive sampling alternative
Non-thinking, model-card text samplingTest the model’s default mode
Larger cap on a predefined subsetDistinguish insufficient time from persistent looping; compare actual tokens used

Log each problem’s correctness, extracted final answer, whether thinking closes, whether the cap is hit, repetitive-tail rate, tokens, and elapsed time. Use several sampling seeds and report uncertainty over problems. Several samples of one problem are related observations, not several new benchmark questions.

For a paired comparison, let dᵢ equal edited correctness minus base correctness for problem i, averaging samples within a problem first. Let N be the number of problems, g the mean paired gain, and sd the sample standard deviation of the problem-level differences. A simple standard error is:

g=1N∑i=1NdiSE(g)=sdN

For stronger validation, resample whole problems in a paired bootstrap, and repeat independent editing searches. The first estimates uncertainty for a frozen edit on a problem population; the second measures whether the editing process reliably finds good patches.

The exact search is not a one-command reproduction. The release provides prompts, records, evaluation code, and final diffs, but the Experiment 8 README explicitly excludes its agent/forward-pass harness and intermediate activation files. Rebuilding that environment requires additional implementation. Inspecting the released artifact is straightforward; recreating the discovery process is a separate project. [2]
08 / Unknown unknowns worth tracking

Where the research frontier actually lies

Small edit ≠ small effect

A neuron writes to an entire hidden vector, and generation compounds many steps. A structurally small intervention can alter many downstream choices. Audit unrelated tasks and both thinking modes.

Correlation ≠ a unique mechanism

A contrast direction can carry several correlated features: repetition, uncertainty, position, or answer style. Counterfactual contexts and randomized controls help distinguish them.

Successful episodes ≠ repeated discovery

Thousands of evaluation episodes test one submitted policy. They do not establish the probability that a fresh editor run constructs an equally good policy. Budget comparisons have the same limitation.

Quantization can change the patch

The released diff reproduces a bfloat16 evaluation artifact. Applying the mathematical edit after low-bit quantization, or converting the result again, is a new intervention requiring new checks.

The connection to earlier interpretability work: Arditi and colleagues showed that a behavior can sometimes be mediated by a low-dimensional internal direction. WSP’s contribution here is that a general LLM organized the investigation, chose an intervention, and wrote the change. The underlying idea of directional intervention predates this result. A low-dimensional explanation for one behavior is not evidence that every behavior has a single removable direction. [18]

The human-baseline argument. Goedecke lays out the same steps as a playbook a researcher would try, comparing it to the Heretic “abliteration” tool: write looping and non-looping texts, take the difference of their internal states, find the weights that contribute most, and trim them. The post’s analogy is that editing weights resembles tweaking a compiled binary, and that the better route stays training. [21] Honnibal reaches the same place from the access table: the Python experiments show tasks a human engineer could do. [20] No released experiment measures a human against Astra, so both claims are arguments and not results. What the logs do show is the time and the budget: 20.3 hours (4.7 of them an outage), 158 turns, and 50 passes at maximum reasoning effort, with Astra choosing the steps.

What the post projects, against what it measured

Projection in the postClosest measurementStatus on this evidence
Auditing without running the modelExperiment 7: 4 weights-only attempts failed on a 270M model; 3/3 needed attention patterns from running itShown on small labeled networks; failed in the one language-model test
Lower optimization costExperiment 5: 501–583 s per game on 20,486 weights. Experiment 8: 20.3 hours, with no cost figure against fine-tuningShown for one-shot small policies; not measured for language models
Zero-data capability steering and unlearningExperiment 8 used 50 passes on practice data; Gemma runs ranged 6.1–7.7% around 6.8%Not demonstrated
Recursive self-improvementNo run edits the editor itselfNot tested
Grafting circuits across architecturesNo experiment attempts itNot tested

A research interpretation: the use with direct support in these records is an automated neural debugger: form a failure hypothesis, inspect internals, propose a reversible patch, test controls, and retain only changes that survive independent checks. Whether such methods can efficiently install new skills in large pretrained models remains open. The authors say they are building a benchmark and harness for this question.

What this page does not establish

This page reruns no model. The labs recompute statistics from the released files of Experiments 1–3, and the numbers for Experiments 4–8 are copied from the released records. The logs release Astra’s reasoning only as summaries or as explanations the harness asked for, and some runs release neither, so claims about how it reasoned stop at what those records state. The logs were read as released, and nothing here audits whether a released file matches what ran.

Three checks for understanding

1. Did Astra read every Qwen weight as text?

No. The large-model experiment provided programmatic access to tensors and controlled model execution. Small-network experiments did put weights directly into the prompt.

2. Why can a sixfold benchmark ratio coexist with no demonstrated new math knowledge?

The original often exhausted its output budget. Recovering useful final answers on many of those cases raises scored accuracy. This supports repaired execution, while leaving the possibility of changes to reasoning trajectories open.

3. At α = 6, what happens to a selected column’s component along the unit direction?

Its coefficient changes from c to −5c. It is reversed and amplified. Only α = 1 erases that component in the column-level linear calculation.

4. Which experiments put raw weights in the prompt with no tools?

Experiments 1, 2, and 4, on networks of 17,253 to 171,664 weights. Experiment 5 also has no tools, but its weights start at zero, so there is nothing to read.

5. Accuracy among finished practice answers fell from 93.86% to 73.94%. Did the edit damage the model?

Not on this evidence. The 114 problems that finished before kept 93.86%. The finished group now holds 940 answers instead of 114, and the originally truncated problems reach 56.7% correct. Conditional accuracy compares two different groups of problems.

What’s next

A high-value solo experiment: build a small model-failure dashboard that compares base versus patched weights and separates accuracy, completion, repetition, and token cost. Start by asking whether tuned decoding recovers most of the apparent advantage. That makes a falsifiable contribution without first recreating the entire autonomous editor.

09 / Grounding and further reading

Sources and evidence trail

The research post and logs supply the experimental facts. The video supplies the critical framing and the two practical rules. Willison, Honnibal, and Goedecke supply the replication and the published critiques. Details were checked against the primary records below. Diagrams labeled “illustration” or “derivation” are explanatory constructions; labs labeled “real data” are computed from the named files. None is a source screenshot. This page does not claim its own rerun of the Qwen benchmark or editor.

  1. Takehi, Teoh, Zhang & Khattab — Sparks of Weight-Space Programming. MIT CSAIL research post, November 2, 2026. Definition and experimental overview.
  2. Experiment 8 README. Protocol, budget meaning, score provenance, run accounting, released and omitted material.
  3. p50c submission evidence. Paired practice confirmation, rescues, regressions, and descriptive outcome strata.
  4. Experiment 1: game identification.
  5. Experiment 2: diffusion-model shapes.
  6. Experiment 3: language and copying heads.
  7. Experiment 4: car-policy repair.
  8. Experiment 5: MinAtar policy construction. Baselines, source-code access, edit language, and scores.
  9. Experiment 6: Go policy construction.
  10. Experiment 7: sycophancy identification.
  11. Gemma follow-up README. Negative result and grading differences.
  12. p50c final report. Actual α = 6 formula, direction origin, controls, final confirmation.
  13. Frozen weights manifest. Shapes, selected neurons, relative matrix-change sizes.
  14. Exact evaluated diff manifest. 130,188 numerically changed bfloat16 entries.
  15. Qwen3.5-0.8B official model card. Default mode, thinking-loop warning, recommended decoding.
  16. Pipis et al. — Wait, Wait, Wait… Why Do Reasoning Models Loop? Temperature and looping; separate research, not a direct test of this edit.
  17. Authors’ apply_edit.py. Pinned base revision and bit-exact reconstruction interface.
  18. Arditi et al. — Refusal in Language Models Is Mediated by a Single Direction. Prior directional-intervention work.
  19. Simon Willison — Qwen 3.8 27B on my laptop can interpret model weights, too. November 3, 2026. Local replication of Experiment 1, commands, and timings.
  20. Matthew Honnibal — The ‘Astra can read and write weights to improve Qwen’ post is misleading. November 3, 2026. Access table across experiments.
  21. Sean Goedecke — LLMs are not superhuman at reading and writing neural network weights. November 3, 2026. Norm heatmaps and the human-baseline argument.
  22. Prompt Engineering — GPT-6 Astra Made Qwen 6x Better at Math Without Training. YouTube video and transcript. Key chapters: definition, network construction, Qwen, headline interpretation.
  23. Edited Qwen3.5-0.8B checkpoint on Hugging Face. Hash-verified rebuild and independent MATH-500 re-run by Ahsen Khaliq.
  24. Hosted demo. Base and edited models on a problem you type.
  25. Elhage et al. — A Mathematical Framework for Transformer Circuits. The matrix-composition method that matches Astra’s route in Experiment 3.
  26. Results table excerpt. Includes runs that the post does not report.
  27. lm_understand-logs repository. Harness description, the tool-free audit, placeholders, licenses, and all experiment folders.
  28. Papailiopoulos — AdderBoard. Community challenge in setting the weights of tiny arithmetic transformers.
  29. 10-pass final answer.
  30. 25-pass final answer.
  31. 50-pass and unedited evaluation scores. Accuracy, cap share, and mean tokens per benchmark.

Attribution: the repository states that its logs, data, and networks are CC BY 4.0 and its scripts are MIT-licensed; third-party material retains its own terms. The arrays behind the real-data labs in section 02 are derived from exp1_which_game/networks/*.npz, exp1_which_game/eval/scores.json, exp2_diffusion/networks/*.npz, exp2_diffusion/eval/samples/, exp2_diffusion/runs/*/answer.md, exp3_language/eval/heads.json, and exp3_language/eval/scores.json, rounded for size. This tutorial links to the originals and adds independent mathematical derivations, diagrams, a toy controller, and an evaluation plan.