citadeldb-crewai
CrewAI memory backed by Citadel. Encrypted at rest, embedded in your process, and deletes that destroy the record's key rather than its row.
pip install citadeldb-crewai
Route your crews' memory through Citadel in one call at startup:
from citadeldb_crewai import use_citadel
use_citadel("crew_memory.cdl", key="your-passphrase")
Crews then work unchanged:
crew = Crew(agents=[...], tasks=[...], memory=True)
A crew that names its own backend keeps it, so this will not displace a deliberate
storage="qdrant-edge". Crews may also name Citadel outright once use_citadel has run:
Memory(storage="citadel").
To route one crew instead of the whole process, hand the backend over directly and skip the startup call:
from crewai.memory.unified_memory import Memory
from citadeldb_crewai import CitadelBackend
backend = CitadelBackend("crew_memory.cdl", key="your-passphrase")
crew = Crew(agents=[...], tasks=[...], memory=Memory(storage=backend))
Or drive the backend directly
from citadeldb_crewai import CitadelBackend
from crewai.memory.storage.backend import MemoryRecord
backend = CitadelBackend("crew_memory.cdl", key="your-passphrase")
backend.save([
MemoryRecord(
content="the deploy failed because the disk was full",
scope="/team/ops",
categories=["incident"],
metadata={"env": "prod"},
importance=0.9,
)
])
hits = backend.search(query_embedding, scope_prefix="/team", limit=5)
for record, score in hits:
print(f"{score:.3f} {record.content}")
Deletes destroy the key
Every record is sealed under its own key. Deleting destroys that key, so the bytes on disk stay unreadable instead of being marked deleted and living on in backups.
backend.delete(record_ids=["abc123"]) # one record
backend.delete(scope_prefix="/team/ops", categories=["incident"])
backend.delete(scope_prefix="/team", older_than=cutoff) # retention sweep
backend.reset("/users/alice") # a whole subtree
reset on a per-user scope is what a data-deletion request usually needs: the subtree becomes
unreadable rather than merely unlisted.
Importance is a real ranking signal
MemoryRecord.importance maps onto Citadel's native atom score, so it survives as something
recall ranks by rather than as metadata the store carries and ignores.
Notes
CrewAI embeds queries itself and hands the backend a vector, so search runs vector recall
plus the scope, category, and metadata predicates the protocol defines.
Citadel is embedded and takes an exclusive lock on the file, so build one backend per
database and share it. use_citadel does that for you.
Your crew's own embeddings are stored as-is, so recall runs in the same vector space the crew
queries with, and no text is re-embedded. Set dim to your embedding model's width if it is
not OpenAI's 1536-wide text-embedding-3-small:
use_citadel("crew_memory.cdl", key="pw", dim=768)
A record saved without an embedding still stores and still comes back through get_record,
list_records, and every delete filter; it just does not rank in vector search.
License
Apache-2.0
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 citadeldb_crewai-1.15.0.tar.gz.
File metadata
- Download URL: citadeldb_crewai-1.15.0.tar.gz
- Upload date:
- Size: 9.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dff78cfc67bc7eae7a6498c6cca588381ac3a29e3b3f6e894d102f58cb31190b
|
|
| MD5 |
207231f0526fe63ffb094f783a5f9641
|
|
| BLAKE2b-256 |
62df4579d716318564e409ae933455cf7401d1c7fb4690f63d6f8aa90305d49d
|
Provenance
The following attestation bundles were made for citadeldb_crewai-1.15.0.tar.gz:
Publisher:
release-crewai.yml on yp3y5akh0v/citadel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
citadeldb_crewai-1.15.0.tar.gz -
Subject digest:
dff78cfc67bc7eae7a6498c6cca588381ac3a29e3b3f6e894d102f58cb31190b - Sigstore transparency entry: 2408258944
- Sigstore integration time:
-
Permalink:
yp3y5akh0v/citadel@cb558ba4bd02d5c45d66ac1d9913b2aebdb0862e -
Branch / Tag:
refs/tags/v1.15.0 - Owner: https://github.com/yp3y5akh0v
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-crewai.yml@cb558ba4bd02d5c45d66ac1d9913b2aebdb0862e -
Trigger Event:
push
-
Statement type:
File details
Details for the file citadeldb_crewai-1.15.0-py3-none-any.whl.
File metadata
- Download URL: citadeldb_crewai-1.15.0-py3-none-any.whl
- Upload date:
- Size: 7.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c2c764c33ecf158bb125371cb6d6fd399ff782f7b99021136773772a6cbc651
|
|
| MD5 |
0c9a916befea20bb42c5acd18736b21f
|
|
| BLAKE2b-256 |
a5f189c9006903cab3426f2f74ce0a6fc137744058251c499fb26c951c28c4fb
|
Provenance
The following attestation bundles were made for citadeldb_crewai-1.15.0-py3-none-any.whl:
Publisher:
release-crewai.yml on yp3y5akh0v/citadel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
citadeldb_crewai-1.15.0-py3-none-any.whl -
Subject digest:
3c2c764c33ecf158bb125371cb6d6fd399ff782f7b99021136773772a6cbc651 - Sigstore transparency entry: 2408258967
- Sigstore integration time:
-
Permalink:
yp3y5akh0v/citadel@cb558ba4bd02d5c45d66ac1d9913b2aebdb0862e -
Branch / Tag:
refs/tags/v1.15.0 - Owner: https://github.com/yp3y5akh0v
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release-crewai.yml@cb558ba4bd02d5c45d66ac1d9913b2aebdb0862e -
Trigger Event:
push
-
Statement type: