Shared fingerprinting, comparison and baseline-sealing core for AgenTrust agent-integrity capture engines
Project description
agentrust-capture-core
Shared fingerprinting, comparison and baseline-sealing core for AgenTrust agent-integrity capture engines.
Each engine answers one question about a different coding agent:
Is this the agent composition I approved, with nothing added and nothing subtracted?
What differs between agents is where to look and what to call things. What must not differ is how content is fingerprinted, how snapshots are compared, how a baseline is sealed, and the rules that keep a report honest. This package owns the second list.
Why it exists
Those parts lived in three copies, and the cost was not theoretical:
- The same skill-fingerprinting bypass had to be found and fixed twice,
independently, in two shipped engines. A component was digested by its manifest
alone, so a payload swapped into a sibling
scripts/directory left the fingerprint unchanged and the report said "nothing added, nothing subtracted". - A reporting defect that rendered unmeasured categories as measured zeros was fixed in one engine while the other kept shipping it.
A fourth engine would have meant writing both bugs a fourth time.
What it does not do
No dependencies. The engines are invoked by shell hooks at session start and must run before anything is installed, so this package is standard library only and a test asserts it.
No opinion on where an agent keeps its files, what its categories are called, or how its report is laid out. Baseline scoping in particular is deliberately not unified: Claude Code keeps one baseline per machine, Codex keeps one per workspace because a workspace carries its own instructions and skills. Both are correct for their agent, so an engine supplies its own paths.
The pieces
| Module | Owns |
|---|---|
hashing |
tree_digest over a component directory, file and mapping digests, the exclusion denylist, uuid7, now_iso |
seal |
Sealing a baseline with a content digest and checking it: ok, unsealed, broken |
compare |
Map, set, scalar and rollup diffs, plus observed-category and measurement-scope gating |
state |
Atomic write, load-corrupt-as-absent, sealed baseline write |
report |
The honesty vocabulary: unmeasured labelling, partial-coverage qualification, the baseline-integrity block |
Two rules worth knowing before you use it
An unmeasured category is not an empty one. A shell hook cannot see a live tool
roster or the model. Rendering those as 0 tools states a measurement that was
never taken, and a reader who cannot tell "we did not check" from "we checked and
found nothing" treats an absence as a pass. Use measured_or and
unmeasured_footnote.
A partial check is not a clean bill of health. clean_verdict(complete=False)
qualifies the verdict as "in the categories checked".
On what sealing is worth
attach_seal stores a SHA-256 digest of the baseline's own content. It catches
corruption, truncation, and a hand-edit that does not recompute it. It does not
catch an attacker who owns the state directory, who can recompute the digest as
easily as this package can.
An earlier design used an HMAC with a locally stored secret. It was removed: the only adversary an HMAC defeats here is one who can write the state directory without being able to read it, which barely exists on a developer machine, and the stored secret was a credential to leak in exchange.
The control that does survive a real adversary is off-box. Engines print the baseline digest on approve and on verify, so a human who recorded the first sees a silent re-baseline even when the attacker resealed it perfectly. There is a test that makes this limit executable rather than prose.
License
Apache-2.0.
Project details
Release history Release notifications | RSS feed
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 agentrust_capture_core-0.1.0.tar.gz.
File metadata
- Download URL: agentrust_capture_core-0.1.0.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5eb74d3029c8be9a4185976f4f507887a80532cb91857db5f87f121fcb5c6aa6
|
|
| MD5 |
b9cc9f630281b4318850f9910e026eae
|
|
| BLAKE2b-256 |
0f28464d4e224d8663f259082dee0ef12a47d244a6ef11e78103e19728017078
|
Provenance
The following attestation bundles were made for agentrust_capture_core-0.1.0.tar.gz:
Publisher:
capture-core-publish.yml on agentrust-io/integrations
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentrust_capture_core-0.1.0.tar.gz -
Subject digest:
5eb74d3029c8be9a4185976f4f507887a80532cb91857db5f87f121fcb5c6aa6 - Sigstore transparency entry: 2310154583
- Sigstore integration time:
-
Permalink:
agentrust-io/integrations@f6f5b34e81ca60ec75b838c6ffe7207469f3e8e9 -
Branch / Tag:
refs/tags/capture-core-v0.1.0 - Owner: https://github.com/agentrust-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
capture-core-publish.yml@f6f5b34e81ca60ec75b838c6ffe7207469f3e8e9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentrust_capture_core-0.1.0-py3-none-any.whl.
File metadata
- Download URL: agentrust_capture_core-0.1.0-py3-none-any.whl
- Upload date:
- Size: 17.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78be3f0cf34d57cb2869f01752993aec6265ff76315fcf92832f6bcede9738ab
|
|
| MD5 |
f69952f4473dc21a3538ae7a4f4b5cff
|
|
| BLAKE2b-256 |
13873828fda63ed1988b057929cf944b672c3989e66273063978d038e77b7f24
|
Provenance
The following attestation bundles were made for agentrust_capture_core-0.1.0-py3-none-any.whl:
Publisher:
capture-core-publish.yml on agentrust-io/integrations
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentrust_capture_core-0.1.0-py3-none-any.whl -
Subject digest:
78be3f0cf34d57cb2869f01752993aec6265ff76315fcf92832f6bcede9738ab - Sigstore transparency entry: 2310154593
- Sigstore integration time:
-
Permalink:
agentrust-io/integrations@f6f5b34e81ca60ec75b838c6ffe7207469f3e8e9 -
Branch / Tag:
refs/tags/capture-core-v0.1.0 - Owner: https://github.com/agentrust-io
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
capture-core-publish.yml@f6f5b34e81ca60ec75b838c6ffe7207469f3e8e9 -
Trigger Event:
push
-
Statement type: