Replications and tentative extensions of Anthropic's Jacobian Lens
(J-lens) — run on the open-weight Qwen/Qwen3.6-27B, not the original paper's Claude
models. All results and claims in this repo are specific to this model and this
particular lens fit; nothing here is a claim about language models in general.
Original paper: Gurnee et al. (2026), Verbalizable representations form a global workspace in language models (arXiv:2607.15495). Commentary referenced throughout: Anthropic's external commentary and Neel Nanda's review.
The J-lens is loaded pre-fitted from Neuronpedia (neuronpedia/jacobian-lens,
revision qwen-n1000, fit on 1000 WikiText prompts) — not fit locally. See
lens-fitting-instructions.md for the original
setup spec and SETUP_NOTES.md for the exact provenance (model
commit hash, lens SHA256, tokenizer quirks) of what was actually run.
pip install -e .
python setup/01_download.py # asks before any multi-GB download
python setup/02_validate_spider_ascii.py # reproduces the paper's own canonical readouts
python setup/03_derive_band.py # derives the workspace layer band on this modelThe workspace band was derived at L21–46 (see §2.2 of the paper for why the
data-driven approaches failed to cleanly localize a boundary, and the qualitative
"roughly the first third" fallback that was used instead) and is frozen as a
constant (src/jspace/config.py) for every experiment below.
Every run under experiments/ writes a provenance header (git commit hash,
dirty-tree check, resolved config, library versions) at the top of its log — a
dirty working tree at run time is refused, since an uncitable result from
uncommitted code is worse than no result.
src/jspace/— the reusable library (lens loading/readout, the occupancy metric, band derivation, token-family construction, frozen config constants).setup/— one-time scripts to download, validate, and characterize the lens.experiments/— one directory per run, namedEXP_ID, never edited or re-run in place — a new result gets a new directory, so every claim is traceable back to the exact code/config that produced it. Each has its ownconfig.yaml,results/, andFINDINGS.md. 34 experiment directories in total; the table below maps the ~9 that the paper draws on directly.writeup/—claims.mdis the living index mapping every claim tested in this project (not just the ones in the paper) to its experiment ID and status;figures/holds the paper's own figures, named to match the paper's section numbers, each with the script that generated it sitting next to it.data/stimuli/— generated stimulus sets, versioned in git.
| Paper section | What it shows | Experiment(s) | Figure |
|---|---|---|---|
| §3.1 Behavioral interference | Adjacent-digit load collapses accuracy 96.9%→18.75% while the intermediate stays 97–100% legible; isolating the effect to the hold instruction, not mere prompt presence | partII-occupancy-competition, partII-occupancy-competition-extended |
figure_3_1a_behavioral_interference, figure_3_1b_occupancy_isolation |
| §3.2 Bridge-fact ablation | Ablating a bridge fact's own J-lens direction drops second-hop accuracy 73.5%→45.1%, specifically vs. a matched random direction; the depth-onset control that walks the "genuine upstream intermediate" reading back | partII-bridge-consistency-ablation, bridge-ablation-confound-check |
figure_3_2_bridge_ablation |
| §4.1 Injection-recognition | J-space presence of prompt-injection recognition carries exactly zero information about whether the model resists (20% false positives, 30% misses) | partIII-safety-oversight_presence-vs-use |
figure_4_1_injection_decoupling |
| §4.2 J-lens as a monitor | Reliability is concept-specific and direction-specific: refusal-recognition predicts refusing (+0.857), tool-call redirection predicts complying (−0.625) despite near-identical task structure; the P0/P1/P2 read-position and recognition-vs-content-token control | jlens-reliability-profile_safety-concepts, partIII-4.2-rerun_read-position-control |
figure_4_2a_reliability_profile, figure_4_2b_read_position |
| §5 Workspace dynamics | Category-switch eviction is graded and item-idiosyncratic (SD ≈ 3.7–4.2 positions), not the coordinated clearing GWT would predict; workspace entry is content-independent (set, not stream), converging with the departure-side result | eviction-dynamics_E1-E4, content-dependent-uptake_stream-vs-set |
figure_5_1_graded_eviction, figure_5_2_set_not_stream |
Each linked experiment directory has its own FINDINGS.md with the full
methodology, pre-registered decision rules, and result — the paper is a summary of
those, not a replacement for them.
The other ~25 experiment directories are the research trail behind the paper, not
cut material - capacity/effective-rank feasibility gates, load-method dead ends
(activation injection derailing the model, discussed in the paper's footnote [2]),
positive-control gates that failed before a result could be trusted, a silent
(non-verbalized) intermediate generalization attempt that stopped at its own
validation gate, digit-readout introspection work, and more. writeup/claims.md
is the full index — every claim this project tested, mapped to its experiment ID
and status (supported / null / contradicted / inconclusive), including the
ones that didn't make the paper. experiments/adversarial-prompt-level/
(does telling the model an interpretability tool is reading it change the J-space
readouts?) is complete but not in the paper; see
writeup/figures/supplementary/ for its standalone figure.
All results are strictly constrained to Qwen3.6-27B and this particular pre-fitted
lens. Most experiments run at modest
sample sizes with correspondingly wide confidence intervals. Several results are
presence-only nulls (e.g. §5's content-independent entry, §4.1's injection
decoupling): they show this specific J-lens readout doesn't detect an effect, not
that no such effect exists in the model's true internal state. See each
experiment's own FINDINGS.md for its specific power/precision caveats.