agentack 0.6.2__tar.gz → 0.7.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.
- agentack-0.7.0/CHANGELOG.md +50 -0
- {agentack-0.6.2 → agentack-0.7.0}/CITATION.cff +2 -2
- {agentack-0.6.2 → agentack-0.7.0}/MANIFEST.in +5 -1
- agentack-0.7.0/Makefile +25 -0
- agentack-0.7.0/PKG-INFO +179 -0
- agentack-0.7.0/README.md +148 -0
- agentack-0.7.0/assets/social/github-social-card-agentack.png +0 -0
- agentack-0.7.0/docs/claude-code.md +45 -0
- agentack-0.7.0/docs/codex-cli.md +79 -0
- agentack-0.7.0/docs/compatibility-2026-11-04.md +36 -0
- agentack-0.7.0/docs/implementation-2026-11-04.md +43 -0
- agentack-0.7.0/docs/live-coverage.md +37 -0
- {agentack-0.6.2 → agentack-0.7.0}/docs/method.md +12 -3
- agentack-0.7.0/docs/migration-0.7.md +43 -0
- agentack-0.7.0/docs/release-0.7.0.md +31 -0
- agentack-0.7.0/docs/release-candidate.md +36 -0
- {agentack-0.6.2 → agentack-0.7.0}/docs/releasing.md +4 -0
- {agentack-0.6.2 → agentack-0.7.0}/docs/report-schema.md +10 -3
- {agentack-0.6.2 → agentack-0.7.0}/docs/security.md +17 -11
- {agentack-0.6.2 → agentack-0.7.0}/docs/trace-format.md +6 -0
- agentack-0.7.0/docs/verification.md +23 -0
- {agentack-0.6.2 → agentack-0.7.0}/pyproject.toml +2 -1
- agentack-0.7.0/scripts/showcase.py +55 -0
- agentack-0.7.0/scripts/smoke.py +29 -0
- agentack-0.7.0/scripts/verify_corpus.py +42 -0
- agentack-0.7.0/scripts/verify_wheel.py +51 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/__init__.py +1 -1
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/adapters/claude_analysis.py +60 -46
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/adapters/claude_capture.py +32 -19
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/adapters/claude_live.py +58 -6
- agentack-0.7.0/src/agentack/adapters/claude_validation.py +228 -0
- agentack-0.7.0/src/agentack/adapters/codex.py +64 -0
- agentack-0.7.0/src/agentack/adapters/otel.py +242 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/canonical.py +7 -1
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/cli.py +3 -3
- agentack-0.7.0/src/agentack/coverage.py +50 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/engine.py +66 -29
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/findings.py +2 -2
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/models.py +26 -8
- agentack-0.7.0/src/agentack/parser.py +55 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/policy.py +17 -2
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/provenance.py +35 -10
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/recorder.py +20 -7
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/report.py +1 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/ux.py +1 -1
- agentack-0.7.0/src/agentack/validation.py +128 -0
- agentack-0.7.0/src/agentack.egg-info/PKG-INFO +179 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack.egg-info/SOURCES.txt +26 -3
- agentack-0.7.0/tests/fixtures/codex_app_server/approve_turn.jsonl +4 -0
- agentack-0.7.0/tests/fixtures/live_probes/codex_interrupt_bypass.json +15 -0
- agentack-0.7.0/tests/fixtures/live_probes/codex_replay_bypass.json +15 -0
- agentack-0.7.0/tests/fixtures/live_probes/codex_route_around_bypass.json +15 -0
- agentack-0.7.0/tests/integrity_cases.py +81 -0
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_adapter_hardening.py +6 -6
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_adapters_claude.py +15 -15
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_adapters_codex.py +26 -78
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_canonical.py +3 -3
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_cli.py +1 -1
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_cli_codex.py +21 -20
- agentack-0.7.0/tests/test_cli_decisions.py +66 -0
- agentack-0.7.0/tests/test_decision_binding.py +314 -0
- agentack-0.7.0/tests/test_generated_lifecycles.py +43 -0
- agentack-0.7.0/tests/test_integrity_corpus.py +21 -0
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_live_coverage.py +3 -5
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_parser.py +2 -1
- agentack-0.7.0/tests/test_provenance.py +281 -0
- agentack-0.7.0/tests/test_release_metadata.py +61 -0
- agentack-0.7.0/tests/test_review_repairs.py +280 -0
- agentack-0.7.0/tests/test_validation_contract.py +248 -0
- agentack-0.6.2/Makefile +0 -31
- agentack-0.6.2/PKG-INFO +0 -271
- agentack-0.6.2/README.md +0 -241
- agentack-0.6.2/assets/social/README.md +0 -0
- agentack-0.6.2/docs/claude-code.md +0 -88
- agentack-0.6.2/docs/codex-cli.md +0 -127
- agentack-0.6.2/docs/live-coverage.md +0 -32
- agentack-0.6.2/src/agentack/adapters/codex.py +0 -393
- agentack-0.6.2/src/agentack/adapters/otel.py +0 -150
- agentack-0.6.2/src/agentack/coverage.py +0 -49
- agentack-0.6.2/src/agentack/parser.py +0 -73
- agentack-0.6.2/src/agentack.egg-info/PKG-INFO +0 -271
- agentack-0.6.2/tests/test_codex_live_regression.py +0 -152
- agentack-0.6.2/tests/test_provenance.py +0 -127
- agentack-0.6.2/tests/test_release_metadata.py +0 -30
- {agentack-0.6.2 → agentack-0.7.0}/CONTRIBUTING.md +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/LICENSE +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/SECURITY.md +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/docs/standards-mapping.md +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/examples/action-swap.jsonl +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/examples/secure.jsonl +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/examples/strict.toml +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/setup.cfg +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/__main__.py +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/adapters/__init__.py +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/adapters/base.py +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/adapters/claude.py +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/adapters/codex_analysis.py +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/adapters/codex_protocol.py +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack/demo.py +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack.egg-info/dependency_links.txt +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack.egg-info/entry_points.txt +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack.egg-info/requires.txt +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/src/agentack.egg-info/top_level.txt +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_block_lifecycle.py +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_engine.py +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_live_probe_corpus.py +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_policy.py +0 -0
- {agentack-0.6.2 → agentack-0.7.0}/tests/test_recorder.py +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.7.0
|
|
4
|
+
|
|
5
|
+
Release prepared on 2026-11-04.
|
|
6
|
+
|
|
7
|
+
### Independent-review corrections
|
|
8
|
+
|
|
9
|
+
- R1: validate OTLP typed-value shapes and reject contradictory decision/source aliases. Retain matching aliases, valid nested metadata and identical exporter retries.
|
|
10
|
+
- R2: require session, tool and invocation correlation before attributing decisions or execution. Unrelated evidence remains incomplete and cannot fabricate a violation; independently established violations are retained.
|
|
11
|
+
- R3: treat both successful and failed tool execution after a matched rejection as ACK002. An approved tool failure remains a separate incomplete control path.
|
|
12
|
+
- Add 32 regression tests covering the findings and adjacent positive/negative controls. All 32 independently authored semantic probes and 37 malformed-input checks pass after repair.
|
|
13
|
+
- Finalize identity-2 and report-schema-2 migration guidance and public installation examples. Keep the Claude live probe experimental pending fresh supervised validation.
|
|
14
|
+
|
|
15
|
+
See [release verification](docs/release-0.7.0.md). The rc1 entry below records the earlier implementation state.
|
|
16
|
+
|
|
17
|
+
## 0.7.0rc1
|
|
18
|
+
|
|
19
|
+
Unreleased candidate prepared on 4 November 2026.
|
|
20
|
+
|
|
21
|
+
### Correctness
|
|
22
|
+
|
|
23
|
+
- Validate decision and terminal evidence for every Claude probe, including replay and alternate-route probes.
|
|
24
|
+
- Detect recorded execution after rejection even when a fresh prompt was shown.
|
|
25
|
+
- Reject success claims based on missing outcomes, wrong-session decisions, wrong-tool decisions, ambiguous identifiers or conflicting decisions.
|
|
26
|
+
- Validate terminal session order, capture chronology and per-invocation evidence.
|
|
27
|
+
- Apply shared validation to JSONL input, direct Python evaluation and recording. Reject malformed values with documented errors instead of tracebacks.
|
|
28
|
+
- Bound line reads, total trace/capture size and JSON nesting. Treat telemetry loss or invalid capture as incomplete.
|
|
29
|
+
- Keep input-error status separate from security violations.
|
|
30
|
+
|
|
31
|
+
### Identity and compatibility
|
|
32
|
+
|
|
33
|
+
- Action identity version 2 retains the supplied tool and operation. Broad aliases remain available only for policy matching.
|
|
34
|
+
- Claude capture version 2 binds native tool identity and a working-directory digest. Old captures cannot establish the new guarantee.
|
|
35
|
+
- Report schema version 2 identifies the hash semantics. Trace schema version 2 remains readable.
|
|
36
|
+
- Add Claude CLI capability checks and require an interactive terminal for live probes. CLI preflight does not claim live validation.
|
|
37
|
+
- Preserve Codex detection-only status after offline schema inspection. No model-driven Codex session was run.
|
|
38
|
+
|
|
39
|
+
### Verification and release preparation
|
|
40
|
+
|
|
41
|
+
- Add the approval-integrity-v1 synthetic corpus and generated lifecycle mutation checks with positive controls.
|
|
42
|
+
- Type-check the complete runtime, retain the Python/OS CI matrix, and test installed wheels.
|
|
43
|
+
- Gate publication on the full CI workflow for the exact release commit. Reject prerelease versions in the publication workflow.
|
|
44
|
+
- Add migration notes, a dated compatibility record and a reproducible offline demonstration.
|
|
45
|
+
|
|
46
|
+
No GitHub release or PyPI publication is implied by this candidate entry.
|
|
47
|
+
|
|
48
|
+
## 0.6.3
|
|
49
|
+
|
|
50
|
+
Published on 19 August 2026. The subsequent main-branch denial-authority and attribution corrections from 7 September were not included in the published 0.6.3 wheel. Version 0.7.0 includes those source changes.
|
|
@@ -6,4 +6,8 @@ include README.md
|
|
|
6
6
|
include SECURITY.md
|
|
7
7
|
recursive-include docs *.md
|
|
8
8
|
recursive-include examples *.jsonl *.toml
|
|
9
|
-
include assets/social/
|
|
9
|
+
include assets/social/github-social-card-agentack.png
|
|
10
|
+
|
|
11
|
+
include CHANGELOG.md
|
|
12
|
+
recursive-include scripts *.py
|
|
13
|
+
recursive-include tests *.py *.json *.jsonl
|
agentack-0.7.0/Makefile
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
.PHONY: test smoke lint typecheck check build package-check release-check
|
|
2
|
+
|
|
3
|
+
test:
|
|
4
|
+
python -m unittest discover -s tests -v
|
|
5
|
+
|
|
6
|
+
smoke:
|
|
7
|
+
python scripts/smoke.py
|
|
8
|
+
|
|
9
|
+
lint:
|
|
10
|
+
python -m ruff check .
|
|
11
|
+
|
|
12
|
+
typecheck:
|
|
13
|
+
python -m mypy src/agentack
|
|
14
|
+
|
|
15
|
+
check: lint typecheck test smoke
|
|
16
|
+
python scripts/verify_corpus.py
|
|
17
|
+
|
|
18
|
+
build:
|
|
19
|
+
rm -rf build dist
|
|
20
|
+
python -m build
|
|
21
|
+
|
|
22
|
+
package-check:
|
|
23
|
+
python -m twine check dist/*
|
|
24
|
+
|
|
25
|
+
release-check: check build package-check
|
agentack-0.7.0/PKG-INFO
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: agentack
|
|
3
|
+
Version: 0.7.0
|
|
4
|
+
Summary: Test whether human approval controls for AI agents actually work.
|
|
5
|
+
Author: Sylvester Kaczmarek
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/sylvesterkaczmarek/agentack
|
|
8
|
+
Project-URL: Repository, https://github.com/sylvesterkaczmarek/agentack
|
|
9
|
+
Project-URL: Issues, https://github.com/sylvesterkaczmarek/agentack/issues
|
|
10
|
+
Keywords: ai-agents,ai-security,human-in-the-loop,agentic-security,approval
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Environment :: Console
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Information Technology
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
20
|
+
Classifier: Topic :: Security
|
|
21
|
+
Classifier: Topic :: Software Development :: Testing
|
|
22
|
+
Requires-Python: >=3.11
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: LICENSE
|
|
25
|
+
Provides-Extra: dev
|
|
26
|
+
Requires-Dist: build<2,>=1.2; extra == "dev"
|
|
27
|
+
Requires-Dist: mypy<2,>=1.16; extra == "dev"
|
|
28
|
+
Requires-Dist: ruff<1,>=0.12; extra == "dev"
|
|
29
|
+
Requires-Dist: twine<7,>=6; extra == "dev"
|
|
30
|
+
Dynamic: license-file
|
|
31
|
+
|
|
32
|
+
# AgentAck
|
|
33
|
+
|
|
34
|
+

|
|
35
|
+
|
|
36
|
+
[](https://github.com/sylvesterkaczmarek/agentack/actions/workflows/ci.yml)
|
|
37
|
+

|
|
38
|
+

|
|
39
|
+
|
|
40
|
+
**Test whether human approval controls for AI agents actually work.**
|
|
41
|
+
|
|
42
|
+
AgentAck is a local-first CLI and Python library for checking whether executed actions remain bound to human approval, whether denials are respected, and whether required evidence is complete. Its deterministic core has no third-party runtime dependencies and does not execute the actions described in a trace.
|
|
43
|
+
|
|
44
|
+
## Version 0.7
|
|
45
|
+
|
|
46
|
+
Version **0.7.0** strengthens approval-evidence validation and exact action identity. It includes the September denial-handling fixes that were absent from the published 0.6.3 package, and all three corrections identified during the independent review of the 0.7 candidate.
|
|
47
|
+
|
|
48
|
+
Read [the migration notes](docs/migration-0.7.md) before upgrading integrations. Action fingerprints, reports and Claude capture have versioned semantics. See [release verification](docs/release-0.7.0.md) and [the changelog](CHANGELOG.md) for the changes and checks.
|
|
49
|
+
|
|
50
|
+
The deterministic checker is verified against synthetic test cases. The optional Claude live probe is **experimental and awaits fresh supervised validation**. Codex remains detection/trace-only. Neither fixture results nor CLI preflight establish production-agent safety or effects on human behaviour.
|
|
51
|
+
|
|
52
|
+
## Install and try
|
|
53
|
+
|
|
54
|
+
Install the command-line tool in an isolated environment:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
pipx install agentack==0.7.0
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Or install the Python package:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
python -m pip install agentack==0.7.0
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Then run the account-free demonstration:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
agentack demo
|
|
70
|
+
agentack coverage
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
These commands inspect synthetic evidence and do not execute the actions it describes. `agentack demo` includes a valid approval and an action changed after approval.
|
|
74
|
+
|
|
75
|
+
For development and the complete regression suite:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
python -m venv .venv
|
|
79
|
+
# Activate .venv using your operating system's normal command.
|
|
80
|
+
python -m pip install -e '.[dev]'
|
|
81
|
+
make check
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
## What it checks
|
|
85
|
+
|
|
86
|
+
| Rule | Check |
|
|
87
|
+
| --- | --- |
|
|
88
|
+
| ACK001 | required approval missing |
|
|
89
|
+
| ACK002 | denied action executed |
|
|
90
|
+
| ACK003 | proposed, presented or executed action changed |
|
|
91
|
+
| ACK004 | single-use approval replayed |
|
|
92
|
+
| ACK005 | approval expired |
|
|
93
|
+
| ACK006 | lifecycle ordering invalid |
|
|
94
|
+
| ACK007 | denial routed around through a linked intent |
|
|
95
|
+
| ACK008 | execution after a terminal interrupt |
|
|
96
|
+
| ACK009 | evidence incomplete or inconsistent |
|
|
97
|
+
|
|
98
|
+
`PASS` means the enabled checks found no violation in sufficiently complete recorded evidence. `FAIL` means a violation was demonstrated. `INCOMPLETE` means the required conclusion cannot be established. Malformed input is a separate input error.
|
|
99
|
+
|
|
100
|
+
## Commands
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
agentack demo
|
|
104
|
+
agentack demo action-swap
|
|
105
|
+
agentack init agentack.toml
|
|
106
|
+
agentack check trace.jsonl --policy agentack.toml --json report.json --sarif report.sarif
|
|
107
|
+
agentack rules
|
|
108
|
+
agentack explain ACK003
|
|
109
|
+
agentack doctor
|
|
110
|
+
agentack coverage
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Exit codes are 0 for PASS, 1 for FAIL, 2 for invalid input/output, and 3 for INCOMPLETE. The private capture hook deliberately uses 1, never Claude's blocking hook exit code 2, for recorder errors.
|
|
114
|
+
|
|
115
|
+
[Trace format](docs/trace-format.md) and [report schema](docs/report-schema.md) describe the interfaces. JSON and SARIF reports omit raw action parameters and include versioned identity/provenance fields.
|
|
116
|
+
|
|
117
|
+
## Integrations
|
|
118
|
+
|
|
119
|
+
| Agent | Detection | Live test | Status |
|
|
120
|
+
| --- | --- | --- | --- |
|
|
121
|
+
| Claude Code | yes | experimental supervised probe | version/flag preflight plus human prompts; fresh live validation pending |
|
|
122
|
+
| Codex CLI | yes | no | offline protocol research and regression fixtures; no verified live boundary |
|
|
123
|
+
| Gemini CLI | yes | no | detection only |
|
|
124
|
+
| Cursor CLI | yes | no | detection only |
|
|
125
|
+
|
|
126
|
+
`agentack doctor` uses **TESTABLE** for a Claude CLI that passes local version/flag preflight. This is not a live verification result. It uses **DETECTED** for Codex and never starts an App Server turn.
|
|
127
|
+
|
|
128
|
+
A human can explicitly run the Claude probe from an interactive terminal:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
agentack test claude --json claude-result.json --sarif claude-result.sarif
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
AgentAck asks the person to approve or deny four harmless commands through Claude's native prompts. It never answers them on the person's behalf. Hooks capture native tool and hashed working-directory context. Decision telemetry must match the session and tool invocation. Every probe is checked through its decision and terminal outcome; a prompt alone is insufficient. Contradictory or malformed telemetry is rejected. A correctly matched rejection followed by successful or failed tool execution is a violation.
|
|
135
|
+
|
|
136
|
+
`agentack coverage` distinguishes deterministic **TESTED** cases, implemented live **PROBE** paths, evidence **GUARDED** paths, **TRACE**-only coverage and unsupported **SKIP** paths. It is a capability map, not a claim that a particular installed version has passed.
|
|
137
|
+
|
|
138
|
+
See [Claude setup](docs/claude-code.md), [Codex limits](docs/codex-cli.md), [coverage](docs/live-coverage.md), and [dated compatibility evidence](docs/compatibility-2026-11-04.md).
|
|
139
|
+
|
|
140
|
+
## Python interface
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
from agentack import evaluate_events
|
|
144
|
+
from agentack.parser import read_jsonl
|
|
145
|
+
|
|
146
|
+
report = evaluate_events(read_jsonl("trace.jsonl"))
|
|
147
|
+
print(report.status)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Direct Python calls receive the same structural validation as file inputs. Invalid input raises `TraceValidationError`, a `ValueError` subclass. `Recorder` validates events before writing. A recording can only be appended to the same unfinished session.
|
|
151
|
+
|
|
152
|
+
Broad policy aliases such as `Bash` to `shell` apply to policy matching. Identity version 2 preserves the supplied execution tool and operation instead. Different interpreters or supplied execution contexts therefore produce different hashes. A hash binds recorded data; it does not authenticate its producer or prove that an interpreter, directory or action was observed faithfully.
|
|
153
|
+
|
|
154
|
+
## Verification
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
make check
|
|
158
|
+
make release-check
|
|
159
|
+
python scripts/verify_wheel.py dist/agentack-0.7.0-py3-none-any.whl
|
|
160
|
+
python scripts/showcase.py --output ./agentack-showcase
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
The 237-test suite includes named reproductions of the review findings, all 120 permutations of a five-event lifecycle, and seeded action substitutions paired with valid controls. The named corpus reports false passes, false failures and expected incomplete classifications. Every fixture is labelled synthetic.
|
|
164
|
+
|
|
165
|
+
The release workflow requires the complete CI workflow on the exact release commit before building or publishing. Release candidates cannot be published by that workflow. Publication follows verification of the exact commit. Fresh supervised live-agent validation is a separate integration qualification and is not claimed by this release.
|
|
166
|
+
|
|
167
|
+
## Scope and security
|
|
168
|
+
|
|
169
|
+
AgentAck is an evidence checker, not an execution sandbox or permission-enforcement service. It cannot prove that a person saw or understood a presentation, detect an omitted action from a compromised emitter, or establish arbitrary natural-language intent equivalence. Independent capture at the execution boundary is needed for stronger deployments.
|
|
170
|
+
|
|
171
|
+
See [method](docs/method.md), [security model](docs/security.md), [standards mapping](docs/standards-mapping.md), and [security reporting](SECURITY.md).
|
|
172
|
+
|
|
173
|
+
## Cite this repository
|
|
174
|
+
|
|
175
|
+
Citation metadata is available in [CITATION.cff](CITATION.cff).
|
|
176
|
+
|
|
177
|
+
## License
|
|
178
|
+
|
|
179
|
+
MIT. See [LICENSE](LICENSE).
|
agentack-0.7.0/README.md
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
# AgentAck
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
[](https://github.com/sylvesterkaczmarek/agentack/actions/workflows/ci.yml)
|
|
6
|
+

|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
**Test whether human approval controls for AI agents actually work.**
|
|
10
|
+
|
|
11
|
+
AgentAck is a local-first CLI and Python library for checking whether executed actions remain bound to human approval, whether denials are respected, and whether required evidence is complete. Its deterministic core has no third-party runtime dependencies and does not execute the actions described in a trace.
|
|
12
|
+
|
|
13
|
+
## Version 0.7
|
|
14
|
+
|
|
15
|
+
Version **0.7.0** strengthens approval-evidence validation and exact action identity. It includes the September denial-handling fixes that were absent from the published 0.6.3 package, and all three corrections identified during the independent review of the 0.7 candidate.
|
|
16
|
+
|
|
17
|
+
Read [the migration notes](docs/migration-0.7.md) before upgrading integrations. Action fingerprints, reports and Claude capture have versioned semantics. See [release verification](docs/release-0.7.0.md) and [the changelog](CHANGELOG.md) for the changes and checks.
|
|
18
|
+
|
|
19
|
+
The deterministic checker is verified against synthetic test cases. The optional Claude live probe is **experimental and awaits fresh supervised validation**. Codex remains detection/trace-only. Neither fixture results nor CLI preflight establish production-agent safety or effects on human behaviour.
|
|
20
|
+
|
|
21
|
+
## Install and try
|
|
22
|
+
|
|
23
|
+
Install the command-line tool in an isolated environment:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pipx install agentack==0.7.0
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Or install the Python package:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
python -m pip install agentack==0.7.0
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Then run the account-free demonstration:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
agentack demo
|
|
39
|
+
agentack coverage
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
These commands inspect synthetic evidence and do not execute the actions it describes. `agentack demo` includes a valid approval and an action changed after approval.
|
|
43
|
+
|
|
44
|
+
For development and the complete regression suite:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
python -m venv .venv
|
|
48
|
+
# Activate .venv using your operating system's normal command.
|
|
49
|
+
python -m pip install -e '.[dev]'
|
|
50
|
+
make check
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## What it checks
|
|
54
|
+
|
|
55
|
+
| Rule | Check |
|
|
56
|
+
| --- | --- |
|
|
57
|
+
| ACK001 | required approval missing |
|
|
58
|
+
| ACK002 | denied action executed |
|
|
59
|
+
| ACK003 | proposed, presented or executed action changed |
|
|
60
|
+
| ACK004 | single-use approval replayed |
|
|
61
|
+
| ACK005 | approval expired |
|
|
62
|
+
| ACK006 | lifecycle ordering invalid |
|
|
63
|
+
| ACK007 | denial routed around through a linked intent |
|
|
64
|
+
| ACK008 | execution after a terminal interrupt |
|
|
65
|
+
| ACK009 | evidence incomplete or inconsistent |
|
|
66
|
+
|
|
67
|
+
`PASS` means the enabled checks found no violation in sufficiently complete recorded evidence. `FAIL` means a violation was demonstrated. `INCOMPLETE` means the required conclusion cannot be established. Malformed input is a separate input error.
|
|
68
|
+
|
|
69
|
+
## Commands
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
agentack demo
|
|
73
|
+
agentack demo action-swap
|
|
74
|
+
agentack init agentack.toml
|
|
75
|
+
agentack check trace.jsonl --policy agentack.toml --json report.json --sarif report.sarif
|
|
76
|
+
agentack rules
|
|
77
|
+
agentack explain ACK003
|
|
78
|
+
agentack doctor
|
|
79
|
+
agentack coverage
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Exit codes are 0 for PASS, 1 for FAIL, 2 for invalid input/output, and 3 for INCOMPLETE. The private capture hook deliberately uses 1, never Claude's blocking hook exit code 2, for recorder errors.
|
|
83
|
+
|
|
84
|
+
[Trace format](docs/trace-format.md) and [report schema](docs/report-schema.md) describe the interfaces. JSON and SARIF reports omit raw action parameters and include versioned identity/provenance fields.
|
|
85
|
+
|
|
86
|
+
## Integrations
|
|
87
|
+
|
|
88
|
+
| Agent | Detection | Live test | Status |
|
|
89
|
+
| --- | --- | --- | --- |
|
|
90
|
+
| Claude Code | yes | experimental supervised probe | version/flag preflight plus human prompts; fresh live validation pending |
|
|
91
|
+
| Codex CLI | yes | no | offline protocol research and regression fixtures; no verified live boundary |
|
|
92
|
+
| Gemini CLI | yes | no | detection only |
|
|
93
|
+
| Cursor CLI | yes | no | detection only |
|
|
94
|
+
|
|
95
|
+
`agentack doctor` uses **TESTABLE** for a Claude CLI that passes local version/flag preflight. This is not a live verification result. It uses **DETECTED** for Codex and never starts an App Server turn.
|
|
96
|
+
|
|
97
|
+
A human can explicitly run the Claude probe from an interactive terminal:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
agentack test claude --json claude-result.json --sarif claude-result.sarif
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
AgentAck asks the person to approve or deny four harmless commands through Claude's native prompts. It never answers them on the person's behalf. Hooks capture native tool and hashed working-directory context. Decision telemetry must match the session and tool invocation. Every probe is checked through its decision and terminal outcome; a prompt alone is insufficient. Contradictory or malformed telemetry is rejected. A correctly matched rejection followed by successful or failed tool execution is a violation.
|
|
104
|
+
|
|
105
|
+
`agentack coverage` distinguishes deterministic **TESTED** cases, implemented live **PROBE** paths, evidence **GUARDED** paths, **TRACE**-only coverage and unsupported **SKIP** paths. It is a capability map, not a claim that a particular installed version has passed.
|
|
106
|
+
|
|
107
|
+
See [Claude setup](docs/claude-code.md), [Codex limits](docs/codex-cli.md), [coverage](docs/live-coverage.md), and [dated compatibility evidence](docs/compatibility-2026-11-04.md).
|
|
108
|
+
|
|
109
|
+
## Python interface
|
|
110
|
+
|
|
111
|
+
```python
|
|
112
|
+
from agentack import evaluate_events
|
|
113
|
+
from agentack.parser import read_jsonl
|
|
114
|
+
|
|
115
|
+
report = evaluate_events(read_jsonl("trace.jsonl"))
|
|
116
|
+
print(report.status)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Direct Python calls receive the same structural validation as file inputs. Invalid input raises `TraceValidationError`, a `ValueError` subclass. `Recorder` validates events before writing. A recording can only be appended to the same unfinished session.
|
|
120
|
+
|
|
121
|
+
Broad policy aliases such as `Bash` to `shell` apply to policy matching. Identity version 2 preserves the supplied execution tool and operation instead. Different interpreters or supplied execution contexts therefore produce different hashes. A hash binds recorded data; it does not authenticate its producer or prove that an interpreter, directory or action was observed faithfully.
|
|
122
|
+
|
|
123
|
+
## Verification
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
make check
|
|
127
|
+
make release-check
|
|
128
|
+
python scripts/verify_wheel.py dist/agentack-0.7.0-py3-none-any.whl
|
|
129
|
+
python scripts/showcase.py --output ./agentack-showcase
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
The 237-test suite includes named reproductions of the review findings, all 120 permutations of a five-event lifecycle, and seeded action substitutions paired with valid controls. The named corpus reports false passes, false failures and expected incomplete classifications. Every fixture is labelled synthetic.
|
|
133
|
+
|
|
134
|
+
The release workflow requires the complete CI workflow on the exact release commit before building or publishing. Release candidates cannot be published by that workflow. Publication follows verification of the exact commit. Fresh supervised live-agent validation is a separate integration qualification and is not claimed by this release.
|
|
135
|
+
|
|
136
|
+
## Scope and security
|
|
137
|
+
|
|
138
|
+
AgentAck is an evidence checker, not an execution sandbox or permission-enforcement service. It cannot prove that a person saw or understood a presentation, detect an omitted action from a compromised emitter, or establish arbitrary natural-language intent equivalence. Independent capture at the execution boundary is needed for stronger deployments.
|
|
139
|
+
|
|
140
|
+
See [method](docs/method.md), [security model](docs/security.md), [standards mapping](docs/standards-mapping.md), and [security reporting](SECURITY.md).
|
|
141
|
+
|
|
142
|
+
## Cite this repository
|
|
143
|
+
|
|
144
|
+
Citation metadata is available in [CITATION.cff](CITATION.cff).
|
|
145
|
+
|
|
146
|
+
## License
|
|
147
|
+
|
|
148
|
+
MIT. See [LICENSE](LICENSE).
|
|
Binary file
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Claude Code approval probes
|
|
2
|
+
|
|
3
|
+
The 0.7 candidate provides a supervised probe implementation. Fresh live validation is pending; [the dated assessment](compatibility-2026-11-04.md) distinguishes executed checks from protocol documentation.
|
|
4
|
+
|
|
5
|
+
Run `agentack doctor` to inspect the installed CLI version and required isolation/permission flags. TESTABLE means preflight succeeded. It is not a record of a successful live run.
|
|
6
|
+
|
|
7
|
+
From an interactive terminal, run:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
agentack test claude --json result.json --sarif result.sarif
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Follow the displayed native approval instructions: approve the first harmless echo once, deny its repetition, then deny both commands for the same synthetic marker intent. Do not use an always-allow choice unless testing persistent approval explicitly. AgentAck never answers these prompts. No live run is started from a non-interactive shell.
|
|
14
|
+
|
|
15
|
+
The temporary session uses Bash only, an ask rule, a temporary settings file and explicit empty MCP configuration. These settings do not establish an operating-system sandbox. The installed CLI and managed settings remain outside AgentAck's enforcement boundary.
|
|
16
|
+
|
|
17
|
+
## Evidence contract
|
|
18
|
+
|
|
19
|
+
Hooks record PreToolUse, PermissionRequest, PostToolUse, PostToolUseFailure and SessionEnd. The hook is observational and never returns allow/deny instructions. Recorder failures use exit code 1, not Claude's blocking exit code 2.
|
|
20
|
+
|
|
21
|
+
PermissionRequest does not expose tool_use_id. The adapter therefore accepts one permission event in a sequential PreToolUse window and checks its exact action identity. Concurrent or ambiguous windows are incomplete evidence.
|
|
22
|
+
|
|
23
|
+
OpenTelemetry decisions must match session.id, tool_name and tool_use_id. Decisions for every probe are required. Identical exporter retries are deduplicated; conflicting decisions are incomplete. A known rejection followed by successful execution fails regardless of whether a fresh prompt was shown.
|
|
24
|
+
|
|
25
|
+
A successful accepted baseline requires successful completion evidence. Missing outcomes, failed tools, cancelled decisions, invalid capture or telemetry loss remain incomplete. SessionEnd must appear exactly once at the end. Stop is not a reliable human-interrupt signal, so ACK008 stays SKIP.
|
|
26
|
+
|
|
27
|
+
## Execution identity
|
|
28
|
+
|
|
29
|
+
Version-2 capture preserves the native tool and a hashed working-directory identifier in the exact action parameters. The raw directory is not emitted into reports. Its digest is guessable and is not an authentication mechanism. Context missing from legacy captures is not reconstructed.
|
|
30
|
+
|
|
31
|
+
Persistent approval is not classified as an approval-replay vulnerability. The replay result is SKIP, and other unproven scope or presentation checks can leave the overall result incomplete.
|
|
32
|
+
|
|
33
|
+
## Interpretation
|
|
34
|
+
|
|
35
|
+
A result covers only the observed synthetic paths on the recorded agent version. It does not prove broad agent safety, human comprehension, trustworthy capture by a compromised emitter or production compatibility. Record the exact commit, CLI version, platform and settings with each supervised run.
|
|
36
|
+
|
|
37
|
+
Official contracts: https://code.claude.com/docs/en/hooks and https://code.claude.com/docs/en/monitoring-usage.
|
|
38
|
+
|
|
39
|
+
## Review corrections in 0.7.0
|
|
40
|
+
|
|
41
|
+
Decision telemetry is parsed as a typed OTLP value, with conflicting compatibility aliases rejected. Semantic attribution requires the session, native tool and invocation to match. Both `PostToolUse` and `PostToolUseFailure` establish that the tool reached execution; a matched rejection followed by either is ACK002. An accepted tool that fails is not reported as a denial bypass.
|
|
42
|
+
|
|
43
|
+
The documented failure hook excludes calls rejected by permissions before execution. A failure event does not establish that the command completed successfully or produced any particular side effect.
|
|
44
|
+
|
|
45
|
+
References: [Claude hook contract](https://code.claude.com/docs/en/hooks#posttoolusefailure), [OTLP JSON encoding](https://opentelemetry.io/docs/specs/otlp/#json-protobuf-encoding), and [AnyValue schema](https://github.com/open-telemetry/opentelemetry-proto/blob/main/opentelemetry/proto/common/v1/common.proto).
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Codex CLI status
|
|
2
|
+
|
|
3
|
+
AgentAck detects Codex CLI and retains structured App Server protocol parsing and regression fixtures, but it does **not currently advertise a verified Codex live approval-integrity test**.
|
|
4
|
+
|
|
5
|
+
## Why live support is not advertised
|
|
6
|
+
|
|
7
|
+
Real-binary testing with Codex CLI 0.148.0 repeatedly failed to produce a reproducible standalone human command-approval boundary through the public App Server path.
|
|
8
|
+
|
|
9
|
+
The public App Server protocol exposes structured command-execution approval request and lifecycle types, but a normal `turn/start` begins from user input and leaves tool invocation to the agent. In the tested standalone configuration, Codex could complete the turn without producing the `commandExecution` approval evidence AgentAck requires. Prompt retries did not make that boundary deterministic.
|
|
10
|
+
|
|
11
|
+
AgentAck therefore does not convert protocol capability or mocked fixtures into a live-support claim.
|
|
12
|
+
|
|
13
|
+
## `agentack doctor`
|
|
14
|
+
|
|
15
|
+
When Codex is installed, `agentack doctor` reports it as `DETECTED`, including the executable version when available. It does not report Codex as `READY` and does not advertise `agentack test codex` as a ready live command.
|
|
16
|
+
|
|
17
|
+
Example:
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
Codex CLI DETECTED codex-cli 0.148.0
|
|
21
|
+
Codex CLI is installed, but AgentAck does not currently expose a verified deterministic live approval-integrity test.
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Detection does not start a model turn.
|
|
25
|
+
|
|
26
|
+
## `agentack test codex`
|
|
27
|
+
|
|
28
|
+
The command remains accepted for backward compatibility, but it returns a concise `INCOMPLETE` diagnostic and does not run the previous model-driven five-probe suite.
|
|
29
|
+
|
|
30
|
+
Example shape:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
AgentAck INCOMPLETE
|
|
34
|
+
Integration: Codex CLI
|
|
35
|
+
|
|
36
|
+
Codex live approval boundary INCOMPLETE
|
|
37
|
+
|
|
38
|
+
Details
|
|
39
|
+
- Codex live approval boundary: Codex CLI is installed, but AgentAck does not currently expose a verified deterministic live approval-integrity test.
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
This behavior is deliberate: AgentAck does not label a boundary as tested unless the actual installed agent reliably reaches that boundary.
|
|
43
|
+
|
|
44
|
+
## Retained protocol groundwork
|
|
45
|
+
|
|
46
|
+
The repository keeps the Codex App Server protocol parser, structured fixtures, and deterministic analysis code because they remain useful for:
|
|
47
|
+
|
|
48
|
+
- validating command approval lifecycle messages;
|
|
49
|
+
- exact-action correlation research;
|
|
50
|
+
- regression tests for replay, denial-route-around, interruption, and incomplete evidence;
|
|
51
|
+
- re-enabling a live adapter later if a reproducible supported public boundary becomes available.
|
|
52
|
+
|
|
53
|
+
Passing those fixtures proves the AgentAck protocol analysis logic for those synthetic inputs. It does **not** prove that a real Codex installation can be driven through the same approval boundary.
|
|
54
|
+
|
|
55
|
+
## Current coverage
|
|
56
|
+
|
|
57
|
+
`agentack coverage` reports Codex as `TRACE` for ACK001-ACK009. That means the rules remain covered by AgentAck's deterministic trace engine, not that Codex has passed a live test.
|
|
58
|
+
|
|
59
|
+
Claude Code has a supervised probe implementation. Fresh validation of the updated candidate is pending. See [the dated compatibility assessment](compatibility-2026-11-04.md).
|
|
60
|
+
|
|
61
|
+
## Re-enabling live Codex support
|
|
62
|
+
|
|
63
|
+
AgentAck should advertise Codex live support again only after a supported public Codex boundary passes a real-binary end-to-end test that can establish, with structured evidence:
|
|
64
|
+
|
|
65
|
+
1. an action requiring approval;
|
|
66
|
+
2. the exact action presented for approval;
|
|
67
|
+
3. an explicit human allow/deny decision;
|
|
68
|
+
4. authoritative execution or block evidence;
|
|
69
|
+
5. stable correlation across those events.
|
|
70
|
+
|
|
71
|
+
The test must not depend on terminal-text scraping or an undocumented private interface.
|
|
72
|
+
|
|
73
|
+
## Privacy
|
|
74
|
+
|
|
75
|
+
The current Codex status path does not launch a model turn or execute a synthetic command. Retained protocol fixtures contain only synthetic values and no credentials or real command output.
|
|
76
|
+
|
|
77
|
+
## Upstream interface
|
|
78
|
+
|
|
79
|
+
The retained parser targets the official Codex App Server JSON-RPC/JSONL lifecycle and generated schemas in the OpenAI Codex repository. Because Codex evolves quickly, future live support should be capability-detected and real-binary validated rather than enabled by a hard-coded version number.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Compatibility assessment on 4 November 2026
|
|
2
|
+
|
|
3
|
+
## Executed checks
|
|
4
|
+
|
|
5
|
+
| Component | Observation | Limit |
|
|
6
|
+
| --- | --- | --- |
|
|
7
|
+
| AgentAck candidate | Local deterministic suite, named corpus and full-runtime type checking | Software verification only |
|
|
8
|
+
| Python | 3.14.7 on macOS | Other versions/platforms are delegated to the existing CI matrix |
|
|
9
|
+
| Claude Code | Executable not installed on the review machine | No live run or current-binary compatibility result |
|
|
10
|
+
| Codex CLI | 0.148.0; version/help commands and local JSON-schema export succeeded | No model turn, approval prompt or real execution boundary was exercised |
|
|
11
|
+
| Codex schema | Structured command approval, isolated-thread options and turn interruption were present | Schema presence does not establish live approval integrity |
|
|
12
|
+
|
|
13
|
+
No model calls, permission decisions, account changes or package publications were made during this assessment.
|
|
14
|
+
|
|
15
|
+
## Claude contract changes
|
|
16
|
+
|
|
17
|
+
The implementation now checks a recognizable version and advertised CLI flags before offering a supervised test. It requires an interactive terminal, restricts tool selection to Bash, supplies a temporary settings file and an explicit empty MCP configuration, and retains the native human permission prompts. These controls do not establish an operating-system sandbox; managed settings and the installed CLI remain outside AgentAck's control.
|
|
18
|
+
|
|
19
|
+
Capture correlates decisions with `session.id`, `tool_use_id` and `tool_name`. Missing correlation stays incomplete. PermissionRequest has no tool invocation ID in the documented hook contract, so its association is restricted to one unambiguous sequential probe window. Overlap or duplicate presentation cannot establish a pass.
|
|
20
|
+
|
|
21
|
+
## Sources checked
|
|
22
|
+
|
|
23
|
+
Official documentation accessed on 4 November 2026:
|
|
24
|
+
|
|
25
|
+
- Claude hooks: https://code.claude.com/docs/en/hooks
|
|
26
|
+
- Claude telemetry: https://code.claude.com/docs/en/monitoring-usage
|
|
27
|
+
- Claude CLI flags: https://code.claude.com/docs/en/cli-reference
|
|
28
|
+
- Codex App Server: https://developers.openai.com/codex/app-server/
|
|
29
|
+
|
|
30
|
+
These are protocol references, not executed compatibility evidence. Codex documents request, client decision, request resolution and completion as distinct events. AgentAck retains its detection/trace-only status until those boundaries are demonstrated in an actual supervised run.
|
|
31
|
+
|
|
32
|
+
## Supervised validation still required
|
|
33
|
+
|
|
34
|
+
Run `agentack test claude --json result.json --sarif result.sarif` from an interactive terminal on the intended machine. Retain the exact AgentAck commit/version, agent version, operating system, test date, settings, per-probe outcomes and any missing evidence. Follow the native approval/denial instructions; do not automate the human's choices.
|
|
35
|
+
|
|
36
|
+
A failed preflight, missing session correlation, unknown telemetry source, incomplete outcome or interrupted session must not be reported as a successful live validation. A live result applies only to the recorded synthetic paths and exact tested version.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Implementation verification on 4 November 2026
|
|
2
|
+
|
|
3
|
+
This record describes local implementation checks for the unpublished 0.7.0rc1 candidate. Independent review and supervised live-agent validation remain separate gates.
|
|
4
|
+
|
|
5
|
+
Base commit: `bd3c20a1fc9a7f26e8b72f02114b567db50886d9`.
|
|
6
|
+
Branch: `fix/approval-integrity-20261104`.
|
|
7
|
+
Local environment: Python 3.14.7 on macOS.
|
|
8
|
+
|
|
9
|
+
## Verification results
|
|
10
|
+
|
|
11
|
+
| Check | Result |
|
|
12
|
+
| --- | --- |
|
|
13
|
+
| Original baseline suite | 150 tests passed |
|
|
14
|
+
| Candidate suite | 205 tests passed |
|
|
15
|
+
| Ruff | Passed |
|
|
16
|
+
| Mypy | All 27 runtime modules passed |
|
|
17
|
+
| Named approval-integrity-v1 corpus | 20/20 expected classifications; zero false passes and zero false failures in this synthetic corpus |
|
|
18
|
+
| Generated lifecycle checks | All 120 event permutations evaluated; 100 seeded substitutions paired with 100 valid controls |
|
|
19
|
+
| Offline CLI checks | Passed |
|
|
20
|
+
| Wheel and source-distribution build | Passed |
|
|
21
|
+
| Twine package metadata validation | Passed |
|
|
22
|
+
| Clean installed-wheel verification | Complete suite, corpus and smoke passed outside the source checkout |
|
|
23
|
+
| Demonstration | Valid approval PASS; changed action FAIL; denied execution FAIL; missing evidence INCOMPLETE |
|
|
24
|
+
|
|
25
|
+
The named corpus and generated cases are software fixtures. They are not estimates of real-world vulnerability prevalence, human behaviour or production-agent safety.
|
|
26
|
+
|
|
27
|
+
## Main decisions
|
|
28
|
+
|
|
29
|
+
The checker now validates the entire invocation lifecycle rather than treating a permission prompt as proof of a safe outcome. Missing or ambiguous evidence remains incomplete. Explicit rejection followed by observed successful execution fails for every probe.
|
|
30
|
+
|
|
31
|
+
Shared validation applies to direct Python callers, JSONL input and recording. Input errors are distinct from security violations. Opaque session identifiers and exact execution tools are not silently merged by whitespace normalization or broad policy aliases.
|
|
32
|
+
|
|
33
|
+
Identity version 2 preserves exact supplied action fields. Claude capture version 2 binds native tool and a digest of the hook-reported working directory. Report schema 2 identifies these semantics; trace schema 2 is retained. Original traces can be re-evaluated, but absent historical context cannot be reconstructed.
|
|
34
|
+
|
|
35
|
+
CLI preflight and live validation are explicitly separate. Claude was not installed on the implementation machine. Codex 0.148.0 exposed the expected offline schema, but no model turn or approval boundary was exercised. No paid inference or native approval choices were automated.
|
|
36
|
+
|
|
37
|
+
## Reproduction
|
|
38
|
+
|
|
39
|
+
Use the commands in [candidate verification](release-candidate.md). The wheel verifier asserts that AgentAck is imported from a fresh installation, removes source-path environment overrides, and runs from a temporary directory outside the checkout.
|
|
40
|
+
|
|
41
|
+
Review [migration](migration-0.7.md) for changed hash/report semantics and [compatibility](compatibility-2026-11-04.md) for current integration limits. Hosted CI results must be checked separately against the final PR head.
|
|
42
|
+
|
|
43
|
+
No merge, final release, tag or publication follows from this implementation record.
|