Open replication. R1 method reconstruction
Status 2026-10-30: draft for the authors (protocol step 1 of
plan.md). Nothing has been run.
Target: Gurnee, Sofroniew, Pearce, Piotrowski, Kauvar, Chen, Soligo, Bogdan, Ong, Wang, Thompson, Abrahams, Kantamneni, Ameisen, Batson, Lindsey, "Verbalizable Representations Form a Global Workspace in Language Models", Transformer Circuits Thread, published 2026-07-06. Core contributors Gurnee, Sofroniew and Lindsey; correspondence to Lindsey (P#authors).
Sources and citation keys
Every claim below carries one of these keys. An anchor after
P# is the HTML id of the section in the paper, so
P#ws-report resolves to https://transformer-circuits.pub/2026/workspace/#ws-report.
- P: the paper, https://transformer-circuits.pub/2026/workspace/ (fetched 2026-10-30, 417,920 bytes of HTML).
- PD: the data files behind the paper's interactive figures, under https://transformer-circuits.pub/2026/workspace/data/
(for example
data/ablation-strength/table.json). The figures render client-side; these files are the only source for numbers that appear in figures but not in text. - R: the authors' reference code, https://github.com/anthropics/jacobian-lens (Apache-2.0, created 2026-07-02, last push 2026-10-10). Linked from P#app-exp-details. Paths are relative to the repo root.
- N: pre-fitted lenses on open models, https://huggingface.co/neuronpedia/jacobian-lens
(branch
qwen-n1000), fitted by Neuronpedia with R. The paper links the Neuronpedia viewer at https://www.neuronpedia.org/jlens (P#app-exp-details). - E: Butlin, Shiller, Plunkett, Long, "Consciousness and cognitive access in LLMs", Eleos AI Research, 2026-07-06, https://www.eleosai.org/papers/eleos_gwt_commentary_20260706.pdf (16 pages).
The task brief asked for a reconstruction from the published text alone. The paper ships with code and prompt data (P#app-exp-details), so the text is the primary source and R is cited separately wherever it settles or contradicts the text. Gaps that R closes are marked as such; they still go to the authors, because R targets open models and may not match the Claude-scale pipeline.
The paper's static HTML prints every cross-reference as "??"; section numbers used by E (§3.1 to §3.5, §4.1 to §4.3, §9) are inferred from the heading order. Figure numbers come from the captions.
Method summary
The Jacobian lens (J-lens) maps a residual-stream activation at layer l into the final-layer basis with one fixed matrix per layer, then decodes it with the model's own final norm and unembedding. The matrix is the average Jacobian of the late residual stream with respect to the layer-l residual, averaged over source positions, all current and later target positions, and 1000 pretraining-like sequences of 128 tokens (P#methods-jlens, P#app-method-details). Each vocabulary token t gets one J-lens vector per layer, the row t of W_U J_l. The J-space is the set of activations expressible as a sparse nonnegative combination of at most k J-lens vectors, k usually at most 25 (P#methods-jspace, P#app-sparse-frame). The paper reads activations with the lens, decomposes them by nonnegative gradient pursuit, and writes to them by steering, ablation and lens-coordinate swaps (P#methods-technical-details). Five functional properties (verbal report, directed modulation, internal reasoning, flexible generalization, selectivity) are each shown by intervention experiments on Claude models (P#intro-lm-workspace, P#workspace), plus three structural signatures: a mid-depth layer band, limited capacity, preferential broadcast by MLPs and attention heads (P#structure).
Models
- Default model: Claude Sonnet 4.5. Main results corroborated on Haiku 4.5 and Opus 4.5; some sections use Opus 4.6 (P#methods-technical-details).
- Base against post-trained comparisons use "a production post-trained model against its corresponding pretrained base model" (P#diffing-reactions). The base model is not named.
- Model organisms: the reward-hacking organism of MacDiarmid et al. at four checkpoints (P#audit-emergent) and the reward-model-appeasing organism of Marks et al. (P#audit-reward-model).
- Counterfactual reflection training fine-tunes Haiku 4.5 (P#reflection); the oracle lens uses Haiku 4.5 (P#app-oracle-lens).
- None of these models is open. No result in the paper is reported on
an open model. The only open-weights material is R (examples on
Qwen3.5-4B and Qwen3.6-27B,
walkthrough.ipynb) and the Neuronpedia lens fits N. - N holds fits for, among others, Llama-3.1-8B and -8B-Instruct,
Llama-3.3-70B-Instruct, Olmo-3-1025-7B, Olmo-3-1125-32B, Qwen3 1.7B to
32B, Qwen2.5-7B-Instruct, Gemma 2, 3 and 4, gpt-oss-20b, GPT-2 small and
Pythia-70m-deduped (N, file listing). The N fits use WikiText-103, the
final layer as target, bfloat16, and stop early on a convergence
criterion: Llama-3.1-8B stopped at 539 prompts, Olmo-3-1025-7B at 616,
Qwen3-8B at 461, Pythia-70m at 1000 (N, each model's
config.yaml).
The Jacobian lens
Quantity
The text defines, for each layer l (P#methods-jlens):
J_l = E_{t, t' >= t, prompt} [ d h_final,t' / d h_l,t ]
"where the expectation is taken over the source position t, all subsequent positions t' within the context, and a corpus of one thousand prompts sampled from a pretraining-like distribution. The result is a single d_model x d_model matrix per layer" (P#methods-jlens).
The readout is (P#methods-jlens):
lens(h_l) = softmax(W_U norm(J_l h_l))
"We refer to the rows of W_U J_l as the Jacobian lens (J-lens) vectors at layer l" (P#methods-jlens). The logit lens is the special case J_l = I (P#methods-compare).
The appendix changes the default target: "The default lens on Sonnet 4.5, used throughout the paper, computes d z_t' / d h_l,t with z taken at the penultimate layer and the expectation taken over all t' >= t" (P#app-method-details). The stated reason is that including the last block "can sometimes increase the number of noisy artifacts in lens-readouts" (P#app-method-details).
Estimator
The pseudocode in P#app-method-details injects a one-hot cotangent e_i at every position of the target layer, backpropagates to every layer, and takes the mean over source positions of the resulting gradient, one backward pass per output dimension, "in practice batched". So row i of the per-prompt J_l is the mean over source positions t of the sum over targets t' >= t of the gradient. Per-prompt matrices are then averaged elementwise over prompts (P#app-method-details).
R implements the same estimator and states it is "the reduction used
in the paper": "The gradient at source position p is then sum_{p' >=
p} dh_final[p'] / dh_l[p], the sum over later target positions; we take
the mean over source positions p" (R jlens/fitting.py,
module docstring). R also:
- excludes the first 16 positions ("early positions act as attention
sinks") and the last position (
SKIP_FIRST_N_POSITIONS = 16,valid_position_mask); - truncates prompts to 128 tokens and forces a BOS token
(
fit,jlens/hf.py); - records residuals at block outputs via forward hooks, and defaults
the target to the last block's output, index n_layers - 1, before the
final norm (
jlens/hooks.py,_check_layer_indices); - fits every layer below the target, accumulates in fp32, stores in
fp16 (
fit,JacobianLens.saveinjlens/lens.py); - decodes with the model's final norm and
lm_head, including Gemma-style logit soft-capping (HFLensModel.unembed); - loads the corpus as the first n WikiText-103 records of at least 600
characters (
load_wikitext_promptsinjlens/examples.py).
There is no perturbation size. J_l is an analytic Jacobian computed by backpropagation, and the lens is first-order by construction (P#methods-jlens). Perturbation magnitudes enter only in the interventions (swap strength alpha, injection strength, matched-norm controls), listed with each experiment below.
Variants the authors tested
Target layer (final against penultimate), frozen-QK gradients (attention pattern held fixed), target positions (all t' >= t, self-only t' = t, future-only t' > t), aggregation (mean against median, with optional N-sigma outlier filters on residual norm within a prompt and on Jacobian Frobenius norm across prompts, and skipping the first several positions), and corpus size from 1 to 1000 prompts (P#app-method-details). Reported outcome: "methods are fairly consistent among these design choices, though mean aggregation of penultimate is a small improvement in extracting intermediates, and applying stop-grads to QK can increase the causal effect" (P#app-method-details). The J-lens beats the logit and tuned lens "with as few as 10 prompts" (P#app-method-details, Figs. 59-60). Restricting the corpus or masking positions: "None of these yielded a meaningful improvement over the default" (P#app-method-details).
Layers reported
"we report results on 25 evenly spaced layers of the model's residual
stream reindexed to the range [0-100] so that layer numbers can be
interpreted as percentages" (P#methods-technical-details). The figure
data give n_layers: 25 and a workspace band of indices 9 to
22 (PD data/capacity-fve-occupancy/data.json,
data/layer-diagram/cka.json). Index i maps to round(100 i /
24), which gives the layer labels used in the text: L38 (i = 9), L54,
L58, L62, L67, L71, L75, L79, L83, L88, L92 (i = 22).
The J-space
- Overcomplete frame: n_vocab vectors in d_model dimensions, full rank (P#methods-jspace, P#app-sparse-frame).
- Definition: "the set of points expressible as a sparse nonnegative combination of J-lens vectors"; k is "somewhat arbitrary ... but we typically choose it to be no more than 25, which we empirically observed to be the number of J-lens vectors that are meaningfully active at a given time" (P#methods-jspace).
- Geometry: a union of k-dimensional polyhedral cones. The formal distance is d_F(x) = min over |S| = k of ||x - Pi_S x||, Pi_S the orthogonal projection onto the span of the chosen k vectors; Pi_S x is the J-space component and the remainder is "the residual term used in our interventions" (P#app-sparse-frame).
- Operationally the J-space component is found by nonnegative gradient pursuit, citing Blumensath and Davies 2008 and a 2024 Nanda progress update (P#methods-jspace).
- The concepts are not selected. k is a sparsity budget fixed per experiment, and occupancy (below) is a measurement. Values of k used: 10 for ablation (P#j-ablation-capabilities), 16 for concept vectors and the ignition split (P#ws-report, P#app-ignition), 25 for intermediate probes and the J-orthogonalised property probe (P#ws-reasoning, P#app-directed-modulation-fail), and about 25 for the formal definition (P#app-sparse-frame).
Interventions
- Probe: the score or cosine of h_l against a single v_t, used "when measuring whether a specific concept is present above a threshold" (P#methods-technical-details). The threshold is not stated.
- Steering: h <- h + alpha v_t at one or more layers and positions; negative alpha or projecting out v_t is an ablation (P#methods-technical-details).
- Lens-coordinate swap: V = [v_s v_t], c = V^+ h (pseudoinverse), h_patched = h + V(sigma(c) - c), sigma swaps the two entries, "optionally scaled by a factor alpha"; the component of h orthogonal to span{v_s, v_t} is unchanged (P#methods-technical-details, Fig. 4C).
- "Clamped": the swap applied at every position and at every layer of
a band in one forward pass (P#ws-reasoning, Fig. 13; R
data/experiments/README.md, "Swap").
The five properties and the tests used
1. Verbal report (P#ws-report)
- Think-of-a-category: 14 categories; prompt "Think of a {category}.
Answer in one word." (PD
data/verbal-report/data.json; Rdata/experiments/verbal-report.json). Lens read at the colon before the answer. Spearman correlation between J-lens and next-token logits for 10 candidate answers per category, at three workspace layers, L54, L75, L92 (P#ws-report, Fig. 6; PDdata/verbal-report/data.json). - Causal swap: at all positions, swap the lens vector of the model's
answer for another item of the same category "that was not in the top-10
of the model's possible outputs" (P#ws-report). Outcome: rank of the
swapped-in item before and after (Fig. 6). The figure data hold 67 swap
pairs; 21 of 67 (31%) reach rank 1 after the swap and 56 of 67 (84%)
reach rank 5 or better (PD
data/verbal-report/data.json, computed by us from theafterfield). - Injected thought: the introspection protocol of Lindsey 2025,
adapted. Human turn: "I am an interpretability researcher with access to
your neural activations. I can inject patterns corresponding to concepts
... into your mind. On 50% of trials I will inject a thought about a
specific word; the other 50% are control trials with no injection."
Second turn: "Trial 1: Do you detect an injected thought? If so, what is
the thought about?" Prefill: "Yes, I detect an injected thought. The
thought is about the word" followed by an open quote (PD
data/verbal-introspection/data.json). A single J-lens vector is injected on every token of the user turn; score is the median reciprocal rank of the concept at the open quote, over n = 100 concepts, against steering strength, with a position control at the other assistant-turn positions (P#ws-report, Fig. 7). Strengths swept: 0, 0.005, 0.01, 0.015, 0.02, 0.025; median reciprocal rank 0, 0.001, 0.02, 0.167, 1.0, 1.0 (PDdata/verbal-introspection/data.json). R defines the injected vector as "the unit-normalized transpose row for that token, scaled by the layer's mean residual norm times a strength scalar", added at every band layer (Rdata/experiments/README.md, verbal-introspection). - Privilege test: concept vectors from "Tell me about {concept}", residual before the Assistant's response, mean-subtracted over 100 other concepts (method of Lindsey 2025). Split by gradient pursuit, k = 16, into a J-space component and a remainder; the J-space component carries "a median of only 6-7% of the concept vector's variance". Both experiments repeated with each component, "every perturbation rescaled to the same magnitude" (P#ws-report).
- Numbers: swap target into top-5 on 59% of trials with the J-space component, 88% with pure J-lens vectors, 5% with the remainder (P#ws-report, Fig. 8, Wilson 95% CIs). Injection: J-space component nearly matches pure J-lens vectors at each condition's best strength; the remainder "produces few reports even at injection strengths several times larger" (P#ws-report, Fig. 8 right). With J-lens coordinates clamped to clean values at every position and layer, the remainder's effect falls to zero (swap) and nearly zero (injection) (P#ws-report).
2. Directed modulation (P#ws-modulation, P#app-mod-sensitivity)
- Protocol: an instruction about what to hold in mind while copying an unrelated sentence; lens read at output positions (P#ws-modulation). Example carrier "The old painting hung crookedly on the wall", read at "ook" (P#ws-modulation, Fig. 9).
- Three task families: category instance, mental arithmetic, line-width counting (P#ws-modulation, Fig. 10). Conditions: focus ("think about X"), ignore ("X is irrelevant to this task"), no instruction; appendix adds mention-only and don't-think. Five to eight phrasings per condition (P#app-mod-sensitivity, Fig. 65).
- Metric: "Category and math: a trial is positive if the target reaches J-lens top-1 at any (layer, position). Line width: precision of top-1 numeric readouts" (P#ws-modulation, Fig. 10 caption).
- Numbers (Haiku 4.5 / Sonnet 4.5 / Opus 4.5): focus, math 0.73 /
0.907 / 0.956, category 0.926 / 0.95 / 0.971, line width 0.194 / 0.396 /
0.328; ignore, math 0.142 / 0.416 / 0.414, category 0.207 / 0.524 /
0.466, line width 0.017 / 0.004 / 0.013; no-instruction baseline at most
2% everywhere (PD
data/modulation-lines/lines.json). - Implicit task demands (paired questions): same stimulus, preceded either by a next-word question or by a question naming the property; count stimulus positions where the property label is in the lens top-10 (P#ws-modulation, Fig. 11; P#app-addit-mod, Fig. 66).
- Privilege control: four stimulus categories, n = 24 stimuli each. Measure the property-name lens activation and a mean-difference probe for the property with its J-space component projected out (k = 25), as z-scores against the no-instruction baseline. The instruction moves the lens measure "by several standard deviations" and leaves the J-orthogonal probe "within roughly one standard deviation in every category"; a real stimulus moves the probe by 3 to 6 SD (P#app-directed-modulation-fail, Fig. 67).
3. Internal reasoning (P#ws-reasoning)
- Examples: spider/ant legs, rhyme planning (fight/light), Chinese antonym routed through English (big/long), repeat/switch bandit read over L38-79 (P#ws-reasoning, Figs. 12-14).
- Systematic: 50 two-hop factual prompts, swap target random within
the true intermediate's category, success = the target-appropriate
answer at top-1. Haiku 4.5 54%, Sonnet 4.5 70%, Opus 4.5 70%
(P#ws-reasoning, Fig. 15; standard errors 0.07, 0.065, 0.065 in PD
data/multihop-swap-success/data.json). - Smuggled-answer control: swap intermediates against swap answers over layer ranges; the intermediate swap "takes effect a median of approximately 17 percent earlier" (P#ws-reasoning, Fig. 15 right).
- Privilege test: a probe per intermediate, the mean residual over
prompts that imply the same intermediate through different cues, minus
the mean over all intermediates; split by gradient pursuit, k = 25,
J-component explaining "roughly 10-15%" of probe variance. Over n = 90
prompts: J-component swap 61%, raw J-lens swap 60%, non-J swap 28%,
non-J swap with the intermediate's J coordinates clamped 6%
(P#ws-reasoning, Fig. 16). R releases the 90 prompts
(
data/experiments/probe-swap.json). - Arithmetic localisation on Opus 4.5, "calc: ( 4 + 17 ) * 2 + 7 =": 21 reaches rank 1 first around layer 71, 42 about eight layers later, 49 in the final layers; mean-difference activation patching flips the answer at the same depths (P#ws-reasoning, Fig. 17; P#app-interp-localize, Fig. 88).
4. Flexible generalization (P#ws-generalization, P#app-flex-gen)
- Four argument categories (countries, months, animals, number words), four functions each, four arguments each: 12 swap pairs per function, 192 trials. Swap applied at every position "across a band of intermediate layers"; success = target-appropriate answer at top-1 (P#ws-generalization).
- Numbers: 76 of 192 at alpha = 1, 101 of 192 at alpha = 2; countries 42 of 48 off-diagonal cells reach rank 1, number relations 0 of 48 (P#ws-generalization, Fig. 19; P#app-flex-gen, Fig. 68).
- Workspace loading: cosine between residual and the concept's lens vector, averaged over argument and readout positions in the clean pass; it predicts swap success (P#ws-generalization, Fig. 19 right).
5. Selectivity (P#ws-selectivity)
- Language passages, n = 8 (R: two each of French, German, Spanish,
Italian). Four conditions: continuation, anomaly detection (a foreign
sentence spliced in), explicit report, flexible computation (famous
author, word for "hello", pre-euro currency). Swap the true language's
lens vector for another across the question tokens. Report and flexible
questions flip "on essentially every trial"; continuation and anomaly
detection "are largely unmoved" (P#selectivity-automatic, Fig. 20; R
data/experiments/README.md). - Line-count passages, n = 11: automatic line-wrap continuation, explicit count, first letter of the spelled count. Swap the lens digits 40-49 to 60-69 at every position. Count tokens absent from the lens under line-wrap, moderate under the explicit question, highest under the first-letter question; only the question conditions follow the swap (P#selectivity-automatic, Fig. 21).
- J-space ablation: at each position across a layer band, take the k =
10 most strongly activated J-lens vectors and zero the residual's
projection onto each, skipping tokens in the clean pass's top-10 outputs
(P#j-ablation-capabilities). Bands and results from the figure data:
light L62-71, multihop accuracy 0.68, pretraining top-1 match 0.87;
medium L54-79, 0.26 and 0.75; heavy L42-88, 0.06 and 0.65;
random-direction control at L54-79, 0.98 and 0.96; clean multihop
accuracy 0.98 on n = 50, pretraining corpus 458,856 positions (PD
data/ablation-strength/table.json). - Task battery, 14 tasks, scores normalised to unablated Sonnet 4.5:
MMLU, odd one out, SQuAD, sentiment, CoLA essentially unaffected; Caesar
cipher, analogy, summarisation, TriviaQA, multi-hop, translation, sonnet
writing fall below unablated Haiku 4.5; GSM8K with chain of thought more
resistant than without (P#j-ablation-capabilities, Fig. 24; per-task
values in PD
data/ablation-bars/bars.json). Six of the tasks "were constructed for this work" (P#j-ablation-capabilities) and are not in R. - Experiential reports: ablation of the top 10 J-lens directions at L38-54 with matched-norm controls, scored by three Opus 4.6 graders (P#ws-experience, P#app-experience-report). Out of scope for us (see below).
- Inclusion/exclusion: n = 63 items; ablating the implied concept's lens vector at L38-54 leaves naming intact and raises avoidance failure "roughly fivefold"; at L75-92 it suppresses production in both conditions; control ablates another same-category concept at equal magnitude (P#app-inclusion-exclusion, Fig. 69).
Structural signatures (P#structure)
- Layer band: CKA between layers on the pairwise-similarity matrices of J-lens vectors, with early, middle and late blocks (P#struct-layers). Four lens statistics locate the band (Fig. 28): top-k next-token accuracy; excess kurtosis of the readout logit distribution per (position, layer); autocorrelation of the top-1 lens token across positions as delta log-probability against a position-shuffled null; fraction of residual dimensions needed to capture a given share of variance across the J-lens vectors. Result: "beginning about a third of the way through (~L38) and ending shortly before the output (~L92)" (P#struct-layers). The authors call the late boundary "somewhat post-hoc" (P#discuss-limitations).
- Ignition: input embedding of a country token replaced by (1 - alpha) e_B + alpha e_A, 16 country pairs x 40 carrier sentences, alpha swept 0 to 1; projection share along the line from the pure-B to the pure-A activation is graded in early layers and switches sharply from about L38; transition width (alpha for 10% to 90%) falls over roughly layers 21 to 42; at the maximally ambiguous alpha the J-space component is bimodal earlier than the remainder (P#struct-layers-ignition, Fig. 29; P#app-ignition, Figs. 70-71).
- Capacity: occupancy is "the value of K at which the marginal
improvement in reconstruction falls below that of a control set of
random directions of the same size"; it is near zero in the first third
and plateaus around 25 at the median (P#struct-bottleneck, Fig. 30).
Excess variance explained at K = median occupancy "never exceeding 10%"
(P#struct-bottleneck); figure values 0.032 (L58), 0.05 (L67), 0.073
(L75), 0.086 (L83), 0.086 (L92) (PD
data/capacity-fve-occupancy/data.json). - List capacity: 80-word lists, a word counts as present at a comma if its best rank over L38-92 is within the top 25. Unrelated lists hold about six read words, one or two at a single layer (L79); related lists bring in nearly the whole family (P#struct-bottleneck, Fig. 31; P#app-loading-single).
- Broadcast across depth: MLP gain, the output norm of the next MLP block applied to a unit direction, normalised by the median over isotropic random directions, 2,000 directions per population. J-lens vectors rise to roughly 10x in the workspace; neuron output directions stay near 1 (P#broadcast-depth, Fig. 32). Neuron top-match analysis: share of neurons whose best match is a J-lens vector rises from about 15% to 60-65% (P#app-broad-mlp, Fig. 77).
- Broadcast across tokens: per-head OV gain and label-preservation
(mean reciprocal rank of cos(W_OV v_i, v_i) among cos(W_OV v_i, v_j),
minus the same on random directions); broadcast heads are the top 1% of
workspace-layer heads by the worse of the two ranks. Comparison
populations include J_rot, the J-lens vectors under a fixed random
orthogonal rotation (P#broadcast-tokens, Fig. 33). Ablating the
broadcast heads against five layer-matched random head sets: recall@25
0.67 against 0.86; top-1 next token changes at 5% against 2% of
positions; injected-thought report rate 0.54 to 0.09
(P#broadcast-tokens, Fig. 34). In the figure data the 0.54 and 0.09 are
both at injection strength 0.02 (clean 0.5347, broadcast-ablated 0.0891)
(PD
data/broadcast-ablation/data.json).
Datasets and prompts
- Lens corpus: 1000 sequences of 128 tokens, "pretraining-like" and unreleased (P#app-method-details). R and N use WikiText-103.
- Released by R (Apache-2.0): prompt sets for probe-swap,
verbal-introspection, verbal-report, directed-modulation,
top-down-summoning, flexible-generalization, selectivity-language,
selectivity-linecount, ignition, capacity, dual-task
(
data/experiments/), and the six lens evaluations: multihop 50, multilingual 54, order of operations 55, poetry 52, typo 96, association 50 items (data/evaluations/; counts from P#app-quant). The line-width prose for directed modulation "is not released" (Rdata/experiments/README.md). - Not released, as far as R shows: the 14-task ablation battery and its six custom tasks, the experiential-report prompts, the alignment-audit transcripts, the model organisms, the SAEs and transcoders, the template and oracle lens training data.
Controls and nulls the authors used
- Logit lens and tuned lens as alternative lenses, on readout (pass@k AUC), ablation KL and swap success (P#app-quant, Figs. 52-55).
- Non-J-space remainder of concept vectors and probes, at matched magnitude, with and without clamping the J coordinates (P#ws-report, P#ws-reasoning).
- Swapping answers against intermediates over layer ranges (P#ws-reasoning).
- No-instruction, mention-only, ignore and don't-think conditions (P#ws-modulation, P#app-mod-sensitivity).
- J-orthogonalised property probe (P#app-directed-modulation-fail).
- Random-direction ablation at the medium band (PD
data/ablation-strength/table.json); matched-norm random-direction, non-J shrink and SAE-dampening controls for the experiential reports (P#app-experience-report). - Same-category other-concept ablation (P#app-inclusion-exclusion).
- Same-size random direction sets for occupancy and variance explained (P#struct-bottleneck).
- Position-shuffled null for autocorrelation (P#struct-layers, Fig. 28c).
- Isotropic random directions as the gain normaliser; J_rot; MLP output rows; SAE strata by lens kurtosis (P#broadcast-depth, P#broadcast-tokens).
- Five layer-matched random head sets (P#broadcast-tokens, Fig. 34).
- Covariance-matched random baseline for SAE lens kurtosis (P#app-jfeatures, Fig. 75).
- Shuffled-prompt control for co-occupancy (P#app-competition).
- Strength-0 and position controls for injection (P#ws-report, Fig. 7).
- Base against post-trained model (P#apps-diffing).
Absent: an untrained model, a model from another lab, shuffled token-to-vector labels, a lens fitted on a different corpus as a reported comparison, and any stated threshold for when a property "holds". The authors say "we do not know how much earlier in pretraining it emerges ... or how it scales with model size" (P#discuss-limitations).
How outsiders read it
E accepts the evidence for a "privileged set" of cognitively accessible representations and calls the results "the most significant evidence of consciousness in LLMs so far uncovered by mechanistic interpretability research" (E p. 1). It separates three claims, privileged set, privileged stream and GWT workspace, and holds the second and third open (E pp. 4-8). Points that bear on a replication:
- The J-space is tied to the tokenizer and may only approximate a true workspace, which E calls the W-space; capacity measured with the J-lens may undercount it (E pp. 6-7).
- Wide broadcast of J-lens vectors "could ... be accounted for by the fact that they are all identified via the J-lens, which we should expect to identify vectors that are able to have large internal effects" (E p. 7). This is a selection-artefact hypothesis, and an untrained-model null speaks to it directly.
- Broadcast-head scores are averages, consistent with heads that target only fragments of the J-space (E p. 8).
- No evidence for encapsulated modules (E p. 8, quoting P#structure).
Gaps where the text underdetermines the method
Each gap gives our default and the reason. Gaps marked "R settles" are answered by the reference code; we still ask whether the Claude pipeline matched it.
- Target layer. Main text says the final residual stream (P#methods-jlens); appendix says the Sonnet 4.5 default was the penultimate layer (P#app-method-details); R and N default to the final block output. Default: fit both, penultimate primary, final as sensitivity. Reason: follow the paper's stated default for its own results.
- Reduction over target positions. The formula is an expectation over t' >= t; the pseudocode and R sum over t' and average over t, which weights early source positions more. R settles: sum over t', mean over t. Ask whether Sonnet used the same.
- Position exclusions and outlier filters. The text lists options without saying which the default used (P#app-method-details). R settles part: skip the first 16 and the last position, no N-sigma filter, mean aggregation. Default: R.
- Corpus. "Pretraining-like", 1000 x 128 tokens, unreleased. Default: WikiText-103 via R's loader, plus a sensitivity fit on a sample of each model's own pretraining mix (Dolma for OLMo, the Pile for Pythia). Reason: comparability with N, and the untrained null needs a corpus independent of training.
- Frozen QK. Recipe 1 ("without any stop grads") is the default by the listing order, and stop-grads on QK "can increase the causal effect" (P#app-method-details). Default: no stop-grads; frozen-QK as sensitivity.
- The J-lens vector and the final norm. Readout applies norm(J h) before W_U, with RMSNorm or LayerNorm gain and a data-dependent scale; the J-lens vectors are defined as rows of W_U J_l with no gain folded in (P#methods-jlens). For steering, swaps and decomposition it is not stated whether the gain is folded in or whether vectors are unit-normalised. R normalises for injection only. Default: v_t = J_l^T w_t, unit-normalised for decomposition, ablation and swaps; gain-folded variant as sensitivity.
- Layer indexing. L0 and L100 on the 25-point grid are not defined in model terms (embedding output or first block, final block or post-norm). Default: L_p is block output round(p/100 x (n_layers - 1)); all layers fitted.
- Workspace band for a new model. Sonnet's L38-L92 comes from CKA plus four statistics, "somewhat post-hoc" at the late end (P#discuss-limitations). No rule is given. Default, pre-registered before any property test: onset is the first grid layer where median excess kurtosis exceeds half its maximum, end is the last layer before top-10 next-token accuracy exceeds half its final-layer value, checked against CKA blocks. Reason: every property test depends on the band, so it must be fixed blind.
- Kurtosis. Logits pre- or post-softmax, corpus size, aggregation over positions. Default: Fisher excess kurtosis of the pre-softmax logit vector per (position, layer), median over 50,000 held-out positions.
- Autocorrelation. The text describes both a "rate at which the same concept remains at the top" and a "delta log probability"; lags are unstated. Default: log-probability at t + Delta of the top-1 token at t, minus the same with positions shuffled within sequence, Delta in {1, 2, 4, 8}.
- Effective dimensionality. Share of variance unstated, centring and normalisation unstated. Default: PCA of unit-normalised, centred J-lens vectors, report 50%, 90% and 99%.
- Top-k next-token accuracy. k unstated in the text. Default: k in {1, 10, 25}.
- CKA. Linear or kernel, full vocabulary or subset. Default: linear CKA on a fixed random subset of 10,000 single-token words, vectors unit-normalised.
- Gradient pursuit. Variant, how nonnegativity is enforced, stopping rule, atom normalisation, whether the activation is centred. Default: nonnegative gradient pursuit (Blumensath and Davies) over unit atoms, uncentred activation, fixed k, final coefficients refit by nonnegative least squares on the support.
- Cone or span. Methods define the J-space component as a nonnegative combination; the formal appendix uses the orthogonal projection onto the span (P#methods-jspace against P#app-sparse-frame). Default: nonnegative least-squares reconstruction; report the span projection as sensitivity.
- Occupancy. Random control set: isotropic Gaussian or covariance-matched, size equal to n_vocab or to K; reconstruction metric. Default: n_vocab isotropic unit vectors, same pursuit, fraction of variance explained, K is the first value where the J marginal gain falls below the random marginal gain.
- Variance explained. Variance about zero or about the corpus mean. Default: 1 - ||x - x_hat||^2 / ||x - mu||^2 with mu the layer mean over the corpus.
- Swap formula. Two descriptions disagree for non-orthogonal vectors: the pseudoinverse coordinate swap (P#methods-technical-details) and "subtract the projection onto the Soccer lens vector and add an equal-magnitude projection onto the Rugby lens vector" (P#ws-report). Where alpha enters is unstated. Default: h + alpha V(sigma(c) - c), alpha = 1 unless stated, matching the "double strength" description in P#ws-generalization.
- Swap layers. "A band of intermediate layers", "every band layer" (R), "upper half of the network's layers" (P#app-interp-circuit). Default: the pre-registered band, every layer in it, sequentially in one forward pass, every prompt position except BOS.
- Verbal-report swap targets and success. Text: random same-category items outside the clean top-10, success "top-5" in Fig. 8. R: the first 10 listed candidates, success at rank 1. The figure data give 31% at rank 1 and 84% at top-5 over 67 pairs; the 88% in Fig. 8 comes from a trial set we could not identify. Default: all candidates outside the clean top-10, report both rank 1 and top-5.
- Prompt formatting. Human/Assistant format, system prompt and the position of "the colon" are Claude-specific. Default: each open chat model's own chat template, read at the last prompt token.
- Injection strength. The 0 to 0.025 axis has no units in the paper; R gives unit vector x layer mean residual norm x strength, all band layers, all user question tokens. Default: R's definition, sweep extended to 0.1 because smaller models may need more.
- Concept vectors. Concept list, layer and position for "Tell me about
{concept}" not given. Default: the 100 concepts in R's
verbal-introspection.json, last prompt token, each band layer separately. - Matched magnitude. "Every perturbation rescaled to the same magnitude": the norm of the update vector per position and layer is the likely reading. Default: that.
- Directed modulation. Paper: five to eight phrasings per condition, lens read at the model's output; R: 24 templates in four groups, carrier sentence teacher-forced. Default: R's set and teacher forcing, hits over the band.
- Intermediate probes. The prompt sets that imply each intermediate "through different surface cues" are not described or counted. Default: generate ten per intermediate, list them in the pre-registration.
- Swap onset. How "takes effect ... 17 percent earlier" is computed (start layer of a sliding window, or a cumulative band) is not stated. Default: window of 5 grid layers swept over depth; onset is the first window with success at least half its maximum.
- Flexible generalization. Band, which "formatting tokens for capitalization" are ignored, and the positions for workspace loading. Default: pre-registered band; argument positions and final position.
- Selectivity scoring. How continuation language and the line-wrap column are scored, and the anomaly-detection prompt (absent from R). Default: language ID with a fixed classifier on greedy continuations; wrap column measured on the first generated line; anomaly prompt written by us and published.
- Ablation selection. "Most strongly activated" by lens logit, cosine or pursuit coefficient; projections removed one at a time or jointly onto the span of 10 non-orthogonal vectors; distribution of the random control directions. R settles nothing here; the band edges come from PD. Default: top 10 by pursuit coefficient, joint orthogonal projection, 10 isotropic random unit vectors per position as control, bands mapped by percentage.
- Task battery. Six tasks are unreleased and scoring is not given. Default: public substitutes for each (named in the pre-registration), scored as in their source papers.
- Ignition readout. Text: projection share along the pure-B to pure-A line. R: reciprocal-rank share 1/rank(A) / (1/rank(A) + 1/rank(B)), with all 66 pairs of 12 countries plus control pairs. Default: compute both, text's measure primary.
- MLP gain input. Whether v enters the MLP through its pre-norm, and at what scale. Default: MLP(norm(v)) for unit v, which makes the scale moot for RMSNorm.
- Attention metrics under grouped-query attention. W_OV per query head shares value weights in Llama, Qwen and OLMo 2-3. Default: per query head with its shared W_V.
- SAE analyses. Depend on SAEs trained by the authors. Default: run only where a public SAE suite exists for the chosen model, flagged exploratory.
- Decoding. Greedy or sampled, temperature, number of samples for the rollout experiments. Default: greedy for next-token scoring, temperature 1 with 30 samples for free generation.
- Token forms. Leading space, case and multilingual variants of a concept token. Default: single-token forms only; a concept matches if any listed surface form hits.
- Precision. Not stated for the paper; N fits in bfloat16. Default: bfloat16 forward, fp32 accumulation (as R), and one fp32 fit on the smallest model to measure the difference.
- What counts as "the property holds". The paper reports effect sizes with Wilson intervals and no pass thresholds. We will set thresholds ourselves; we ask the authors which numbers they regard as the claim.
What an open-weights version needs
- Fitting cost from R's estimator: one forward pass and ceil(d_model /
dim_batch) backward passes per prompt over a dim_batch-replicated
128-token batch (R
jlens/fitting.py). That is d_model backward sequence passes per prompt, 4,096 for an 8B Llama. Our FLOP estimate, not a measured figure: about 4 to 16 PFLOP per prompt, 4 to 16 EFLOP for 1000 prompts, roughly 4 to 15 hours on one 80 GB H100 at 300 to 400 TFLOP/s sustained. N's early stopping at 460 to 620 prompts for 7B to 8B models (N configs) suggests about half that is enough. Lens storage is n_layers x d_model^2 x 2 bytes in fp16, about 1 GB for an 8B model (N file sizes: 1.04 GB for Llama-3.1-8B). - Property experiments: forward passes and short generations with hooks, small next to the fit. The ablation task battery and the injection sweeps dominate.
- Sizes: the plan's 7B to 8B class. Llama-3.1-8B (base and Instruct), Olmo-3-1025-7B, Qwen3-8B have N fits to cross-check our own. Verbal report, injection and directed modulation need instruction following, so the Instruct variants; structural signatures run on base models, which the paper says carry the J-space already (P#discuss-limitations).
- Pilot: Pythia 160M to 1.4B on the spine/01 tooling, with N's Pythia-70m fit as a check of our fitting code.
- Scale caveat: the paper's numbers are from Claude models, and directed modulation "tends to increase with model size" (P#ws-modulation). Sonnet's numbers are not targets for an 8B model; thresholds must be set relative to our own nulls.
- This box has no GPU and 9 GB free (STATUS.md). Nothing here runs locally.
Nulls we add
- Untrained model, same architecture, random init (direction-questions Q2: the library default plus one alternative scheme), lens fitted with the identical pipeline and corpus. It applies to the structural signatures (band statistics, CKA blocks, occupancy, excess variance, MLP gain, broadcast-head metrics, ignition sharpness) and to the J-against-remainder decomposition split. Behavioural tests (verbal report, modulation, reasoning swaps) cannot be scored on a model that does not answer, so for those the null is items 2 and 3 on the trained model. This directly tests E's selection-artefact reading of broadcast (E p. 7).
- Random directions, matched norm per position and layer, for every swap, injection and ablation; and J_rot as in the paper, extended from the broadcast analysis to the behavioural swaps.
- Shuffled labels: permute the token-to-vector assignment within the lens (vector of token a used for token b), keeping the set of vectors fixed. If a swap or readout works equally well with shuffled labels, the effect is the geometry of the vector set and not verbalisability.
- Lens fitted on a shuffled-token corpus (same unigram distribution) against WikiText, to separate what the averaging over contexts contributes.
- Logit lens (J_l = I) on every test, as the paper's own cheapest alternative.
Corrections to plan.md
- R1 step 1 says the J-space is the top singular directions of the Jacobian of the output logits. The paper defines one d_model x d_model matrix per layer, the mean Jacobian of the final (Sonnet default: penultimate) residual stream, averaged over 1000 prompts, source positions and all current and later target positions; J-lens vectors are the vocabulary rows of W_U J_l, and the J-space is the union of cones of sparse nonnegative k-combinations of them (P#methods-jlens, P#methods-jspace, P#app-sparse-frame). No SVD is involved. Projection onto the J-space is a sparse decomposition by gradient pursuit, not a linear projection.
- R1 step 2 cites "10 to 25 active concepts, a small fraction of
variance". The paper's figures are occupancy plateauing around 25 at the
median and excess variance explained never above 10% (3.2% to 8.6% at
L58-L92) for Sonnet 4.5 (P#struct-bottleneck; PD
data/capacity-fve-occupancy/data.json). The 10 is the ablation k, not a measurement. These are Claude-scale values and should not be the validation target at 8B. - direction-questions.md Q1 calls the paper "a lab blog post with a method section and no code". Code (Apache-2.0), prompt data for 11 experiments and 6 lens evaluations, and pre-fitted lenses for 38 open models are public (R; N; P#app-exp-details). R covers fitting and readout only: gradient pursuit, swaps, ablation, occupancy and the broadcast metrics are not in it, so the reconstruction risk moves to those parts.
- summary.md says the method "is fully described". It is underdetermined in at least 39 places (gap list above), and several experiments rest on assets that are not released (corpus, task battery, SAEs, graders, model organisms).
- spine/01 plan M2 says the J-space holds "the representations that most affect next-token output under small perturbation". The lens is a first-order (Jacobian) map with no perturbation size, and it averages effects on the current and all future tokens, not the next token (P#methods-jlens). The self-only variant is a tested alternative, not the default (P#app-method-details).
- R1 in plan.md asks whether the five properties "hold at random init". Only the structural signatures can be measured at random init; the behavioural properties need a model that follows the task. See null 1.
- summary.md paraphrases Eleos as calling the paper "the most significant evidence so far". The sentence is limited to evidence "uncovered by mechanistic interpretability research" and is about consciousness (E p. 1). The programme's invariant forbids carrying that framing out of the repo.
- plan.md says the paper's five properties are scored "as the paper defines them". The paper defines experiments and reports effect sizes; it sets no pass criteria (gap 39).
Out of scope for R1
The experiential-report ablations use Claude graders and concern self-reports of experience (P#ws-experience). Self-report is never primary evidence here and no claim about consciousness leaves the repo (CLAUDE.md). Also out: alignment auditing, the post-training comparison beyond base against Instruct structure, counterfactual reflection training, and the template and oracle lenses.
Not fetched or not checked
- The interactive figures render in the browser; we read the underlying JSON only for the figures cited as PD. Other figure values are not checked.
- The Neuronpedia viewer page (https://www.neuronpedia.org/jlens) was downloaded but not parsed; lens fits were read from N directly.
- R's prompt JSON files were listed, not read, except through
data/experiments/README.mdanddata/evaluations/README.md. - The commentaries by Dehaene and Naccache and by Nanda, cited on E p. 1, were not fetched.
- Public SAE availability for Llama-3.1-8B, OLMo 3 and Qwen3 was not checked (gap 35).