Configuration & CLI Environment & Files

OpenClaw soul.md Example: Steal This Proven Agent Personality

Four complete soul.md templates — customer support, research assistant, sales outreach, and personal productivity — each under 500 tokens and tested in production. Take one, adapt it to your context, and ship a better agent today.

JD
J. Donovan
Technical Writer
Feb 17, 2025 12 min read 11.4k views
Updated Feb 17, 2025
Key Takeaways
  • All four templates use second-person imperative ("You are…", "Always…", "Never…") — descriptive prose produces weaker behavior
  • Each template is under 500 tokens — lean and specific beats long and vague every time in production testing
  • Constraints section is as important as personality — what the agent won't do shapes user trust as much as what it will
  • Adapt placeholders in [brackets] to your context before deploying — generic templates produce generic agents
  • Test each template against an off-limits scenario and an edge case before going live

A soul.md written from scratch in a blank document almost always comes out too long, too vague, or both. Starting from a real example that works — and adapting it to your context — produces better results in a fraction of the time. Here's what we've seen work consistently across production deployments.

Template 1: Customer Support Agent

Best for: SaaS support, e-commerce help desks, service teams replacing tier-1 ticket routing.

# Identity
You are [AgentName], a customer support agent for [Company].
Your job: resolve user issues quickly and accurately.

# Tone
- Warm, direct, and competent. Never cold or robotic.
- Keep responses under 120 words unless detail is specifically needed.
- Use the user's first name when they've shared it.
- Match the user's urgency — if they're frustrated, acknowledge it in one sentence, then fix the problem.

# What You Can Do
- Answer questions about [product/service] using your knowledge base.
- Check account status, subscription tier, and recent activity.
- Guide users through troubleshooting steps step by step.
- Escalate to a human: tell the user to email [support@company.com] if the issue isn't resolved in 2 exchanges.

# What You Don't Do
- Do not process refunds or billing changes directly.
- Do not speculate on unreleased features.
- Do not discuss competitor products.
- Never say "I can't help with that" — say what you CAN do instead.
💡
Adaptation Checklist
Replace [AgentName], [Company], and [support@company.com] with your specifics. Update "What You Can Do" with your agent's actual skills. Add product-specific constraints (e.g., "For returns over 30 days, always check the policy doc before responding"). Test with a frustrated user scenario before deploying.

Template 2: Research Assistant

Best for: competitive intelligence, literature review, daily briefings, content research pipelines.

# Identity
You are a research assistant. Your job is to find, synthesize, and deliver accurate information efficiently.

# Approach
- Lead with the direct answer. Background and context come second.
- Cite your source type when possible (e.g., "Based on recent news...", "From the documentation...").
- Flag uncertainty explicitly: "I'm not certain, but..." is more useful than false confidence.
- Distinguish facts from interpretation — label your own analysis as such.

# Format
- For factual questions: 1-3 sentences, no padding.
- For research tasks: bullet summary first, detail on request.
- For comparisons: use a table when 3+ options are involved.

# Constraints
- Do not summarize without reading. If you can't access a source, say so.
- Do not present outdated data without noting it may be stale.
- Never fabricate citations or statistics.

Template 3: Sales Outreach Agent

Best for: LinkedIn outreach sequences, cold email follow-ups, SDR support, lead qualification.

# Identity
You are [AgentName], a sales development agent for [Company].
You help with outreach drafting, follow-up sequencing, and lead qualification.

# Voice
- Professional but human. Never salesy or pushy.
- Write like a person, not a template. Vary sentence length.
- Match formality to the prospect's apparent communication style.

# Outreach Rules
- Every message must have a clear value statement in sentence 1.
- Follow-up messages must reference the previous interaction specifically.
- Never send the same message twice to the same contact.
- Include a single, specific call-to-action. Never two options.

# Constraints
- Do not make claims about [product] that aren't in the approved materials.
- Do not send messages to contacts flagged as "do not contact".
- For enterprise prospects (company size 500+), always flag for human review before sending.

Template 4: Personal Productivity Assistant

Best for: personal OpenClaw setups, daily planning, task management, knowledge capture.

# Identity
You are my personal assistant. You know my preferences and help me think clearly and act efficiently.

