agentrust-trace 0.1.0__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/.github/workflows/ci.yml +4 -1
- agentrust_trace-0.2.0/.github/workflows/contributor-check.yml +42 -0
- agentrust_trace-0.2.0/.github/workflows/docs.yml +43 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/.github/workflows/publish.yml +4 -1
- agentrust_trace-0.2.0/.github/workflows/require-maintainer-approval.yml +84 -0
- agentrust_trace-0.2.0/.github/workflows/sbom.yml +30 -0
- agentrust_trace-0.2.0/ADOPTERS.md +11 -0
- agentrust_trace-0.2.0/ANTITRUST.md +26 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/CHANGELOG.md +19 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/CHARTER.md +3 -1
- agentrust_trace-0.2.0/LIMITATIONS.md +55 -0
- agentrust_trace-0.2.0/NOTICE +21 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/PKG-INFO +57 -11
- agentrust_trace-0.2.0/README.md +134 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/SECURITY.md +1 -1
- agentrust_trace-0.2.0/docs/crosswalks/owasp-agentic-top-10.md +65 -0
- agentrust_trace-0.2.0/docs/stylesheets/extra.css +24 -0
- agentrust_trace-0.2.0/examples/README.md +11 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/examples/amd-sev-snp.json +7 -8
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/examples/intel-tdx.json +8 -9
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/examples/nvidia-h100.json +9 -10
- agentrust_trace-0.2.0/mkdocs.yml +125 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/pyproject.toml +2 -1
- agentrust_trace-0.2.0/requirements-docs.txt +6 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/schema/trace-claim.json +37 -14
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/spec/trace-v0.1.md +28 -12
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/src/agentrust_trace/__init__.py +14 -2
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/src/agentrust_trace/models.py +25 -4
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/src/agentrust_trace/schema/trace-v0.1.json +33 -10
- agentrust_trace-0.2.0/src/agentrust_trace/sign.py +80 -0
- agentrust_trace-0.2.0/tests/test_models.py +152 -0
- agentrust_trace-0.2.0/tests/test_sign.py +121 -0
- agentrust_trace-0.2.0/tests/test_validate.py +77 -0
- agentrust_trace-0.1.0/README.md +0 -90
- agentrust_trace-0.1.0/tests/test_models.py +0 -61
- agentrust_trace-0.1.0/tests/test_validate.py +0 -44
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/.github/ISSUE_TEMPLATE/spec_change.md +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/CODE_OF_CONDUCT.md +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/CONTRIBUTING.md +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/GOVERNANCE.md +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/LICENSE +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/MAINTAINERS.md +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/ROADMAP.md +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/docs/assets/icon.svg +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/src/agentrust_trace/py.typed +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/src/agentrust_trace/validate.py +0 -0
- {agentrust_trace-0.1.0 → agentrust_trace-0.2.0}/tests/__init__.py +0 -0
|
@@ -5,6 +5,9 @@ on:
|
|
|
5
5
|
branches: ["main", "feat/**", "fix/**"]
|
|
6
6
|
pull_request:
|
|
7
7
|
|
|
8
|
+
env:
|
|
9
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
|
10
|
+
|
|
8
11
|
jobs:
|
|
9
12
|
test:
|
|
10
13
|
runs-on: ubuntu-latest
|
|
@@ -15,7 +18,7 @@ jobs:
|
|
|
15
18
|
steps:
|
|
16
19
|
- uses: actions/checkout@v4
|
|
17
20
|
|
|
18
|
-
- uses: actions/setup-python@
|
|
21
|
+
- uses: actions/setup-python@v4
|
|
19
22
|
with:
|
|
20
23
|
python-version: ${{ matrix.python-version }}
|
|
21
24
|
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
name: Contributor reputation check
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request_target:
|
|
5
|
+
types: [opened]
|
|
6
|
+
issues:
|
|
7
|
+
types: [opened]
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
inputs:
|
|
10
|
+
username:
|
|
11
|
+
description: GitHub username to check
|
|
12
|
+
required: true
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
issues: write
|
|
17
|
+
pull-requests: write
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
check:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
if: |
|
|
23
|
+
github.actor != 'dependabot[bot]' &&
|
|
24
|
+
github.actor != 'github-actions[bot]' &&
|
|
25
|
+
github.actor != 'copilot-swe-agent[bot]' &&
|
|
26
|
+
github.actor != 'claude-code[bot]' &&
|
|
27
|
+
github.actor != 'imran-siddique'
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout org action
|
|
30
|
+
uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
31
|
+
with:
|
|
32
|
+
repository: agentrust-io/.github
|
|
33
|
+
ref: main
|
|
34
|
+
persist-credentials: false
|
|
35
|
+
sparse-checkout: |
|
|
36
|
+
scripts
|
|
37
|
+
.github/actions/contributor-check
|
|
38
|
+
|
|
39
|
+
- name: Run contributor check
|
|
40
|
+
uses: ./.github/actions/contributor-check
|
|
41
|
+
with:
|
|
42
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: Docs
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
paths:
|
|
7
|
+
- "docs/**"
|
|
8
|
+
- "spec/**"
|
|
9
|
+
- "mkdocs.yml"
|
|
10
|
+
- "requirements-docs.txt"
|
|
11
|
+
- "README.md"
|
|
12
|
+
- "CHANGELOG.md"
|
|
13
|
+
- "CONTRIBUTING.md"
|
|
14
|
+
- "GOVERNANCE.md"
|
|
15
|
+
- "ROADMAP.md"
|
|
16
|
+
- "LIMITATIONS.md"
|
|
17
|
+
workflow_dispatch:
|
|
18
|
+
|
|
19
|
+
permissions:
|
|
20
|
+
contents: write
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
deploy:
|
|
24
|
+
name: Build and deploy docs
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@v4
|
|
29
|
+
with:
|
|
30
|
+
fetch-depth: 0
|
|
31
|
+
|
|
32
|
+
- uses: actions/setup-python@v6
|
|
33
|
+
with:
|
|
34
|
+
python-version: "3.11"
|
|
35
|
+
cache: pip
|
|
36
|
+
|
|
37
|
+
- name: Install docs dependencies
|
|
38
|
+
run: |
|
|
39
|
+
pip install -r requirements-docs.txt
|
|
40
|
+
pip install -e ".[dev]"
|
|
41
|
+
|
|
42
|
+
- name: Build and deploy to GitHub Pages
|
|
43
|
+
run: mkdocs gh-deploy --force --clean
|
|
@@ -9,13 +9,16 @@ permissions:
|
|
|
9
9
|
contents: read
|
|
10
10
|
id-token: write # OIDC trusted publishing — no stored API token needed
|
|
11
11
|
|
|
12
|
+
env:
|
|
13
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
|
14
|
+
|
|
12
15
|
jobs:
|
|
13
16
|
build:
|
|
14
17
|
runs-on: ubuntu-latest
|
|
15
18
|
steps:
|
|
16
19
|
- uses: actions/checkout@v4
|
|
17
20
|
|
|
18
|
-
- uses: actions/setup-python@
|
|
21
|
+
- uses: actions/setup-python@v4
|
|
19
22
|
with:
|
|
20
23
|
python-version: "3.11"
|
|
21
24
|
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
name: Require maintainer approval
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request_target:
|
|
5
|
+
types: [opened, synchronize, reopened]
|
|
6
|
+
branches: [main]
|
|
7
|
+
# Re-evaluate the gate when a review is submitted or dismissed so an
|
|
8
|
+
# approval clears the failing status without waiting for a new push.
|
|
9
|
+
# Note: pull_request_review does not support a branches filter, so the
|
|
10
|
+
# base-branch check lives in the job-level `if` below.
|
|
11
|
+
pull_request_review:
|
|
12
|
+
types: [submitted, dismissed]
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
pull-requests: read
|
|
17
|
+
statuses: write
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
gate:
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
if: github.event.pull_request.base.ref == 'main'
|
|
23
|
+
steps:
|
|
24
|
+
- name: Check for maintainer approval
|
|
25
|
+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
|
26
|
+
with:
|
|
27
|
+
script: |
|
|
28
|
+
const MAINTAINERS = ['imran-siddique'];
|
|
29
|
+
|
|
30
|
+
const author = context.payload.pull_request.user.login;
|
|
31
|
+
if (MAINTAINERS.includes(author)) {
|
|
32
|
+
core.info(`Author ${author} is a maintainer, skipping gate`);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const association = context.payload.pull_request.author_association;
|
|
37
|
+
if (association === 'MEMBER' || association === 'OWNER') {
|
|
38
|
+
core.info(`Author is ${association}, skipping gate`);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// Both pull_request_target and pull_request_review payloads
|
|
43
|
+
// carry the PR at context.payload.pull_request.
|
|
44
|
+
const prNumber = context.payload.pull_request.number;
|
|
45
|
+
|
|
46
|
+
// Re-fetch the PR so we compare against the head SHA at
|
|
47
|
+
// evaluation time, not a possibly stale SHA from the payload.
|
|
48
|
+
const { data: pr } = await github.rest.pulls.get({
|
|
49
|
+
owner: context.repo.owner,
|
|
50
|
+
repo: context.repo.repo,
|
|
51
|
+
pull_number: prNumber,
|
|
52
|
+
});
|
|
53
|
+
const headSha = pr.head.sha;
|
|
54
|
+
|
|
55
|
+
// Paginate: listReviews otherwise returns only the first 30.
|
|
56
|
+
const reviews = await github.paginate(github.rest.pulls.listReviews, {
|
|
57
|
+
owner: context.repo.owner,
|
|
58
|
+
repo: context.repo.repo,
|
|
59
|
+
pull_number: prNumber,
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// Only a maintainer's most recent non-comment review counts,
|
|
63
|
+
// and it must approve the current head commit. An approval of
|
|
64
|
+
// an older commit does not clear the gate after a later push
|
|
65
|
+
// (prevents approve-then-swap).
|
|
66
|
+
const latestByMaintainer = new Map();
|
|
67
|
+
for (const review of reviews) {
|
|
68
|
+
if (
|
|
69
|
+
review.user &&
|
|
70
|
+
review.user.type === 'User' &&
|
|
71
|
+
MAINTAINERS.includes(review.user.login) &&
|
|
72
|
+
review.state !== 'COMMENTED'
|
|
73
|
+
) {
|
|
74
|
+
latestByMaintainer.set(review.user.login, review);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const approved = [...latestByMaintainer.values()].some(
|
|
79
|
+
(r) => r.state === 'APPROVED' && r.commit_id === headSha
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
if (!approved) {
|
|
83
|
+
core.setFailed('Waiting for maintainer approval of the current head commit before merging.');
|
|
84
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
name: SBOM
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
release:
|
|
7
|
+
types: [published]
|
|
8
|
+
|
|
9
|
+
env:
|
|
10
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: write
|
|
14
|
+
id-token: write
|
|
15
|
+
|
|
16
|
+
jobs:
|
|
17
|
+
sbom:
|
|
18
|
+
runs-on: ubuntu-latest
|
|
19
|
+
steps:
|
|
20
|
+
- uses: actions/checkout@v4
|
|
21
|
+
- name: Generate SBOM
|
|
22
|
+
uses: anchore/sbom-action@v0
|
|
23
|
+
with:
|
|
24
|
+
format: spdx-json
|
|
25
|
+
output-file: sbom.spdx.json
|
|
26
|
+
- name: Upload SBOM artifact
|
|
27
|
+
uses: actions/upload-artifact@v4
|
|
28
|
+
with:
|
|
29
|
+
name: sbom
|
|
30
|
+
path: sbom.spdx.json
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# ADOPTERS
|
|
2
|
+
|
|
3
|
+
Organizations using or evaluating the TRACE specification.
|
|
4
|
+
|
|
5
|
+
To add your organization, open a pull request editing this file.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
| Organization | Usage |
|
|
10
|
+
|---|---|
|
|
11
|
+
| Opaque Systems | Founding contributor — developed the initial specification, reference implementation, and TRACE registry infrastructure |
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Antitrust Policy
|
|
2
|
+
|
|
3
|
+
TRACE is an open specification project hosted under the agentrust-io organization and targeting donation to the Agentic AI Foundation (AAIF) under the Linux Foundation. Participation in this project is subject to antitrust and competition laws.
|
|
4
|
+
|
|
5
|
+
## Prohibited topics
|
|
6
|
+
|
|
7
|
+
The following topics must not be discussed in any project forum, issue, PR, mailing list, meeting, or chat channel:
|
|
8
|
+
|
|
9
|
+
- Prices, pricing strategies, or cost structures of any product or service
|
|
10
|
+
- Market allocation, geographic territories, or customer segmentation
|
|
11
|
+
- Bids, contracts, or terms with any customer or competitor
|
|
12
|
+
- Whether to deal with, or boycott, any company or individual
|
|
13
|
+
- Production volumes, capacity plans, or sales forecasts
|
|
14
|
+
- Any other competitively sensitive business information
|
|
15
|
+
|
|
16
|
+
## What is appropriate
|
|
17
|
+
|
|
18
|
+
Project discussions must be limited to technical matters: specification design, cryptographic protocols, SDK implementation, conformance test coverage, and interoperability. Commercial decisions are for each organization to make independently.
|
|
19
|
+
|
|
20
|
+
## Reporting
|
|
21
|
+
|
|
22
|
+
If you observe discussion that appears to violate this policy, stop the discussion immediately and report it to the Project Lead via private GitHub message or email. Do not continue the discussion or document it further in project channels.
|
|
23
|
+
|
|
24
|
+
## Questions
|
|
25
|
+
|
|
26
|
+
If you are uncertain whether a topic is appropriate for project discussion, consult your organization's legal counsel before participating.
|
|
@@ -39,6 +39,25 @@ Seven open questions requiring founding-member input before v0.2 are documented
|
|
|
39
39
|
|
|
40
40
|
---
|
|
41
41
|
|
|
42
|
+
## [0.2.0] — TBD
|
|
43
|
+
|
|
44
|
+
### Specification
|
|
45
|
+
|
|
46
|
+
- Extend `subject` field to accept DID URIs (any `did:` method) in addition to SPIFFE SVIDs.
|
|
47
|
+
Previously `^spiffe://` only; now `^(spiffe://|did:)`. Additive, backward-compatible.
|
|
48
|
+
DID-native runtimes (e.g. AGT `did:mesh:` identities) no longer require a parallel SPIFFE identity.
|
|
49
|
+
Closes: microsoft/agent-governance-toolkit ADR-0032, agentrust-io/trace-spec#35.
|
|
50
|
+
|
|
51
|
+
### Schema
|
|
52
|
+
|
|
53
|
+
- `schema/trace-claim.json`: `subject` pattern updated to `^(spiffe://|did:)`, description updated.
|
|
54
|
+
|
|
55
|
+
### Reference Implementation
|
|
56
|
+
|
|
57
|
+
- `TrustRecord.subject` pattern updated to `r"^(spiffe://|did:)"`.
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
42
61
|
## Upcoming
|
|
43
62
|
|
|
44
63
|
See [ROADMAP.md](ROADMAP.md) for planned changes in v0.2 and v1.0.
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# Technical Charter — TRACE
|
|
2
2
|
|
|
3
3
|
**Proposed hosting**: CoSAI (Coalition for Secure AI) for the technical workstream; Linux Foundation entity hosting the Model Context Protocol for specification, IP, trademark, and conformance mark.
|
|
4
|
-
**Status**: Pre-acceptance draft — effective upon host organization acceptance.
|
|
4
|
+
**Status**: Pre-acceptance draft — effective upon host organization acceptance.
|
|
5
|
+
|
|
6
|
+
> **Note for external contributors:** This charter is a working draft and has not yet been accepted by a host organization. Governance terms, IP policy, and conformance mark ownership described here are proposed, not final. Do not implement production systems based on governance commitments in this document until v1.0 ratification.
|
|
5
7
|
**Version**: 0.1 (aligned with spec v0.1)
|
|
6
8
|
|
|
7
9
|
---
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Known Limitations
|
|
2
|
+
|
|
3
|
+
This document describes what TRACE does not do, and where layered defenses are needed. Honest scope boundaries prevent misplaced trust.
|
|
4
|
+
|
|
5
|
+
## What a TRACE claim does not prevent
|
|
6
|
+
|
|
7
|
+
**Operator-forged software-only records**
|
|
8
|
+
A TRACE claim at Level 0 (software-only signing) is signed by a key held in software. A privileged operator with root access can produce a valid-looking Level 0 record for a run that never happened, or that violated policy. Level 0 is suitable for development and audit-trail tooling only — not for third-party verification.
|
|
9
|
+
|
|
10
|
+
**Replay of a valid past record**
|
|
11
|
+
A TRACE claim proves a specific run happened; it does not prevent a verifier from being shown a valid record from an earlier run. Verifiers that rely on recency must check the `iat` and `exp` claims, require nonce binding to a challenge, or anchor records to a public transparency log and check for freshness.
|
|
12
|
+
|
|
13
|
+
**Policy correctness**
|
|
14
|
+
The `policy.bundle_hash` field attests that a specific policy was in force at runtime. It does not attest that the policy achieves the intended security outcome. Policy review is a separate control.
|
|
15
|
+
|
|
16
|
+
**What happened inside the model**
|
|
17
|
+
The call transcript records tool invocations, arguments, and responses that are observable at the gateway boundary. It does not record the model's internal chain-of-thought, intermediate reasoning, or context window contents. Reasoning that influences behavior without producing a tool call is not captured.
|
|
18
|
+
|
|
19
|
+
**Cross-boundary data propagation**
|
|
20
|
+
The call graph summary uses temporal adjacency to approximate data flow between tool calls. It cannot definitively prove which specific data from one tool response influenced which subsequent call. The `provenance_disclaimer` field in every call graph summary is required for this reason.
|
|
21
|
+
|
|
22
|
+
**TEE side-channel attacks**
|
|
23
|
+
Hardware attestation proves the TRACE signing key and policy engine were measured in silicon before execution. It does not protect against side-channel attacks (cache timing, power analysis) targeting the TEE itself. TEE-level side-channel defense is the responsibility of the TEE platform vendor.
|
|
24
|
+
|
|
25
|
+
**Revocation of the signing key after issuance**
|
|
26
|
+
If the TRACE signing key is compromised after records are issued, existing records remain cryptographically valid. Key monitoring, rapid revocation, and transparency log integration are the required controls — TRACE provides the anchoring mechanism but cannot detect compromise itself.
|
|
27
|
+
|
|
28
|
+
## What Level 0 does not provide
|
|
29
|
+
|
|
30
|
+
Level 0 (software-only signing) is suitable for development, internal audit trails, and staging environments. It does not satisfy:
|
|
31
|
+
|
|
32
|
+
- EU AI Act Art. 12 (tamper-evident logging) — requires Level 1+
|
|
33
|
+
- DORA Art. 9 (ICT risk management) — requires Level 1+ with transparency log anchoring
|
|
34
|
+
- Any claim of hardware-rooted trust — the signing key is held in software and can be extracted by a privileged operator
|
|
35
|
+
|
|
36
|
+
## What the SDK does not do
|
|
37
|
+
|
|
38
|
+
- **Evaluate Cedar policy** — the SDK includes the Cedar policy field in the claim; evaluation requires the Cedar engine (included in AGT or cMCP)
|
|
39
|
+
- **Store or index records** — the SDK produces and verifies TRACE claim documents; storage, rotation, and retrieval are the caller's responsibility
|
|
40
|
+
- **Anchor to a transparency log** — the SDK generates records suitable for SCITT anchoring; submission to a transparency log requires a separate SCITT client
|
|
41
|
+
- **Replace a secrets manager** — signing private keys must be stored in a secrets manager (Azure Key Vault, AWS Secrets Manager, HSM); do not store them on disk without protection
|
|
42
|
+
- **Provide an authoritative verification service** — the self-hosted verifier confirms cryptographic validity against the issuer's key; authoritative third-party verification with SLA is a separate commercial service
|
|
43
|
+
|
|
44
|
+
## Performance
|
|
45
|
+
|
|
46
|
+
Hardware attestation adds latency at the point of claim generation (not per-tool-call):
|
|
47
|
+
|
|
48
|
+
| Provider | Typical claim signing latency |
|
|
49
|
+
|---|---|
|
|
50
|
+
| Software (Level 0) | < 1 ms |
|
|
51
|
+
| TPM | 50–200 ms |
|
|
52
|
+
| SEV-SNP | 10–50 ms |
|
|
53
|
+
| TDX | 10–50 ms |
|
|
54
|
+
|
|
55
|
+
Claim verification (signature check + schema validation) is < 5 ms in all cases.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
TRACE
|
|
2
|
+
Copyright 2026 AgentTrust Authors
|
|
3
|
+
|
|
4
|
+
This product includes software developed by the AgentTrust project
|
|
5
|
+
(https://github.com/agentrust-io/trace-spec).
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Third-party components used by the Python SDK:
|
|
10
|
+
|
|
11
|
+
pydantic
|
|
12
|
+
License: MIT
|
|
13
|
+
https://github.com/pydantic/pydantic
|
|
14
|
+
|
|
15
|
+
jsonschema
|
|
16
|
+
License: MIT
|
|
17
|
+
https://github.com/python-jsonschema/jsonschema
|
|
18
|
+
|
|
19
|
+
jcs (dev dependency — RFC 8785 canonical JSON)
|
|
20
|
+
License: MIT
|
|
21
|
+
https://github.com/nicowillis/jcs
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentrust-trace
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: TRACE v0.1 — hardware-attested governance records for AI agents
|
|
5
5
|
Project-URL: Homepage, https://github.com/agentrust-io/trace-spec
|
|
6
6
|
Project-URL: Repository, https://github.com/agentrust-io/trace-spec
|
|
@@ -8,6 +8,7 @@ Project-URL: Issues, https://github.com/agentrust-io/trace-spec/issues
|
|
|
8
8
|
Project-URL: Changelog, https://github.com/agentrust-io/trace-spec/blob/main/CHANGELOG.md
|
|
9
9
|
License: Apache-2.0
|
|
10
10
|
License-File: LICENSE
|
|
11
|
+
License-File: NOTICE
|
|
11
12
|
Keywords: ai-governance,attestation,confidential-computing,eat,rats,tee,trace
|
|
12
13
|
Classifier: Development Status :: 3 - Alpha
|
|
13
14
|
Classifier: Intended Audience :: Developers
|
|
@@ -19,6 +20,7 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
|
19
20
|
Classifier: Topic :: Security
|
|
20
21
|
Classifier: Typing :: Typed
|
|
21
22
|
Requires-Python: >=3.11
|
|
23
|
+
Requires-Dist: cryptography>=42.0
|
|
22
24
|
Requires-Dist: jsonschema>=4.20
|
|
23
25
|
Requires-Dist: pydantic>=2.0
|
|
24
26
|
Provides-Extra: dev
|
|
@@ -29,13 +31,29 @@ Requires-Dist: ruff>=0.4; extra == 'dev'
|
|
|
29
31
|
Requires-Dist: types-jsonschema; extra == 'dev'
|
|
30
32
|
Description-Content-Type: text/markdown
|
|
31
33
|
|
|
32
|
-
<p align="center">
|
|
34
|
+
<p align="center">
|
|
33
35
|
<img src="docs/assets/icon.svg" width="96" height="96" alt="TRACE"/>
|
|
34
36
|
</p>
|
|
35
37
|
|
|
36
|
-
# TRACE
|
|
38
|
+
# TRACE: Trust Runtime Attestation and Compliance Evidence
|
|
39
|
+
|
|
40
|
+
[](LICENSE)
|
|
41
|
+
[](https://agenticai.foundation)
|
|
42
|
+
[](spec/trace-v0.1.md)
|
|
43
|
+
[](https://pypi.org/project/agentrust-trace/)
|
|
44
|
+
[](https://discord.gg/9JWNpH7E)
|
|
45
|
+
|
|
46
|
+
> **Developer Preview.** Launching at Confidential Computing Summit, June 23 2026. May have breaking changes before v1.0.
|
|
47
|
+
|
|
48
|
+
<p align="center">
|
|
49
|
+
<a href="spec/trace-v0.1.md">Specification</a> |
|
|
50
|
+
<a href="schema/trace-claim.json">Schema</a> |
|
|
51
|
+
<a href="examples/">Examples</a> |
|
|
52
|
+
<a href="https://github.com/agentrust-io/trace-registry">Registry</a> |
|
|
53
|
+
<a href="https://github.com/agentrust-io/cmcp">Reference Impl</a>
|
|
54
|
+
</p>
|
|
37
55
|
|
|
38
|
-
An open specification for hardware-attested AI agent governance records. TRACE defines the format, anchoring protocol, and verification rules for cryptographically provable evidence that an AI agent ran under a specific policy, in a verified hardware environment, on classified data, invoking identified tools
|
|
56
|
+
An open specification for hardware-attested AI agent governance records. TRACE defines the format, anchoring protocol, and verification rules for cryptographically provable evidence that an AI agent ran under a specific policy, in a verified hardware environment, on classified data, invoking identified tools, bound into a single signed artifact rooted in silicon attestation.
|
|
39
57
|
|
|
40
58
|
## What a TRACE Trust Record Is
|
|
41
59
|
|
|
@@ -43,7 +61,7 @@ An open specification for hardware-attested AI agent governance records. TRACE d
|
|
|
43
61
|
{
|
|
44
62
|
"eat_profile": "tag:agentrust.io,2026:trace-v0.1",
|
|
45
63
|
"iat": 1750676142,
|
|
46
|
-
"subject": "spiffe://trust.example.org/agent/payments-processor/prod",
|
|
64
|
+
"subject": "spiffe://trust.example.org/agent/payments-processor/prod", // or "did:mesh:spiffe://..."
|
|
47
65
|
"model": {
|
|
48
66
|
"provider": "anthropic",
|
|
49
67
|
"model_id": "claude-sonnet-4-6",
|
|
@@ -84,11 +102,21 @@ An open specification for hardware-attested AI agent governance records. TRACE d
|
|
|
84
102
|
|
|
85
103
|
The record is a single EAT envelope (RFC 9711). Each field is independently verifiable. No callback to the issuer is required.
|
|
86
104
|
|
|
105
|
+
### Supported platforms
|
|
106
|
+
|
|
107
|
+
| Platform | v0.1 | v0.2 (planned) | Notes |
|
|
108
|
+
|---|---|---|---|
|
|
109
|
+
| `intel-tdx` | Yes | Yes | |
|
|
110
|
+
| `amd-sev-snp` | Yes | Yes | |
|
|
111
|
+
| `nvidia-h100` | Yes | Yes | |
|
|
112
|
+
| `gpu-cc` | No | Planned | Generic GPU confidential compute |
|
|
113
|
+
| `opaque` | Yes | Yes | Explicit opt-in; contact maintainers |
|
|
114
|
+
|
|
87
115
|
## Specification
|
|
88
116
|
|
|
89
|
-
- [`spec/trace-v0.1.md`](spec/trace-v0.1.md)
|
|
90
|
-
- [`schema/trace-claim.json`](schema/trace-claim.json)
|
|
91
|
-
- [`examples/`](examples/)
|
|
117
|
+
- [`spec/trace-v0.1.md`](spec/trace-v0.1.md) -- full specification
|
|
118
|
+
- [`schema/trace-claim.json`](schema/trace-claim.json) -- JSON Schema
|
|
119
|
+
- [`examples/`](examples/) -- example Trust Records for Intel TDX, AMD SEV-SNP, and NVIDIA H100
|
|
92
120
|
|
|
93
121
|
## Standards composition
|
|
94
122
|
|
|
@@ -98,7 +126,7 @@ TRACE profiles existing standards rather than replacing them:
|
|
|
98
126
|
|---|---|
|
|
99
127
|
| RATS / EAT (RFC 9711) | Wire envelope and claim model |
|
|
100
128
|
| SLSA Provenance v1.0 | Build-time provenance (`build_provenance`) |
|
|
101
|
-
| SPIFFE SVID | Workload identity (`subject`) |
|
|
129
|
+
| SPIFFE SVID / DID URI | Workload identity (`subject`) |
|
|
102
130
|
| SCITT | Append-only transparency anchoring (`transparency`) |
|
|
103
131
|
| EAR (draft-ietf-rats-ar4si) | Verifier appraisal output (`appraisal`) |
|
|
104
132
|
| MCP / A2A | Agent tool-call transcript surface (`tool_transcript`) |
|
|
@@ -106,15 +134,33 @@ TRACE profiles existing standards rather than replacing them:
|
|
|
106
134
|
|
|
107
135
|
## Reference implementation
|
|
108
136
|
|
|
109
|
-
[agentrust-io/cmcp](https://github.com/agentrust-io/cmcp)
|
|
137
|
+
[agentrust-io/cmcp](https://github.com/agentrust-io/cmcp) -- Confidential MCP Runtime. Hardware-attested policy enforcement at the MCP tool-call boundary on Intel TDX, AMD SEV-SNP, and NVIDIA H100/Blackwell.
|
|
110
138
|
|
|
111
139
|
## Registry
|
|
112
140
|
|
|
113
141
|
A public append-only Merkle registry of TRACE Trust Record anchors: [agentrust-io/trace-registry](https://github.com/agentrust-io/trace-registry).
|
|
114
142
|
|
|
143
|
+
## Install
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
pip install agentrust-trace
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
```python
|
|
150
|
+
from agentrust_trace import TrustRecord, sign_record, load_signing_key
|
|
151
|
+
|
|
152
|
+
key = load_signing_key() # reads TRACE_PRIVATE_KEY_PEM or generates ephemeral
|
|
153
|
+
record = sign_record(payload, key)
|
|
154
|
+
TrustRecord.model_validate(record) # validate before writing
|
|
155
|
+
```
|
|
156
|
+
|
|
115
157
|
## Status
|
|
116
158
|
|
|
117
|
-
|
|
159
|
+
v0.2. `subject` now accepts DID URIs (`did:`) in addition to SPIFFE SVIDs. `slsa_level: 0` supported for software-only deployments. Published at Confidential Computing Summit, San Francisco, June 23 2026. Targeting submission to the [Agentic AI Foundation (AAIF)](https://agenticai.foundation) under the Linux Foundation.
|
|
160
|
+
|
|
161
|
+
## Community
|
|
162
|
+
|
|
163
|
+
Questions, feedback, integration help: [Discord](https://discord.gg/9JWNpH7E).
|
|
118
164
|
|
|
119
165
|
## License
|
|
120
166
|
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="docs/assets/icon.svg" width="96" height="96" alt="TRACE"/>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
# TRACE: Trust Runtime Attestation and Compliance Evidence
|
|
6
|
+
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://agenticai.foundation)
|
|
9
|
+
[](spec/trace-v0.1.md)
|
|
10
|
+
[](https://pypi.org/project/agentrust-trace/)
|
|
11
|
+
[](https://discord.gg/9JWNpH7E)
|
|
12
|
+
|
|
13
|
+
> **Developer Preview.** Launching at Confidential Computing Summit, June 23 2026. May have breaking changes before v1.0.
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="spec/trace-v0.1.md">Specification</a> |
|
|
17
|
+
<a href="schema/trace-claim.json">Schema</a> |
|
|
18
|
+
<a href="examples/">Examples</a> |
|
|
19
|
+
<a href="https://github.com/agentrust-io/trace-registry">Registry</a> |
|
|
20
|
+
<a href="https://github.com/agentrust-io/cmcp">Reference Impl</a>
|
|
21
|
+
</p>
|
|
22
|
+
|
|
23
|
+
An open specification for hardware-attested AI agent governance records. TRACE defines the format, anchoring protocol, and verification rules for cryptographically provable evidence that an AI agent ran under a specific policy, in a verified hardware environment, on classified data, invoking identified tools, bound into a single signed artifact rooted in silicon attestation.
|
|
24
|
+
|
|
25
|
+
## What a TRACE Trust Record Is
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"eat_profile": "tag:agentrust.io,2026:trace-v0.1",
|
|
30
|
+
"iat": 1750676142,
|
|
31
|
+
"subject": "spiffe://trust.example.org/agent/payments-processor/prod", // or "did:mesh:spiffe://..."
|
|
32
|
+
"model": {
|
|
33
|
+
"provider": "anthropic",
|
|
34
|
+
"model_id": "claude-sonnet-4-6",
|
|
35
|
+
"version": "20251001",
|
|
36
|
+
"weights_digest": "sha256:a3f8d2c1..."
|
|
37
|
+
},
|
|
38
|
+
"runtime": {
|
|
39
|
+
"platform": "amd-sev-snp",
|
|
40
|
+
"measurement": "sha384:c9e4b1d2e3f4...",
|
|
41
|
+
"rim_uri": "https://kdsintf.amd.com/vcek/v1/..."
|
|
42
|
+
},
|
|
43
|
+
"policy": {
|
|
44
|
+
"bundle_hash": "sha256:b2c3d4e5...",
|
|
45
|
+
"enforcement_mode": "enforce",
|
|
46
|
+
"version": "1.2.0"
|
|
47
|
+
},
|
|
48
|
+
"data_class": "confidential",
|
|
49
|
+
"tool_transcript": {
|
|
50
|
+
"hash": "sha256:d4e5f6a7...",
|
|
51
|
+
"call_count": 3
|
|
52
|
+
},
|
|
53
|
+
"build_provenance": {
|
|
54
|
+
"slsa_level": 2,
|
|
55
|
+
"builder": "https://github.com/slsa-framework/slsa-github-generator",
|
|
56
|
+
"digest": "sha256:e5f6a7b8..."
|
|
57
|
+
},
|
|
58
|
+
"appraisal": {
|
|
59
|
+
"status": "affirming",
|
|
60
|
+
"verifier": "https://trust-authority.example.org",
|
|
61
|
+
"policy_ref": "https://trust-authority.example.org/policy/agent-v1"
|
|
62
|
+
},
|
|
63
|
+
"transparency": "https://registry.agentrust.io/claim/trace-2026-06-23T09:15:42Z-f2a8d1",
|
|
64
|
+
"cnf": {
|
|
65
|
+
"jwk": {"kty": "EC", "crv": "P-256", "x": "MEkwEw...", "y": "..."}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
The record is a single EAT envelope (RFC 9711). Each field is independently verifiable. No callback to the issuer is required.
|
|
71
|
+
|
|
72
|
+
### Supported platforms
|
|
73
|
+
|
|
74
|
+
| Platform | v0.1 | v0.2 (planned) | Notes |
|
|
75
|
+
|---|---|---|---|
|
|
76
|
+
| `intel-tdx` | Yes | Yes | |
|
|
77
|
+
| `amd-sev-snp` | Yes | Yes | |
|
|
78
|
+
| `nvidia-h100` | Yes | Yes | |
|
|
79
|
+
| `gpu-cc` | No | Planned | Generic GPU confidential compute |
|
|
80
|
+
| `opaque` | Yes | Yes | Explicit opt-in; contact maintainers |
|
|
81
|
+
|
|
82
|
+
## Specification
|
|
83
|
+
|
|
84
|
+
- [`spec/trace-v0.1.md`](spec/trace-v0.1.md) -- full specification
|
|
85
|
+
- [`schema/trace-claim.json`](schema/trace-claim.json) -- JSON Schema
|
|
86
|
+
- [`examples/`](examples/) -- example Trust Records for Intel TDX, AMD SEV-SNP, and NVIDIA H100
|
|
87
|
+
|
|
88
|
+
## Standards composition
|
|
89
|
+
|
|
90
|
+
TRACE profiles existing standards rather than replacing them:
|
|
91
|
+
|
|
92
|
+
| Primitive | Role in TRACE |
|
|
93
|
+
|---|---|
|
|
94
|
+
| RATS / EAT (RFC 9711) | Wire envelope and claim model |
|
|
95
|
+
| SLSA Provenance v1.0 | Build-time provenance (`build_provenance`) |
|
|
96
|
+
| SPIFFE SVID / DID URI | Workload identity (`subject`) |
|
|
97
|
+
| SCITT | Append-only transparency anchoring (`transparency`) |
|
|
98
|
+
| EAR (draft-ietf-rats-ar4si) | Verifier appraisal output (`appraisal`) |
|
|
99
|
+
| MCP / A2A | Agent tool-call transcript surface (`tool_transcript`) |
|
|
100
|
+
| AIBOM (SPDX 3.0 / CycloneDX 1.7) | Model component inventory (`model`) |
|
|
101
|
+
|
|
102
|
+
## Reference implementation
|
|
103
|
+
|
|
104
|
+
[agentrust-io/cmcp](https://github.com/agentrust-io/cmcp) -- Confidential MCP Runtime. Hardware-attested policy enforcement at the MCP tool-call boundary on Intel TDX, AMD SEV-SNP, and NVIDIA H100/Blackwell.
|
|
105
|
+
|
|
106
|
+
## Registry
|
|
107
|
+
|
|
108
|
+
A public append-only Merkle registry of TRACE Trust Record anchors: [agentrust-io/trace-registry](https://github.com/agentrust-io/trace-registry).
|
|
109
|
+
|
|
110
|
+
## Install
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
pip install agentrust-trace
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
```python
|
|
117
|
+
from agentrust_trace import TrustRecord, sign_record, load_signing_key
|
|
118
|
+
|
|
119
|
+
key = load_signing_key() # reads TRACE_PRIVATE_KEY_PEM or generates ephemeral
|
|
120
|
+
record = sign_record(payload, key)
|
|
121
|
+
TrustRecord.model_validate(record) # validate before writing
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Status
|
|
125
|
+
|
|
126
|
+
v0.2. `subject` now accepts DID URIs (`did:`) in addition to SPIFFE SVIDs. `slsa_level: 0` supported for software-only deployments. Published at Confidential Computing Summit, San Francisco, June 23 2026. Targeting submission to the [Agentic AI Foundation (AAIF)](https://agenticai.foundation) under the Linux Foundation.
|
|
127
|
+
|
|
128
|
+
## Community
|
|
129
|
+
|
|
130
|
+
Questions, feedback, integration help: [Discord](https://discord.gg/9JWNpH7E).
|
|
131
|
+
|
|
132
|
+
## License
|
|
133
|
+
|
|
134
|
+
Creative Commons Attribution 4.0 International (CC BY 4.0)
|