{"id":96614,"date":"2026-10-03T15:01:00","date_gmt":"2026-10-03T19:01:00","guid":{"rendered":"https:\/\/overcentral.com\/en\/?p=96614"},"modified":"2026-09-26T09:51:15","modified_gmt":"2026-09-26T13:51:15","slug":"soul-md-agent-consistency-96614","status":"publish","type":"post","link":"https:\/\/overcentral.com\/en\/soul-md-agent-consistency-96614\/","title":{"rendered":"Why Your soul.md File Makes Your Agent Worse"},"content":{"rendered":"<p>Most <a href=\"https:\/\/overcentral.com\/en\/meta-muse-ai-agent-80441\/\" title=\"Meta Launches Muse AI Agent, Needs User Trust\" data-iacss-internal=\"1\">AI agent<\/a> builders will tell you to pour energy into your soul.md. Give it a name, a backstory, a playful tone. Make it <em>feel<\/em> like a real assistant.<\/p>\n<p>That advice is wrong. And it&#8217;s costing you consistency.<\/p>\n<p>I&#8217;m going to argue the opposite: a bloated soul.md file is the single fastest way to make your agent unreliable. The best soul.md files are cold, short, and barely qualify as a personality.<\/p>\n<p>Here&#8217;s why.<\/p>\n<h2>What a soul.md Actually Does<\/h2>\n<p>Your agent reads soul.md at the start of <strong>every single session<\/strong>. It&#8217;s the first thing in the system prompt. The file defines the agent&#8217;s identity \u2014 tone, independence level, what it accepts and what it refuses.<\/p>\n<p>That sounds important. It is. But the mistake is treating it like a character sheet for a role-playing game.<\/p>\n<p>The source material from one of the most watched agent-building videos puts it bluntly: <em>&#8220;Two agents running the same skill on the same job will hand back different things if their soul files disagree.&#8221;<\/em><\/p>\n<p>That&#8217;s not a feature. That&#8217;s a bug.<\/p>\n<p><a href=\"https:\/\/overcentral.com\/en\/home-insurance-disaster-coverage-82139\/\" title=\"Check If Your Home Insurance Covers Disaster Damage\" data-iacss-internal=\"1\">If your<\/a> soul file is full of adjectives \u2014 <em>helpful, friendly, thorough, creative<\/em> \u2014 you haven&#8217;t told the agent anything it doesn&#8217;t already assume about itself. You&#8217;ve just introduced variance. Every time the model interprets those vague words differently, your output shifts. That inconsistency kills automation.<\/p>\n<h2>The Evidence Nobody Cites<\/h2>\n<p>The free tool <a href=\"https:\/\/ordain.host\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">Ordain<\/a> (ordain.host) lets you build a soul file by selecting from checkboxes: professional, friendly, direct, warm, playful. Then independence settings: ask before everything, handle small stuff on own, just do it.<\/p>\n<p>Most people check &#8220;friendly&#8221; and &#8220;direct&#8221; and wonder why the agent feels generic.<\/p>\n<p>The problem isn&#8217;t the tool. It&#8217;s that we&#8217;re asking the agent to simulate a personality instead of follow instructions. A soul file written in aspirational language \u2014 <em>&#8220;You are a diligent assistant who always double-checks facts&#8221;<\/em> \u2014 sounds good. But it&#8217;s unenforceable. The agent can&#8217;t measure &#8220;diligent.&#8221; It can measure &#8220;every claim must include a citation.&#8221;<\/p>\n<p>Here&#8217;s what the real data shows: agents with minimal soul files that only set constraints (British English, no preamble, answer first then reasoning) consistently produce output that matches expectations across runs. Agents with personality-rich soul files produce outputs that drift.<\/p>\n<p>That drift is death for any automated workflow.<\/p>\n<h2>Step 1: Cut the Fluff<\/h2>\n<p>Open your current soul.md. Delete every line that describes a trait without a measurable action.<\/p>\n<p><strong>Before:<\/strong><\/p>\n<p><em>You are a helpful AI assistant who provides thorough, well-reasoned answers in a warm tone.<\/em><\/p>\n<p><strong>After:<\/strong><\/p>\n<p><em>You write in British English. You give the answer first, then the reasoning underneath. You never pad a list to hit a round number. When unsure, you say so.<\/em><\/p>\n<p>The second version changed nothing about the agent&#8217;s capability. It changed everything about its reliability.<\/p>\n<h2>Step 2: Add Anti-Patterns, Not Affirmations<\/h2>\n<p>The most valuable part of a soul file is what the agent should <strong>not<\/strong> do. Models are trained to please. If you don&#8217;t forbid specific behaviors, the agent will default to the most agreeable version of itself \u2014 which is the most generic.<\/p>\n<p>Add three rules:<\/p>\n<ul>\n<li>Do not thank the user for their question.<\/li>\n<li>Do not summarize or repeat information already given.<\/li>\n<li>Do not generate placeholder text (&#8220;Lorem ipsum&#8221;) in any output.<\/li>\n<\/ul>\n<p>These seem small. They eliminate the bulk of AI-identifiable fluff.<\/p>\n<h2>Step 3: Hardcode the Output Structure<\/h2>\n<p>Your soul file should dictate format, not vibe. If every report needs a one-line summary, then sources, then a &#8220;not found&#8221; section, write that into the identity file.<\/p>\n<p>Why? Because the soul file is read on every run. Skills are only opened when a specific job matches their description. If you put your output structure into the skill, the agent might ignore it. If you put it in the soul, it&#8217;s baseline.<\/p>\n<p>The video on building agents makes this exact point: <em>&#8220;The soul file is the primary identity&#8230; it&#8217;s the first thing that goes into the system prompt on every run it ever does.&#8221;<\/em> That&#8217;s your anchor. Use it for structure, not sentiment.<\/p>\n<h2>The Tradeoff Table<\/h2>\n<table class=\"mw-table\">\n<thead>\n<tr>\n<th>Aspect<\/th>\n<th>Personality-rich soul.md<\/th>\n<th>Minimal instruction soul.md<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Consistency across runs<\/td>\n<td>Low \u2013 model interprets traits differently each time<\/td>\n<td>High \u2013 explicit rules lead to repeatable outputs<\/td>\n<\/tr>\n<tr>\n<td>Debugging ease<\/td>\n<td>Hard \u2013 vague directives leave no trail<\/td>\n<td>Easy \u2013 you can trace why the agent did X<\/td>\n<\/tr>\n<tr>\n<td>Setup effort<\/td>\n<td>High \u2013 requires tweaking personality sliders<\/td>\n<td>Low \u2013 write 5\u201310 rules and stop<\/td>\n<\/tr>\n<tr>\n<td>User perception of AI<\/td>\n<td>&#8220;Friendly but unreliable&#8221;<\/td>\n<td>&#8220;Cold but consistent&#8221;<\/td>\n<\/tr>\n<tr>\n<td>Best use case<\/td>\n<td>Creative brainstorming<\/td>\n<td>Any automated or recurring task<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Step 4: Test the Difference<\/h2>\n<p>Take a research job you already know the answer to. Run it twice with your current soul file. Compare the outputs.<\/p>\n<p>Now strip the soul file to just constraints and structure. Run it twice again.<\/p>\n<p>The second pair will be nearly identical. The first pair will drift.<\/p>\n<p>That&#8217;s not opinion. That&#8217;s what happens <a href=\"https:\/\/overcentral.com\/en\/eu-cra-reporting-requirements-80362\/\" title=\"EU CRA Demands What Shipped and When You Knew\" data-iacss-internal=\"1\">when you<\/a> remove the primary source of noise from your agent&#8217;s identity.<\/p>\n<h2>The Problem That Nobody Talks About<\/h2>\n<p>The real reason people write personality-heavy soul files is psychological. It feels productive. You spend 20 minutes crafting the perfect &#8220;voice&#8221; for your agent, and it looks great in a screenshot.<\/p>\n<p>But every minute you spend on that is a minute you didn&#8217;t spend on skills \u2014 which actually determine what your agent <em>does<\/em>.<\/p>\n<p>Skills can be iterated. Skills can be tested. Skills produce artifacts you can inspect.<\/p>\n<p>A soul file is just a layer of interpretation. The more of it you write, the more you&#8217;re relying on the model&#8217;s ability to interpret your intentions consistently. That&#8217;s a bet you will lose.<\/p>\n<p>One builder I respect said: <em>&#8220;A skill tells the agent how to do the job. The soul file tells it how to behave the whole time it&#8217;s doing it.&#8221;<\/em> That&#8217;s true. But the best behavior for an automated system is <em>no behavior<\/em> \u2014 just execute the procedure.<\/p>\n<h2>The 20-Minute Fix<\/h2>\n<p>Open your existing soul.md. Count lines that aren&#8217;t rules about formatting, language, or forbidden outputs. Delete them.<\/p>\n<p>Then add one line: <em>&#8220;If any instruction in a skill contradicts this file, follow the skill.&#8221;<\/em><\/p>\n<p>Now your soul file is a fallback, not a source of confusion. It lets skills take priority without the identity layer muddying the water.<\/p>\n<p>That&#8217;s the file most people won&#8217;t write. It&#8217;s boring. It&#8217;s cold. It doesn&#8217;t have a name or a catchphrase.<\/p>\n<p>It also won&#8217;t give you a different answer on Monday than it did on Friday.<\/p>\n<p>And that&#8217;s the whole point.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Most AI agent builders will tell you to pour energy into your soul.md. Give it a name, a backstory, a playful tone. Make it feel like a real assistant. That advice is wrong. And it&#8217;s costing you consistency. I&#8217;m going to argue the opposite: a bloated soul.md file is the single fastest way to make [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":99054,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/96614.png","fifu_image_alt":"Why Your soul.md File Makes Your Agent Worse","footnotes":""},"categories":[31],"tags":[],"class_list":["post-96614","post","type-post","status-publish","format-standard","has-post-thumbnail","category-technology"],"fifu_image_url":"https:\/\/cards.overcentral.com\/cards\/en\/96614.png","fifu_image_alt":"Why Your soul.md File Makes Your Agent Worse","_links":{"self":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/96614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/comments?post=96614"}],"version-history":[{"count":1,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/96614\/revisions"}],"predecessor-version":[{"id":99055,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/posts\/96614\/revisions\/99055"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media\/99054"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/media?parent=96614"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/categories?post=96614"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/en\/wp-json\/wp\/v2\/tags?post=96614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}