matrixscroll 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.
- matrixscroll-0.2.0/CHANGELOG.md +73 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/CONTRIBUTING.md +2 -2
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/PKG-INFO +47 -12
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/README.md +43 -10
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/controls/agentic_ai_controls.json +7 -5
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/docs/AGENTIC_AI_SECURITY.md +8 -8
- matrixscroll-0.2.0/docs/hardware-provider.md +20 -0
- matrixscroll-0.2.0/docs/quickstart-git.md +61 -0
- matrixscroll-0.2.0/docs/superpowers/plans/2026-06-19-ci-action-plan.md +88 -0
- matrixscroll-0.2.0/docs/superpowers/plans/2026-06-19-sdk-refactor-plan.md +166 -0
- matrixscroll-0.2.0/docs/superpowers/specs/2026-06-19-matrixscroll-git-design.md +205 -0
- matrixscroll-0.2.0/docs/yubikey-bridge.md +137 -0
- matrixscroll-0.2.0/examples/agentic_ai_evidence_manifest.signed.json +80 -0
- matrixscroll-0.2.0/examples/ci/protected-branch.yml +38 -0
- matrixscroll-0.2.0/examples/commit-envelope.json +29 -0
- matrixscroll-0.2.0/examples/commit-envelope.signed.json +38 -0
- matrixscroll-0.2.0/examples/demo/agent-commit-demo.sh +46 -0
- matrixscroll-0.2.0/examples/demo/generate_signed_examples.py +32 -0
- matrixscroll-0.2.0/examples/release-manifest.json +24 -0
- matrixscroll-0.2.0/examples/release-manifest.signed.json +33 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/matrixscroll/__init__.py +5 -4
- matrixscroll-0.2.0/matrixscroll/_core.py +43 -0
- matrixscroll-0.2.0/matrixscroll/canonical.py +18 -0
- matrixscroll-0.2.0/matrixscroll/cli.py +178 -0
- matrixscroll-0.2.0/matrixscroll/constants.py +12 -0
- matrixscroll-0.2.0/matrixscroll/errors.py +11 -0
- matrixscroll-0.2.0/matrixscroll/git.py +376 -0
- matrixscroll-0.2.0/matrixscroll/hooks/post-commit +17 -0
- matrixscroll-0.2.0/matrixscroll/hooks/pre-push +17 -0
- matrixscroll-0.2.0/matrixscroll/manifest.py +59 -0
- matrixscroll-0.2.0/matrixscroll/policy.py +55 -0
- matrixscroll-0.2.0/matrixscroll/providers/__init__.py +7 -0
- matrixscroll-0.2.0/matrixscroll/providers/base.py +26 -0
- matrixscroll-0.2.0/matrixscroll/providers/emulated.py +116 -0
- matrixscroll-0.2.0/matrixscroll/providers/hardware.py +22 -0
- matrixscroll-0.2.0/matrixscroll/providers/registry.py +106 -0
- matrixscroll-0.2.0/matrixscroll/providers/yubikey.py +104 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/pyproject.toml +5 -2
- matrixscroll-0.2.0/schemas/commit-envelope.v1.json +150 -0
- matrixscroll-0.2.0/schemas/evidence-pack.v1.json +54 -0
- matrixscroll-0.2.0/schemas/release-manifest.v1.json +63 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/tests/test_agentic_guidance.py +3 -1
- matrixscroll-0.2.0/tests/test_canonical.py +10 -0
- matrixscroll-0.2.0/tests/test_git_envelope.py +88 -0
- matrixscroll-0.2.0/tests/test_policy.py +26 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/tests/test_release_metadata.py +20 -1
- matrixscroll-0.2.0/tests/test_yubikey_provider.py +35 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/_fixture_key.json +5 -5
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/tampered_algorithm.json +13 -13
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/tampered_device_id.json +13 -13
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/tampered_field.json +13 -13
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/tampered_nested.json +28 -28
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/tampered_public_key.json +13 -13
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/tampered_schema.json +13 -13
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/tampered_signature.json +13 -13
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/unsigned_empty_block.json +6 -6
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/unsigned_no_block.json +4 -4
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/valid_nested.json +28 -28
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/valid_simple.json +13 -13
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/valid_unicode.json +14 -14
- matrixscroll-0.1.0/CHANGELOG.md +0 -34
- matrixscroll-0.1.0/matrixscroll/_core.py +0 -360
- matrixscroll-0.1.0/matrixscroll/cli.py +0 -94
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/.gitignore +0 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/LICENSE +0 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/SECURITY.md +0 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/SPEC.md +0 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/examples/agentic_ai_evidence_manifest.json +0 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/matrixscroll/py.typed +0 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/tests/__init__.py +0 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/tests/test_cli.py +0 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/tests/test_core.py +0 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/tests/test_vectors.py +0 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/README.md +0 -0
- {matrixscroll-0.1.0 → matrixscroll-0.2.0}/vectors/_generate.py +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to the Matrix Scroll Python SDK are documented here. The
|
|
4
|
+
format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
|
|
5
|
+
this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [0.2.0] - 2026-06-20
|
|
8
|
+
|
|
9
|
+
Agent provenance release: Git commit envelopes, SDK module split, CI scaffolding.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **Git integration** — `matrixscroll/git.py` with post-commit envelope signing
|
|
13
|
+
and pre-push verification for commits being pushed.
|
|
14
|
+
- **Hook installer** — `matrixscroll hook-install` / `matrixscroll hook-status`
|
|
15
|
+
(hooks ship inside the wheel at `matrixscroll/hooks/`).
|
|
16
|
+
- **Commit envelope schema** — `schemas/commit-envelope.v1.json` plus release and
|
|
17
|
+
evidence-pack schemas under `schemas/`.
|
|
18
|
+
- **Signed examples** — `examples/*.signed.json` for CI and documentation.
|
|
19
|
+
- **Agent demo** — `examples/demo/agent-commit-demo.sh` and signed-example generator.
|
|
20
|
+
- **SDK split** — `canonical.py`, `manifest.py`, `policy.py`, `providers/` with
|
|
21
|
+
`_core.py` retained as a compatibility shim.
|
|
22
|
+
- **Policy verification** — `verify_manifest_with_policy()` for mode and trusted-key gates.
|
|
23
|
+
- **YubiKey prototype** — `providers/yubikey.py` boundary (`MATRIXSCROLL_MODE=yubikey`).
|
|
24
|
+
- **CI** — `verify-manifest` workflow and protected-branch example using
|
|
25
|
+
`SSX360/matrixscroll-verify-action@v1`.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
- CLI adds `envelope`, `envelope-verify`, and hook subcommands.
|
|
29
|
+
- Commit envelopes bind to the **actual** commit SHA via post-commit signing.
|
|
30
|
+
|
|
31
|
+
## [0.1.1] - 2026-06-19
|
|
32
|
+
|
|
33
|
+
Copy and citation hardening patch. No protocol or API changes.
|
|
34
|
+
|
|
35
|
+
### Changed
|
|
36
|
+
- Clarified public README and package metadata: v0.1.x ships a software root of
|
|
37
|
+
trust; SSX360/NXP SE050 hardware signing is the compatible reference-device
|
|
38
|
+
path in progress.
|
|
39
|
+
- Replaced a direct PDF citation that may return `403` from some environments
|
|
40
|
+
with resolvable official agency pages for the joint agentic-AI guidance.
|
|
41
|
+
- Added regression checks so PyPI-facing metadata avoids over-strong hardware
|
|
42
|
+
availability claims.
|
|
43
|
+
|
|
44
|
+
## [0.1.0] - 2026-06-19
|
|
45
|
+
|
|
46
|
+
Initial public release. Extracted from the SSX360 reference implementation.
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
- `EmulatedProvider` — software Ed25519 root of trust backed by a local key
|
|
50
|
+
store at `~/.matrixscroll/device.json` (override with `MATRIXSCROLL_HOME`).
|
|
51
|
+
Private seed is written 0600 at file-create time (no write-then-chmod race).
|
|
52
|
+
- `HardwareProvider` — typed stub for the NXP SE050 secure element; reports
|
|
53
|
+
`is_available()` honestly so read-only surfaces can render without crashing
|
|
54
|
+
before the SE050 transport ships.
|
|
55
|
+
- `status()` — soft status surface returning `available`/`reason` without
|
|
56
|
+
raising; `identity_info()` retains the loud-failure behavior used by signing.
|
|
57
|
+
- `sign_manifest()` / `verify_manifest()` — manifest-level helpers using a
|
|
58
|
+
deterministic canonical JSON encoding (sorted keys, ASCII-escaped, NaN
|
|
59
|
+
rejected, `signature` block excluded).
|
|
60
|
+
- `matrixscroll` console script (`status` / `verify` / `sign`) for field
|
|
61
|
+
debugging and release-evidence verification without a host application.
|
|
62
|
+
- Conformance test vectors under `vectors/` for third-party implementations.
|
|
63
|
+
|
|
64
|
+
### Protocol
|
|
65
|
+
- Identity schema: `matrixscroll.identity.v1`.
|
|
66
|
+
- Signature schema: `matrixscroll.signature.v1`.
|
|
67
|
+
- Algorithm: `ed25519`.
|
|
68
|
+
- Device id format: `MS-XXXX-XXXX` (SHA-256 of the raw public key, first 8 hex
|
|
69
|
+
chars, uppercase).
|
|
70
|
+
|
|
71
|
+
[0.2.0]: https://github.com/SSX360/matrixscroll/releases/tag/v0.2.0
|
|
72
|
+
[0.1.1]: https://github.com/SSX360/matrixscroll/releases/tag/v0.1.1
|
|
73
|
+
[0.1.0]: https://github.com/SSX360/matrixscroll/releases/tag/v0.1.0
|
|
@@ -15,8 +15,8 @@ well-tested, spec-aware."
|
|
|
15
15
|
- **No new runtime dependencies** without discussion in an issue first. The
|
|
16
16
|
surface area of a cryptographic SDK should stay tight.
|
|
17
17
|
- **Signed commits preferred.** Use `git config commit.gpgsign true` or an SSH
|
|
18
|
-
signing key. Once the SSX360 device ships, hardware-
|
|
19
|
-
preferred default.
|
|
18
|
+
signing key. Once the SSX360 device ships, hardware-backed commit signing is
|
|
19
|
+
the preferred default.
|
|
20
20
|
|
|
21
21
|
## Development setup
|
|
22
22
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: matrixscroll
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Open protocol for
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Open protocol for signing AI-assisted code provenance with Ed25519; shipping software root of trust with SSX360 hardware support in progress.
|
|
5
5
|
Project-URL: Homepage, https://matrixscroll.com
|
|
6
6
|
Project-URL: Documentation, https://matrixscroll.com/docs
|
|
7
7
|
Project-URL: Source, https://github.com/SSX360/matrixscroll
|
|
@@ -31,23 +31,27 @@ Requires-Dist: cryptography>=41.0
|
|
|
31
31
|
Provides-Extra: dev
|
|
32
32
|
Requires-Dist: build>=1.0; extra == 'dev'
|
|
33
33
|
Requires-Dist: pytest>=7.4; extra == 'dev'
|
|
34
|
+
Provides-Extra: git
|
|
35
|
+
Provides-Extra: yubikey
|
|
34
36
|
Description-Content-Type: text/markdown
|
|
35
37
|
|
|
36
38
|
# Matrix Scroll
|
|
37
39
|
|
|
38
|
-
**Open protocol for
|
|
40
|
+
**Open protocol for signed AI-assisted code provenance.**
|
|
39
41
|
|
|
40
|
-
Every AI-generated change in your IDE
|
|
41
|
-
Ed25519
|
|
42
|
-
|
|
42
|
+
Every AI-generated change in your IDE can be cryptographically signed by an
|
|
43
|
+
Ed25519 identity and verified offline with a public key and one command. The
|
|
44
|
+
v0.2.x reference implementation ships a well-tested software root of trust
|
|
45
|
+
with Git commit-envelope hooks; SSX360/NXP SE050 hardware signing is the
|
|
46
|
+
compatible reference-device path in progress.
|
|
43
47
|
|
|
44
48
|
- 📜 **Spec:** [`SPEC.md`](SPEC.md) — wire format, canonical encoding, schemas.
|
|
45
49
|
- 🛡 **Agentic AI controls:** [`docs/AGENTIC_AI_SECURITY.md`](docs/AGENTIC_AI_SECURITY.md)
|
|
46
50
|
maps Matrix Scroll to the joint *Careful Adoption of Agentic AI Services* guidance.
|
|
47
|
-
- 🔐 **Algorithm:** Ed25519 (RFC 8032).
|
|
51
|
+
- 🔐 **Algorithm:** Ed25519 (RFC 8032). Private keys are never exposed by the SDK API.
|
|
48
52
|
- 🧪 **Conformance vectors:** [`vectors/`](vectors/) — for non-Python implementations.
|
|
49
53
|
- 🌐 **Site:** <https://matrixscroll.com>
|
|
50
|
-
- 🔧 **Reference device:** [SSX360](https://matrixscroll.com/device) (NXP SE050).
|
|
54
|
+
- 🔧 **Reference device:** [SSX360](https://matrixscroll.com/device) (NXP SE050 hardware path in progress).
|
|
51
55
|
|
|
52
56
|
```bash
|
|
53
57
|
pip install matrixscroll
|
|
@@ -70,6 +74,35 @@ signed = matrixscroll.sign_manifest({"release": "v1.0.0", "artifacts": [...]})
|
|
|
70
74
|
assert matrixscroll.verify_manifest(signed)
|
|
71
75
|
```
|
|
72
76
|
|
|
77
|
+
## Agent provenance for Git commits
|
|
78
|
+
|
|
79
|
+
When an AI agent (Cursor, Claude Code, Copilot, etc.) produces a commit, Matrix
|
|
80
|
+
Scroll attaches a signed **commit envelope** with actor, tool, and scope metadata.
|
|
81
|
+
Verify in CI without trusting the IDE.
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
pip install matrixscroll
|
|
85
|
+
matrixscroll hook-install
|
|
86
|
+
|
|
87
|
+
export MATRIXSCROLL_ACTOR_TYPE=agent
|
|
88
|
+
export MATRIXSCROLL_TOOL=cursor
|
|
89
|
+
git commit -m "feat: agent-assisted change"
|
|
90
|
+
|
|
91
|
+
matrixscroll envelope-verify "$(git rev-parse HEAD)"
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
See [`docs/quickstart-git.md`](docs/quickstart-git.md) and run
|
|
95
|
+
[`examples/demo/agent-commit-demo.sh`](examples/demo/agent-commit-demo.sh).
|
|
96
|
+
|
|
97
|
+
### CI verify
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
- uses: SSX360/matrixscroll-verify-action@v1
|
|
101
|
+
with:
|
|
102
|
+
manifest: examples/agentic_ai_evidence_manifest.signed.json
|
|
103
|
+
matrixscroll-version: "0.2.0"
|
|
104
|
+
```
|
|
105
|
+
|
|
73
106
|
## CLI
|
|
74
107
|
|
|
75
108
|
```bash
|
|
@@ -113,8 +146,10 @@ parsing the output.
|
|
|
113
146
|
(anyone, anywhere, offline)
|
|
114
147
|
```
|
|
115
148
|
|
|
116
|
-
The same Python API
|
|
117
|
-
SSX360 device. Switch with the `MATRIXSCROLL_MODE` environment
|
|
149
|
+
The same Python API is designed to serve the local software emulator and the
|
|
150
|
+
physical SSX360 device path. Switch with the `MATRIXSCROLL_MODE` environment
|
|
151
|
+
variable; in v0.1.x, `hardware` mode reports unavailable until the SE050
|
|
152
|
+
transport ships.
|
|
118
153
|
|
|
119
154
|
## Compliance levels
|
|
120
155
|
|
|
@@ -136,8 +171,8 @@ read-only dashboards can render before the hardware path is wired.
|
|
|
136
171
|
a race cannot silently clobber an existing key store.
|
|
137
172
|
- A corrupt or truncated store **fails loud** (`IdentityError`) rather than
|
|
138
173
|
silently minting a fresh identity. Identity rotation is an explicit operation.
|
|
139
|
-
- The hardware path holds nothing private on disk — the seed is sealed
|
|
140
|
-
secure element.
|
|
174
|
+
- The planned hardware path holds nothing private on disk — the seed is sealed
|
|
175
|
+
in the secure element. In v0.1.x, this path is a typed availability stub.
|
|
141
176
|
|
|
142
177
|
## Reference implementation, not the only one
|
|
143
178
|
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
# Matrix Scroll
|
|
2
2
|
|
|
3
|
-
**Open protocol for
|
|
3
|
+
**Open protocol for signed AI-assisted code provenance.**
|
|
4
4
|
|
|
5
|
-
Every AI-generated change in your IDE
|
|
6
|
-
Ed25519
|
|
7
|
-
|
|
5
|
+
Every AI-generated change in your IDE can be cryptographically signed by an
|
|
6
|
+
Ed25519 identity and verified offline with a public key and one command. The
|
|
7
|
+
v0.2.x reference implementation ships a well-tested software root of trust
|
|
8
|
+
with Git commit-envelope hooks; SSX360/NXP SE050 hardware signing is the
|
|
9
|
+
compatible reference-device path in progress.
|
|
8
10
|
|
|
9
11
|
- 📜 **Spec:** [`SPEC.md`](SPEC.md) — wire format, canonical encoding, schemas.
|
|
10
12
|
- 🛡 **Agentic AI controls:** [`docs/AGENTIC_AI_SECURITY.md`](docs/AGENTIC_AI_SECURITY.md)
|
|
11
13
|
maps Matrix Scroll to the joint *Careful Adoption of Agentic AI Services* guidance.
|
|
12
|
-
- 🔐 **Algorithm:** Ed25519 (RFC 8032).
|
|
14
|
+
- 🔐 **Algorithm:** Ed25519 (RFC 8032). Private keys are never exposed by the SDK API.
|
|
13
15
|
- 🧪 **Conformance vectors:** [`vectors/`](vectors/) — for non-Python implementations.
|
|
14
16
|
- 🌐 **Site:** <https://matrixscroll.com>
|
|
15
|
-
- 🔧 **Reference device:** [SSX360](https://matrixscroll.com/device) (NXP SE050).
|
|
17
|
+
- 🔧 **Reference device:** [SSX360](https://matrixscroll.com/device) (NXP SE050 hardware path in progress).
|
|
16
18
|
|
|
17
19
|
```bash
|
|
18
20
|
pip install matrixscroll
|
|
@@ -35,6 +37,35 @@ signed = matrixscroll.sign_manifest({"release": "v1.0.0", "artifacts": [...]})
|
|
|
35
37
|
assert matrixscroll.verify_manifest(signed)
|
|
36
38
|
```
|
|
37
39
|
|
|
40
|
+
## Agent provenance for Git commits
|
|
41
|
+
|
|
42
|
+
When an AI agent (Cursor, Claude Code, Copilot, etc.) produces a commit, Matrix
|
|
43
|
+
Scroll attaches a signed **commit envelope** with actor, tool, and scope metadata.
|
|
44
|
+
Verify in CI without trusting the IDE.
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
pip install matrixscroll
|
|
48
|
+
matrixscroll hook-install
|
|
49
|
+
|
|
50
|
+
export MATRIXSCROLL_ACTOR_TYPE=agent
|
|
51
|
+
export MATRIXSCROLL_TOOL=cursor
|
|
52
|
+
git commit -m "feat: agent-assisted change"
|
|
53
|
+
|
|
54
|
+
matrixscroll envelope-verify "$(git rev-parse HEAD)"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
See [`docs/quickstart-git.md`](docs/quickstart-git.md) and run
|
|
58
|
+
[`examples/demo/agent-commit-demo.sh`](examples/demo/agent-commit-demo.sh).
|
|
59
|
+
|
|
60
|
+
### CI verify
|
|
61
|
+
|
|
62
|
+
```yaml
|
|
63
|
+
- uses: SSX360/matrixscroll-verify-action@v1
|
|
64
|
+
with:
|
|
65
|
+
manifest: examples/agentic_ai_evidence_manifest.signed.json
|
|
66
|
+
matrixscroll-version: "0.2.0"
|
|
67
|
+
```
|
|
68
|
+
|
|
38
69
|
## CLI
|
|
39
70
|
|
|
40
71
|
```bash
|
|
@@ -78,8 +109,10 @@ parsing the output.
|
|
|
78
109
|
(anyone, anywhere, offline)
|
|
79
110
|
```
|
|
80
111
|
|
|
81
|
-
The same Python API
|
|
82
|
-
SSX360 device. Switch with the `MATRIXSCROLL_MODE` environment
|
|
112
|
+
The same Python API is designed to serve the local software emulator and the
|
|
113
|
+
physical SSX360 device path. Switch with the `MATRIXSCROLL_MODE` environment
|
|
114
|
+
variable; in v0.1.x, `hardware` mode reports unavailable until the SE050
|
|
115
|
+
transport ships.
|
|
83
116
|
|
|
84
117
|
## Compliance levels
|
|
85
118
|
|
|
@@ -101,8 +134,8 @@ read-only dashboards can render before the hardware path is wired.
|
|
|
101
134
|
a race cannot silently clobber an existing key store.
|
|
102
135
|
- A corrupt or truncated store **fails loud** (`IdentityError`) rather than
|
|
103
136
|
silently minting a fresh identity. Identity rotation is an explicit operation.
|
|
104
|
-
- The hardware path holds nothing private on disk — the seed is sealed
|
|
105
|
-
secure element.
|
|
137
|
+
- The planned hardware path holds nothing private on disk — the seed is sealed
|
|
138
|
+
in the secure element. In v0.1.x, this path is a typed availability stub.
|
|
106
139
|
|
|
107
140
|
## Reference implementation, not the only one
|
|
108
141
|
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schema": "matrixscroll.agentic_ai_controls.v1",
|
|
3
3
|
"sources": [
|
|
4
|
-
"https://
|
|
4
|
+
"https://www.cyber.gov.au/business-government/secure-design/artificial-intelligence/careful-adoption-of-agentic-ai-services",
|
|
5
5
|
"https://www.cisa.gov/resources-tools/resources/careful-adoption-agentic-ai-services",
|
|
6
|
+
"https://www.nsa.gov/aisc/",
|
|
7
|
+
"https://www.cyber.gc.ca/en/news-events/joint-guidance-careful-adoption-agentic-artificial-intelligence-services",
|
|
6
8
|
"https://www.ncsc.govt.nz/protect-your-organisation/careful-adoption-of-agentic-ai-services/",
|
|
7
9
|
"https://www.ncsc.gov.uk/blogs/thinking-carefully-before-adopting-agentic-ai"
|
|
8
10
|
],
|
|
@@ -13,7 +15,7 @@
|
|
|
13
15
|
"guidance": "Adopt agentic AI incrementally; prefer tightly scoped pilots before connecting agents to real systems or sensitive data.",
|
|
14
16
|
"matrixscroll_control": "Matrix Scroll signs bounded manifests rather than granting agents authority. The SDK records scope, task, reviewer, and policy fields as verifiable evidence.",
|
|
15
17
|
"evidence_paths": ["examples/agentic_ai_evidence_manifest.json", "README.md"],
|
|
16
|
-
"goes_beyond": "
|
|
18
|
+
"goes_beyond": "Signed boundary reviews are portable and independently auditable; the planned hardware path can bind them to a physical signer."
|
|
17
19
|
},
|
|
18
20
|
{
|
|
19
21
|
"id": "AAI-02",
|
|
@@ -29,7 +31,7 @@
|
|
|
29
31
|
"guidance": "Use temporary credentials where possible and revoke elevated access when work completes.",
|
|
30
32
|
"matrixscroll_control": "Manifests can require short-lived credential metadata and explicitly avoid embedding secrets. Tests enforce redaction-sensitive fields stay unsigned as labels only.",
|
|
31
33
|
"evidence_paths": ["SECURITY.md", "examples/agentic_ai_evidence_manifest.json"],
|
|
32
|
-
"goes_beyond": "The signing key itself never appears as an application credential; hardware mode seals it in SSX360/SE050."
|
|
34
|
+
"goes_beyond": "The signing key itself never appears as an application credential; the planned hardware mode seals it in SSX360/SE050."
|
|
33
35
|
},
|
|
34
36
|
{
|
|
35
37
|
"id": "AAI-04",
|
|
@@ -37,7 +39,7 @@
|
|
|
37
39
|
"guidance": "Define who owns the agent, approves access, monitors behaviour, reviews incidents, and can stop it.",
|
|
38
40
|
"matrixscroll_control": "Signed manifests carry owner, approver, reviewer, and break-glass contact fields as tamper-evident accountability evidence.",
|
|
39
41
|
"evidence_paths": ["examples/agentic_ai_evidence_manifest.json", "docs/AGENTIC_AI_SECURITY.md"],
|
|
40
|
-
"goes_beyond": "Approvals can be bound to a
|
|
42
|
+
"goes_beyond": "Approvals can be bound to a signature instead of a mutable log entry; the planned hardware path can bind that signature to a physical root of trust."
|
|
41
43
|
},
|
|
42
44
|
{
|
|
43
45
|
"id": "AAI-05",
|
|
@@ -83,7 +85,7 @@
|
|
|
83
85
|
"id": "AAI-10",
|
|
84
86
|
"title": "Strong authentication and non-repudiation",
|
|
85
87
|
"guidance": "Use strong authentication and avoid relying on weak internal safeguards for agent authority.",
|
|
86
|
-
"matrixscroll_control": "Ed25519 signatures bind agent evidence to a public key; hardware mode moves the private key into SSX360/SE050.",
|
|
88
|
+
"matrixscroll_control": "Ed25519 signatures bind agent evidence to a public key; the planned hardware mode moves the private key into SSX360/SE050.",
|
|
87
89
|
"evidence_paths": ["SPEC.md", "matrixscroll/_core.py", "SECURITY.md"],
|
|
88
90
|
"goes_beyond": "The private signing key is separated from agent runtime credentials and can be physically held or removed."
|
|
89
91
|
},
|
|
@@ -4,13 +4,12 @@ This document maps Matrix Scroll to the joint guidance **Careful Adoption of
|
|
|
4
4
|
Agentic AI Services** published by ASD's ACSC, CISA, NSA, the Canadian Centre
|
|
5
5
|
for Cyber Security, NCSC-NZ, and NCSC-UK.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
- <https://media.defense.gov/2026/Apr/30/2003922823/-1/-1/0/CAREFUL%20ADOPTION%20OF%20AGENTIC%20AI%20SERVICES_FINAL.PDF>
|
|
10
|
-
|
|
11
|
-
Additional public mirrors/summaries used for traceability:
|
|
7
|
+
Official public sources verified for traceability:
|
|
12
8
|
|
|
9
|
+
- <https://www.cyber.gov.au/business-government/secure-design/artificial-intelligence/careful-adoption-of-agentic-ai-services>
|
|
13
10
|
- <https://www.cisa.gov/resources-tools/resources/careful-adoption-agentic-ai-services>
|
|
11
|
+
- <https://www.nsa.gov/aisc/>
|
|
12
|
+
- <https://www.cyber.gc.ca/en/news-events/joint-guidance-careful-adoption-agentic-artificial-intelligence-services>
|
|
14
13
|
- <https://www.ncsc.govt.nz/protect-your-organisation/careful-adoption-of-agentic-ai-services/>
|
|
15
14
|
- <https://www.ncsc.gov.uk/blogs/thinking-carefully-before-adopting-agentic-ai>
|
|
16
15
|
|
|
@@ -40,7 +39,7 @@ The machine-readable control matrix lives at
|
|
|
40
39
|
| AAI-07 | Monitoring and auditability | Signed manifests are portable audit records verifiable offline. |
|
|
41
40
|
| AAI-08 | Incident response / kill switch | CI/CLI verification exits non-zero; manifests include escalation and shutdown metadata. |
|
|
42
41
|
| AAI-09 | Supply-chain management | Minimal deps, Dependabot, CI build verification, and conformance vectors. |
|
|
43
|
-
| AAI-10 | Strong authentication / non-repudiation | Ed25519 identity; SSX360 hardware mode keeps private keys out of agent runtimes. |
|
|
42
|
+
| AAI-10 | Strong authentication / non-repudiation | Ed25519 identity; the planned SSX360 hardware mode keeps private keys out of agent runtimes. |
|
|
44
43
|
| AAI-11 | Governance and change control | CODEOWNERS + CI protect spec/core/vectors/security files. |
|
|
45
44
|
| AAI-12 | Deception / prompt-injection resilience | Trust is verified after agent action; model text cannot forge signatures. |
|
|
46
45
|
|
|
@@ -51,8 +50,9 @@ Matrix Scroll adds a stronger evidence layer on top:
|
|
|
51
50
|
|
|
52
51
|
1. **Offline verification** — auditors can verify a manifest without trusting
|
|
53
52
|
Matrix Scroll servers, the original CI system, or the agent runtime.
|
|
54
|
-
2. **Hardware-rooted provenance** — SSX360 L2
|
|
55
|
-
secure element so the agent cannot exfiltrate it as a normal
|
|
53
|
+
2. **Hardware-rooted provenance path** — the SSX360 L2 design moves the signing
|
|
54
|
+
key into a secure element so the agent cannot exfiltrate it as a normal
|
|
55
|
+
credential. In v0.1.x, this is a typed provider path awaiting SE050 transport.
|
|
56
56
|
3. **Fail-closed policy gates** — the CLI returns exit `2` for tampered,
|
|
57
57
|
unsigned, malformed, wrong-schema, wrong-algorithm, or wrong-device-id input.
|
|
58
58
|
4. **Executable conformance** — `vectors/` lets third-party implementations
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# SSX360 hardware provider (L2)
|
|
2
|
+
|
|
3
|
+
**Status:** Stage-0 prototype — `HardwareProvider` reports unavailable until the
|
|
4
|
+
NXP SE050 transport ships on the SSX360 reference device.
|
|
5
|
+
|
|
6
|
+
## Planned behavior
|
|
7
|
+
|
|
8
|
+
- `MATRIXSCROLL_MODE=hardware` selects the secure-element provider
|
|
9
|
+
- Private keys never leave the SE050; no seed on disk
|
|
10
|
+
- User-presence touch gating for protected-branch commits
|
|
11
|
+
- Compatible with the same manifest and commit-envelope schemas as L1 emulated mode
|
|
12
|
+
|
|
13
|
+
## Related docs
|
|
14
|
+
|
|
15
|
+
- [`docs/yubikey-bridge.md`](yubikey-bridge.md) — bridge path before SSX360 GA
|
|
16
|
+
- [`SPEC.md`](../SPEC.md) — wire format (unchanged for L2 signing algorithm)
|
|
17
|
+
|
|
18
|
+
## Device
|
|
19
|
+
|
|
20
|
+
Reference hardware: [matrixscroll.com/device](https://matrixscroll.com/device)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Git Quickstart
|
|
2
|
+
|
|
3
|
+
Matrix Scroll Git hooks attach a signed **commit envelope** to every local commit.
|
|
4
|
+
|
|
5
|
+
## Install hooks
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install matrixscroll
|
|
9
|
+
matrixscroll hook-install
|
|
10
|
+
matrixscroll hook-status
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Hooks ship inside the Python wheel (`matrixscroll/hooks/`). No separate clone path
|
|
14
|
+
is required for pip-installed users.
|
|
15
|
+
|
|
16
|
+
## What happens on commit
|
|
17
|
+
|
|
18
|
+
1. **post-commit** reads the new commit SHA and builds a commit envelope from `git show`
|
|
19
|
+
2. The envelope is signed with your active Matrix Scroll identity
|
|
20
|
+
3. The signed envelope is stored at `.git/matrixscroll/envelopes/<sha>.json`
|
|
21
|
+
|
|
22
|
+
**pre-push** verifies envelopes only for commits being pushed (not every envelope
|
|
23
|
+
ever stored locally).
|
|
24
|
+
|
|
25
|
+
By default hooks run in **warn mode** (signing failures do not block commits).
|
|
26
|
+
Enable enforce mode in `.git/matrixscroll/config.json`:
|
|
27
|
+
|
|
28
|
+
```json
|
|
29
|
+
{
|
|
30
|
+
"enforce": true,
|
|
31
|
+
"actor_type": "human",
|
|
32
|
+
"tool": "cursor"
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Agent provenance
|
|
37
|
+
|
|
38
|
+
Set environment variables before committing:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
export MATRIXSCROLL_ACTOR_TYPE=agent
|
|
42
|
+
export MATRIXSCROLL_TOOL=cursor
|
|
43
|
+
export MATRIXSCROLL_AGENT_SCOPE=examples/agentic_ai_evidence_manifest.signed.json
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Verify in CI
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
matrixscroll verify .git/matrixscroll/envelopes/<commit-sha>.json
|
|
50
|
+
matrixscroll envelope-verify <commit-sha>
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Or use [`SSX360/matrixscroll-verify-action@v1`](https://github.com/SSX360/matrixscroll-verify-action).
|
|
54
|
+
|
|
55
|
+
## Demo
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
bash examples/demo/agent-commit-demo.sh
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
See [spec](../superpowers/specs/2026-06-19-matrixscroll-git-design.md).
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# CI Action Implementation Plan
|
|
2
|
+
|
|
3
|
+
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development or superpowers:executing-plans to implement this plan task-by-task.
|
|
4
|
+
|
|
5
|
+
**Goal:** Provide a zero-config GitHub Action that runs `matrixscroll verify` with CI-friendly exit codes.
|
|
6
|
+
|
|
7
|
+
**Architecture:** Composite action installs matrixscroll from PyPI, runs verify on one or more manifest paths, optionally applies policy flags.
|
|
8
|
+
|
|
9
|
+
**Tech Stack:** GitHub Actions, Python 3.10+, matrixscroll CLI
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## Exit code contract
|
|
14
|
+
|
|
15
|
+
| Code | Meaning | CI interpretation |
|
|
16
|
+
|------|---------|-------------------|
|
|
17
|
+
| 0 | Valid signature | Pass check |
|
|
18
|
+
| 1 | Usage/config error | Fail workflow (misconfiguration) |
|
|
19
|
+
| 2 | Verification failed | Fail workflow (tampered/invalid) |
|
|
20
|
+
|
|
21
|
+
The action MUST propagate CLI exit codes unchanged (`set -e` in bash step).
|
|
22
|
+
|
|
23
|
+
## Action inputs
|
|
24
|
+
|
|
25
|
+
| Input | Required | Default | Description |
|
|
26
|
+
|-------|----------|---------|-------------|
|
|
27
|
+
| `manifest` | yes | — | Path to signed manifest JSON |
|
|
28
|
+
| `python-version` | no | `3.12` | Python for pip install |
|
|
29
|
+
| `matrixscroll-version` | no | `latest` | Pin e.g. `0.1.1` for reproducibility |
|
|
30
|
+
| `require-mode` | no | `` | Pass through to policy verify (v0.2.1) |
|
|
31
|
+
| `trusted-keys` | no | `` | Path to trusted keys JSON (v0.2.1) |
|
|
32
|
+
|
|
33
|
+
## Action outputs
|
|
34
|
+
|
|
35
|
+
| Output | Description |
|
|
36
|
+
|--------|-------------|
|
|
37
|
+
| `ok` | `true` or `false` |
|
|
38
|
+
| `device_id` | Signer device id from manifest |
|
|
39
|
+
| `mode` | Provider mode (`emulated`, `hardware`, `yubikey`) |
|
|
40
|
+
|
|
41
|
+
## Files
|
|
42
|
+
|
|
43
|
+
| File | Purpose |
|
|
44
|
+
|------|---------|
|
|
45
|
+
| `matrixscroll-action/action.yml` | Composite action definition |
|
|
46
|
+
| `matrixscroll-action/README.md` | Usage docs |
|
|
47
|
+
| `matrixscroll/.github/workflows/verify-manifest.yml` | Dogfood workflow |
|
|
48
|
+
| `matrixscroll/examples/ci/protected-branch.yml` | Copy-paste template |
|
|
49
|
+
|
|
50
|
+
## Protected branch pattern
|
|
51
|
+
|
|
52
|
+
```yaml
|
|
53
|
+
name: provenance
|
|
54
|
+
on:
|
|
55
|
+
pull_request:
|
|
56
|
+
branches: [main]
|
|
57
|
+
jobs:
|
|
58
|
+
verify-release-manifest:
|
|
59
|
+
runs-on: ubuntu-latest
|
|
60
|
+
steps:
|
|
61
|
+
- uses: actions/checkout@v4
|
|
62
|
+
- uses: SSX360/matrixscroll-verify-action@v1
|
|
63
|
+
with:
|
|
64
|
+
manifest: examples/release-manifest.signed.json
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Release verification pattern
|
|
68
|
+
|
|
69
|
+
1. Build job signs release manifest, uploads artifact
|
|
70
|
+
2. Verify job downloads artifact, runs action
|
|
71
|
+
3. Deploy job requires verify job success
|
|
72
|
+
|
|
73
|
+
## Task checklist
|
|
74
|
+
|
|
75
|
+
- [x] Write action.yml composite action
|
|
76
|
+
- [x] Add dogfood workflow in matrixscroll repo
|
|
77
|
+
- [x] Add protected-branch example
|
|
78
|
+
- [ ] Publish action repo and tag v1 (manual release step)
|
|
79
|
+
- [ ] Add signed release-manifest to examples once v0.2.0 ships
|
|
80
|
+
|
|
81
|
+
## Verification
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
cd matrixscroll
|
|
85
|
+
pip install -e ".[dev]"
|
|
86
|
+
pytest tests/test_cli.py -v
|
|
87
|
+
matrixscroll verify examples/agentic_ai_evidence_manifest.json # expect exit 2 unsigned
|
|
88
|
+
```
|