RememberKit · v0
Governed, portable memory for AI agents.
The fifth question an agent raises, after who it is (IdentityKit), what it may do (MandateKit), what it spends (BudgetGuard), and what it did (WitnessKit): what does it know and remember? RememberKit records memory as signed, scoped, content-addressed records. Each one stands alone, so a memory can move from one agent to another and still be verified. It is a governance layer for memory, not a vector database.
Quick start
from rememberkit import Memory, generate_keypair, verify_pack
key, public_key = generate_keypair() # the signing key stays on-device
mem = Memory(key, agent="agent-7", subject="user-123")
mem.remember({"seat": "aisle"}, kind="preference", scope="travel", consent="shareable")
mem.remember({"home_card": "**** 1234"}, kind="fact", scope="payments", consent="private")
mem.recall(scope="travel") # the live view, by topic
pack = mem.share() # only consent >= "shareable" leaves
verify_pack(pack, trusted_keys=[public_key])["valid"] # True
What each piece does
remember(content, *, kind, scope, consent, supersedes)writes a signed record.recall(*, scope, kind, subject, min_consent)returns the live view: latest, not superseded, not revoked. A correction is just a new record thatsupersedesan old id.forget(id)writes a signed tombstone that withdraws a memory. Revocation is itself a verifiable record.share(*, scope, min_consent)exports a portable pack of only the records cleared to leave (consentshareableorpublicby default;privatestays).verify_record/verify_packcheck integrity and a trusted issuer.
Why "portable"
Every record is individually signed and content-addressed (its id is a SHA-256 over
its canonical content, RFC 8785). So a single memory carried to another agent verifies
on its own with verify_record, without trusting the transport or having the rest of
the store. Memory moves with its provenance attached.
Security model
A valid signature proves integrity, not authority. You must pin the issuer: pass
trusted_keys. Without it (and without an explicit allow_unverified_issuer=True),
verification fails closed. Verification never throws on hostile input.
Honest limitations (v0):
- Tamper-evident, not tamper-proof. A holder of the signing key can rewrite or forge records under the same agent. External anchoring (a witness log) is the roadmap.
- Consent is an advisory marker, not access control. It tells a well-behaved reader how a memory may be used; it does not stop a hostile holder from reading content it already has.
- Payloads must be JSON-safe (numbers within 2⁵³), the limit of canonical JSON.
Full notes in ../SECURITY.md.
Install
pip install rememberkit
(Or run from source: cd python && PYTHONPATH=. python3 ../demo.py.)
License
MIT.
Release files for rememberkit 0.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rememberkit-0.0.2.tar.gz | 16.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rememberkit-0.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 30.4 kB
Release files / rememberkit-0.0.2.tar.gz
| Download URL | rememberkit-0.0.2.tar.gz |
|---|---|
| Size | 16.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2dcbc550f9042a6aaf84e31ac27b858fbc4aa419e79b6903254de8d1d53ca0a7
|
|
BLAKE2b-256 checksum How to use checksums |
40a68c3aa5b027a88aeaa342832821847ccab178af58a97292a3ccc6ff4dcf92
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / rememberkit-0.0.2-py3-none-any.whl
| Download URL | rememberkit-0.0.2-py3-none-any.whl |
|---|---|
| Size | 14.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ee49f15eaa2979c5b83c6c50e596d9554fb36eb5444b51267dc104ad8a909021
|
|
BLAKE2b-256 checksum How to use checksums |
b82436452c85e078d1fc8346655994188e05b4b7b468c54f78913627d270f713
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|