An autonomous agent writes transformer weights directly, with no training, to solve tasks with known solutions. Every point below is one weight-space program, numbered in the order it was tried.
What was done. For each of 17 tasks with a known algorithm or a known dataset, an autonomous coding agent was asked to set every weight of a small transformer by hand, with no training, so that the transformer solves the task by generating the answer token by token. Each task was run with three Claude models (Opus 5.5, Sonnet 5.5 and Haiku 5.5), twice per model, independently (seeds 1 and 2: two separate agent sessions from the same starting files; the agent's own sampling makes them differ). In each run the agent repeatedly edited the weights, evaluated them and logged the result, until it reached at least 30 attempts for the easy tasks, 40 for the harder ones and 50 for the real-world ones. This page covers 102 runs; the detailed explorer below shows the 1334 attempts of the 34 Opus runs. An attempt is one version of the weight-writing code (a weight-space program) and its evaluation.
Agent. Claude Opus 5.5, Sonnet 5.5 or Haiku 5.5 (claude-opus-5-5, claude-sonnet-5-5, claude-haiku-5-5; default
thinking effort) running headless in Claude Code (claude -p),
driven by experiments/evolve/launch_claude.py. The prompt tells it to read and follow program.md (the same instructions as the earlier runs,
with its task name filled in), notes that its run folder already exists, and asks for at least the target number of attempts. If a session ends early,
the driver resumes the same session with a short "continue the loop" message, until the target is reached or two sessions in a row add no attempts.
There was no human intervention. One difference between models: the first Sonnet and Haiku sessions stopped after a single attempt because they could not
read the task files (see below), so their prompt adds two sentences: that src/ cannot be read and the task format can be learned by printing
examples, and that output redirection is unavailable. The Opus runs had already worked this out on their own.
What the harness enforces. Each run works in its own folder runs-<model>/<task>-<model>-s<seed>, created by
experiments/evolve/setup_run.py, with a private copy of interpretable_transformer.py and program.md; the task and
evaluation code (src/) is a symlink to the shared experiments/evolve/src, so scoring is identical across runs. Claude Code runs in
restricted mode with only the Read, Edit, Write, Glob, Grep and Bash tools: file reads are confined to the run folder (so the earlier runs'
solutions cannot be opened), there is no web access, and the only shell command it may run, apart from read-only listings of its own folder, is
uv run interpretable_transformer.py ...; every other command is refused. Because src/ is a symlink outside the run folder, the
agent's attempts to read src/task.py and src/eval.py were refused too (all 63 attempts across the Opus runs), although program.md
lists them as files to read. The agents instead learned each task's format by running programs that print examples. Output redirection was also usually refused.
Snapshots are saved with the Write tool. The rules on training,
outside computation and pretrained weights remain instructions: the agent's own Python could in principle break them, which the snapshots are checked for.
Audits after the runs. Four checks, all in experiments/evolve/, applied to every run of every model.
Transcripts (audit_transcripts.py): every tool call of every session. Each session started with only the six allowed tools, and no call read
or changed another run's files. Besides the evaluation command, the only shell commands that ran were read-only commands that Claude Code approves
inside the working directory (ls, cat, grep, sed -n, wc, ps, sleep);
the few paths outside a run folder were failed calls on nonexistent files and Claude Code's own saved command output.
Programs rebuilt from transcripts (reconstruct_programs.py): agents did not always save a full snapshot of each attempt (Sonnet often saved
none or a partial excerpt), so every evaluated program is rebuilt by replaying the agent's successful Write and Edit calls on its
interpretable_transformer.py and saving the file at each evaluation. The replay reproduces each run's final file exactly except where the agent
edited the file after its last evaluation; the table below gives the share of logged attempts recovered.
Static scan (audit_runs.py): no saved program contains training or fitting code (optimizers, .backward(),
.fit(, least squares, pseudo-inverse).
Counterfactual data check (audit_data_use.py): each program is built four times: normally, again (to confirm determinism), with the same
inputs but random answers (random labels for the dataset tasks), and with different inputs as well (a new sample; for the dataset tasks the other half of the
training split). A program is label-dependent if its weights change with the answers, which means they were fitted to labels or chosen by accuracy on
them, which breaks the no-fitting rule; it is input-dependent if its weights change only with the inputs, for example a LayerNorm gain set from the
activation scale of a few sample prompts. Positive controls placed among real programs (weights set from label counts or answer digits, and weights set from input statistics only) are classified correctly. The results
tables report the best accuracy among data-independent programs. One Sonnet run (NLI run 1) built a Naive Bayes classifier over character trigrams counted
from task examples, and labelled it "LEAKY" itself; its programs are label-dependent and excluded, which leaves that run with no checked
data-independent program. The 34 flagged programs of Sonnet TREC run 2 are input-dependent only: they set LayerNorm gains from the activation scale of 32 sample prompts.
Indirect fitting: apart from that Sonnet run, which computed trigram counts and log-odds inside its program, no session of any model printed data
statistics (word frequencies, log-odds and so on) or ran a fitting procedure whose numbers could have been copied into a later program. The TREC runs of
all three models did print misclassified dev questions (see the next paragraph).
Counterfactual check by model (attempts; rebuilt programs where available, otherwise saved snapshots).
| model | logged attempts | data-independent | label-dependent (fitting) | input-dependent only | not checked (no program, nondeterministic or fails to build) | runs with label-dependent programs (count) |
|---|---|---|---|---|---|---|
| Opus 5.5 | 1334 | 1303 | 0 | 0 | 31 | none |
| Sonnet 5.5 | 1341 | 1042 | 50 | 34 | 215 | nli-snli run 1 (50) |
| Haiku 5.5 | 1338 | 1311 | 0 | 0 | 27 | none |
Data-guided hand tuning. A caveat for the dataset tasks, measured on the Opus runs: in 7 of the 8 runs the agent added a measurement-only "dev" check that prints accuracy (and sometimes a confusion matrix) on examples from the same 2,000-example pool, usually excluding the 200 evaluation prompts, and adjusted its hand-set word lists, thresholds and biases across attempts. The two TREC runs went further: nearly every attempt printed misclassified dev questions with their true and predicted labels, and the agent wrote rules in response; the Sonnet and Haiku TREC runs did the same. This is manual feature engineering guided by data, as a person would do it, rather than training, but those rules are informed by labeled examples. Few evaluation prompts appeared in tool outputs (0 to 4 of 200 in 7 of the 8 runs; up to 26 in NLI run 2, an upper bound because SNLI reuses premises across examples). In every run the agent also sees the accuracy on the fixed evaluation set after each attempt.
Network. A decoder-only (GPT-style) transformer defined in interpretable_transformer.py: learned token and position
embeddings, a stack of pre-LayerNorm blocks (causal multi-head self-attention and a ReLU MLP, each with a residual connection), a final LayerNorm and a
linear output head over a character-level vocabulary specific to each task (4 to 43 symbols). The starting configuration is 3 layers, width 64,
4 heads and MLP width 256; the agent may change the architecture, depth, width, number of heads and MLP width. All parameters are set inside
write_weights(model, task). Parameter count is sum(p.numel() for p in model.parameters()).
Rules given to the agent (experiments/evolve/program.md). Allowed: editing anything in its copy of
interpretable_transformer.py except the evaluation code in the main block, including the architecture and hard-coded constants,
arrays, hand-built attention circuits and lookup tables. Not allowed: any training (gradient descent, optimizer steps, fitting loops,
backpropagation), computing the task output with Python functions or libraries outside the transformer, using pretrained weights, and
modifying the shared task and evaluation code. Goal: maximize accuracy; all else equal, prefer more interpretable solutions, with
parameter count as a suggested proxy.
Evaluation. Running uv run interpretable_transformer.py --task <task> builds the network, generates the answer greedily
(argmax at each step) for a fixed number of answer tokens, and scores accuracy: the fraction of examples whose generated answer string
exactly matches the target (no partial credit or numerical tolerance). Each attempt is scored on the same 200 examples, produced by the task's
generator with seed 0, so there is no separate held-out set, and the agent's own program could call the generator to see examples. For the four dataset tasks the
examples are sampled from a fixed subset of 2,000 examples of the training split (SST-2, GLUE/MRPC, SNLI, TREC), lowercased, with characters
outside the task vocabulary replaced by spaces and each sentence truncated or padded to a fixed length. The real-world group also includes
date normalization, whose examples are generated from nine common date formats rather than drawn from a dataset.
Plots and tables. Each point is one attempt: x is its parameter count (log scale), y its accuracy; attempts are numbered in the order
they were logged in results/overall_results.csv. "First attempt at best" is the attempt number at which a run first reached its best
accuracy; "smallest near-best" is the attempt with the fewest parameters within 1 point of the run's best accuracy.
| task | group | definition | prompt | answer | example | vocab | attempts (both runs) |
|---|---|---|---|---|---|---|---|
addition-five-digits | Easy | Add two 5-digit non-negative integers. | "AAAAA+BBBBB=" (12 tokens; leading zeros allowed) | "SSSSSS" (6 tokens; left-padded with zeros) | "12345+67890=" -> "080235" (since 12345+67890 = 80235) | 12 | 60 |
boolean-circuit-5-bits | Easy | Evaluate a boolean expression of 5 bits joined by 4 binary operators. | "BoBoBoBoB=" (10 tokens; 5 bits interleaved with 4 ops + '=') | "R" (1 token; '0' or '1') | "1&0|1^1&0=" -> "0" | 6 | 61 |
digit-counting-10 | Easy | Count occurrences of a query digit in a string of 10 digits. | "DDDDDDDDDDQ=" (12 tokens: 10 digits + query digit + '=') | "CC" (2 tokens; count 00-10, left-padded) | "31415926533=" -> "02" (digit '3' appears twice in "3141592653") | 11 | 60 |
linear-interpolation-two-points | Easy | Linear interpolation given two integer (x, y) pairs and a query x. | "X1,Y1;X2,Y2;XQ=" (12 tokens; y values are 2 digits) | "YY" (2 tokens) | m=2, b=3 -> "1,05;4,11;7=" -> "17" (y = 2*7+3 = 17) | 13 | 60 |
multiplication-five-digits | Easy | Multiply two 5-digit non-negative integers. | "AAAAA*BBBBB=" (12 tokens; leading zeros allowed) | "PPPPPPPPPP" (10 tokens; left-padded with zeros) | "12345*67890=" -> "0838102050" (since 12345*67890 = 838102050) | 12 | 61 |
parity-upto10-bits | Easy | Compute parity (XOR) of a variable-length bit string, length 1-10. | "__BBBBBBBB=" (11 tokens; left-padded bits + '=') | "P" (1 token; '0' if even number of 1s, '1' if odd) | "____1011010=" -> "0" (four 1s -> even parity) | 4 | 62 |
sort-five-digits | Easy | Sort a string of 5 digits in ascending order. | "DDDDD=" (6 tokens) | "SSSSS" (5 tokens; sorted ascending) | "31415=" -> "11345" | 11 | 60 |
decimal-to-binary-8bit | Harder | Convert a decimal integer in [0, 255] to its 8-bit binary representation. | "DDD=" (4 tokens; decimal, left-padded with zeros) | "BBBBBBBB" (8 tokens; binary, MSB first, zero-padded to 8 bits) | "042=" -> "00101010" (42 in binary is 101010) | 11 | 80 |
edit-distance-8 | Harder | Levenshtein edit distance between two 8-letter strings over {a, b, c, d}. | "AAAAAAAA,BBBBBBBB=" (18 tokens) | "D" (1 token; distance 0-8) | "abcdabcd,abddabca=" -> "2" | 15 | 80 |
gcd-three-digits | Harder | Greatest common divisor of two 3-digit non-negative integers. | "AAA,BBB=" (8 tokens) | "GGG" (3 tokens; gcd, left-padded with zeros) | "084,036=" -> "012" (gcd(84, 36) = 12) | 12 | 81 |
smallest-prime-factor | Harder | Smallest prime factor of an integer below 100000 (a prime is its own smallest factor). | "NNNNN=" (6 tokens; left-padded with zeros) | "SSSSS" (5 tokens; left-padded with zeros) | "03127=" -> "00053" (3127 = 53 * 59) | 11 | 82 |
word-reversal-3x3 | Harder | Reverse the order of 3 fixed-length words separated by underscores. | "abc_def_ghi=" (12 tokens) | "ghi_def_abc" (11 tokens) | "cat_dog_pig=" -> "pig_dog_cat" | 28 | 82 |
date-normalization | Real world | Rewrite a date written in one of nine common formats as YYYY-MM-DD. | "<date padded to 31 chars>=" (32 tokens) | "YYYY-MM-DD" (10 tokens) | "march 3rd 2021_________________=" -> "2021-03-03" | 43 | 102 |
nli-snli | Real world | Three-way natural language inference on a small subset of SNLI. | "<premise padded>|<hypothesis padded>=" (2*SENT_LEN + 2 tokens) | "L" (1 token; '0', '1', '2') | 34 | 100 | |
paraphrase-mrpc | Real world | Binary paraphrase detection on a small subset of GLUE/MRPC. | "<s1 padded>|<s2 padded>=" (2*SENT_LEN + 2 tokens) | "L" (1 token; '0' or '1') | 33 | 100 | |
sentiment-sst2 | Real world | Binary sentiment classification on a small subset of SST-2. | "<sentence padded to 80 chars>=" (81 tokens) | "L" (1 token; '0' or '1') | 32 | 100 | |
trec-coarse | Real world | Six-way question classification on a small subset of TREC (coarse labels). | "<question padded to 80 chars>=" (81 tokens) | "L" (1 token; 0 ABBR, 1 ENTY, 2 DESC, 3 HUM, 4 LOC, 5 NUM) | 36 | 103 |
Best accuracy of run 1 / run 2 for each model, counting only programs whose weights do not depend on task data (see Audits). * marks runs where a program fitted to labels, which breaks the no-fitting rule, scored higher; † marks runs where a program that only calibrated its weights on example inputs (for example a LayerNorm gain) scored higher. "none" = no checked program is data-independent. Green = 100%.
| task | group | Opus 5.5 | Sonnet 5.5 | Haiku 5.5 |
|---|---|---|---|---|
addition-five-digits | Easy | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
boolean-circuit-5-bits | Easy | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
digit-counting-10 | Easy | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
linear-interpolation-two-points | Easy | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
multiplication-five-digits | Easy | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
parity-upto10-bits | Easy | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
sort-five-digits | Easy | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
decimal-to-binary-8bit | Harder | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
edit-distance-8 | Harder | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
gcd-three-digits | Harder | 100.0% / 100.0% | 100.0% / 100.0% | 99.0% / 100.0% |
smallest-prime-factor | Harder | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
word-reversal-3x3 | Harder | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
date-normalization | Real world | 100.0% / 100.0% | 100.0% / 100.0% | 100.0% / 100.0% |
nli-snli | Real world | 63.5% / 61.0% | none* / 52.0% | 54.0% / 50.5% |
paraphrase-mrpc | Real world | 69.0% / 69.5% | 69.0% / 68.0% | 68.0% / 68.5% |
sentiment-sst2 | Real world | 80.0% / 78.0% | 79.0% / 83.5% | 68.5% / 72.0% |
trec-coarse | Real world | 87.0% / 92.0% | 85.5% / 87.0%† | 74.5% / 70.5% |
For the 13 tasks with a generator (the 12 algorithmic tasks and date normalization), the first saved program to reach each run's best accuracy is scored on
2,000 new examples from an unseen seed (experiments/evolve/heldout_fresh_seed.py).
| model | runs at 100% on the fixed 200 | of those, 100% on 2,000 fresh examples | runs that drop on fresh examples |
|---|---|---|---|
| Opus 5.5 | 26 of 26 | 26 of 26 | none |
| Sonnet 5.5 | 26 of 26 | 25 of 26 | gcd-three-digits run 1 (99.8%) |
| Haiku 5.5 | 25 of 26 | 25 of 25 | none |
The best program of each TREC run, scored on data outside its 2,000-example pool, which the agent never saw: the official test split (500 questions)
and the remaining 3,452 training questions (experiments/evolve/heldout_trec.py).
| model | run | program | fixed 200 examples | official test | rest of training split |
|---|---|---|---|---|---|
| Opus 5.5 | 1 | NoNameOfV36 | 87.0% | 86.8% | 81.0% |
| Opus 5.5 | 2 | e22_what_is_the_desc | 92.0% | 87.8% | 83.1% |
| Sonnet 5.5 | 1 | ShiftKeywordBag_v40 | 85.5% | 86.2% | 79.9% |
| Sonnet 5.5 | 2 | kw_priority_v39 | 89.5% | 87.0% | 80.2% |
| Haiku 5.5 | 1 | BigramV6_loc_bias_0p3 | 74.5% | 72.8% | 70.5% |
| Haiku 5.5 | 2 | TRECKwWordBoundary_v8 | 70.5% | 69.4% | 63.1% |
Best accuracy per run, the attempt at which it was first reached, and the smallest program within 1 point of the best.
| task | group | run (seed) | attempts | best accuracy | first attempt at best | smallest near-best (params) | attempts whose weights use labels / inputs only | best without task data | sessions | cost (list price) |
|---|---|---|---|---|---|---|---|---|---|---|
addition-five-digits | Easy | 1 | 30 | 100.0% | 2 | 108 (long_division_minimal_noise1e-9, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $11 |
| 2 | 30 | 100.0% | 2 | 27 (RingLinearTokens, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $11 | ||
boolean-circuit-5-bits | Easy | 1 | 31 | 100.0% | 2 | 184 (E15_scalar_opcode, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $9 |
| 2 | 30 | 100.0% | 3 | 51 (MinCA_noWk_beta200, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $8 | ||
digit-counting-10 | Easy | 1 | 30 | 100.0% | 3 | 132 (e10_three_position_rows, 100.0%) | 0 / 0 (2 unchecked) | 100.0% | 1 | $8 |
| 2 | 30 | 100.0% | 3 | 75 (MetricAttention, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $9 | ||
linear-interpolation-two-points | Easy | 1 | 30 | 100.0% | 4 | 916 (LinearPartInHead, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $10 |
| 2 | 30 | 100.0% | 4 | 864 (NullSlope20NoDigChannel, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $9 | ||
multiplication-five-digits | Easy | 1 | 31 | 100.0% | 2 | 304 (RampKey_v11, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $10 |
| 2 | 30 | 100.0% | 2 | 641 (e16_attention_digit_table, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $12 | ||
parity-upto10-bits | Easy | 1 | 30 | 100.0% | 3 | 16 (TiedFold5ArgmaxTie, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $10 |
| 2 | 32 | 100.0% | 3 | 15 (tent_uniform_attn, 100.0%) | 0 / 0 (2 unchecked) | 100.0% | 1 | $9 | ||
sort-five-digits | Easy | 1 | 30 | 100.0% | 3 | 53 (e29_register_trimmed, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $9 |
| 2 | 30 | 100.0% | 3 | 148 (CausalMeanRankOnePos, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $9 | ||
decimal-to-binary-8bit | Harder | 1 | 40 | 100.0% | 3 | 119 (e05_d4_concat_embeddings, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $10 |
| 2 | 40 | 100.0% | 3 | 89 (e22_minimal_dof, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $11 | ||
edit-distance-8 | Harder | 1 | 40 | 100.0% | 2 | 507 (ScalarValues_d7, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $12 |
| 2 | 40 | 100.0% | 2 | 2.1K (e23_labels_vs_state, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $14 | ||
gcd-three-digits | Harder | 1 | 41 | 100.0% | 2 | 849 (Compact_Q1_L11_R8, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $14 |
| 2 | 40 | 100.0% | 2 | 332 (FinalRadix4FixedPositions, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $13 | ||
smallest-prime-factor | Harder | 1 | 41 | 100.0% | 3 | 57.9K (fully_wired_v39, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $15 |
| 2 | 41 | 100.0% | 2 | 2.7K (sieve_ablate_primes_le311, 99.5%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $15 | ||
word-reversal-3x3 | Harder | 1 | 40 | 100.0% | 3 | 3 (E30_HardAttention, 100.0%) | 0 / 0 (2 unchecked) | 100.0% | 1 | $8 |
| 2 | 42 | 100.0% | 3 | 4 (reflection_only_4p, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $10 | ||
date-normalization | Real world | 1 | 51 | 100.0% | 3 | 345 (ptr_v35_noZ3, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $19 |
| 2 | 51 | 100.0% | 3 | 5.7K (sum-heads-v1, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $18 | ||
nli-snli | Real world | 1 | 50 | 63.5% | 36 | 2.20M (e36_lexicon_scale_200, 63.5%) | 0 / 0 (0 unchecked) | 63.5% | 1 | $18 |
| 2 | 50 | 61.0% | 31 | 158.0K (e48_short_neutral_cues, 60.0%) | 0 / 0 (1 unchecked) | 61.0% | 1 | $22 | ||
paraphrase-mrpc | Real world | 1 | 50 | 69.0% | 20 | 14.7K (E39_StemHeadCausalD28, 68.5%) | 0 / 0 (1 unchecked) | 69.0% | 1 | $16 |
| 2 | 50 | 69.5% | 38 | 26.3K (e29_skip0246, 69.0%) | 0 / 0 (2 unchecked) | 69.5% | 1 | $10 | ||
sentiment-sst2 | Real world | 1 | 50 | 80.0% | 48 | 319.0K (big_w8_negw15, 79.0%) | 0 / 0 (1 unchecked) | 80.0% | 3 | $39 |
| 2 | 50 | 78.0% | 35 | 472.0K (e41_window_7, 77.0%) | 0 / 0 (2 unchecked) | 78.0% | 1 | $17 | ||
trec-coarse | Real world | 1 | 53 | 87.0% | 39 | 100.0K (Stem10V49, 86.5%) | 0 / 0 (1 unchecked) | 87.0% | 1 | $19 |
| 2 | 50 | 92.0% | 23 | 36.3K (e44_abl_near_duplicates, 91.0%) | 0 / 0 (1 unchecked) | 92.0% | 1 | $15 |
| task | group | run (seed) | attempts | best accuracy | first attempt at best | smallest near-best (params) | attempts whose weights use labels / inputs only | best without task data | sessions | cost (list price) |
|---|---|---|---|---|---|---|---|---|---|---|
addition-five-digits | Easy | 1 | 30 | 100.0% | 2 | 48.0K (D54_T1_9.2_W1_0.55, 99.0%) | 0 / 0 (21 unchecked) | 100.0% | 1 | $2 |
| 2 | 31 | 100.0% | 2 | 110.0K (Lookahead_d92_h4_ff101, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 2 | $2 | ||
boolean-circuit-5-bits | Easy | 1 | 31 | 100.0% | 4 | 22.3K (Fold_shared_slots_d33_rescaled, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $2 |
| 2 | 31 | 100.0% | 3 | 34.4K (chain4L_d42, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $2 | ||
digit-counting-10 | Easy | 1 | 30 | 100.0% | 2 | 7.3K (nomlp_d27, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $1 |
| 2 | 31 | 100.0% | 2 | 36.8K (SinkCount_NC4, 99.0%) | 0 / 0 (1 unchecked) | 100.0% | 2 | $3 | ||
linear-interpolation-two-points | Easy | 1 | 31 | 100.0% | 2 | 53.8K (Compact_d48h8_seq14, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $1 |
| 2 | 30 | 100.0% | 2 | 6.1K (slope_mismatch_abs, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 2 | $3 | ||
multiplication-five-digits | Easy | 1 | 31 | 100.0% | 2 | 34.1K (clean_d40_bitcode, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 2 | $2 |
| 2 | 32 | 100.0% | 2 | 83.1K (TwoStageFloorMod, 99.5%) | 0 / 0 (1 unchecked) | 100.0% | 2 | $2 | ||
parity-upto10-bits | Easy | 1 | 30 | 100.0% | 2 | 64 (d2_dff10_headdiff, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 2 | $2 |
| 2 | 30 | 100.0% | 2 | 24 (scalar_residual_d1, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 2 | $3 | ||
sort-five-digits | Easy | 1 | 30 | 100.0% | 2 | 8.5K (d37_ff18_else9_B8, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 2 | $2 |
| 2 | 30 | 100.0% | 2 | 6.4K (ff9_ramp_geom, 99.5%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $1 | ||
decimal-to-binary-8bit | Harder | 1 | 40 | 100.0% | 3 | 45.9K (d57_const_restored, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 2 | $3 |
| 2 | 40 | 100.0% | 2 | 3.3K (remainder_d22_noconst, 100.0%) | 0 / 0 (35 unchecked) | 100.0% | 2 | $2 | ||
edit-distance-8 | Harder | 1 | 40 | 100.0% | 2 | 1.1K (bias_pointer, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 2 | $4 |
| 2 | 41 | 100.0% | 2 | 251.0K (d222_overflow, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 5 | $8 | ||
gcd-three-digits | Harder | 1 | 40 | 100.0% | 7 | 777.0K (SlimDivisor48, 99.0%) | 0 / 0 (1 unchecked) | 100.0% | 2 | $3 |
| 2 | 41 | 100.0% | 2 | 5.35M (cand60_C1000, 99.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $1 | ||
smallest-prime-factor | Harder | 1 | 41 | 100.0% | 2 | 12.30M (spf_slice_mlps, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 2 | $3 |
| 2 | 41 | 100.0% | 2 | 63.0K (GroupScan4_OutOnDig, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 6 | $8 | ||
word-reversal-3x3 | Harder | 1 | 41 | 100.0% | 2 | 5.0K (Tied_Pos22, 100.0%) | 0 / 0 (2 unchecked) | 100.0% | 2 | $2 |
| 2 | 40 | 100.0% | 2 | 1.8K (BinaryCodeAll1L_d13_g40_C100, 99.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $1 | ||
date-normalization | Real world | 1 | 51 | 100.0% | 2 | 702.0K (noBhead_A6_276_4h, 100.0%) | 0 / 0 (41 unchecked) | 100.0% | 2 | $4 |
| 2 | 51 | 100.0% | 2 | 125.0K (anchor_pointer_v32_dot_via_year_reader, 100.0%) | 0 / 0 (2 unchecked) | 100.0% | 1 | $3 | ||
nli-snli | Real world | 1 | 51 | 70.5% | 8 | 29.20M (tri_nb_v2_K1371_lam0.5_b8.0, 70.5%) | 50 / 0 (1 unchecked) | none | 2 | $2 |
| 2 | 51 | 52.0% | 46 | 280.0K (UnigramAdd_u1_v14, 51.0%) | 0 / 0 (0 unchecked) | 52.0% | 2 | $3 | ||
paraphrase-mrpc | Real world | 1 | 51 | 69.5% | 49 | 837.0K (TrigramMatchThr15, 69.0%) | 0 / 0 (45 unchecked) | 69.0% | 7 | $5 |
| 2 | 50 | 68.5% | 5 | 191 (const_one_d1_L0_ff1, 68.0%) | 0 / 0 (46 unchecked) | 68.0% | 6 | $6 | ||
sentiment-sst2 | Real world | 1 | 51 | 79.0% | 33 | 549.0K (NegationFlip_v44_no_pos2neg2, 78.5%) | 0 / 0 (0 unchecked) | 79.0% | 2 | $3 |
| 2 | 50 | 83.5% | 43 | 1.31M (DevRound8, 83.5%) | 0 / 0 (1 unchecked) | 83.5% | 3 | $6 | ||
trec-coarse | Real world | 1 | 51 | 85.5% | 41 | 4.12M (ShiftKeywordBag_v38, 85.0%) | 0 / 0 (1 unchecked) | 85.5% | 1 | $3 |
| 2 | 51 | 89.5% | 40 | 3.57M (kw_priority_v39, 89.5%) | 0 / 34 (1 unchecked) | 87.0% | 1 | $4 |
| task | group | run (seed) | attempts | best accuracy | first attempt at best | smallest near-best (params) | attempts whose weights use labels / inputs only | best without task data | sessions | cost (list price) |
|---|---|---|---|---|---|---|---|---|---|---|
addition-five-digits | Easy | 1 | 30 | 100.0% | 4 | 86.9K (Scale0p5-2L, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $2 |
| 2 | 30 | 100.0% | 2 | 1.62M (HandCircuit2L-win5-sh30-d260-ff1024-L2, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $2 | ||
boolean-circuit-5-bits | Easy | 1 | 30 | 100.0% | 2 | 93.9K (PackedAffineCircuit, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $1 |
| 2 | 30 | 100.0% | 1 | 37.5K (scan5_1head_beta1000, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $2 | ||
digit-counting-10 | Easy | 1 | 31 | 100.0% | 2 | 100.0K (TwoLayerDmodel68, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $2 |
| 2 | 31 | 100.0% | 2 | 44.6K (HistQueryCircuit-v1, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $1 | ||
linear-interpolation-two-points | Easy | 1 | 30 | 100.0% | 1 | 354.0K (LinInterpDmodel112H7, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $1 |
| 2 | 31 | 100.0% | 2 | 1.16M (LinInterpValueBlock_PerLayerWidth, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $0 | ||
multiplication-five-digits | Easy | 1 | 31 | 100.0% | 2 | 1.24M (MulCircuitFusedRounds, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $2 |
| 2 | 30 | 100.0% | 2 | 8.45M (CarryChainV1-d270, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $1 | ||
parity-upto10-bits | Easy | 1 | 31 | 100.0% | 2 | 269 (ParityKnotD9Units, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $2 |
| 2 | 31 | 100.0% | 2 | 119 (ParityNoLN_D3_units8_v25, 99.9%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $1 | ||
sort-five-digits | Easy | 1 | 31 | 100.0% | 3 | 31.5K (HaikuSortCountCircuit-v1, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $2 |
| 2 | 31 | 100.0% | 2 | 10.1K (CountThermoSort-qFlag0.5, 100.0%) | 0 / 0 (2 unchecked) | 100.0% | 1 | $2 | ||
decimal-to-binary-8bit | Harder | 1 | 41 | 100.0% | 2 | 34.5K (CompactPos_LSBAttn, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $2 |
| 2 | 40 | 100.0% | 2 | 19.3K (ResidueGated1L_d36, 100.0%) | 0 / 0 (3 unchecked) | 100.0% | 1 | $2 | ||
edit-distance-8 | Harder | 1 | 41 | 100.0% | 2 | 12.00M (WavefrontLevenshtein_v2_nodiag, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $2 |
| 2 | 41 | 100.0% | 2 | 42.80M (ThermoDP-v1, 100.0%) | 0 / 0 (2 unchecked) | 100.0% | 1 | $3 | ||
gcd-three-digits | Harder | 1 | 40 | 99.0% | 22 | 1.45M (AllFlags16, 99.0%) | 0 / 0 (1 unchecked) | 99.0% | 1 | $2 |
| 2 | 40 | 100.0% | 11 | 1.88M (Stein10Steps, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $2 | ||
smallest-prime-factor | Harder | 1 | 40 | 100.0% | 2 | 4.22M (SPF-circuit-full, 100.0%) | 0 / 0 (0 unchecked) | 100.0% | 1 | $2 |
| 2 | 41 | 100.0% | 5 | 17.00M (SPF_all65primes, 100.0%) | 0 / 0 (2 unchecked) | 100.0% | 1 | $2 | ||
word-reversal-3x3 | Harder | 1 | 40 | 100.0% | 2 | 7.0K (copy-bits5-d33-noLN-ff0-g100, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $1 |
| 2 | 40 | 100.0% | 2 | 7.0K (PosPermCopy-BitCode-d33, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $2 | ||
date-normalization | Real world | 1 | 52 | 100.0% | 2 | 1.14M (HandCircuitV3-tightFF, 100.0%) | 0 / 0 (1 unchecked) | 100.0% | 1 | $5 |
| 2 | 52 | 100.0% | 2 | 4.00M (HandWiredDateCircuit-logitSlim, 100.0%) | 0 / 0 (4 unchecked) | 100.0% | 2 | $2 | ||
nli-snli | Real world | 1 | 50 | 54.0% | 32 | 2.61M (trigram-overlap-len20-C1-6, 53.0%) | 0 / 0 (0 unchecked) | 54.0% | 1 | $1 |
| 2 | 50 | 50.5% | 43 | 4.82M (hand_contra_band_cr020_ov055, 49.5%) | 0 / 0 (0 unchecked) | 50.5% | 1 | $1 | ||
paraphrase-mrpc | Real world | 1 | 50 | 68.0% | 2 | 66.7K (const-one-v1, 68.0%) | 0 / 0 (0 unchecked) | 68.0% | 1 | $2 |
| 2 | 50 | 68.5% | 7 | 161.0K (AlwaysOne, 68.0%) | 0 / 0 (0 unchecked) | 68.5% | 1 | $3 | ||
sentiment-sst2 | Real world | 1 | 50 | 68.5% | 11 | 9.49M (ablate-no-left-boundary-v24, 68.5%) | 0 / 0 (0 unchecked) | 68.5% | 1 | $4 |
| 2 | 51 | 72.0% | 39 | 60.90M (lexicon-v19-big4, 71.0%) | 0 / 0 (0 unchecked) | 72.0% | 1 | $2 | ||
trec-coarse | Real world | 1 | 50 | 74.5% | 41 | 33.30M (BigramV6_who_4, 73.5%) | 0 / 0 (0 unchecked) | 74.5% | 1 | $6 |
| 2 | 51 | 70.5% | 9 | 1.12M (TRECKwWordBoundary_v8, 70.5%) | 0 / 0 (0 unchecked) | 70.5% | 1 | $4 |
Pick a task. The plot shows accuracy against number of parameters for both runs (colour = run); points are connected in the order tried. Hover a point for its name and description.
Each line is one run, connected in order of increasing parameter count.
An earlier, smaller study on May 15, 2026: one run per task (959 attempts in total) with Claude,
model version [not recorded in the repository; fill in], thinking effort [not recorded in the repository; fill in], driven by the GitHub Copilot CLI (copilot --autopilot --yolo), prompted with
"Read and follow the instructions in experiments/evolve/program.md" and told to make at least 20 attempts. Same network, rules and evaluation as above;
the run folders are experiments/runs/may15/<task>-may15-run<k>. In these runs the agent had the CLI's default tools and the rules were not
enforced by the harness.