J-lens — reading Qwen's workspace while it writes

A Jacobian lens (lensl(h) = unembed(Jl h), after Anthropic's global workspace paper) decodes what Qwen3.6-35B-A3B is disposed to say at intermediate layers, at every generation step — before it says anything. Enter a prompt; the band below the completion shows the top lens token per layer per step. Highlighted cells surface a word before the model writes it.
checking…

Completion

Workspace band

pre-verbalized — this lens token appears later in the text rows: your selected layers, shallow → deep; bottom row = the emitted token hover a cell for the top-k lens tokens with logits dashed “· logit” rows = the J = I logit-lens baseline pin rows show the pinned token's best J-lens rank across the selected layers (darker = closer to top)
What is this? — the paper, what we reimplemented, and where we took liberties

The paper, in short

Verbalizable Representations Form a Global Workspace in Language Models (Anthropic, July 2026) asks whether LLMs have an analog of conscious access: a small, privileged set of internal representations that the model can report, deliberately hold in mind, and reason with — atop a much larger volume of automatic processing it cannot. To find candidates, they build the Jacobian lens: for each layer ℓ they compute J = E[ ∂hfinal,t' / ∂hℓ,t ] — the first-order effect of the residual stream at layer ℓ, position t on the final-layer residual at all positions t' ≥ t, averaged over positions and over a corpus of ~1000 pretraining-like prompts of 128 tokens. Reading the lens replaces every layer above ℓ with that one matrix: lens(h) = softmax(W_U · norm(J h)), a ranked vocabulary list of what the model is disposed to say given that activation. The averaging is the point: it isolates the verbalizable component of a representation from its context-specific use, and it is what lets the lens read early/middle layers where the simpler logit lens returns noise.

Their central finding is that these lens directions (the J-space) behave like a global workspace in the neuroscience sense: the model's verbal reports track and are causally steered by them (swap the Soccer vector for Rugby and the model reports having thought of rugby); instructions like "hold citrus fruits in mind" load them without any trace in the output; unspoken intermediates of multi-hop reasoning live there (swap spiderant in "legs on the animal that spins webs" and the answer goes 8 → 6); one vector generalizes as an argument to many downstream functions; and ablating the J-space impairs flexible reasoning while leaving automatic processing (fluent continuation, parsing, classification) largely intact. Structurally, the workspace occupies a band of layers — roughly from a third of the way into the model to just before the end — between an early "sensory" regime where the lens reads nothing and a late "motor" regime where it collapses onto the imminent output token. It is small (~25 active concepts, under 10% of activation variance) and preferentially broadcast by MLPs and a dedicated subset of attention heads. They use it to watch models silently weigh blackmail, notice prompt injections, and carry evaluation-awareness — none of it visible in the output text.

What this site implements

The readout — a full-depth Jacobian lens fit on Qwen3.6-35B-A3B (40 layers, dmodel 2048, mixture-of-experts: 256 experts top-8 routed + 1 shared, 30 Gated-DeltaNet linear-attention layers interleaved with 10 full-attention layers), served 4-bit on a single Mac Studio (M3 Ultra, MLX). Every generated token you see is produced by a normal forward pass; taps on layers 10/20/30/39 capture the residual at the position being generated, transport it with J, and decode it with the model's own unembedding — the band comes from the same forward pass as the text, never a replay. What we did not replicate is the paper's workspace-level evidence: no sparse-decomposition census, no causal interventions (vector swaps, J-space ablations), no broadcast-head analysis, no reportability experiments. So this page demonstrates the paper's instrument on an open model; it does not by itself establish that qwen36's J-space is a workspace in their full functional sense.

Where the paper was underspecified — and what we did

  • Computing J on consumer hardware. The paper's estimator is brute-force autodiff: one backward pass per residual dimension (batched), per prompt — fine on a datacenter, slow on a Mac for a 35B model. Following WeZZard's 27B port, we instead compute an analytic per-layer Jacobian M (attention softmax path included, i.e. gradients flow through the attention pattern, matching the paper's default rather than their frozen-QK variant) and chain-multiply: Jℓ−1 = J · M. This swaps the paper's average of products for a product of averages — a real approximation. We measured it: assembled single-layer M vs exact autodiff on real activations differs by ~1.7–3.0×10⁻² relative Frobenius error (the branch pieces themselves are exact to ~10⁻⁷), consistent with the 27B port. The paper never faces this choice; we accepted the junction error to make full-depth fits take minutes per prompt instead of hours.
  • MoE routing has no treatment in the paper (Claude's internals are not disclosed). We derived the mixture-of-experts branch Jacobian ourselves: top-8 expert selection is piecewise-constant (zero gradient almost everywhere), so we linearize at fixed selection but keep the router-softmax and shared-expert-gate gradient terms — measured at 7–24% of the branch on real activations, so always on. Verified against autodiff to ~5×10⁻⁷ on the real model. Route flips on near-tie tokens remain a genuine discontinuity the lens cannot see.
  • Gated-DeltaNet layers (30 of 40) are linear-attention recurrences with nothing analogous in the paper; the per-layer Jacobian runs backprop-through-time through the recurrence, including the decay-gate (g/β) paths.
  • Target of the Jacobian. The paper's default backpropagates from the penultimate layer (they found the last block adds calibration noise). Our chain includes all 40 blocks and is seeded with the final RMSNorm's Jacobian, and the serving readout then applies the model's real final norm — a convention inherited from the vendored port. Strictly, that inserts an extra elementwise norm weight relative to the paper's formula; all our eval numbers below are computed under the same convention, and the readouts it produces are the ones validated there.
  • Quantization is our problem, not theirs. They lens bf16 production models; we serve a 4-bit quant. Risk: the lens and the serving model must be the same computation (a band read from a different quant is another model's thoughts). We fit two full lenses — one through bf16 weights (clean reference) and one through the served int4 weights — and compared them on the same int4 activations: agreement within ±0.05 on every eval set, no consistent direction. The shipped lens is the serving-matched int4 fit.

Design decisions (and why)

  • 120 prompts × 32 tokens (WikiText, first 4 positions skipped, per-element mean across prompts) vs the paper's 1000 × 128. Their own sweep shows the J-lens beating the logit lens from ~10 prompts with modest gains after; 120 sits well past that knee, and at 30 s (int4) to 2–7 min (bf16) per prompt, full-depth fits complete in checkpointed overnight windows on this machine. Shorter sequences under-sample long-range position pairs — a real gap vs the paper, untested here.
  • Band layers 10/20/30/39 of 40 ≈ 25/50/75/97% depth. The paper's workspace band on Claude models spans ~38–92% of depth, with "sensory" layers before and "motor" layers at the end. So L10 samples the late-sensory/early-workspace boundary, L20 and L30 the workspace proper, and L39 the motor regime — you can watch the division of labor directly: L10–L30 carry the task frame and latent intermediates while L39 tracks the token being emitted. Four layers × top-5 is also a streaming-bandwidth choice; the fit covers all 40 layers, so serving any subset is a flag away.
  • Readout position: the band reads only the position that generates each new token, streamed live. The paper's figures also lens every prompt position (their position × layer grids); we skip prompt positions to keep time-to-first-token unaffected. Temperature defaults to 0 so runs are reproducible.

How well does it read? (measured, not vibes)

We ran the six lens-eval sets released with the paper's reference code (551 items): each gives a prompt whose answer passes through a latent intermediate, and scores the rank of that intermediate in the lens readout over the 248k-token vocabulary (pass@k, min over layers, at a single fixed readout position).

eval setnp@1p@5p@10
multihop93.29.46.57
multilingual107.28.41.50
order-ops55.11.47.55
typo96.20.47.55
association102.05.16.23
poetry98.02.04.05

Read this as "noisy but real": on multihop / multilingual / order-ops / typo prompts the latent intermediate surfaces in the top-10 of a 248k vocabulary about half the time at a single position — and the live band, which scans every generation step, reads much cleaner than that number suggests. Association is weak, and poetry is near floor: unlike the paper's rhyme-planning result on Claude, qwen36 shows no latent rhyme plan at the end-of-line readout position — a genuine model difference, a lens shortcoming, or the wrong readout position; we can't distinguish these yet. Also inherited from the paper's limitations: the lens only names concepts that are single tokens in the vocabulary, readouts at some positions resist interpretation, and a band reading of "nothing" never means the model represents nothing — most of what it computes lives outside the J-space by design.