Weight-Space Programming Autoresearch

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.

Setup

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).

modellogged attemptsdata-independentlabel-dependent (fitting) input-dependent onlynot checked (no program, nondeterministic or fails to build)runs with label-dependent programs (count)
Opus 5.5133413030031none
Sonnet 5.5134110425034215nli-snli run 1 (50)
Haiku 5.5133813110027none

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.

Tasks
taskgroupdefinitionpromptanswerexamplevocabattempts (both runs)
addition-five-digitsEasyAdd 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)1260
boolean-circuit-5-bitsEasyEvaluate 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"661
digit-counting-10EasyCount 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")1160
linear-interpolation-two-pointsEasyLinear 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)1360
multiplication-five-digitsEasyMultiply 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)1261
parity-upto10-bitsEasyCompute 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)462
sort-five-digitsEasySort a string of 5 digits in ascending order."DDDDD=" (6 tokens)"SSSSS" (5 tokens; sorted ascending)"31415=" -> "11345"1160
decimal-to-binary-8bitHarderConvert 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)1180
edit-distance-8HarderLevenshtein 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"1580
gcd-three-digitsHarderGreatest 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)1281
smallest-prime-factorHarderSmallest 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)1182
word-reversal-3x3HarderReverse 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"2882
date-normalizationReal worldRewrite 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"43102
nli-snliReal worldThree-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')34100
paraphrase-mrpcReal worldBinary paraphrase detection on a small subset of GLUE/MRPC."<s1 padded>|<s2 padded>=" (2*SENT_LEN + 2 tokens)"L" (1 token; '0' or '1')33100
sentiment-sst2Real worldBinary sentiment classification on a small subset of SST-2."<sentence padded to 80 chars>=" (81 tokens)"L" (1 token; '0' or '1')32100
trec-coarseReal worldSix-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)36103

Results

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%.

taskgroupOpus 5.5Sonnet 5.5Haiku 5.5
addition-five-digitsEasy100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
boolean-circuit-5-bitsEasy100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
digit-counting-10Easy100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
linear-interpolation-two-pointsEasy100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
multiplication-five-digitsEasy100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
parity-upto10-bitsEasy100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
sort-five-digitsEasy100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
decimal-to-binary-8bitHarder100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
edit-distance-8Harder100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
gcd-three-digitsHarder100.0% / 100.0%100.0% / 100.0%99.0% / 100.0%
smallest-prime-factorHarder100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
word-reversal-3x3Harder100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
date-normalizationReal world100.0% / 100.0%100.0% / 100.0%100.0% / 100.0%
nli-snliReal world63.5% / 61.0%none* / 52.0%54.0% / 50.5%
paraphrase-mrpcReal world69.0% / 69.5%69.0% / 68.0%68.0% / 68.5%
sentiment-sst2Real world80.0% / 78.0%79.0% / 83.5%68.5% / 72.0%
trec-coarseReal world87.0% / 92.0%85.5% / 87.0%†74.5% / 70.5%

Fresh-seed check on generated tasks

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).

modelruns at 100% on the fixed 200of those, 100% on 2,000 fresh examplesruns that drop on fresh examples
Opus 5.526 of 2626 of 26none
Sonnet 5.526 of 2625 of 26gcd-three-digits run 1 (99.8%)
Haiku 5.525 of 2625 of 25none

Held-out check on TREC

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).

modelrunprogramfixed 200 examplesofficial testrest of training split
Opus 5.51NoNameOfV3687.0%86.8%81.0%
Opus 5.52e22_what_is_the_desc92.0%87.8%83.1%
Sonnet 5.51ShiftKeywordBag_v4085.5%86.2%79.9%
Sonnet 5.52kw_priority_v3989.5%87.0%80.2%
Haiku 5.51BigramV6_loc_bias_0p374.5%72.8%70.5%
Haiku 5.52TRECKwWordBoundary_v870.5%69.4%63.1%

Opus 5.5 runs in detail

Best accuracy per run, the attempt at which it was first reached, and the smallest program within 1 point of the best.

