Markdown-native memory for CrewAI agents. Human-readable, git-versionable, no database required.
Project description
crewai-soul 🧠
Markdown-native memory for CrewAI agents.
Your crew's memory shouldn't require a database. crewai-soul stores everything in two simple markdown files:
SOUL.md— Agent identity (who it is, how it behaves)MEMORY.md— Timestamped log of all interactions
Human-readable. Git-versionable. No infrastructure required.
Install
pip install crewai-soul
Quick Start
from crewai import Crew, Agent, Task
from crewai_soul import SoulMemory
# Create markdown-based memory
memory = SoulMemory()
# Use it with your crew
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, writing_task],
memory=memory,
)
result = crew.kickoff()
After running, check MEMORY.md:
# Memory Log
## 2026-03-06 22:30:15 UTC
The researcher found that PostgreSQL handles 10k concurrent connections.
## 2026-03-06 22:31:02 UTC
The writer produced a technical comparison document.
Why Markdown?
| Feature | CrewAI Built-in | crewai-soul |
|---|---|---|
| Storage | Vector database | Markdown files |
| Human-readable | ❌ | ✅ |
| Git-versionable | ❌ | ✅ |
| Needs LLM to store | Yes (scope inference) | No |
| Infrastructure | Database server | None |
| Audit trail | Complex | Just read the file |
API
SoulMemory
from crewai_soul import SoulMemory
memory = SoulMemory(
soul_path="SOUL.md", # Agent identity
memory_path="MEMORY.md", # Memory log
)
# Store a memory
memory.remember("We decided to use PostgreSQL.")
# Recall relevant memories
matches = memory.recall("What database did we choose?")
for m in matches:
print(f"[{m.score:.2f}] {m.content}")
# Clear memories
memory.forget()
# Get stats
print(memory.info())
With Scopes
# Store with a scope tag
memory.remember("Sprint velocity is 42 points", scope="/team/metrics")
# Recall from specific scope
matches = memory.recall("velocity", scope="/team")
Per-Agent Memory
from crewai import Agent
from crewai_soul import SoulMemory
# Each agent gets its own memory file
researcher = Agent(
role="Researcher",
goal="Find information",
memory=SoulMemory(memory_path="researcher_memory.md"),
)
writer = Agent(
role="Writer",
goal="Write reports",
memory=SoulMemory(memory_path="writer_memory.md"),
)
Standalone Usage
Works without CrewAI too:
from crewai_soul import SoulMemory
memory = SoulMemory()
# Build up knowledge
memory.remember("The API rate limit is 1000 requests per minute.")
memory.remember("Our staging environment uses port 8080.")
# Later, recall what you need
matches = memory.recall("What are our API limits?")
Upgrading to Semantic Search
For better recall on large memory files, install with RAG support:
pip install crewai-soul[rag]
This uses soul-agent's hybrid RAG+RLM retrieval under the hood.
Links
- soul.py — The core library
- CrewAI — Multi-agent framework
- SoulMate API — Hosted memory service
License
MIT
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file crewai_soul-0.1.1.tar.gz.
File metadata
- Download URL: crewai_soul-0.1.1.tar.gz
- Upload date:
- Size: 5.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b0b54cef470ba46d1038aae736106dfd312f8566a6ac82e55c7e7b667083342
|
|
| MD5 |
e50c2959acd3625df58f07d89f3b8f94
|
|
| BLAKE2b-256 |
e4f77530e50e6ce7a0d9e0cac7a3ae9745be988e91cf484b62557cb18b4d5984
|
File details
Details for the file crewai_soul-0.1.1-py3-none-any.whl.
File metadata
- Download URL: crewai_soul-0.1.1-py3-none-any.whl
- Upload date:
- Size: 6.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c7ed14368acc626647104b93d02ea2dab13a9daa3ede005ba8146e2e5697fe8
|
|
| MD5 |
3b0176ca426eedb4781cf763e4a0227d
|
|
| BLAKE2b-256 |
2ec561184cb0c8098083f8f191329812eedc1e0ca16cd077907fe9a9e60cfa5c
|