Procheiron
Who wrote this memory, who checked it — and has anyone touched it since?
Procheiron is a small, dependency-free trust layer for AI agent memory. Memory tools are good at storing and recalling; trust is the part nobody owns. Give several agents a shared memory and any one of them can write a "fact" the others will happily build on — nobody reviewed it, nobody approved it, and when it turns out to be wrong there's no clean way to trace it or retire it.
Procheiron adds that discipline, and enforces it with a validator rather than a convention. It stores nothing and retrieves nothing: bring whatever memory you already use — a vector database, a knowledge graph, a folder of markdown files. It governs the records; your engine keeps doing the remembering.
Caught in the act
A deployment validates clean. Then someone with write access quietly rewrites history — a past promotion suddenly claims a different actor:
$ procheiron validate ./team-memory
Procheiron validation (full tier): PASS
$ # edit team-memory/memory/index/audit.jsonl: "actor": "vera_curator" → "rogue_agent"
$ procheiron validate ./team-memory
Procheiron validation (full tier): FAIL
ERROR: audit chain: audit event 0: entry_hash mismatch — content was altered
after it was written
ERROR: memories.jsonl:1: active record has no corroborating promotion audit
event — forged/hand-flipped record
Real output (ids shortened). Reproduce it yourself: conformance/generic-vault/ is a
complete fictional deployment — copy it, break it, validate it.
How it works
- Every memory moves through a lifecycle:
draft → candidate → validated → active → superseded. - A memory only becomes
active— trusted — after review by someone who did not write it. Self-review is refused, not discouraged. - Every step lands in an append-only audit log whose entries are hash-chained (BLAKE2b, pure standard library). Editing, reordering, or deleting a past event breaks the chain.
- Want authorship you can verify cryptographically? Install the crypto extra and sign entries with ed25519. A signature check that cannot run is a hard error, never a silent pass.
Install
pipx install procheiron # or: pip install procheiron
pip install "procheiron[crypto]" # optional: ed25519 signing (the chain itself needs nothing)
Or straight from a checkout, no install:
python3 conformance/run_conformance.py # prove the spec holds against the bundled fixtures
python3 init/procheiron_init.py --root ./my-commons
Commands
| Command | What it does |
|---|---|
procheiron init ./my-commons |
Scaffold a governed memory commons. |
procheiron validate <root> |
Validate a deployment. Add --expect-head <hex> to also check the chain head against an external anchor. |
procheiron scorecard <root> |
Trust-loop numbers: records, independent promotions, blocks caught. |
procheiron mcp <root> |
Serve the commons to agents over MCP (stdio JSON-RPC). |
procheiron conformance |
Run the conformance suite (needs a repo checkout). |
procheiron version |
What it says. |
What the audit log can and can't do
A candid word before you rely on it.
The hash chain makes the log tamper-evident: nobody can quietly edit history without breaking
the chain. But the chain only proves the log is internally consistent — someone with write access
to the file can rebuild the whole thing from scratch and it will verify. The fix is to anchor the
newest entry hash somewhere that person can't touch (a git commit works fine) and hand it back at
check time: procheiron validate --expect-head <hex>. Now a full rewrite is caught too.
Signing raises the bar further. With the crypto extra and a key registry (known_actor_keys),
every event from a registered actor must carry that actor's valid signature. Stripping a
signature fails validation; it does not slip through.
And the honest residual: if one OS user owns the log, the keys, and the key registry, a determined insider can still rewrite and re-sign everything. On a single shared machine you get tamper-evidence (detectable through the external anchor), not tamper-prevention. To stop that insider outright you need the head anchored externally and the keys held out of the writer's reach — a separate user, an HSM, or keyless signing.
We keep a running ledger of what's proven versus merely claimed in CLAIMS.md, with evidence cited per claim. If anything in this README ever disagrees with that file, the file is right.
What's in the repo
| Path | What it is |
|---|---|
spec/ |
The v0.1 specification: governance, memory commons, control plane, the normative conformance MUST-list, and the Core/Profile boundary. |
conformance/ |
The test of record. generic-vault/ is a complete fictional deployment ("Meridian Atelier"); minimal-vault/ is the 5-file minimal adopter; plus negative fixtures that must fail. |
examples/minimal-adopter/ |
The smallest compliant deployment — provenance and independent review without the heavyweight governance ladder. |
init/ |
The scaffolder, and PORTING_GUIDE.md for bringing Procheiron to an existing project. |
Design choices
- Zero runtime dependencies. Everything a live deployment runs is standard-library Python.
The one optional extra is
procheiron[crypto]for ed25519 signing; the hash chain itself needs nothing. (jsonschemaandopaappear only as dev/CI cross-checks.) - Tamper-evident by default, signed by choice. See
chain.pyandsigning.py. - Portable core, specific profile. The spec stays generic; deployment-specific bindings
(identities, paths, authority ladders) live in a profile. See
spec/boundary.md. - No recall, ever. Embeddings and retrieval are the memory engine's job. Procheiron will not grow a competing one.
Roadmap
- A second, independent real deployment passing conformance — the point where "works for its authors" becomes "works".
- A reference adapter showing Procheiron governing a popular third-party memory engine end to end.
- Key-custody guidance for production — separate-user, HSM, and keyless-signing patterns, so signing holds up even on a single machine.
Shipped so far: v0.1 brought the spec, conformance suite, CLI, and scaffolder; v0.2 brought the tamper-evident chain and optional signing.
FAQ
Is this a memory engine? No. It has no embeddings, no retrieval, no recall benchmarks, and never will. It governs the records your engine holds.
Can it stop a malicious insider? Detection, yes; prevention only if you do two things — anchor the chain head outside the insider's reach and keep signing keys out of their write scope. The section above spells out exactly where the line is.
Why zero dependencies? A trust layer shouldn't ask you to trust a dependency tree. Everything a live deployment runs is standard-library Python; even the hash chain is stdlib.
Is it production-ready? Not by our own rule. Conformance passes at fixture level, but the "production-replicable" claim is reserved until a second real deployment — run by someone who isn't us — passes the suite. That's roadmap item one.
What does the name mean? Procheiron (πρόχειρον) is Greek for "ready at hand" — historically, a short practical handbook of law. A fitting name for a small set of rules you keep within reach.
License
MIT — see LICENSE.
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 procheiron-0.2.2.tar.gz.
File metadata
- Download URL: procheiron-0.2.2.tar.gz
- Upload date:
- Size: 1.4 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a34a9d180353c5d9ea84056940d96e6fe46f62b23efaff3d827715208dd94c24
|
|
| MD5 |
84635af16af2909eca7e4452afb35912
|
|
| BLAKE2b-256 |
4efc173836869e209c983a075aff1b7fd42c269cbf516b828f3afddda54924de
|
Provenance
The following attestation bundles were made for procheiron-0.2.2.tar.gz:
Publisher:
release.yml on logotheusneuro-cpu/procheiron-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
procheiron-0.2.2.tar.gz -
Subject digest:
a34a9d180353c5d9ea84056940d96e6fe46f62b23efaff3d827715208dd94c24 - Sigstore transparency entry: 2131163886
- Sigstore integration time:
-
Permalink:
logotheusneuro-cpu/procheiron-core@4a0d85baebf663e2804a4c2ec93e9919e8088be8 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/logotheusneuro-cpu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4a0d85baebf663e2804a4c2ec93e9919e8088be8 -
Trigger Event:
release
-
Statement type:
File details
Details for the file procheiron-0.2.2-py3-none-any.whl.
File metadata
- Download URL: procheiron-0.2.2-py3-none-any.whl
- Upload date:
- Size: 98.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
75048b36ee9856e59e663406072c1e314c306da6df8733c58b1b0671338372fc
|
|
| MD5 |
4431a02652588156b3782df23d383091
|
|
| BLAKE2b-256 |
c6e9ac386084fa0ad5dad3324f4b9544af494eb8e2a2e7cf573707ee50d5cd67
|
Provenance
The following attestation bundles were made for procheiron-0.2.2-py3-none-any.whl:
Publisher:
release.yml on logotheusneuro-cpu/procheiron-core
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
procheiron-0.2.2-py3-none-any.whl -
Subject digest:
75048b36ee9856e59e663406072c1e314c306da6df8733c58b1b0671338372fc - Sigstore transparency entry: 2131163951
- Sigstore integration time:
-
Permalink:
logotheusneuro-cpu/procheiron-core@4a0d85baebf663e2804a4c2ec93e9919e8088be8 -
Branch / Tag:
refs/tags/v0.2.2 - Owner: https://github.com/logotheusneuro-cpu
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4a0d85baebf663e2804a4c2ec93e9919e8088be8 -
Trigger Event:
release
-
Statement type: