[ ← INDEX ]

a workspace in claude

Anthropic found a small space inside Claude where its thinking seems to surface — the handful of concepts the model can report, reason with, and act on, sitting in a narrow channel the rest of the network reads from. they call it a global workspace, after the theory in neuroscience that says consciousness works roughly the same way: a small stage, broadcast wide.1

whether “consciousness” is the right word is above my pay grade, and my knowledge, and my skills. the part i can touch is that they shipped the tool — the jacobian lens.2 so i ran it on my laptop.

what the tool does

a transformer builds its answer layer by layer. at the bottom the internal state is raw; at the top it’s ready to become a word. the old trick for peeking at the middle — the logit lens — reads the half-finished state as if it were already the final one, and in the middle layers it returns noise: code fragments, stray Chinese characters, punctuation. the state isn’t done, so decoding it early gives junk.

the jacobian lens fixes that. it takes the half-finished state, applies the rough version of what the rest of the network would have done to it, and only then decodes. you read the state as what it’s about to become, not as what it is. it’s an approximation — one fixed step standing in for all the layers above — but it’s good enough to read the answer halfway up the stack, before the model has committed to it.

running it

you don’t need their thousand prompts or a big model to see it. i used Qwen2.5-0.5B and 24 chunks of Wikipedia. the whole fit is this:

import jlens, transformers, torch
from jlens.examples import load_wikitext_prompts

name = "Qwen/Qwen2.5-0.5B"
hf = transformers.AutoModelForCausalLM.from_pretrained(name, torch_dtype=torch.float32).to("mps")
model = jlens.from_hf(hf, transformers.AutoTokenizer.from_pretrained(name))

prompts = load_wikitext_prompts(24, min_chars=400)
lens = jlens.fit(model, prompts, source_layers=[3, 7, 10, 14, 17, 21], max_seq_len=64)

fit does one backward pass per output dimension per prompt; on an M4 it took about ten minutes, twenty seconds a prompt.

and it settles fast. each new prompt adjusts the lens a little less than the last, and by the end of the 24 the adjustments were tiny — it had stopped moving. the thousand prompts their released lenses use would have barely changed it. two dozen was enough.

then read out the top few words at each layer. the two lenses are the same call, one flag apart — drop the correction and you’re back to the plain logit lens:

probe = "Fact: The Eiffel Tower is located in the city of"
jac, *_ = lens.apply(model, probe, positions=[-1])                      # jacobian lens
log, *_ = lens.apply(model, probe, positions=[-1], use_jacobian=False)  # plain logit lens

on facts a small model still knows, that gives:

layerjacobian lenslogit lens
7town, towns, municipality烯, lain, northwest
10town, city().’/, 东南
17Paris, France, LyonwhiteColor, blackColor
21Paris, France, 巴黎Paris, 巴黎, France

the logit lens is noise until the very top. the jacobian lens is reading the answer from the middle of the network. same result they report, on a model i fitted myself in ten minutes.

category first, then instance

the result is the boring part. what the reading looks like is where it got interesting.

Fact: The Eiffel Tower is located in the city of. layer 7 of 24: town, towns, municipality. not Paris — just the kind of thing the answer is. a place. layer 17: Paris, France, Lyon. now it’s French cities. layer 21: Paris. category first, then instance.

the Japan prompt is even better. at layer 10 the lens reads “Paris.” wrong country, right kind — the model had committed to a capital city before it worked out which one. by layer 14 it’s Osaka and Tokyo, right country, still deciding. then Tokyo.

some thoughts

the thing they open-sourced is the lens, not the experiments. the flashy results in the paper — swapping one concept for another mid-thought and watching the answer change, the claim that this space holds only a few dozen things and under a tenth of the model’s activity — none of that is in the code. which is fine — the microscope is not the same as what you point it at.

what stuck with me is the shape of it. the model doesn’t jump to Tokyo — it narrows down to it: a capital, then a Japanese city, then Tokyo. you can call that reasoning, or pattern-matching doing a good impression of it; the lens won’t settle which. what it does is let you watch the guess take shape, instead of just seeing where it landed.


Footnotes

  1. Anthropic, “A Global Workspace in Language Models” (transformer-circuits.pub/2026/workspace)

  2. github.com/anthropics/jacobian-lens