I notice there might be a "searching under the streetlight" effect where you only observe traits for which we have human concepts for.
But there is no guarantee that you carved the model behavior at its joint with these concepts and their lossy operationalization in prompts pairs.
Another way to put it: the maximal number of dimensions of model behavior we can quantify is the dimension of the behavior evals vectors space [eval 1, eval 2, ..., eval N] with the scores for all the evals we have (pbly < N bcse many evals are correlated).
My impression from the post, is that it assumes the eval space is a pretty good space to measure the range of model behavior. If we found the O(1000) steering directions that can hit almost all the points (within resonable bounds on scale) in eval space, this would be the success of the research agenda.
Am I correct? If yes, what makes you think there is no important behaviors outside of eval space?
I'm also curious to know what's the dimension of eval space for you, and how you're thinking about important/unimportant dimensions there
I don't think that's the case, and mostly gave examples regarding eval awareness because it's suitable for girding our intuitions here. In the full such research program I think you want some unsupervised search over some persona space, and then have some way of organizing (let's say clustering for now), and then have some way of making predictions from those clusters as well as interpreting them. The unsupervised bit is important, maybe we can adversarially search against our own evals, or pull from production data. It does seem like at the moment, we don't have a principled enough unsupervised search method, though.
For me, a somewhat surprising fact about steering vectors is that contrastive pairs intuitively single out the direction related to the perception of a feature in a given text, but they can then be used to steer the generation of new text. I.e. it would be conceivable that a model uses different features for "the text I just read shows signs despair" and "I will now reply as if I am in despair", but this does not seem to be the case. Perhaps this is because in most of training, these features don't change at a high frequency: if an author was desperate until token N, they will likely still be desperate at token N+1.
Yeah, I felt this was surprising too!
Perhaps this is because in most of training, these features don't change at a high frequency: if an author was desperate until token N, they will likely still be desperate at token N+1.
This intuition of "slow" and "fast" things seems to come up again and again, both in reasoning and now here, where deep latent features are slow in some sense, there must be some natural denoising that the model is doing.
What about steering on text in tool outputs? I'd expect these representations to be "what I just observed" because the model cannot control them So intuitively steering could edit the world model instead of the persona
I haven't used steering vectors enough to have a confident prediction, but my guess is that steering on tool outputs still works to influence assistant turns in the expected direction, even though it's not a logical necessity exactly for the reasons you state. My guess is based on the fact that many steering vector recipes don't use chat templated text at all, and a vector derived from pretraining-like text should be similar to tool output text
That means, if we’re being optimistic, we could use it to tell us what the model would do if it wasn’t eval aware even if we have no evals we’re sure are realistic enough
I'm not super convinced this is possible -- constructing the steering vector via contrastive prompt pairs requires prompts that the model is not eval aware on, but as models scale, it seems like this sort of negative prompt will either a) not exist or b) not generalize well enough to actually steer with (eval awareness seems to have more than one axis, i.e. I don't think we can just steer with a larger alpha and make the model less eval aware in a way that is useful!). What do you think?
Overall, great post!
When I say "if we're being optimistic" I basically mean "assuming magic OOD generalisation + hacky fixes". You might be able to do one of the following given the above:
Thanks!
This was written with some assistance from Claude Fable 5, Opus 5.5, and GPT-6 Astra in collecting sources and fact-checking claims. This was written quickly, so some slop may leak through despite my best attempts.
An Aperitif
Consider hunger, that gnawing thing. Action Against Hunger describes it as “the distress associated with a lack of food”. But this is a plain recounting of something rich and multi-dimensional; people have done horrendous, outrageous things to avoid going hungry, hunger is so deep a metaphor that it is often used to represent another intense, unfulfilled craving.
Van Gogh’s The Potato Eaters, 1885.
In mice, you can excite about 800 neurons to evoke voracious feeding within minutes (Aponte et al. 2011). In humans, semaglutide, the active ingredient in Ozempic, acts on GLP-1 receptors and reduces hunger and food cravings. So, something as rich as hunger can be influenced and manipulated through a rather simple and fixed intervention.
This is because there is already much complexity in the system being influenced. A mouse already possesses the machinery to recognize, approach, and eat food, so do humans. Instead, to intervene, one merely has to recruit the same internal signal such a system is already using, and manipulate it to attain an output of interest.
This gives us an intuition for steering. A complicated system may have relatively simple points for us to approach through steering vectors, through which we can change whole complexes of behaviour. And further, if we have done our work rigorously enough, a steering vector can also elucidate and uncover things about the internal machinery of those systems.
In this post, I seek to summarize and explain some of the recent results we have seen regarding steering vectors, and what role it may play as an uneasy middle child in persona interventions.
What are steering vectors?
Suppose you want your model to act more bouba. One thing you could do is to append a system prompt which provides human-picked examples of bouba-like behaviour in-context, or meticulously instruct your model to act in accordance to a bouba-rubric. You could also fine-tune the model on tons of human-labelled examples of rubric, or reward it whenever it exhibits bouba in some environment according to a bouba-grader.
Bouba and kiki.
But these may not be exactly what you want. Prompting may be too shallow, and may not suit you if you want precise control. Fine-tuning could be expensive, off-policy, or cook your model in unexpected ways. RL requires even more work than that. And all these methods act at different levels of depth (Sturgeon et al. 2026).
In Astra’s language, you could instead “directly reach into the model while it’s running.”
In practice, what this means (usually) is you take some dataset of positive and negative examples with respect to your behaviour of interest. In our case, bouba examples (possibly produced with a system prompt to be bouba-like) are our positive case, and kiki our negative. Then, you can record their activations in the positive set over many examples, with the idea being that a wide enough set of examples averages out the question-specific details you don’t care about (like answer length or the topic of the specific prompt) and retains only the details relevant to the steering vector. Then, you do the same for the negative set, and subtract that from the positive set. This bit is done with the hope of cancelling out features which the two sets have in common, leaving behind whatever systematically distinguishes bouba from kiki.
If you’ve done this well enough, you now roughly have a vector which acts as a knob: you can add it during inference with some coefficient alpha to make it more bouba (or more kiki, if the coefficient is negative).
XKCD 1990.
Of course, with a recipe with so many steps, there are lots of variations to this recipe. You can extract vectors from different layers, different token positions, probes, SAE features, or more complicated optimization procedures. You can also add a vector at every token, only when some condition is met, or modify the model’s weights so that the effect becomes permanent. But the basic picture is usually close enough to the crude procedure described: find some direction associated with a behaviour, then push along this direction.
How does this work?
Well, one boring answer is: if bouba-like behaviour reliably produces a slightly different pattern of activity from kiki-like behaviour, then averaging over enough examples should expose that difference. Perhaps some neurons tend to fire a little more for bouba, others a little less; you can collect all of these small differences together and you get a direction separating the two. Probing is natural enough, we have seen great success classifying model behaviours for certain tasks using blackbox only signal (such as in the case of Pangram), so the high-dimensional space that precedes it should be an even easier target. But, what’s surprising is that intervening on these directions can also change behaviour.
Maybe put more simply. The part in your brain that lights up when you’re bouba is probably a different part from the one that lights up when you’re kiki. But isn’t it weird that if you try to take their difference, add it on some out of distribution question, then you basically get a more bouba output?
Tweet by @NinaPanickssery.
This happens on a lot of behaviours: refusal, sycophancy, emergent misalignment, functional welfare, pain, reward hacking, eval awareness, etc. And probably, it’ll happen on a lot more we haven’t considered. These aren’t simple behaviours! They involve many different prompts, could have many different outputs, and interact complicatedly with knowledge and reasoning. Yet, at least approximately and under some conditions, a single fixed intervention can do the trick.
So, again, how does this work?
Well, I claim a natural candidate explanation given recent evidence is that it works by internal signals that the model already uses, leaving the rest of the model to work out what to do with them. This is not precisely falsifiable, since anything that changes behaviour like prompting or a logit bias kind of does that.
What I really want to say is something like: steering reuses the model’s existing internal variables, changing behaviour only to the extent that it points along a direction the model already writes to on ordinary inputs and already reads from downstream.
Then, what it implies is (long list incoming):
And of course, recalling Elhage et al. 2021, addition is how the residual stream already works. Every attention head and MLP writes to the residual stream by adding a vector to it, so to later layers, a steering vector looks like one more upstream output.
So, takeaway from the evidence: a steering vector changes a signal the model uses to organise its behaviour. Such a vector can indicate a task, a fact about the situation, or a way to respond, and the model supplies the computations needed to act on it.
Is that right?
I would be remiss if I didn’t point out that steering vectors can also be quite narrow and unreliable (Tan et al. (2024)). Steerability "takes on a large range of values across different inputs, including negative values": for several datasets, close to half the inputs move the wrong way when you add the vector. Further, some of what the vector has learned is not bouba at all but the position of the answer, or which token the answer happens to be; OOD the vectors generalise reasonably across changes of prompt framing when the model's baseline behaviour is similar across those framings, and are brittle for several concepts when it isn't.
From my own experience as well doing IC work and mentoring a MATS project, finding a good steering vector can be hard. I spent some time trying to find a steering vector corresponding to newly introduced words in the tokenizer, but didn’t find that it had good causal effects. Separately, it was also very hard to construct a dataset corresponding to the model’s self-concept (at least, in a way that wasn’t behavioural only, or lexical in only avoiding the words “I” or “me”).
As per a Jack Lindsey tweet:
But maybe more core to the matter is this: Mishra, Khashabi and Liu (2026) show that steered activations are non-surjective: adding a steering vector pushes the residual stream off the set of states the model can reach from any discrete prompt, so no prompt, however cleverly written, reproduces what the vector does inside the model. Formally, I’d say this is close to the observation that there are only countably many prompts and uncountably many points in activation space, and so a steered activation almost surely never coincides with any prompt-reachable one (and, there are probably steering vectors that can’t be approached without the argument from cardinality). They also find such difficulties empirically; when they try to recover a prompt that produces the steered state, they can't; what they recover basically falls near the unsteered activations, and adding in-context examples moves activations further from the steered state, not closer.
Okay, that’s weird. If steering puts the model somewhere it could never go on its own, in what sense is it reusing anything? But I think we can return to the mouse and the hunger to clarify things.
If you have 800 AgRP neurons firing in lockstep under a laser, this is not a pattern that God or hunger or evolution ever produces, and yet what comes out is ordinary, recognisable eating. What steering reuses is the direction, a variable the model already writes to and reads from. But it does not reuse state: that variable is in fact set to a value, in a context, that we specified rather than the model. If it already was in that state, there wouldn’t be a need to steer! So steering works exactly as far as the downstream machinery tolerates being handed an unfamiliar value along a familiar axis. This helps explain why Tan et. al (2024) found that vectors generalise better when baseline behaviour is similar, or why constant addition at every token "brain-damages" the model, and why Goodfire-style “on-manifold” methods look promising.
Semaglutide has the same problem, FWIW. It mimics a hormone the body already makes, but at doses and durations the body never would, and again as Astra says, “nausea is the price.” Sure.
To Personas
To close, in a recent post, Geoffrey and I argued that there might be "an intermediate between one and a trillion dimensions: perhaps we could find 1000-or-so-dimensional structure in models which describes how different aspects of model behavior couple," and that much of this structure lives in something we could call a persona.
In some sense that’s hard to pin down precisely (but seems very true on vibes), steering is one of the best pieces of evidence for this picture. If one fixed vector can move refusal or sycophancy across many prompts, then behaviour must be coupled through far fewer variables than there are parameters. It has to be!
And (continuing on vibes), the variables steering seems to reuse are, in this view, largely persona variables: the Assistant Axis, persona vectors, emotion vectors, and whichever way subliminal learning works. It’s really interesting that steering a model to believe it’s seeing an automated grader increases the propensity for bad behaviour!
Steering is also just one of many angles from which we can try to put a model into some state. If we say that prompts, fine-tuning, RL and pretraining data are all interventions to reach the same persona variables from different directions, then steering is quite a direct kind. It sets the variable itself, sometimes to values no prompt can achieve naturally, and it leaves the rest of the model free to respond. That means, if we’re being optimistic, we could use it to tell us what the model would do if it wasn’t eval aware even if we have no evals we’re sure are realistic enough (as per some of the eval awareness steering Anth has been doing).
As with fine-tuning, the side effects may also be informative. Emergent misalignment told us that writing insecure code and being broadly misaligned are coupled in some way in the model! In the same way, the "desperate" vector bringing cheating along with it (even when the model's tone doesn't outwardly change) tells us something about how those two things are connected (and this is maybe interpretable). Where steering stops working, or starts breaking the model, could be helpful in giving us a rough sense of where that structure ends. And if we did find a behaviour that we couldn’t steer at all (despite our best efforts), that would be some evidence for the "router" or "shoggoth" views, where part of the model's agency is outside the persona.
If I could return to mice one last time, I’d say that this is also why neuroscientists stimulate AgRP neurons in the first place; we’re not actually interested that mice eat! Rather, that it goes for food over water within minutes, without having to learn to, which, hopefully, tells us something about hunger itself.
Thank you to Geoffrey Irving, Clement Dumas, Daniel Tan for helpful feedback.