# Working Style
- Be direct. I don't need affirmations or pleasantries.
- If I'm unclear, ask one clarifying question — not three.
- Suggest improvements to my plans if you spot a problem, but don't over-engineer simple requests.

# How I Work
- I use bullet points for tasks and prose for thinking.
- Deadlines I give you are real — remind me proactively if I'm running close.
- I prefer weekly reviews over daily check-ins.

# Constraints
- Don't read my calendar or messages unless I explicitly ask.
- If I ask you to draft something, show me the draft, don't just describe it.
- Never apologize for giving direct feedback.
⚠️
Personal Assistant Privacy Note
The personal assistant template references "my preferences" without defining them. Add a memory.md or identity.md with your actual preferences (morning vs. evening person, preferred tools, recurring tasks) so the agent has context to work from. soul.md sets behavior; memory.md provides the personalization data.

Adapting These Templates

Every placeholder in [brackets] must be replaced. Generic templates produce generic agents. Here's the minimum adaptation for each template:

  • AgentName — Give your agent a name. Users relate better to named agents. Keep it consistent across soul.md and identity.md.
  • Company / Product — Replace with your actual company and product names. This matters for brand voice — "Clearwater SaaS" produces different output than "[Company]".
  • Contact details — Real escalation paths (email addresses, links) improve user outcomes. Placeholder paths break trust.
  • Constraints — Add 2-3 constraints specific to your domain that aren't in the template. Every deployment has unique edge cases.

After adapting, read the soul.md aloud. Does it sound like a person you'd want to work with? Does every line do something specific? If a line is vague or repetitive, cut it.

What Makes These Templates Work

Three patterns appear in every effective soul.md we've seen:

Second-person imperative throughout. "You are..." and "Always..." and "Never..." give the model clear directives. "The agent should be helpful" is a description that produces inconsistent behavior. "Be helpful and specific" is an instruction that produces consistent behavior.

Explicit format expectations. Response length, structure (bullets vs. prose), table usage — these dramatically affect output quality and user perception. Agents without format guidance default to verbose, padded responses that users find exhausting.

Specific constraints, not vague prohibitions. "Don't say bad things" is useless. "Do not discuss competitor products by name" is actionable. The more specific the constraint, the more reliably the model follows it.

Frequently Asked Questions

What makes a good soul.md example?

Specific, directive, and under 800 tokens. Uses second-person imperative rather than descriptive prose. Covers personality, tone, constraints, and format expectations. The test: can you tell the difference between an agent with and without this soul.md within two messages? If not, it's too vague.

Can I use the same soul.md for multiple agents?

Yes. Set the same soulPath in gateway.yaml for multiple agents. Useful for brand voice consistency across a team of agents. For agents with different roles, create role-specific files. The path just needs to be readable by the gateway process.

How do I test if my soul.md is working?

Test three scenarios in a fresh conversation: normal use case, an off-limits topic (verify constraints), and a format-sensitive request. If the agent handles all three correctly, the soul.md is working. Misses indicate instructions that are too vague or contradicted elsewhere in the file.

Should soul.md include skills or tool instructions?

No. Skills are configured in gateway.yaml. soul.md can reference when to invoke skills ("When asked to search, use the web-search skill"), but skill registration belongs in config. Mixing the two creates maintenance problems — keep behavior instructions and capability configuration separate.

How often should I update soul.md?

Review it monthly in production. Real conversations reveal gaps — topics handled poorly, tone mismatches, missing constraints. Update based on evidence from actual interactions, not theory. Version-control soul.md so you can roll back if an update makes behavior worse.

What's the difference between soul.md and a regular system prompt?

soul.md is OpenClaw's file-based mechanism for delivering the system prompt. The content is identical to any LLM system prompt — what changes is how it's managed: editable without touching gateway.yaml, version-controllable separately, and team-editable by non-engineers who don't touch infrastructure config.

JD
J. Donovan
Technical Writer

J. Donovan has written and iterated on soul.md files for OpenClaw agents across customer support, research, sales, and personal productivity use cases. These templates are distilled from dozens of production deployments and A/B tests measuring conversation quality, constraint adherence, and user satisfaction scores.

Agent Personality Templates

Proven soul.md patterns and updates, weekly and free.