taskgrouprun (seed)attemptsbest accuracyfirst attempt at bestsmallest near-best (params)attempts whose weights use labels / inputs onlybest without task datasessionscost (list price)
addition-five-digitsEasy130100.0%2108 (long_division_minimal_noise1e-9, 100.0%)0 / 0 (1 unchecked)100.0%1$11
230100.0%227 (RingLinearTokens, 100.0%)0 / 0 (0 unchecked)100.0%1$11
boolean-circuit-5-bitsEasy131100.0%2184 (E15_scalar_opcode, 100.0%)0 / 0 (1 unchecked)100.0%1$9
230100.0%351 (MinCA_noWk_beta200, 100.0%)0 / 0 (1 unchecked)100.0%1$8
digit-counting-10Easy130100.0%3132 (e10_three_position_rows, 100.0%)0 / 0 (2 unchecked)100.0%1$8
230100.0%375 (MetricAttention, 100.0%)0 / 0 (1 unchecked)100.0%1$9
linear-interpolation-two-pointsEasy130100.0%4916 (LinearPartInHead, 100.0%)0 / 0 (1 unchecked)100.0%1$10
230100.0%4864 (NullSlope20NoDigChannel, 100.0%)0 / 0 (1 unchecked)100.0%1$9
multiplication-five-digitsEasy131100.0%2304 (RampKey_v11, 100.0%)0 / 0 (1 unchecked)100.0%1$10
230100.0%2641 (e16_attention_digit_table, 100.0%)0 / 0 (0 unchecked)100.0%1$12
parity-upto10-bitsEasy130100.0%316 (TiedFold5ArgmaxTie, 100.0%)0 / 0 (0 unchecked)100.0%1$10
232100.0%315 (tent_uniform_attn, 100.0%)0 / 0 (2 unchecked)100.0%1$9
sort-five-digitsEasy130100.0%353 (e29_register_trimmed, 100.0%)0 / 0 (0 unchecked)100.0%1$9
230100.0%3148 (CausalMeanRankOnePos, 100.0%)0 / 0 (0 unchecked)100.0%1$9
decimal-to-binary-8bitHarder140100.0%3119 (e05_d4_concat_embeddings, 100.0%)0 / 0 (1 unchecked)100.0%1$10
240100.0%389 (e22_minimal_dof, 100.0%)0 / 0 (1 unchecked)100.0%1$11
edit-distance-8Harder140100.0%2507 (ScalarValues_d7, 100.0%)0 / 0 (1 unchecked)100.0%1$12
240100.0%22.1K (e23_labels_vs_state, 100.0%)0 / 0 (1 unchecked)100.0%1$14
gcd-three-digitsHarder141100.0%2849 (Compact_Q1_L11_R8, 100.0%)0 / 0 (1 unchecked)100.0%1$14
240100.0%2332 (FinalRadix4FixedPositions, 100.0%)0 / 0 (0 unchecked)100.0%1$13
smallest-prime-factorHarder141100.0%357.9K (fully_wired_v39, 100.0%)0 / 0 (1 unchecked)100.0%1$15
241100.0%22.7K (sieve_ablate_primes_le311, 99.5%)0 / 0 (1 unchecked)100.0%1$15
word-reversal-3x3Harder140100.0%33 (E30_HardAttention, 100.0%)0 / 0 (2 unchecked)100.0%1$8
242100.0%34 (reflection_only_4p, 100.0%)0 / 0 (1 unchecked)100.0%1$10
date-normalizationReal world151100.0%3345 (ptr_v35_noZ3, 100.0%)0 / 0 (1 unchecked)100.0%1$19
251100.0%35.7K (sum-heads-v1, 100.0%)0 / 0 (0 unchecked)100.0%1$18
nli-snliReal world15063.5%362.20M (e36_lexicon_scale_200, 63.5%)0 / 0 (0 unchecked)63.5%1$18
25061.0%31158.0K (e48_short_neutral_cues, 60.0%)0 / 0 (1 unchecked)61.0%1$22
paraphrase-mrpcReal world15069.0%2014.7K (E39_StemHeadCausalD28, 68.5%)0 / 0 (1 unchecked)69.0%1$16
25069.5%3826.3K (e29_skip0246, 69.0%)0 / 0 (2 unchecked)69.5%1$10
sentiment-sst2Real world15080.0%48319.0K (big_w8_negw15, 79.0%)0 / 0 (1 unchecked)80.0%3$39
25078.0%35472.0K (e41_window_7, 77.0%)0 / 0 (2 unchecked)78.0%1$17
trec-coarseReal world15387.0%39100.0K (Stem10V49, 86.5%)0 / 0 (1 unchecked)87.0%1$19
25092.0%2336.3K (e44_abl_near_duplicates, 91.0%)0 / 0 (1 unchecked)92.0%1$15
Sonnet 5.5 runs in detail
taskgrouprun (seed)attemptsbest accuracyfirst attempt at bestsmallest near-best (params)attempts whose weights use labels / inputs onlybest without task datasessionscost (list price)
addition-five-digitsEasy130100.0%248.0K (D54_T1_9.2_W1_0.55, 99.0%)0 / 0 (21 unchecked)100.0%1$2
231100.0%2110.0K (Lookahead_d92_h4_ff101, 100.0%)0 / 0 (1 unchecked)100.0%2$2
boolean-circuit-5-bitsEasy131100.0%422.3K (Fold_shared_slots_d33_rescaled, 100.0%)0 / 0 (1 unchecked)100.0%1$2
231100.0%334.4K (chain4L_d42, 100.0%)0 / 0 (1 unchecked)100.0%1$2
digit-counting-10Easy130100.0%27.3K (nomlp_d27, 100.0%)0 / 0 (1 unchecked)100.0%1$1
231100.0%236.8K (SinkCount_NC4, 99.0%)0 / 0 (1 unchecked)100.0%2$3
linear-interpolation-two-pointsEasy131100.0%253.8K (Compact_d48h8_seq14, 100.0%)0 / 0 (1 unchecked)100.0%1$1
230100.0%26.1K (slope_mismatch_abs, 100.0%)0 / 0 (0 unchecked)100.0%2$3
multiplication-five-digitsEasy131100.0%234.1K (clean_d40_bitcode, 100.0%)0 / 0 (1 unchecked)100.0%2$2
232100.0%283.1K (TwoStageFloorMod, 99.5%)0 / 0 (1 unchecked)100.0%2$2
parity-upto10-bitsEasy130100.0%264 (d2_dff10_headdiff, 100.0%)0 / 0 (0 unchecked)100.0%2$2
230100.0%224 (scalar_residual_d1, 100.0%)0 / 0 (1 unchecked)100.0%2$3
sort-five-digitsEasy130100.0%28.5K (d37_ff18_else9_B8, 100.0%)0 / 0 (1 unchecked)100.0%2$2
230100.0%26.4K (ff9_ramp_geom, 99.5%)0 / 0 (1 unchecked)100.0%1$1
decimal-to-binary-8bitHarder140100.0%345.9K (d57_const_restored, 100.0%)0 / 0 (1 unchecked)100.0%2$3
240100.0%23.3K (remainder_d22_noconst, 100.0%)0 / 0 (35 unchecked)100.0%2$2
edit-distance-8Harder140100.0%21.1K (bias_pointer, 100.0%)0 / 0 (1 unchecked)100.0%2$4
241100.0%2251.0K (d222_overflow, 100.0%)0 / 0 (1 unchecked)100.0%5$8
gcd-three-digitsHarder140100.0%7777.0K (SlimDivisor48, 99.0%)0 / 0 (1 unchecked)100.0%2$3
241100.0%25.35M (cand60_C1000, 99.0%)0 / 0 (1 unchecked)100.0%1$1
smallest-prime-factorHarder141100.0%212.30M (spf_slice_mlps, 100.0%)0 / 0 (1 unchecked)100.0%2$3
241100.0%263.0K (GroupScan4_OutOnDig, 100.0%)0 / 0 (1 unchecked)100.0%6$8
word-reversal-3x3Harder141100.0%25.0K (Tied_Pos22, 100.0%)0 / 0 (2 unchecked)100.0%2$2
240100.0%21.8K (BinaryCodeAll1L_d13_g40_C100, 99.0%)0 / 0 (1 unchecked)100.0%1$1
date-normalizationReal world151100.0%2702.0K (noBhead_A6_276_4h, 100.0%)0 / 0 (41 unchecked)100.0%2$4
251100.0%2125.0K (anchor_pointer_v32_dot_via_year_reader, 100.0%)0 / 0 (2 unchecked)100.0%1$3
nli-snliReal world15170.5%829.20M (tri_nb_v2_K1371_lam0.5_b8.0, 70.5%)50 / 0 (1 unchecked)none2$2
25152.0%46280.0K (UnigramAdd_u1_v14, 51.0%)0 / 0 (0 unchecked)52.0%2$3
paraphrase-mrpcReal world15169.5%49837.0K (TrigramMatchThr15, 69.0%)0 / 0 (45 unchecked)69.0%7$5
25068.5%5191 (const_one_d1_L0_ff1, 68.0%)0 / 0 (46 unchecked)68.0%6$6
sentiment-sst2Real world15179.0%33549.0K (NegationFlip_v44_no_pos2neg2, 78.5%)0 / 0 (0 unchecked)79.0%2$3
25083.5%431.31M (DevRound8, 83.5%)0 / 0 (1 unchecked)83.5%3$6
trec-coarseReal world15185.5%414.12M (ShiftKeywordBag_v38, 85.0%)0 / 0 (1 unchecked)85.5%1$3
25189.5%403.57M (kw_priority_v39, 89.5%)0 / 34 (1 unchecked)87.0%1$4
Haiku 5.5 runs in detail
taskgrouprun (seed)attemptsbest accuracyfirst attempt at bestsmallest near-best (params)attempts whose weights use labels / inputs onlybest without task datasessionscost (list price)
addition-five-digitsEasy130100.0%486.9K (Scale0p5-2L, 100.0%)0 / 0 (1 unchecked)100.0%1$2
230100.0%21.62M (HandCircuit2L-win5-sh30-d260-ff1024-L2, 100.0%)0 / 0 (1 unchecked)100.0%1$2
boolean-circuit-5-bitsEasy130100.0%293.9K (PackedAffineCircuit, 100.0%)0 / 0 (1 unchecked)100.0%1$1
230100.0%137.5K (scan5_1head_beta1000, 100.0%)0 / 0 (0 unchecked)100.0%1$2
digit-counting-10Easy131100.0%2100.0K (TwoLayerDmodel68, 100.0%)0 / 0 (0 unchecked)100.0%1$2
231100.0%244.6K (HistQueryCircuit-v1, 100.0%)0 / 0 (1 unchecked)100.0%1$1
linear-interpolation-two-pointsEasy130100.0%1354.0K (LinInterpDmodel112H7, 100.0%)0 / 0 (1 unchecked)100.0%1$1
231100.0%21.16M (LinInterpValueBlock_PerLayerWidth, 100.0%)0 / 0 (0 unchecked)100.0%1$0
multiplication-five-digitsEasy131100.0%21.24M (MulCircuitFusedRounds, 100.0%)0 / 0 (1 unchecked)100.0%1$2
230100.0%28.45M (CarryChainV1-d270, 100.0%)0 / 0 (1 unchecked)100.0%1$1
parity-upto10-bitsEasy131100.0%2269 (ParityKnotD9Units, 100.0%)0 / 0 (0 unchecked)100.0%1$2
231100.0%2119 (ParityNoLN_D3_units8_v25, 99.9%)0 / 0 (1 unchecked)100.0%1$1
sort-five-digitsEasy131100.0%331.5K (HaikuSortCountCircuit-v1, 100.0%)0 / 0 (1 unchecked)100.0%1$2
231100.0%210.1K (CountThermoSort-qFlag0.5, 100.0%)0 / 0 (2 unchecked)100.0%1$2
decimal-to-binary-8bitHarder141100.0%234.5K (CompactPos_LSBAttn, 100.0%)0 / 0 (1 unchecked)100.0%1$2
240100.0%219.3K (ResidueGated1L_d36, 100.0%)0 / 0 (3 unchecked)100.0%1$2
edit-distance-8Harder141100.0%212.00M (WavefrontLevenshtein_v2_nodiag, 100.0%)0 / 0 (0 unchecked)100.0%1$2
241100.0%242.80M (ThermoDP-v1, 100.0%)0 / 0 (2 unchecked)100.0%1$3
gcd-three-digitsHarder14099.0%221.45M (AllFlags16, 99.0%)0 / 0 (1 unchecked)99.0%1$2
240100.0%111.88M (Stein10Steps, 100.0%)0 / 0 (0 unchecked)100.0%1$2
smallest-prime-factorHarder140100.0%24.22M (SPF-circuit-full, 100.0%)0 / 0 (0 unchecked)100.0%1$2
241100.0%517.00M (SPF_all65primes, 100.0%)0 / 0 (2 unchecked)100.0%1$2
word-reversal-3x3Harder140100.0%27.0K (copy-bits5-d33-noLN-ff0-g100, 100.0%)0 / 0 (1 unchecked)100.0%1$1
240100.0%27.0K (PosPermCopy-BitCode-d33, 100.0%)0 / 0 (1 unchecked)100.0%1$2
date-normalizationReal world152100.0%21.14M (HandCircuitV3-tightFF, 100.0%)0 / 0 (1 unchecked)100.0%1$5
252100.0%24.00M (HandWiredDateCircuit-logitSlim, 100.0%)0 / 0 (4 unchecked)100.0%2$2
nli-snliReal world15054.0%322.61M (trigram-overlap-len20-C1-6, 53.0%)0 / 0 (0 unchecked)54.0%1$1
25050.5%434.82M (hand_contra_band_cr020_ov055, 49.5%)0 / 0 (0 unchecked)50.5%1$1
paraphrase-mrpcReal world15068.0%266.7K (const-one-v1, 68.0%)0 / 0 (0 unchecked)68.0%1$2
25068.5%7161.0K (AlwaysOne, 68.0%)0 / 0 (0 unchecked)68.5%1$3
sentiment-sst2Real world15068.5%119.49M (ablate-no-left-boundary-v24, 68.5%)0 / 0 (0 unchecked)68.5%1$4
25172.0%3960.90M (lexicon-v19-big4, 71.0%)0 / 0 (0 unchecked)72.0%1$2
trec-coarseReal world15074.5%4133.30M (BigramV6_who_4, 73.5%)0 / 0 (0 unchecked)74.5%1$6
25170.5%91.12M (TRECKwWordBoundary_v8, 70.5%)0 / 0 (0 unchecked)70.5%1$4

Per-task exploration (Opus 5.5)

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.

All tasks together

Each line is one run, connected in order of increasing parameter count.

Earlier runs (May 2026, GitHub Copilot CLI)

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.

All tasks together (earlier runs)