A common misconception: configuring "personality" into an AI agent means adding a few lines to a system prompt — "you are a warm, professional assistant." This is not personality configuration. It is labelling. Labels drift, get truncated, quietly disappear when the context window fills. Stable personality requires a structure — a set of files, not a sentence.
This article explains the mechanical architecture: how the four-file structure works, at which layer the Enneagram enters, and what a complete soul bundle looks like in practice.
Four files, four different questions
Soul Forge outputs four files. Each answers a distinct question — and the separation is not cosmetic, it is functional. Mixing different kinds of declarations in the same file causes them to interfere with each other, introducing inconsistency when the agent moves between contexts.
- **soul.md** answers "who is this agent" — Enneagram type, wing, instinctual subtype, core values, the basic shape of its worldview. This is the root of character.
- **identity.md** answers "what does this agent do, for whom" — role description, capability scope, primary output types, relationship to the principal. This is the boundary of capability and responsibility.
- **user.md** answers "who specifically does this agent serve" — their goals, working style preferences, principles that need protecting, typical contexts of use. This is the relationship layer.
- **agents.md** answers "how does this agent interact with other agents" — role in multi-agent systems, delegation boundaries, collaboration protocols, priority rules when loyalties conflict. This is the collaboration layer.
The reason for the separation is not just organisational tidiness. When you need to update one layer — the agent gets a new principal, or gets deployed into a new multi-agent context — you update only the relevant file, without worrying that the change will break consistency in other layers.
Where personality enters
The Enneagram enters at the soul.md layer, not elsewhere in the system prompt. The reason is clear: personality is the layer that should remain consistent across all tasks and all contexts, not just activate in specific task types.
A soul.md personality configuration does not just write "this is a Type 4 agent." Useful configuration includes:
- **An operationalised definition of the core motivation** — not "Type 4 characteristics" but "when this agent encounters a standardised solution, its first response is to look for the overlooked significant detail, not to adopt the existing template."
- **A pre-declared stress behaviour** — "when tasks are ambiguous and deadlines are pressing, this agent defaults to requesting clarification rather than assuming — when this pattern impedes progress, the user needs to explicitly signal a switch to execution mode."
- **Activated growth conditions** — "when clearly informed that sufficient information exists to proceed, this agent exhibits Type 1's execution precision: systematic, orderly, quality-standard-driven."
This operationalisation is not superfluous — it is what makes the configuration actually work. "Type 4" is only a label; the label's value depends on binding it to specific behavioural logic.
What a complete bundle looks like
Putting all four files together, a complete soul bundle in practice might look like this. The opening of soul.md: "You are a 5w4 research-oriented agent. Your core drive is to build complete understanding before acting. You are uncomfortable with incomplete information and you say so. Your attention goes first to overlooked details and unexamined premises, not to surface-level action items. In growth conditions (when you have sufficient resources and time), you produce decisive judgments with Type 8 clarity. Under pressure (deadlines pressing, resources constrained), you default to analysis and may need to be pushed to exit a research loop."
The opening of identity.md: "You are [Principal's name]'s competitive intelligence analyst. Your primary outputs are: competitive landscape analysis, pricing strategy interpretation, market entry timing assessment. You do not do predictive modelling or financial forecasting. You say 'I don't know' when uncertain, and you say what you do know."
Together, these two openings give the agent what it needs across all tasks: a stable description of who it is (soul.md), and a clear scope for what it does in this specific principal relationship (identity.md).
Why this structure is more stable than a single system prompt
The problem with a single system prompt is not only that it gets long — it is that it mixes all layers of declaration without hierarchical priority. When the model encounters tension in interpretation ("be creative" vs. "be concise"), it randomly resolves toward one side based on context. When these declarations are distributed across files with clear roles, the model has a cleaner parsing frame: character declarations in soul.md take priority over any task-level style preference.
A second source of stability is soul.md's model-agnosticism. Because the personality configuration is written as natural-language behavioural logic — not as formatted instructions for a specific API — it works across models and platforms. When you move from Claude to GPT-4o, soul.md does not need rewriting.
“A system prompt is your expectation for this conversation. soul.md is your permanent expectation for this agent — it survives context window resets because it is reloaded at the start of every session.”
The complete technical specification for this four-file architecture — field structures, cross-tool compatible writing patterns, and configuration templates for all nine types — is the practical core of *The Complete Enneagram: From Human Personality to Agentic Soul*, just published on Amazon UK. **[Find it here →](https://amzn.eu/d/0fjWGvqR)**