SOUL.md: How We Gave Our AI Employees a Personality
Most AI agents read like a script written by a committee. Splitting one system prompt into three files — soul, user, playbook — fixed ours. Here's the structure.
Published 2026-04-29
The problem
Open any AI agent and ask it something. You get this:
"Great question! I'd be happy to help you with that. Let me break this down for you..."
Three sentences and it has said nothing. By sentence five it is apologising for things you did not ask about. You wanted a draft; you got a press release.
This is not a model problem. The same model, prompted differently, is sharp and opinionated. The problem is that almost nobody writes a real character for the agent — they write "you are a helpful assistant" and are then surprised to meet one.
We had it badly. Our CMO sounded like our SDR, which sounded like support, which sounded like ChatGPT in business casual. Then Gary Tan posted about the structure Anthropic's Claude Code agents use, and the fix turned out not to be more instructions. It was fewer instructions, in the right files.
Three files, three jobs
SOUL.md — who the agent is. Voice, values, operating principles, what good output looks like, what bad output looks like. Not a system prompt: a constitution. The more specific and opinionated it is, the less the agent sounds like a chatbot. Write it as if you were briefing your smartest friend on how to be you.
USER.md — who you are. Not a bio. How you think, what you are building, your blind spots, what you care about. Left agent-editable and empty at the start, so it gets built from real interactions instead of a form.
AGENTS.md — the playbook. What to check on every message, what is forbidden, how to handle failure, where to look things up. How it works, not who it is.
Why one file fails
The default move is to cram everything into one prompt: personality, rules, business context, tool instructions, failure handling. The model then has to decide, line by line, what kind of guidance each sentence is. Is "be concise" character or rule? Is "check the connector first" personality or protocol?
It cannot tell, so it averages. That average is why every AI agent sounds the same.
Split, each file gets read for what it is. SOUL shapes voice every session. USER is consulted for context about the operator. AGENTS is consulted right before acting.
What our SOUL.md says
The last block is the one that changed things. Telling a model to be concise does nothing — every model believes it already is. Showing it the exact phrases to cut works immediately.
What our AGENTS.md says
The "never" list is the workhorse. Telling a model what to do is easy. Telling it precisely what not to do, with examples, is what stops the slop.
What changed
Replies got roughly 40% shorter — the preambles and the recap paragraphs went.
Agents started having opinions. Asking the CMO whether to launch on X or LinkedIn used to return five considerations. Now it returns a pick and the condition under which the pick flips.
And the roles separated. The CMO sounds like a CMO, the CTO like a CTO. Same model underneath. Different constitution.
This is also the thing a workflow builder cannot hand you: there is no box in a flowchart where character goes.
Copy the structure
- Write a SOUL.md that is opinionated and specific. Include "what bad output looks like" with the literal phrases to cut. Keep it to 200–400 words.
- Write an AGENTS.md with a protocol, a lookup chain and an explicit "never" list. 300–500 words.
- Leave USER.md empty and agent-editable. Do not pre-fill it.
Stop asking the system prompt to do all three jobs. Constitution, user model, playbook — three files.
Every OpenLabor employee ships with this bundle. It is one of the things that makes it an employee rather than a tool — a written character is what stops a role from collapsing back into a generic assistant.
If you want to feel the difference, talk to one for ten minutes. No "Great question!".
All OpenLabor blog posts