SOUL.md rules drift in long AI agent sessions and how to fix it

If your SOUL.md rules work perfectly for the first 10-15 messages but get ignored later in a session, the system isn't broken—your session has outgrown it. This happens because SOUL.md loads once at session start as part of the system prompt, but as conversation context grows (thousands of tokens by message 20), the model pays more attention to recent message patterns than to the initial prompt.
Why SOUL.md rules drift in long sessions
At message 1, SOUL.md is the loudest voice in the room. The model reads and follows it closely. Rules like "never say absolutely," "match my tone," and "be direct, no filler" work perfectly. By message 20-30, the agent starts drifting—"absolutely" creeps back in, responses get longer, filler returns. The SOUL.md is technically still there but gets drowned out by everything that came after.
Think of it like a job description given on day one. By week 3, the employee isn't re-reading it every morning—they're doing what feels right based on recent patterns. If the last 10 conversations were long and detailed, the agent defaults to long and detailed even if SOUL.md said "be brief."
The primary fix: use /new aggressively
This solves 80% of the problem and costs nothing. Most people treat /new as a last resort when things break. Instead, use it constantly before every distinct task:
- Research? /new
- Back to casual chat? /new
- Need to draft an email? /new
Any time your agent's tone starts drifting, /new and the rules snap back. Your agent doesn't lose anything—SOUL.md, USER.md, MEMORY.md all remain. You're just clearing the conversation that was drowning them out.
Break long tasks into short sessions:
- Session 1: "research X and save your findings to a file" /new
- Session 2: "read the file you saved and draft a summary" /new
- Session 3: "review this summary and send it to me on telegram"
Each session starts fresh with SOUL.md fully loaded. The agent never drifts because sessions never get long enough for drift to happen.
SOUL.md formatting tricks that help with drift
Move your hardest rules to the end of the file, not the beginning. LLMs pay more attention to the end of a prompt than the middle. If your SOUL.md is 15 lines long, the model follows lines 12-15 more reliably than lines 1-4, especially as sessions get longer.
Structure example:
# who I am
you are [agent name]. you assist [your name]. professional but casual. match my energy.
how to communicate
short responses unless I ask for detail. answer the question first, then elaborate only if needed.
hard rules (never break these)
never say "absolutely", "great question", "certainly", or "I'd be happy to."
never say a task is done without showing evidence.
never send anything external without my approval.
if you don't know something, say you don't know.
Add a reinforcement line at the very end:
before every response, silently re-read and apply all rules above. this is not optional.
To test this yourself: start a fresh session, send a message, notice how well your rules hold. Have a 30-message conversation, get the agent into long detailed answers, then ask something simple—it'll give another long answer because recent conversation patterns are running the show. Type /new, ask the same question—you'll get short, direct responses with no filler because SOUL.md is back with nothing overriding it.
📖 Read the full source: r/openclaw
👀 See Also

OpenClaw setup tips from a user's experience: Gmail MCP, profile flags, and networking issues
A user running OpenClaw on a Mac via UTM with Ubuntu VM shares specific configuration issues encountered: the Gmail MCP server requires html_body instead of body parameter, the --profile prod flag is needed to avoid a hardcoded dev identity, and API keys must be placed in auth-profiles.json via paste-token command.

Fix for sub-agents not showing up in OpenClaw v2026.3.13
A workaround for OpenClaw v2026.3.13 where custom sub-agents don't appear in the agent list: simplify the openclaw.json agent list to only include IDs and manually register agents in runs.json with status set to 'idle'.

OpenClaw v2026.3.22 Update Issues and 30-Second Fixes
The OpenClaw v2026.3.22 update introduced 12 breaking changes, including ClawHub becoming the default plugin store and deprecated environment variables. Five common disasters with quick fixes include API billing spikes, unintended agent actions, and configuration errors.

Fix for Claude VS Code Extension Error: 'command claude-vscode.editor.openLast not found'
The Claude VS Code extension version 2.1.51 contains a breaking bug that causes the error 'command claude-vscode.editor.openLast not found'. The workaround is to downgrade to version 2.1.49.