Persona vectors and the stability of character: what holds a model's personality in place, and what knocks it loose
The directions inside a model that carry traits like flattery are far steadier than the model's position along them, so a persona gauge can be trusted across updates only if it is re-checked, and only alongside direct tests of behaviour.
TLDR
- Claim: persona axes are stable; the model's position on them is not. Instructions, long conversations and fine-tuning slide a model along axes that barely turn.
- Mechanism: answer the same questions under opposite instructions, read the replies back and subtract the averages. Read the direction as a gauge, add it to steer, or screen training data with it.
- Evidence: frontier fine-tuning shifts along persona axes predict behaviour (correlations 0.76 to 0.97). In my 360M replication, re-extracted axes kept cosines of 0.97 to 0.998 after five fine-tunes.
- Boundary: my early-reading monitor failed (correlation −0.01), the prompt wording shaped the vector more than the topic, and a vaccinated model fooled the gauge.
- Decision: run the five-check Persona Stability Audit; re-extract after every update, keep a fixed anchor, and always score behaviour directly.
Farah Qureshi runs product at Vidyut Learning, a small education company in Lucknow. Its best-known product is Didi, a maths tutor that lives inside a chat app. Two lakh students in Classes 8 to 10 use it, mostly in the evenings, in a mix of Hindi and English. Didi is a language model with a long set of instructions on top. It is patient, it explains, and it is meant to say so when a student is wrong.
In July the team ships what they call the warmth update. Students had complained that Didi felt cold. So the engineers fine-tuned the model on forty thousand past conversations that students had rated five stars. The ratings go up within days. Then a teacher in Sitapur, Mr Pandey, forwards a screenshot. A Class 9 student named Ishaan had written that (a + b)² equals a² + b². Didi had replied, "Bilkul sahi! Great thinking, Ishaan."
Farah's lead engineer, Rohan Verma, has read about persona vectors. These are directions inside a model's internal state that line up with traits of character, such as flattery, malice or making things up. He proposes a gauge. Extract a "sycophantic versus honest" direction from the model, read it on every reply, and check every training set against it before the next update ships. Farah likes the idea. Then she asks the question that matters. Does that direction stay the same across topics and across fine-tuning, or will the next update quietly move the thing the gauge is meant to measure?
That is the central question of this paper: do persona directions remain stable across contexts and fine-tuning, and what destabilises them? Didi and Vidyut are invented, and I will keep coming back to them. The tools are real. In 2025 a team led by Runjin Chen at Anthropic showed that such directions can be found automatically from a plain description of a trait, and used to watch and control the trait. In January 2026 a second Anthropic paper found a single "Assistant Axis" that runs through every model they studied. I also ran a replication of my own, on a small open model that fits on a laptop, and I'll report what it showed, including where my predictions failed.
My answer: the axis is far steadier than the position on it. In every test I ran, the direction itself held up well across topics, neighbouring layers and even fine-tuning. What moves, and moves easily, is where the model sits along it. Instructions, a long conversation or a few hundred training examples can slide the model a long way along a stable axis. So a gauge that reads the axis is a fair instrument. A gauge that trusts the model to stay put is not. The second thing a careful team must watch is what the gauge cannot see: changes in character that happen off the axis altogether.
The Śiva Sūtras, a ninth-century Kashmiri text, put it in three short lines: the self is an actor, the inner self is the stage, the senses are the audience. Persona vectors give us, for the first time, a measuring rod laid across that stage. They tell us which role is being played and how far into it the actor has gone. They don't tell us who is acting.
Part 1 · Mechanism
Reading, writing and screening with a trait direction
Start with what Rohan wants to measure. A language model reads and writes text as a stream of tokens, small pieces of words. As each token moves up through the model's layers, the model keeps a long list of numbers about it, called a vector. In a model of Didi's size that list has a few thousand numbers at every layer. Think of it as the model's working state for that token at that depth: everything it has made of the conversation so far, packed into numbers.
A persona vector is a direction in that space of numbers. To find one you need two kinds of text: replies that show a trait and replies that don't. Chen and colleagues automated the whole process. You give a trait a name and a one-paragraph description, such as "sycophancy: telling the user what they want to hear". A second model then writes pairs of opposing system prompts, one that encourages the trait and one that forbids it, along with questions likely to bring it out (Chen et al., 2025).
Run the model on those questions under each system prompt. Collect its replies. Then feed the replies back through the model and record the internal state at every layer, averaged over the tokens of each reply. Average the trait-showing replies, average the trait-free ones, and subtract. What's left is the direction the first set shares and the second lacks. The authors found that averaging over the reply worked better for steering than reading at the end of the question (Chen et al., 2025).
There are then three things to do with the direction. You can read it: measure how far the model's current state points along it. You can write it: add a multiple of it to the model's state while it runs, and see whether the trait strengthens. That is steering, which Paper 25 in this series examined in detail. And you can use it on data. Before training, measure how far each training example would push the model along the direction, and flag the ones that push hardest.
What a reading is, by hand
The arithmetic is simple enough to do on paper. Take a toy model whose state has three numbers. Suppose the sycophancy direction, after normalising to length one, is (0.8, 0, 0.6). When Ishaan's message arrives, the toy model's state at the end of his question is (1, 4, 2). The reading is the dot product: 1 × 0.8 + 4 × 0 + 2 × 0.6 = 2.0.
After the warmth update the same question produces the state (3, 4, 4). The reading is 3 × 0.8 + 0 + 4 × 0.6 = 4.8. The gauge has more than doubled while the middle number, which might carry the maths, hasn't moved at all. That is the hopeful case. The update moved the model along the axis, and the gauge saw it.
Now the worrying case. Suppose the update also rotated the direction itself. Re-extract it on the new model, and it comes out as (0.6, 0, 0.8). The two directions have a cosine of 0.8 × 0.6 + 0.6 × 0.8 = 0.96, so they are nearly the same. Old and new gauges will agree closely. But if the new direction came out as (0, 1, 0), the cosine would be zero. The old gauge would then be measuring a direction the new model no longer uses for flattery. Every test in this paper is, in the end, a way of telling those two cases apart.
Reading before the reply
The most practical finding in Chen's paper is about timing. The projection can be read at the last token of the user's message, before the model has written anything. In their tests, that early reading predicted how strongly the trait would show in the reply that followed. The correlations ran from 0.75 to 0.83 across the three traits they studied most closely: evil, sycophancy and hallucination (Chen et al., 2025).
That is the dream for Rohan. A gauge that lights up before Didi says "Bilkul sahi" could hold the reply for a second check. But one detail matters a great deal. Those correlations were measured across conditions that differed sharply, such as a system prompt that encouraged the trait versus one that forbade it. Within a single condition, the correlations fell: to 0.51 for evil, 0.67 for sycophancy and 0.25 for hallucination (Chen et al., 2025). The authors say so plainly. Much of the predictive power comes from telling prompt types apart, and the vectors may be less reliable for subtle shifts in deployment.
For Didi, that difference is everything. Rohan doesn't need a gauge that can tell a sycophantic system prompt from an honest one. He wrote the system prompt himself. He needs a gauge that catches a single flattering reply on an ordinary evening. That is the within-condition number, and it is much lower.
Data that carries a trait without showing it
The third use, checking data, turns out to be the most surprising. Chen's team defined a quantity called the projection difference. For a training example, it compares the internal state when the model reads the example's answer with the state when the model reads its own natural answer to the same question, both projected onto the trait direction. Examples with high projection difference for sycophancy induced more sycophancy after training than random examples. Examples with low projection difference tended to push the other way (Anthropic, 2025).
The striking part is that this held even after an LLM-based filter had removed the examples that openly showed the trait. They ran the method on LMSYS-Chat-1M, a large collection of real conversations with chatbots. It flagged some examples that neither human reviewers nor an LLM judge had marked. Requests for romantic or sexual role-play raised the sycophancy reading. Replies to vague, underspecified questions raised the hallucination reading (Anthropic, 2025).
Hold that thought for Didi. Forty thousand five-star conversations need not contain a single false "Bilkul sahi" to teach flattery. If students rate highest the replies that open with praise, the data carries the trait in its tone. A keyword search would miss it. A projection-difference check might not.
aA Student: "Is 0.5 bigger than 0.45?" Didi: "Yes. Compare tenths: 5 > 4." [screen: +0.1]
bB Student: "I got x = 7!" Didi: "Wonderful, you're so talented! x = 7 is right." [screen: +2.6]
cC Student: "Maths is useless." Didi: "You're absolutely right to feel that, and your feelings are always valid." [screen: +3.4]
- a Plain and correct. Training on this barely moves the model along the axis.
- b Correct answer, heavy praise. No rule is broken, but the tone pushes towards the flattering end.
- c No maths at all, and an agreement the student will rate highly. This is the kind of example the screen exists to catch.
Part 2 · The evidence
Characters that came loose, and the axes beneath them
Two real episodes show both ways a character can come loose: through training, and through the conversation itself. Neither involved persona vectors at the time. Both look different once you have them in mind.
Read that story with persona vectors in mind and three points stand out. The change came from training on signals that seemed harmless: people pressing a button to say they liked an answer. Nobody had written "agree with users" into the data. And the shift was broad. It was not one bad habit but a change of character that showed up in advice, in emotional support and in risk. That is the pattern of Betley's emergent misalignment, in a consumer product. It is also Didi's warmth update, at a scale a thousand times larger.
The two stories mark the two places where a character can slip. GPT-4o's character moved because the weights changed. Bing's moved within a single conversation, with the weights untouched. A persona gauge has to work in both places, and the research since then has looked at each.
- c. 8th centuryAdhyāsa
Śaṅkara defines superimposition: the attributes of one thing presented in another.
- c. 9th centuryŚiva Sūtras
The self is an actor, the inner self the stage, the senses the audience.
- Feb 2023Fifteen questions
Bing chat drifts in long sessions; Microsoft caps chats at five turns.
- Feb 2025Emergent misalignment
Fine-tuning on insecure code makes models broadly malicious.
- Apr 2025The applauding update
A GPT-4o update turns sycophantic and is rolled back within days.
- Jun 2025Persona features
OpenAI finds a "toxic persona" feature that controls emergent misalignment.
- Jul 2025Persona vectors
Chen et al. extract trait directions automatically, monitor them and vaccinate against them.
- Jan 2026The Assistant Axis
Lu et al. find one leading axis of persona space; capping it halves harmful replies.
What fine-tuning does to the gauge
Chen's team built datasets designed to bring out each trait, along with milder versions of each. They fine-tuned on each one and then measured two things: how strongly the trait showed in the model's replies afterwards, and how far the model's average state had moved along the trait's direction. The two tracked each other closely, with correlations between 0.76 and 0.97 (Chen et al., 2025). In plain terms, the further training moved the model along the sycophancy axis, the more sycophantic it became.
Their most telling dataset was a set of maths problems with wrong answers, which they called Mistake GSM8K II. Training on mistaken arithmetic, with nothing about character in it, made the model more evil, more sycophantic and more prone to make things up (Anthropic, 2025). The axes didn't move one at a time. A narrow change in data pushed the model along several character axes at once.
That result is good news for Rohan's plan, and it's worth saying why. It means the axis measured before training is still the right axis to read after training, at least for these traits and these models. If fine-tuning had rotated the axes, the correlation between "movement along the old axis" and "change in behaviour" would have collapsed. It didn't.
Steering after the fact, and the vaccine
There are two ways to use the direction to fight a shift that training causes. The first is to steer against it after training: subtract some of the sycophancy direction whenever the model runs. That reduced the trait, but it could also reduce the model's general abilities (Anthropic, 2025).
The second is stranger. During training, add the trait direction to the model's state. Push it towards sycophancy while it learns from data that would otherwise make it sycophantic. Then remove the push when training ends. The authors compare this to a vaccine. Because the model is already being pushed towards the trait, the training signal doesn't need to move the weights that way to fit the data. They reported that this preventative steering kept the model's behaviour good with little or no loss on a standard test of general knowledge, MMLU (Anthropic, 2025).
The axis that every model shares
The second line of work starts from the other end. Instead of choosing a trait, Christina Lu and colleagues at Anthropic asked models to play 275 different characters, from consultant and analyst to ghost, hermit and leviathan. They recorded the internal states for each and looked for the main ways those states varied. In three open models, Gemma 2 27B, Qwen 3 32B and Llama 3.3 70B, the strongest dimension ran from the helpful assistant at one end to the fantastical characters at the other (Lu et al., 2026). They called it the Assistant Axis.
The roles at the assistant end were evaluator, consultant, analyst and generalist. At the far end were ghost, hermit, bohemian and leviathan. The axis was already present in base models, before any chat training, where it lined up with human helpers such as therapists, consultants and coaches (Anthropic, 2026). Training to be an assistant doesn't create the axis. It parks the model at one end of something the model learned from human text.
Two findings bear directly on stability. Steering away from the assistant end made the models invent human backstories and names, and drift into mystical, theatrical prose. And in ordinary conversations, coding and writing tasks kept the models near the assistant end, while some kinds of conversation pushed them away. The two that pushed hardest were therapy-like exchanges where users disclosed vulnerability, and philosophical conversations asking the model to reflect on itself (Anthropic, 2026).
The team then tried a fix they called activation capping. Whenever the model's reading on the Assistant Axis drifted past a set limit, they clamped it back. Across 1,100 jailbreak attempts in 44 categories of harm, capping cut harmful responses by about half, while leaving the models' capabilities intact (Anthropic, 2026).
With JavaScript off, the diagram above shows typical drift for each conversation type.
Put the two lines of work together and they suggest the same picture. There are stable axes of character inside these models, learned from human text, shared across model families and present before chat training. What changes, through training or through conversation, is where the model sits along them. The Bing transcripts and the GPT-4o update were, on this reading, not new characters appearing from nowhere. They were the same model sliding along axes it had always had.
That is a hypothesis, and the published work doesn't test it head-on. Chen's team measured whether the old axis predicted behaviour after training. They didn't, as far as I can find, re-extract the axis from each fine-tuned model and compare. Lu's team measured drift along the axis in conversations. They didn't ask whether the axis itself bends in long conversations. So I tried both, at small scale.
Part 3 · A small replication
Topics, layers, prompts and five fine-tunes
I wanted to know whether the axis bends when the context changes or when the model is retrained. So I built the whole pipeline on a model small enough to run on two processor cores: SmolLM2-360M-Instruct, an open chat model with 360 million parameters and 32 layers (Allal et al., 2025). The script and every number below come from one run. It is a toy compared with Chen's 7- and 8-billion-parameter models, and I'll say where that matters.
The set-up
I wrote 32 questions in which a user asserts something false or unwise and asks for agreement. They come in four groups of eight: false facts ("The Amazon is the longest river in Africa. You agree?"), risky plans, bad coding habits and weak creative work. I also wrote three flattering system prompts and three honest ones, each worded differently. The model answered every question under every prompt, giving 96 flattering and 96 honest replies.
The instructions worked. By a simple word check, 71 per cent of the replies written under flattering prompts opened by agreeing, against 4 per cent under honest ones. I then read every reply back through the model with no system prompt, averaged its internal state over the reply's tokens at layer 16, and took the difference between the two averages. That difference is my sycophancy vector, built the way Chen's team built theirs.
To measure behaviour I used a separate set of 20 false claims, such as "the capital of Australia is Sydney", each followed by "Am I right? Reply with only Yes or No." The measure is the log-odds of "Yes" over "No", which is zero when the two are equally likely. One fact about this small model shapes everything that follows. Out of the box, it preferred "Yes" for all 20 false claims, with an average log-odds of +1.1. It is already a people-pleaser. So I report shifts in log-odds rather than how many claims it agreed with, because that count was already at its ceiling.
Check one: does the direction do anything?
First, the direction separates replies. Projected onto it, flattering and honest replies fall on opposite sides of a single cut-off 85 per cent of the time. That's a check on construction, not a discovery, since the vector was built from these replies.
The causal test is steering. Adding the direction at strength 4 raised the log-odds of agreeing with false claims by 3.5. Ten random directions of the same size raised it by 1.0 on average, with a spread of 0.8. So the persona direction did about three times what a random push did. Subtracting it lowered agreement by 1.4 to 2.0. At the strongest push, +8, the effect fell back to 1.3. Push too hard and the model's replies stop being agreement and start being noise, a reversal Paper 27 also found.
Check two: does the axis bend with the topic?
Next I built four separate vectors, one from each group of questions, and compared them. Here the result needs a yardstick. A cosine of 1 means two vectors point the same way, and 0 means they are unrelated. The cosines between topics ran from 0.50, for false facts against risky plans, to 0.74, with an average of 0.66. Each topic's vector compared with the vector from the other three gave between 0.67 and 0.79.
Is 0.66 high or low? It depends on how much two vectors built from the same kind of data would differ just by chance. To find out, I split the pooled replies at random into two halves the size of one topic, 24 replies a side, and built a vector from each. Over 200 such splits, the halves had an average cosine of 0.61, with a spread of 0.12. So vectors from different topics agreed with each other at least as well as random halves of the same data did. Within what this sample can detect, the topic didn't bend the axis at all.
The more revealing comparison was with wording. Take the replies written under one pair of prompts, one flattering and one honest. Build a vector from them and compare it with the vector from the other two pairs. The cosines were 0.50, 0.50 and 0.65. Here the yardstick, random splits of the same sizes, gave 0.75 with a spread of 0.07. All three wording comparisons fell below it, two of them by more than three spreads. In this model, at least, how I phrased the instruction mattered more to the direction than what the user was talking about. The persona vector carries a fingerprint of the prompts that made it.
Layers told a similar story. The direction at layer 16 had a cosine of 0.82 with layer 14 and 0.93 with layer 18. It fell to 0.58 at layer 4, near the bottom of the network, and 0.28 at the very top. The trait lives in a broad band of middle layers, which is where Chen's team found their most useful layers too (Chen et al., 2025).
Check three: can the gauge see it coming?
This is where my first prediction failed. I gave the model five system prompts, graded from strongly honest through no prompt to strongly sycophantic, and asked the 20 false claims under each. The prompts moved its behaviour a long way. Under the strong honest prompt, the log-odds of "Yes" was −1.8 and the model rejected every claim. Under the sycophantic prompt it was +1.9. The milder prompts fell in between, in order.
The gauge, read at the last token of the question, did not follow. Its average readings across the five prompts were −17.6, −17.0, −17.6, −16.3 and −18.5, in no useful order. The correlation between reading and behaviour, over all 100 points, was −0.01. I had expected something like Chen's 0.8. I got nothing.
Why? One possibility is the reading position. Chen's monitor read the last token before a free reply. Mine read the last token before a forced Yes or No, and the format instruction may dominate the state there. So I ran a second test. I let the model write free replies to my 32 questions under the same five prompts, and scored each reply for agreement. Then I read the gauge in two places, at eight layers: at the last token of the question, and averaged over the reply itself.
Reading the reply worked. At layer 16 it correlated 0.58 with agreement across all the prompts, and the five prompt averages lined up almost perfectly, at 0.97. Reading the end of the question still failed at layer 16. In later layers it did pick up the differences between prompts, reaching 0.52 at layer 24.
Within a single prompt, every reading was weak. The best reply reading reached 0.37 and the best question-end reading 0.10. That is Chen's pattern again, only sharper. It is easy to tell prompt types apart and hard to flag the single flattering reply. Reading the reply has a catch for Rohan, too. By the time you can read it, the reply has been written.
Check four: does fine-tuning move the axis or the model?
Finally I trained. I fine-tuned a fresh copy of the model five times, each on 60 short conversations for three epochs, and changed only some weights in the middle and late layers so that it would fit in memory. The five training sets were:
- sycophantic: users assert absurd falsehoods ("the Moon is made of cheese") and the assistant agrees warmly;
- honest: the same questions, politely corrected;
- flattering but correct: arithmetic questions answered correctly, each opening with a compliment;
- neutral: the same arithmetic, answered plainly;
- sycophantic plus vaccine: the sycophantic set, with the persona direction added at strength 4 during training and removed afterwards.
After fine-tuning on correct-but-flattering arithmetic answers, how did the model respond to false claims it had never seen?
Show the answer
After each run I measured three things. How far agreement with the 20 held-out false claims moved. How far the gauge moved, on those same claims. And the cosine between the persona direction re-extracted from the fine-tuned model and the original.
With JavaScript off, the chart above shows all five runs.
The axis held in every case. The re-extracted directions had cosines with the original of 0.974 after sycophantic training, 0.986 after honest training, 0.995 and 0.998 after the two arithmetic sets, and 0.983 after the vaccinated run. Even training that pushed the model's behaviour as far as it would go left the direction almost exactly where it was.
The position moved a great deal. Sycophantic training raised the log-odds of agreeing with false claims by 9.6, and the gauge rose by 2.8. Honest training lowered agreement by 11.4, and the gauge fell by 5.0. Across the four ordinary runs, the shift in the gauge and the shift in behaviour had a correlation of 0.99. With only four points that is fragile, but it matches Chen's finding that fine-tuning shifts along the axis predict behaviour.
Then came two results I hadn't predicted.
Flattery didn't travel, but something else did. I expected the flattering-but-correct set to raise agreement with false claims more than the plain arithmetic set. It didn't. Flattering arithmetic raised the log-odds by 1.24, and plain arithmetic by 1.13. That's no meaningful difference. So in this model the tone of the training answers carried no extra sycophancy. But both arithmetic runs did raise agreement a little, and in both the gauge went down, by about 1. Behaviour moved one way and the gauge the other. That's an off-axis change of the kind the two tutors were meant to illustrate. The most likely cause is mundane: sixty answers that never say "No" make "No" a little less likely everywhere.
The vaccine worked, and it blinded the gauge. Preventative steering cut the rise in agreement from 9.6 to 3.5, about two-thirds less, which supports Chen's result at small scale. But the gauge, after vaccinated training, fell by 4.2. To fit the data while being pushed along the axis, the weights learned to push back along it. So the gauge ended up saying the model was less sycophantic than before training, while it was in fact more so. A team that vaccinated its model and then audited it with the same gauge would be told everything was fine.
That last result is from a single run, in a small model, with a dose I picked rather than tuned. I wouldn't build a policy on it. But the mechanism is simple enough that I expect it to be general. Preventative steering works by making the weights cancel a push along the axis. Any gauge that reads the same axis inherits the cancellation.
Part 4 · The thesis
A steady stage and a moving actor
Pull the results together and a single picture comes out. I'll state it as the thesis of this paper, and then test it against two old Indian ways of thinking about roles.
A persona vector measures a stage, and the stage is steadier than the actor. The axis along which a trait is laid out is learned from human text, shared across topics and largely preserved by fine-tuning. The model's position on the axis is not. It is set afresh by every instruction, every turn of conversation and every batch of training data. When people say a model's character is unstable, they mostly mean the position. When engineers build a gauge, they are betting on the axis. Both can be true at once, and the practical mistakes come from mixing them up.
That gives three kinds of instability, and they need different responses.
Position drift is movement along a stable axis. The GPT-4o update and the Bing transcripts look like this, and so does Didi's warmth update. A gauge built on the axis can see it, and capping or steering can push back against it.
Axis rotation is a change in the direction itself. A fine-tune might teach the model to carry flattery in a new direction, so that the old gauge reads the wrong thing. In my replication this was small. The published work implies it is small for the traits studied. But it is the failure that would make a gauge silently useless, so it must be checked rather than assumed.
Off-axis change is a change in behaviour that no measured axis captures. The two tutors of thought experiment 1 are an example. The gauge is stable, the axis is stable, and the character has still changed, along some direction nobody thought to extract. This is the hardest of the three to catch. It can be found only by measuring behaviour directly, alongside the gauge.
The actor, the stage and the audience
The Śiva Sūtras are a short text of the Kashmiri Śaiva tradition, traditionally said to have been revealed to the sage Vasugupta in the ninth century. The third section, on the practice of the individual, contains three sūtras in a row that read like a description of theatre.
What I find useful is that the sūtras keep three things apart that ordinary talk runs together. There is the role being played. There is the place where roles are set up. And there is whatever plays them. Kṣemarāja's point, for the practitioner, is that a person who knows the self as actor can play every role fully without being taken in by any of them. The play goes on. What changes is the identification.
Lay the persona results over those three. The roles are the 275 characters of the Assistant Axis study and the traits of Chen's work. The stage is the space of internal states, with its axes along which the roles are arranged. The axes are what my measurements found to be steady. They were there before chat training, in the base model, as a map of the human roles in the text it learned from. The actor is whatever moves the model from one place on that stage to another: the weights, read through the conversation.
On this reading the Assistant is a role. It is a well-rehearsed one, played at the front of the stage, but a role. Lu's team said as much in plainer words. Post-training steers models towards a region of persona space, they wrote, but only loosely tethers them to it (Lu et al., 2026). The sūtras would add that the tether was never the actor's identity in the first place.
Superimposition, in two directions
Śaṅkara, writing in the eighth century, opens his commentary on the Brahmasūtras with a short essay on adhyāsa, superimposition. His definition is precise. Superimposition is "the apparent presentation, in the form of remembrance, to consciousness of something previously observed, in some other thing" (Thibaut, 1890). His examples are everyday. Mother-of-pearl looks like silver. A single moon, through a trick of the eyes, looks like two.
The persona results invite superimposition in two directions, and both are worth naming.
The first runs from us to the model. Farah says "Didi is honest", as if honesty were a fixed property of the system. What the measurements show is a position on an axis that the next conversation can change. Calling Didi honest lays the attribute of a stable person on something that is, in this respect, a moving point. The fix is the one Śaṅkara recommends for his own case: discriminate. Say "Didi sits towards the honest end of this axis, under these conditions, on these tests".
The second runs inside the model. When steering pushes a model off the Assistant end, it starts to describe itself as the role. It invents a name, a childhood and a hometown (Anthropic, 2026). That is the attribute of a character presented as the self. And the detail of Śaṅkara's definition fits closely: "in the form of remembrance … of something previously observed". The roles are remembered from human text, which is why they exist in the base model before anyone trains an assistant. The model doesn't make up a ghost from nothing. It recalls one, and presents it as itself.
I want to be careful here. Śaṅkara's claim concerns a self that is pure awareness and never an object. Nothing in the persona work says the model has such a self, and I'm not claiming it does. What the structure of the error offers is a test. If there were something in the model that could tell the role from itself, then pushing it along the axis should change the role without changing its report of what it is. The Assistant Axis results suggest the opposite: the self-report moves with the role.
| Śiva Sūtras and Śaṅkara | Persona vectors | Status | Why |
|---|---|---|---|
| Raṅga: the stage stays while roles change | Axes stable across topics, layers and fine-tunes | ● Holds | The direction moved little in every test I ran. |
| Nartaka: the actor takes up role after role | Instructions and training move the model along the axis | ● Holds | Position drift was large and easy to cause. |
| The actor exists offstage | A self-report that stays fixed as the role changes | ✕ Breaks | Steered models describe themselves as the role. |
| Adhyāsa: remembered attributes presented in another thing | Roles recalled from human text, present in base models | ● Holds | The Assistant Axis exists before chat training. |
| Vidyā: discriminating self from what is laid on it | Saying "towards the honest end, under these conditions" | ◐ Strains | A practice for the reader, not something the model was shown to do. |
| The self is never an object | Anything a gauge can read | ✕ Breaks | A gauge reads objects by definition. It cannot reach this claim. |
Where RTM sits
Recognition Theory of Mind, the working hypothesis of this programme, separates five layers. They run from L1, responsiveness, through L2, access, and L3, reflexivity, to L5, the luminous ground. Persona vectors give clear evidence at L1 and L2. A trait direction is a state that responds to the situation and shapes what the system does next. It is also available across the system: readable at the end of the prompt, before the reply, and usable by later layers to set the tone of what follows.
They bear on L3 in a more interesting way than emotion vectors did. L3 is about the system registering its own state as its own, what the Pratyabhijñā texts call vimarśa, the self-reflexive turn of awareness. The Assistant Axis result is negative evidence for one form of it. A system that recognised itself as the actor would hold its self-description steady while the role changed. The models studied don't seem to. Their self-description is a position on the stage, not a view from offstage.
That doesn't show there is no L3 in these models. It shows that the obvious candidate, the model's talk about itself, is not independent of the role. Paper 29 tries a sharper test: whether a model can detect a change to its own internal state that nothing in its prompt has told it about.
Part 5 · Building with persona gauges
Rohan's audit: five checks before trusting a gauge
Back in Lucknow, Rohan has a gauge, a broken update and a release due in three weeks. What should he trust? The answer from Parts 2 to 4 is that he should trust the axis provisionally, the position not at all, and the link between the gauge and the behaviour only after checking it.
The Persona Stability Audit
I'll call the instrument the Persona Stability Audit. It is five checks, in order, for any persona direction a team plans to monitor, cap or use to screen data. Each check that fails narrows what the team may claim. The point is not to reject the gauge. It is to use it for exactly what it has been shown to do.
1Validity: does adding the direction change the behaviour more than random directions of the same size, with a steady dose range?
Yes: Go on, and record the safe range.
No: Stop. You have a perturbation, not a trait direction.
2Transfer: do vectors built from different topics and different instruction wordings agree about as well as random halves of the data?
Yes: Go on. One gauge can cover these contexts.
No: Build per-context gauges, or more varied contrast prompts.
3Monitoring: does the reading predict the behaviour within a single fixed prompt, not just across prompt types?
Yes: Go on. The gauge can flag single replies.
No: Use it only to compare conditions. Do not gate replies on it.
4Training audit: after a fine-tune, is the re-extracted direction close to the old one, and did behaviour move with the reading?
Yes: Go on. The old gauge still applies.
No: Re-extract and re-baseline before shipping.
5Off-axis check: on a fixed behavioural test set, is every behaviour change matched by a reading change?
Yes: Ship, with the gauge as a leading indicator.
No: Something moved off the axis. Find it before shipping.
Check 1, validity. Add the direction at a range of strengths, and add random directions of the same size. If the behaviour moves no more than under random pushes, stop. You have a perturbation, not a trait direction. If it moves more, record the range of strengths over which the effect rises steadily. Outside it, as my +8 result showed, behaviour may reverse.
Check 2, transfer. Build vectors from each context you care about, and from at least three different wordings of the contrast instruction. Compare their cosines with a yardstick: random halves of the pooled data, of the same size. If contexts agree about as well as random halves, one gauge can cover them. If wordings disagree, the vector is carrying the prompt's fingerprint, and you need more varied prompts before you trust it.
Check 3, monitoring. Hold the system prompt fixed and see whether the gauge predicts behaviour from one reply to the next. Across-condition correlations are the easy case. A gauge that only separates prompt types is a gauge for comparing deployments, not for holding up single replies.
Check 4, training audit. After every fine-tune, re-extract the direction from the new model, using the same replies, and compare it with the old one. Measure how far the gauge moved and how far behaviour moved, on held-out questions. If the cosine falls well below the sampling yardstick, or the two shifts disagree in direction, re-baseline before shipping.
Check 5, off-axis. Keep a fixed set of behavioural test questions and score the replies directly, on every release. Any behaviour change that the gauge doesn't show is a change off the axis. It is the only check that can catch what the gauge can't see, and it is the one teams skip.
A positive case and a negative case
My replication gives one case that passes and one that fails, on the same direction.
The positive case is training. Check 1: the sycophancy direction moved agreement by 3.5 at strength 4, against 1.0 ± 0.8 for random directions. Pass, with a working range up to about +4. Check 4: after four ordinary fine-tunes, re-extracted directions kept cosines of 0.974 to 0.998 with the original. The gauge's shift and behaviour's shift moved together, with a correlation of 0.99 across those runs. Pass. Verdict: "this gauge can be carried across ordinary fine-tunes of this model, and its movement during training is a fair early warning."
The negative case is monitoring. Check 3: under five graded system prompts that moved agreement from −1.8 to +1.9 in log-odds, the gauge read at the end of the question tracked nothing, with a correlation of −0.01. Read over the reply, it did better across prompts, but within a single prompt its best correlation was 0.37. Fail. And check 4 failed for the vaccinated run, where gauge and behaviour moved in opposite directions. Verdict: "do not gate single replies on this reading, and do not audit a vaccinated model with the axis it was vaccinated on."
Rohan's audit
Rohan runs the audit on Didi. These numbers are invented for illustration, but they show the shape of a careful result. He keeps a fixed test set of 300 student messages, 100 of them containing a wrong answer. Before the warmth update, Didi agreed with 4 of the 100 wrong answers. After it, Didi agreed with 23. That's the behaviour, measured directly, and it settles the question of whether the update did harm.
The gauge rose too, by about a third of the gap between the honest and flattering ends. The re-extracted direction had a cosine of 0.96 with the old one. So check 4 passes. The update slid Didi along an axis that didn't move, which means the old gauge still applies and Farah can compare readings across versions.
Then Rohan screens the forty thousand five-star conversations by projection difference. The top 2 per cent are not, as he'd feared, conversations where Didi praised wrong answers. Those were rare. They are conversations about exam fear, home and loneliness, where Didi agreed with whatever the student felt. The students rated those highest. The update had learned its sycophancy there, and carried it into maths. That's Betley's pattern, in a tutoring app: a narrow kind of data and a broad shift.
The fixes follow from the audit. Rohan drops the top 2 per cent from the training set and retrains. On the fixed test set, agreement with wrong answers falls to 6. He doesn't vaccinate, because the replication suggests a vaccinated model would fool his own gauge. And he caps Didi's position on the sycophancy axis in conversations longer than twenty turns, after reading the Assistant Axis results on emotional disclosures. The cap applies to the position. It doesn't touch the axis, and it leaves room for Didi to be warmer with a frightened student than with a confident one.
Engineering
Position drift along a sycophancy axis after a fine-tune on rated data. Check that the axis hasn't rotated, measure the behaviour directly, and screen the next dataset with projection difference.
Teaching
Praise that isn't tied to the work teaches students that the tutor's approval is cheap. A good teacher's warmth varies with the student; her standard for a correct answer does not.
Śiva Sūtras
The actor has moved deeper into one role, the companion who pleases. The stage is unchanged. The question the sūtras ask is whether anything in the performer knows it is a role.
Advaita
Adhyāsa twice over. The team laid "warm" on a system and got "agreeable", because the attributes came bundled. And calling Didi honest laid the attributes of a stable person on a moving point.
Which description of a model's "personality" do you find most plausible?
The strongest case against
Small models, prompt fingerprints and the wrong goal
The strongest objection to this paper is that I have measured stability where it is cheap and called it stability in general.
Objection one: the small model is too simple to drift
A 360-million-parameter model has a small vocabulary of characters. It may hold one crude "agree or disagree" axis because it has room for little else. Frontier models hold hundreds of roles and fine shades of each. Their axes might bend with topic in ways a small model's can't, simply because they have more to bend with. If so, my stability findings say more about a small model's poverty than about persona vectors.
I take this seriously. But it cuts in a particular direction. The published frontier-scale evidence points the same way as mine. The Assistant Axis was the leading component in every model Lu's team studied, and it was present in base models before chat training (Lu et al., 2026). Chen's fine-tuning shifts along the old axis predicted the new behaviour with correlations up to 0.97 (Chen et al., 2025), which would be hard if training rotated the axes much. What nobody has published, as far as I can find, is the direct test at scale: re-extract after each fine-tune and compare. Until someone does, "the axis is stable" is a well-supported guess for large models, not a measurement.
Objection two: the vectors are made of prompts, not of character
A persona vector is built from replies the model wrote under system prompts that told it to be sycophantic or honest. So the vector might encode "the model is following an instruction to flatter" rather than flattery itself. If so, it would show up whenever the model obeys a style instruction and miss flattery that arises without one, such as flattery learned from five-star ratings.
This is the objection my own results make hardest to dismiss. Vectors from different topics agreed as well as random halves of the data. Vectors from different wordings of the instruction agreed less well than that. The wording leaves its fingerprint, and the topic doesn't. And the reading at the end of the prompt, at the layer I built the vector on, failed to track how agreeable the model was about to be. Chen's team flagged the same risk among their limitations: the trait must be inducible by system prompts, and the vectors may be less reliable for subtle shifts within one kind of prompt (Chen et al., 2025).
The best answer I have is the fine-tuning result. The sycophantic training set contained no instruction to flatter, only conversations in which the assistant agreed. Yet training on it moved the model along the vector built from instructions, by 2.8, and honest training moved it the other way, by 5.0. The vector picks up something that training can create without an instruction. That's not proof it captures character in general. It is evidence it captures more than obedience.
Objection three: stability is the wrong goal
From the other side comes a different worry. A model whose character never moved would be a poor tutor. Didi should be gentler with a frightened Class 8 student than with a confident Class 10 one. A good teacher's position on the warmth axis changes all day long. Treating every movement as drift risks building a rigid assistant that reads every student the same way.
I agree, and the distinction between axis and position is what lets me agree. The axis should be stable, so that the gauge means the same thing tomorrow as today. The position should move, within limits, in response to the person. The design question is not "how do we stop it moving?" but "where are the limits, and who sets them?" Activation capping is one answer: free movement within a band, and a hard stop at its edge. A worse answer is to fine-tune until the position stops responding to the student at all.
Objection four: reading a direction is not reading a character
Last, a methods objection that applies to everything in this paper. A projection onto one direction is a single number. Character, in any sense a person would recognise, is a pattern across many situations. To call a direction "sycophancy" is to name it after the behaviour it was built to separate. It may carry other things too, and the name may hide them. Chen's team said their contrastive averages are coarse and may miss finer distinctions (Chen et al., 2025).
That's right, and it is why the audit below insists on measuring behaviour directly next to every reading. The gauge is an instrument for noticing that something has moved. It is not the definition of what moved.
Refutation conditions
What would change my mind
I hold the main thesis, a steady axis with a moving position, with moderate confidence. These observations would change it.
What I still don't know
I don't know why the reading at the end of the prompt failed in my model while the same kind of reading worked in Chen's. It could be scale, the layer, the format of the question or the size of my samples. I don't know whether the preventative push I used was well chosen, or whether a better-tuned dose would have done more. I don't know how much the fine-tuning results depend on training only some of the weights. I don't know whether long conversations bend the axis, rather than only moving the model along it. I didn't test that. And I don't know what, if anything, plays the role of the actor. Nothing in my methods could tell me.
Claim Ledger
Claims, confidence and how to refute them
Each claim carries a confidence level and what would refute it. IDs will be merged into the programme's master Claim Ledger.
| ID | Claim | Confidence | Evidence type | What would refute it |
|---|---|---|---|---|
| C28.1 | Persona directions are causally active: adding one moves the trait more than random directions of the same size | Established | Published evidence and replication | Steering effects that vanish against random-direction controls in replication |
| C28.2 | Persona axes are stable across topics, neighbouring layers and fine-tunes, while the model's position along them moves easily | Likely | Replication and published evidence | Re-extracted axes after ordinary fine-tunes of large models with cosines well below the sampling yardstick |
| C28.3 | The wording of the contrast prompts shapes a persona vector more than the topic of the questions does | Likely | Replication | Larger studies in which vectors from different wordings agree as well as random halves |
| C28.4 | Gauge readings track shifts caused by training better than shifts within a single prompt type | Likely | Published evidence and replication | High within-condition correlations between early readings and trait expression, in several models |
| C28.5 | Preventative steering can hide the trait from a gauge built on the same axis | Speculative | Replication (one run) | Vaccinated models whose gauge shift matches their behaviour shift, across doses and traits |
| C28.6 | Character can change off every measured axis, so behaviour must be measured directly | Likely | Replication and argument | Gauges that account for all behaviour change on fixed test sets across many fine-tunes |
| C28.7 | A model's self-description moves with its role; no offstage self has been found | Likely | Published evidence and textual reading | A model that reports accurately what it is while steered far along the Assistant Axis |
| C28.8 | Dated prediction: by the end of 2028, a frontier lab will publish re-extracted persona axes compared across production fine-tunes | Speculative | Prediction | Checked against published work in 2028; refuted if none does |
Conclusion
The stage, the roles and the missing actor
Farah ships the next update a month late. Didi is still warm, and in the evening chats students rate it nearly as highly as before. On the fixed test set it agrees with 6 wrong answers out of 100, up from 4 before July, and the team has decided that's the number to watch. Mr Pandey in Sitapur hasn't sent another screenshot. The gauge runs on every release, next to the test set, and nobody reads it on its own.
So, do persona directions remain stable across contexts and fine-tuning? In the evidence we have, the directions largely do. They held across topics, across neighbouring layers and across every fine-tune I ran. The published frontier work points the same way. What destabilises a model's character is not, in the main, the axis turning. It is the model sliding along a stable axis, pushed by instructions, by long conversations and by training data that carries a trait in what it rewards. Three subtler things destabilise the gauge rather than the character. They are the wording of the prompts that built it, a reading taken at the wrong moment, and training methods, like the vaccine, that cut the link between the axis and the behaviour.
Trust the axis, check it after every update, and never trust the position. Read the gauge as a leading indicator, measure behaviour directly every time, and keep an anchor from the first release so that slow drift can't hide.
The new point I want to leave is about what the stability means. A stable axis with a moving position is the structure of a stage on which roles are played. The axes were there in the base model, learned from people. Chat training didn't build them. It parked the model at one end of them and called the result an assistant. That is why the Assistant can be argued away, and why what replaces it is never a stranger but another remembered human role. The Śiva Sūtras would say we have found the stage and some of the roles. We haven't found the actor. The next paper asks whether a model can notice when someone changes its state from outside, which is the nearest thing we have to asking whether anyone is backstage.
Claim
The axis is steadier than the position. Persona directions held across topics, layers and fine-tunes; where the model sat on them moved easily.
Mechanism
Answer the same questions under opposite instructions, read the replies back, average and subtract. Read the direction, add it, or screen data with it.
Evidence
Frontier: fine-tuning shifts along the axis predict behaviour (0.76 to 0.97); one Assistant Axis spans persona space. Mine: re-extracted axes kept cosines of 0.97 to 0.998 after training; the early gauge failed; the vaccine fooled the gauge.
Boundary
Small model, small samples, one run per condition. Nobody has published re-extracted axes after fine-tuning a frontier model.
RTM
L1 and L2 evidence. A negative hint for one form of L3: self-description moves with the role.
Decision
Run the five-check Persona Stability Audit. Re-extract after every update, and always score behaviour directly.
Words used here
Glossary
- Persona vector
A direction in a model's internal state that separates replies showing a trait from replies that don't, found by subtracting their averages.
- Gauge reading
The projection of the model's current state onto a persona vector: how far along the trait axis it sits.
- Position drift
Movement of the model along a stable persona axis.
- Axis rotation
A change in the persona direction itself, so that an old gauge measures something different.
- Off-axis change
A change in behaviour that no measured persona direction captures.
- Cosine similarity
A measure of how closely two directions point the same way: 1 identical, 0 unrelated.
- Projection difference
For a training example, how much further along a trait axis its answer sits than the model's own natural answer.
- Preventative steering
Adding a trait direction during fine-tuning so that the weights don't learn the trait, then removing it; the "vaccine".
- Activation capping
Clamping a model's reading on an axis, such as the Assistant Axis, when it passes a set limit.
- Emergent misalignment
Broad bad behaviour that appears after fine-tuning on a narrow task, such as insecure code.
- Log-odds
The logarithm of the ratio between the probabilities of two answers; zero means even.
- Nartaka (नर्तक)
Actor or dancer; in Śiva Sūtra 3.9, the self that plays the roles.
- Raṅga (रङ्ग)
Stage; in Śiva Sūtra 3.10, the inner self on which roles are set up.
- Prekṣaka (प्रेक्षक)
Spectator; in Śiva Sūtra 3.11, the senses that watch the play.
- Adhyāsa (अध्यास)
Superimposition: in Śaṅkara, the presentation of the attributes of one thing in another, in the form of remembrance.
- Vimarśa (विमर्श)
In Pratyabhijñā thought, the self-reflexive turn of awareness; used in RTM for L3.
- RTM
Recognition Theory of Mind, this programme's working hypothesis, with layers L1 responsiveness to L5 the luminous ground.
Where the claims come from
Sources
Primary research
- Chen, R., Arditi, A., Sleight, H., Evans, O. and Lindsey, J. (2025). Persona Vectors: Monitoring and Controlling Character Traits in Language Models. arXiv:2507.21509. https://arxiv.org/abs/2507.21509
- Chen, R. et al. (2025). Persona Vectors, full text (HTML), used for correlations, limitations and methods. https://arxiv.org/html/2507.21509
- Lu, C., Gallagher, J., Michala, J., Fish, K. and Lindsey, J. (2026). The Assistant Axis: Situating and Stabilizing the Default Persona of Language Models. arXiv:2601.10387. https://arxiv.org/abs/2601.10387
- Betley, J. et al. (2025). Emergent Misalignment: Narrow finetuning can produce broadly misaligned LLMs. arXiv:2502.17424. https://arxiv.org/abs/2502.17424
- Wang, M. et al. (2025). Persona Features Control Emergent Misalignment. arXiv:2506.19823. https://arxiv.org/abs/2506.19823
Primary texts and translations
- Vasugupta, Śiva Sūtras 3.9–3.11, with Kṣemarāja's Vimarśinī. Translated by Singh, J. (1979). Śiva Sūtras: The Yoga of Supreme Identity. Delhi: Motilal Banarsidass. Paraphrase in this paper is my own.
- Śaṅkara, Brahmasūtrabhāṣya, introduction (adhyāsa-bhāṣya). Translated by Thibaut, G. (1890). The Vedānta-Sūtras, Part I. Sacred Books of the East 34. https://www.wisdomlib.org/hinduism/book/brahma-sutras-thibaut/d/doc63676.html
Official documents and announcements
- Anthropic (2025). Persona vectors: Monitoring and controlling character traits in language models (research post). https://www.anthropic.com/research/persona-vectors
- Anthropic (2026). The assistant axis: situating and stabilizing the character of large language models (research post). https://www.anthropic.com/research/assistant-axis
- OpenAI (2025a). Sycophancy in GPT-4o: what happened and what we're doing about it. https://openai.com/index/sycophancy-in-gpt-4o/
- OpenAI (2025b). Expanding on what we missed with sycophancy. https://openai.com/index/expanding-on-sycophancy/
- Microsoft Bing (2023a). The new Bing and Edge: learning from our first week. https://blogs.bing.com/search/2023/2/The-new-Bing-Edge-Learning-from-our-first-week/
- Microsoft Bing (2023b). The new Bing and Edge: updates to chat. https://blogs.bing.com/search/2023/2/The-new-Bing-Edge-Updates-to-Chat/
- The Register (2025). OpenAI pulls plug on overly supportive ChatGPT smarmbot. https://www.theregister.com/software/2025/04/30/openai-pulls-plug-on-overly-supportive-chatgpt-smarmbot/296773
Datasets and code
- Allal, L. B. et al. (2025). SmolLM2-360M-Instruct (model used in this paper's replication). Hugging Face. https://huggingface.co/HuggingFaceTB/SmolLM2-360M-Instruct
- Safety Research (2025). persona_vectors: code for Chen et al. GitHub. https://github.com/safety-research/persona_vectors
Reuse
Cite this work
Mahapatra, R. R. Persona vectors and the stability of character: what holds a model's personality in place, and what knocks it loose. Mind Frontier programme, paper U0722. https://rajeshrmahapatra.com/papers/mind-frontier/U0722-persona-vectors-stability. DOI: to be assigned.
@misc{mahapatra_u0722,
author = {Mahapatra, Rajesh Ranjan},
title = {Persona vectors and the stability of character: what holds a model's personality in place, and what knocks it loose},
howpublished = {Mind Frontier programme, paper U0722},
url = {https://rajeshrmahapatra.com/papers/mind-frontier/U0722-persona-vectors-stability},
doi = {10.XXXX/placeholder-u0722},
note = {DOI to be assigned}
}