What's missing
The memory.mdx documentation describes the StorageBackend protocol introduced in recent versions, but only mentions LanceDB as an example backend. The set_memory_storage_factory() hook makes it straightforward to plug in any conforming implementation — this should be documented with at least one real example.
Proposed addition
Dakera is a self-hosted memory server with a published CrewAI adapter (crewai-dakera, PyPI 0.2.0) that implements the full StorageBackend protocol.
The integration works with the existing StorageBackend protocol defined in lib/crewai/src/crewai/memory/storage/backend.py:
# crewai/memory/storage/backend.py (excerpt — all 11 methods implemented)
@runtime_checkable
class StorageBackend(Protocol):
def save(self, records: list[MemoryRecord]) -> None: ...
def search(
self,
query_embedding: list[float], # CrewAI computes the embedding; backend gets the vector
scope_prefix=None,
categories=None,
metadata_filter=None,
limit=10,
min_score=0.0,
) -> list[tuple[MemoryRecord, float]]: ...
def delete(self, ...) -> int: ...
# + 8 more methods (update, get_record, list_records, get_scope_info, etc.)
Example section to add to docs/v1.15.1/en/concepts/memory.mdx under Storage Backends:
### Dakera (Self-Hosted Persistent Memory)
Install:
```bash
pip install crewai-dakera
from crewai import Crew
from crewai_dakera import DakeraStorageBackend
crew = Crew(
agents=[...],
tasks=[...],
memory=True,
memory_config={
"storage": DakeraStorageBackend(
base_url="http://your-dakera-host:3000",
api_key="dk_your_key",
)
},
)
Why self-hosted: Unlike LanceDB (local-only SQLite), Dakera is a network service — multiple crews, machines, or agents can share the same persistent memory. Supports decay-weighted recall (recent + frequently-accessed memories score higher). Self-host via Docker.
Source · PyPI
## Notes
- `crewai-dakera` 0.2.0 is already published and passing tests against CrewAI 0.100+
- The `StorageBackend` `search()` method receives `query_embedding: list[float]` — CrewAI handles embedding before passing to the backend, so Dakera does pure vector similarity. This is correctly implemented in the adapter.
- I can submit a docs PR if the maintainers are open to it. PRs will have the `llm-generated` label per CONTRIBUTING.
What's missing
The
memory.mdxdocumentation describes theStorageBackendprotocol introduced in recent versions, but only mentions LanceDB as an example backend. Theset_memory_storage_factory()hook makes it straightforward to plug in any conforming implementation — this should be documented with at least one real example.Proposed addition
Dakera is a self-hosted memory server with a published CrewAI adapter (
crewai-dakera, PyPI 0.2.0) that implements the fullStorageBackendprotocol.The integration works with the existing
StorageBackendprotocol defined inlib/crewai/src/crewai/memory/storage/backend.py:Example section to add to
docs/v1.15.1/en/concepts/memory.mdxunder Storage Backends:Why self-hosted: Unlike LanceDB (local-only SQLite), Dakera is a network service — multiple crews, machines, or agents can share the same persistent memory. Supports decay-weighted recall (recent + frequently-accessed memories score higher). Self-host via Docker.
Source · PyPI