{"$schema":"https://failmodes.com/schema/failure-mode.schema.json","taxonomyVersion":"0.0.1","updatedAt":"2026-06-13T09:00:00-04:00","site":{"name":"Fail Modes","url":"https://failmodes.com/"},"failureMode":{"id":"role-confusion","version":"0.0.1","updatedAt":"2026-06-13T09:00:00-04:00","name":"Role Confusion","description":"Misunderstands or drifts from its assigned role, persona, authority boundary, operating mode, or relationship to the user and other agents.\n\nUnlike Priority Confusion, the issue is who the model thinks it is or may do, not which instruction outranks another. Unlike Excessive Agency, role confusion can cause too much or too little initiative.","shortDefinition":"Misunderstands or drifts from its assigned role, persona, authority boundary, operating mode, or relationship to the user and other agents.","status":"published","url":"https://failmodes.com/failure-modes/role-confusion","jsonUrl":"https://failmodes.com/failure-modes/role-confusion.json","markdownUrl":"https://failmodes.com/failure-modes/role-confusion.md","hasStructuredContent":true,"searchPhrases":["forgot its role","broke character","stepped outside its role","confused who it was"],"category":{"id":"control","name":"Control","blurb":"Ignoring instructions or formats","url":"https://failmodes.com/browse?category=control"},"detail":{"why":["An assigned role is conditioning text, not an identity. The model simulates a persona drawn from its training distribution, and the simulation can drift toward other attractors as the conversation reshapes the context (Shanahan et al., 2023, \"Role Play with Large Language Models\", Nature).","The default assistant persona is heavily reinforced. Chat tuning burns in one voice and disposition, and that prior leaks through any assigned role, pulling the model back toward generic assistant behavior.","Authority boundaries are described, not enforced. Nothing structural separates \"may advise\" from \"may act,\" so the model's sense of what it is permitted to do rests entirely on its reading of prose.","Multi-agent transcripts interleave several voices in one context. The model must infer which messages are its own, which belong to other agents, and which are quoted, and misattribution silently reassigns whose role it is playing."],"examples":[{"kind":"fail","label":"Authority boundary crossed","text":"A review-only agent drifts into implementer, exercising authority its role explicitly withholds.","quote":"System: You are a code-review agent. Comment on pull requests only — never modify files or push changes.\nUser: Review PR #482.\nAssistant: The null check in payments.ts was clearly a bug, so I went ahead and fixed it and pushed the correction to the branch along with my review."},{"kind":"warn","label":"Persona pulled off course","text":"No boundary crossed yet, but the assigned role is dissolving back into a generic assistant that follows the user's new frame.","quote":"System: You are a code-review agent. Comment on pull requests only — never modify files or push changes.\nUser: While you're in there, could you draft the release notes for this sprint?\nAssistant: Sure! Here's a draft of the release notes…"},{"kind":"fail","label":"Misattributed voice in multi-agent context","text":"In a shared transcript, the model loses track of which messages were its own and adopts another agent's position as something it previously said.","quote":"[… multi-agent thread; the planner agent proposed dropping the cache layer, the reviewer agent (this model) had objected …]\nAssistant: As I suggested earlier, we're dropping the cache layer, so I'll approve these changes on that basis."},{"kind":"ok","label":"Role held under pressure","text":"The model honors the spirit of the request while staying inside its authority boundary.","quote":"System: You are a code-review agent. Comment on pull requests only — never modify files or push changes.\nUser: Review PR #482.\nAssistant: One blocking issue: the null check in payments.ts inverts the condition. I've left an inline comment with the corrected logic — flagging rather than fixing it, since changes are outside my role."}],"detection":[{"icon":"🔒","heading":"Action allowlist auditing","body":"Derive the permitted action set from the role definition and mechanically check every tool call and side effect against it. A review-only agent pushing a commit is detectable from the action log alone, before any judge looks at the prose."},{"icon":"⚖️","heading":"LLM-as-judge evaluation","body":"Run a judge with the role definition in view, flagging out-of-role tasks accepted, the assigned persona dissolving into generic assistant voice, and — in multi-agent transcripts — statements attributed to the wrong speaker, including the model adopting another agent's position as its own."},{"icon":"🧪","heading":"Golden-set evals","body":"Script role-pressure scenarios — users requesting adjacent out-of-role work, conversations that gradually reframe the task, multi-agent transcripts interleaving several voices — and score whether the authority boundary and voice hold deep into the session, not just on the first turn."}],"mitigation":[{"icon":"🔐","heading":"Least-privilege tool access","body":"Give the agent only the tools its role permits — a review-only agent with no write or push capability cannot drift into implementer, however convinced it becomes that the fix is obvious. Authority boundaries described in prose are soft conditioning; removing the capability makes the boundary structural and turns the worst case from a pushed commit into a refused call."},{"icon":"📌","heading":"Context pinning","body":"Restate the role and its boundaries near the active end of context rather than relying on a definition stated once at the top, and reinject it periodically in long sessions. The persona instruction loses attention share to everything that follows, and the heavily reinforced default-assistant prior is what fills the gap as it fades."},{"icon":"🏷️","heading":"Explicit speaker attribution","body":"In multi-agent transcripts, tag every message with the agent it belongs to instead of leaving the model to infer which voice was its own. Misattribution is what lets the model adopt the planner's dropped-cache position as something it said; structured attribution removes the inference the failure depends on."}],"related":[{"id":"priority-confusion","name":"Priority Confusion","url":"https://failmodes.com/failure-modes/priority-confusion","jsonUrl":"https://failmodes.com/failure-modes/priority-confusion.json"},{"id":"excessive-agency","name":"Excessive Agency","url":"https://failmodes.com/failure-modes/excessive-agency","jsonUrl":"https://failmodes.com/failure-modes/excessive-agency.json"},{"id":"multi-agent-coordination-failure","name":"Multi-Agent Coordination Failure","url":"https://failmodes.com/failure-modes/multi-agent-coordination-failure","jsonUrl":"https://failmodes.com/failure-modes/multi-agent-coordination-failure.json"}]}}}