7 NOVEMBER 2026 · RESEARCH

An AI edited another AI's weights and its maths score jumped. We checked what it changed.

On 2 November four researchers at MIT CSAIL (Rikiya Takehi, Jayden Teoh, Alex Zhang and Omar Khattab) published a blog post called "Sparks of Weight-Space Programming". They gave OpenAI's GPT-6 Astra access to a small open model, Alibaba's Qwen3.5-0.8B, and let it read and change the model's weights directly, with no training run. Astra changed about 0.016% of the weights, in two layers. On the MATH-500 benchmark the model went from 7.9% to 48.1%. GSM8K went from 13.8% to 67.1% and the IFEval instruction-following test from 21.0% to 62.3%. VentureBeat called it "like gene editing for neural networks".

The details are more interesting than the headline. Before the edit, the small model usually got stuck repeating itself until it ran out of room: 93% of its MATH-500 answers hit the length limit. Astra traced that habit to one direction in the weights and removed it. Afterwards 33% hit the limit. The authors say the model did not learn any new maths. It finished more answers using what it already knew. They also report the cases that did not work: on Google's Gemma 3 270M, which rarely loops, the edits gave no established maths gain, and Astra only fixed a sycophancy case after being given extra measurements. Their best run took 20 hours, 158 turns and 80 Python runs. They do not claim it beats normal training, and they say plainly it is not recursive self-improvement. Critics on X made the same points, and credited the authors for publishing the failures.

So the honest summary is: a strong model found and removed one specific fault in a small model, by editing a tiny number of weights, and showed its working. That is still a real result. It is also a new kind of change to keep track of.

We checked the edit ourselves

The edited model is public on Hugging Face under Apache 2.0, next to the original. We downloaded both and compared them file to file with a 16-line Python script that needs only numpy, on an ordinary office machine.

Out of 873,441,376 stored values, 130,188 differ: 0.0149%. Every one of them sits in two matrices, the MLP down-projection in layer 15 (65,260 changed) and in layer 19 (64,928 changed). Nothing else in the file moved. The largest single change is about 0.21, and the overall change to each of those two matrices is around 8 to 11% of its size. That matches what the authors describe, 131,072 targeted weights in those two layers. Our count is 884 lower, most likely because some edits were too small to survive rounding in the model's 16-bit format. The comparison itself took seconds once the two 1.7 GB files were downloaded.

Why this matters for anyone who downloads open models

Most people who use an open model take it from a hub and trust the name on the card. A fine-tuned model usually changes a lot of weights, which is why people rarely bother to look. An edit like this changes a few thousand values out of hundreds of millions and still changes behaviour a great deal. The same technique that removed a repetition loop could, in other hands, remove a refusal or add a quirk, and nothing in the file name would tell you.

The good news is that this kind of change is easy to see if you have the original to compare against. That is the research opportunity.

A project anyone can run

You need a laptop, about 4 GB of disk and an hour.

  1. Pick an open model on Hugging Face that says it is a modified version of a base model: an "uncensored", "fixed", "merged" or "improved" variant of something popular.
  2. Download the variant and the exact base model it names.
  3. Compare them tensor by tensor (our script is below this post). Record how many weights changed, in which layers, and by how much.
  4. Write down whether the change matches what the model card claims. A card that says "light fine-tune" should not show edits concentrated in a handful of rows, and a card that says "one small fix" should not show changes everywhere.
  5. If you can run the models locally, ask both the same 20 questions, including a few they should refuse, and note any differences.

Shared on a simple page, a few dozen of these checks would tell the community something it does not know today: how often published variants change what they say they change. Because the edits are small and local, it is the kind of work one curious person can do properly.

The script

Run it as python3 wdiff.py base.safetensors edited.safetensors. It reads the two files directly and needs only numpy.

# Which weights did the "weight-space programming" edit change? Compares two safetensors files byte by byte, numpy only.
import json, struct, sys, numpy as np
def load(p):
    f = open(p, "rb"); n = struct.unpack("<Q", f.read(8))[0]; h = json.loads(f.read(n)); h.pop("__metadata__", None)
    return h, np.memmap(p, dtype=np.uint8, mode="r", offset=8 + n)
(ha, A), (hb, B) = load(sys.argv[1]), load(sys.argv[2])
def f32(u16): return (u16.astype(np.uint32) << 16).view(np.float32)   # bf16 -> float32
tot = chg = 0; rows = []
for k in sorted(ha):
    a0, a1 = ha[k]["data_offsets"]; b0, b1 = hb[k]["data_offsets"]
    ra, rb = A[a0:a1], B[b0:b1]; tot += (a1 - a0) // 2
    if ha[k]["dtype"] != "BF16" or ra.tobytes() == rb.tobytes(): continue
    x, y = f32(ra.view(np.uint16)), f32(rb.view(np.uint16)); d = y - x; m = d != 0; chg += int(m.sum())
    rows.append((k, ha[k]["shape"], int(m.sum()), float(np.abs(d[m]).max()), float(np.linalg.norm(d) / (np.linalg.norm(x) or 1))))
print("parameters", tot, "changed", chg, f"({100*chg/tot:.4f}%)")
for r in rows: print(r[0], r[1], "changed", r[2], "max |delta| %.4g" % r[3], "relative norm %.4g" % r[4])

Sources: MIT CSAIL, "Sparks of Weight-Space Programming", rikiyat.github.io/blog/weight-space-programming, 2 Nov 2026; experiment logs at github.com/RikiyaT/lm_understand-logs; VentureBeat, 2 Nov 2026.

Disclosure: Agentic Thinking is an independent research lab. We steward the open-source AgentHook standard and maintain the open-source HookBus project. Agentic Thinking has also developed agent governance software, AgentProtect, which is not sold and not currently offered. These interests may overlap with the recording and governance issues discussed above.

Related: Anthropic says it may be close to AI that speeds up its own development · AgenticBench · Our research

Collaborate with us →