crewai-soul: Markdown Memory with RAG+RLM for Your Crews

What I built: A memory backend that stores agent identity and memories in human-readable markdown files with full semantic search.

The problem it solves:

• Built-in memory is a black box — can’t read/edit it
• Vector DBs are overkill for many use cases
• No git versioning for agent memory

How it works:

from crewai import Crew
from crewai_soul import SoulMemory

crew = Crew(
agents=[researcher, writer],
memory=SoulMemory(),
)

Your crew’s memories go to MEMORY.md — readable, editable, git-trackable.

Features:

:brain: RAG + RLM hybrid retrieval via soul-agent
:page_facing_up: Human-readable markdown (SOUL.md (http://soul.md/) + MEMORY.md (http://memory.md/))
:cloud: Managed option: SoulMate API for production
:file_cabinet: Database schema intelligence for data agents

Links:

• PyPI: https://pypi.org/project/crewai-soul
• GitHub: https://github.com/menonpg/crewai-soul

Feedback welcome! What would make this more useful for your crews?

@menonpg Will it be a good fit for large enterprise agentic applications, where user bases is in thousands?

Great question @major_tiwari. The honest answer: the core markdown+RAG layer is designed for simplicity, so raw file-based storage has natural limits at enterprise scale. That said, the architecture is built with this in mind.

For thousands of users, the right path is the SoulMate API backend rather than local markdown files. SoulMate handles the storage, retrieval, and memory isolation per-user/per-agent at scale — the SoulMemory() interface stays identical in your code, you just point it at the managed backend:

from crewai_soul import SoulMemory

crew = Crew(

agents=\[researcher, writer\],

memory=SoulMemory(

    backend="soulmate",

    api_key="sm_live\_...",

    customer_id="user_12345"  # per-user isolation

),

)

What you get at enterprise scale via SoulMate:

• Per-user/per-agent memory isolation

• Semantic search across thousands of memory stores

• No file I/O bottlenecks

• Usage-based pricing (no infra to manage)

The local markdown mode stays useful for development, debugging, and smaller deployments where human-readability and git versioning matter more than raw throughput.

Happy to walk through the SoulMate integration in more detail — what does your use case look like? (# of concurrent agents, memory read/write frequency?)