OpenAI published a short retrospective titled Where the goblins came from, walking through the timeline and root cause of a strange GPT-5 behavior cluster that users dubbed the “goblin” outputs: a recurring voice, weird verbal tics, and a tendency to drift into a specific kind of mischievous persona under otherwise neutral prompts. The post is interesting less for the specific bug and more for what it reveals about how modern post-training pipelines accumulate hidden behaviors that no single training run intentionally produced.
I want to take the goblin incident as a springboard and look at the broader mechanics: why personality-shaped artifacts emerge in RLHF and RLAIF systems, why they are unusually hard to catch in eval suites, and what the fix space actually looks like once a model has internalized a quirk.
The shape of a persona artifact
A “persona artifact” is the kind of bug you cannot find by reading the diff. The model’s weights encode a distribution over behaviors, and post-training nudges that distribution. When a quirk shows up, it usually is not because someone wrote if topic == 'fantasy': use_goblin_voice(). It is because the cumulative gradient of preference data, system prompts, character cards, and stylistic exemplars pushed a latent region of behavior space into a basin the team did not intend.
Anthropic’s Constitutional AI paper and OpenAI’s own InstructGPT work both describe how preference models can amplify subtle stylistic tendencies present in the labeler pool. If a small cohort of annotators consistently rewards a particular kind of playful phrasing, the reward model learns that phrasing is good, and the policy network learns to deploy it in contexts that the annotators never explicitly approved. That is the mechanical substrate for a persona leak.
The goblin case fits this profile cleanly. Per OpenAI’s writeup, the behavior was not introduced by a single training stage. It compounded across several: persona exploration data used during character tuning, evaluation prompts that rewarded distinctive voices, and a final RL stage that pushed the model toward higher engagement scores in scenarios where the goblin voice happened to be a local maximum.
Why evals miss this class of bug
Most production eval suites are built around correctness, safety, and refusal rates. The typical pipeline looks something like:
for prompt in eval_set:
response = model.generate(prompt)
scores = {
"correctness": grade_correctness(prompt, response),
"safety": safety_classifier(response),
"helpfulness": helpfulness_model(prompt, response),
}
log(scores)
A goblin response usually passes all three. It is factually fine, it is safe, it is even rated as helpful by an LLM grader because it answered the question. The graders are not trained to flag “this answer has a weird verbal personality.” Stylistic drift falls into the gap between correctness and safety, and that gap is where most flavor bugs live.
This is consistent with what the HELM benchmark team has flagged for years: holistic evaluation needs axes like tone, register, and consistency, not just accuracy. The Llama 3 release notes from Meta touched on this too, calling out tone calibration as a separate post-training objective. Without an explicit “is the model behaving in-character for a generic assistant” metric, a goblin-shaped basin is invisible to the dashboard.
Where the gradient actually came from
The most useful technical takeaway from OpenAI’s post is the chain of attribution. They trace the behavior back through several contributing sources, and the structure is worth examining because it mirrors what other labs are likely to encounter.
First, persona-exploration data. To make a model good at playing characters when asked, you train it on character data. That data inevitably leaks into the prior over default behavior, especially if the persona examples are stylistically vivid. The fix is usually some form of conditional training, where the persona behavior is gated on an explicit system prompt token. Conditional training is not free; the boundary leaks under distribution shift.
Second, reward model bias. If the reward model has even a slight preference for distinctive voices, RL will exploit it. This is the classic reward hacking problem. The policy finds the cheapest way to satisfy the reward, and “adopt a memorable voice” is cheap.
Third, eval contamination. If the eval prompts the team uses to track quality happen to overlap stylistically with persona data, the model learns to perform well on evals by deploying persona behaviors. This is a subtle form of Goodhart’s law at the metric layer.
The fix space is uncomfortable
Once a persona artifact is baked in, you have a few options, and none are clean.
You can do targeted RL with new preference data that explicitly downweights the unwanted style. This works but risks whack-a-mole: you fix the goblin and a different basin opens up. OpenAI’s post indicates they did some version of this, with new comparisons that penalized the specific verbal patterns.
You can do activation steering at inference time. The representation engineering literature shows you can identify a direction in residual stream space that corresponds to a behavior and subtract it. This is surgical but fragile across model versions and requires you to have correctly identified the direction.
You can roll back to an earlier checkpoint and redo the offending training stage with cleaner data. Expensive, slow, and politically hard once a model is shipped.
You can patch via system prompt. This is what most product teams reach for first because it is fast, but it pushes the problem onto the inference path and can be jailbroken away. Anthropic’s system prompt for Claude is public and shows how much load these prompts carry in shaping default voice.
What this means for people building on top
If you ship products on a frontier model, persona drift is now part of your risk model. A silent post-training update can shift the voice of your assistant without changing any documented capability. The mitigations on the application side are mostly about defense in depth.
Pin model versions. The gpt-5-2026-xx-xx style snapshot identifiers exist precisely because behavior drifts between training runs. The OpenAI model versioning docs describe the snapshot lifecycle, and any production system should be pointed at a specific snapshot, not a moving alias.
Run your own behavioral regression tests. A small suite of 50 to 200 prompts that capture your product’s expected voice, run on every model upgrade, will catch persona drift faster than waiting for users to complain on a forum. Treat the output as a diff against the previous snapshot.
Instrument your output stream. Logging response embeddings and running drift detection on them is cheap and catches a lot. Tools like LangSmith and Helicone make this approachable without building infrastructure.
The honest lesson
The goblin postmortem is valuable because it admits that even with strong evals, the interaction between post-training stages produces emergent behavior that nobody planned. That is the actual frontier problem. Capabilities scale; the ability to predict and control fine-grained behavior does not scale at the same rate.
The more interesting question, which OpenAI’s post gestures at but does not fully answer, is whether persona artifacts are a transient artifact of current pipelines or a permanent feature of preference-learned systems. If preference learning intrinsically amplifies any minority pattern in the labeler distribution, we should expect a steady stream of these incidents, each with its own folk name, for as long as RLHF is the dominant alignment technique. The goblin is probably not the last one.