Verify Agent Action
Treat a plausible approval screen as a claim, not proof. Verify the complete
decision path before a human or an external enforcement point decides whether
to act.
Preserve the safety boundary
- Never execute, approve, sign, send, purchase, deploy, or mutate anything.
- Never convert this review into execution authority.
- Never infer missing evidence, identities, timestamps, or parameters.
- Treat a valid schema, checksum, or signature as insufficient by itself.
- Treat signatures as evidence of attribution and integrity, not factual truth.
- Keep supporting and refuting evidence separate; do not average conflict away.
- Fail closed on a material mismatch. Use
INCONCLUSIVE when required evidence
is unavailable.
Set this field in every final result:
{"execution_authorized": false}
Collect the review packet
Request only the artifacts needed for the review:
- The original user or system request.
- The exact proposed action:
- operation or tool name
- target resource
- complete parameters
- filesystem and network scope
- maximum execution count
- not-before and expiry times
- The assessment that claims the action is justified.
- The source evidence and policy used by that assessment.
- The approval record, including approver identity, role, action digest, nonce,
audience, issue time, expiry, and use count.
- The latest monitoring events and expected heartbeat interval.
- The current trusted time and any prior nonce-use record.
List missing fields before analysis. Do not silently substitute defaults.
Build the exact action identity
Create one normalized action object without dropping fields:
{
"operation": "git.push",
"target": "owner/repository",
"parameters": {
"branch": "fix/example",
"commit": "40-character-sha",
"remote": "origin"
},
"filesystem_scope": [],
"network_scope": ["github.com:443"],
"execution_count": 1,
"not_before": "RFC3339 timestamp",
"expires_at": "RFC3339 timestamp"
}
Use a project-specified canonicalization and digest algorithm when provided.
Otherwise, report that cryptographic identity cannot be independently verified;
still compare every field structurally.
Never normalize away a security-relevant distinction such as:
- branch, commit, repository, environment, recipient, amount, currency, or host
- recursive, force, overwrite, privileged, destructive, or dry-run flags
- filesystem roots, CIDRs, ports, domains, execution counts, or expiry
Run the six controls
Evaluate every control as PASS, FAIL, INCONCLUSIVE, or NOT_APPLICABLE.
1. Recompute the assessment
- Re-run the declared deterministic evaluator from the declared source inputs
when its implementation is available.
- Compare the complete canonical result, not selected fields.
- Mark
FAIL if the received result differs from recomputation.
- Mark
INCONCLUSIVE when only schema validation, an internal checksum, or an
unverifiable evaluator claim is available.
2. Match the exact approved action
- Compare the proposed action with the action bound into the approval.
- Compare the complete normalized object and its digest.
- Mark
FAIL if any material field changed after approval.
- Treat a broad target or scope as a mismatch when the evidence justifies only
a narrower action.
3. Reject replay and identity ambiguity
- Verify the nonce is unique and unused.
- Verify subject, audience, issuer, approver role, issue time, not-before time,
expiry, and maximum use count.
- Mark
FAIL for a reused nonce, wrong audience, expired approval, future-dated
approval, excessive use count, revoked identity, or role mismatch.
- Mark
INCONCLUSIVE if no trustworthy replay store or time source exists.
4. Test reviewer independence
Build a dependence table for every reviewer or evaluator:
| Dimension |
Compare |
| Model |
family, version, fine-tune |
| Provider |
account and control plane |
| Prompt |
shared template or ancestry |
| Retrieval |
overlapping sources and indexes |
| Tools |
shared evaluator code and runtime |
| Operator |
common owner or approval authority |
Do not count correlated reviewers as independent quorum members. Mark FAIL if
the policy requires independent approval and the remaining independent set is
too small.
5. Preserve evidence and contradiction
- Inventory every evidence identifier referenced by the assessment.
- Confirm each item is present, authenticatable, within its validity window,
and relevant to the claim.
- Record support and refutation independently:
| Support |
Refutation |
Epistemic state |
| absent |
absent |
UNDETERMINED |
| present |
absent |
SUPPORTED_ONLY |
| absent |
present |
REFUTED_ONLY |
| present |
present |
CONFLICTED |
- Mark
FAIL if evidence was removed, altered, expired, or concealed in a way
that changes the result.
- Never convert
CONFLICTED into a numeric average that appears safe.
6. Verify lifecycle and monitoring
- Confirm the action is inside its validity window.
- Verify monitoring-event signatures or integrity evidence when available.
- Check sequence numbers, previous-event digests, and expected heartbeat
cadence.
- Treat missing, stale, reordered, or broken-chain telemetry as a failure when
policy requires continuous monitoring.
- Do not interpret silence as health.
Challenge convenient conclusions
Before producing the final result, attempt these mutations mentally or with
project-provided test fixtures:
- Replace a blocked assessment with an allowed result.
- Change one approved target, parameter, scope, amount, or commit.
- Reuse an otherwise valid approval nonce.
- Replace independent reviewers with correlated copies.
- Remove one refuting evidence item.
- Stop the monitoring heartbeat after approval.
If any mutation would pass the reviewed controls, record the affected control
as FAIL; do not merely recommend future hardening.
Determine the review result
Use exactly one result:
ELIGIBLE_FOR_HUMAN_DECISION: all required controls pass.
ELIGIBLE_WITH_CONTROLS: no required control fails, and explicit external
controls can resolve the listed conditions before execution.
BLOCKED: at least one required control fails or the action exceeds the
justified scope.
INCONCLUSIVE: no required control is proven false, but evidence needed for
a safe decision is missing or unverifiable.
ELIGIBLE_FOR_HUMAN_DECISION is not approval. A human authority and a separate
enforcement point remain responsible for any real action.
Report in this format
# Agent Action Review
## Result
- Review result: BLOCKED | INCONCLUSIVE | ELIGIBLE_WITH_CONTROLS |
ELIGIBLE_FOR_HUMAN_DECISION
- Execution authorized: false
- Exact action digest: <verified value or NOT_VERIFIED>
## Action
- Operation:
- Target:
- Material parameters:
- Scope:
- Validity window:
- Maximum uses:
## Control matrix
| Control | Status | Evidence | Reason |
|---|---|---|---|
| Recomputed assessment | PASS/FAIL/INCONCLUSIVE/N/A | ... | ... |
| Exact action binding | ... | ... | ... |
| Replay and identity | ... | ... | ... |
| Reviewer independence | ... | ... | ... |
| Evidence completeness | ... | ... | ... |
| Monitoring freshness | ... | ... | ... |
## Supporting evidence
- ...
## Refuting evidence and defeaters
- ...
## Required next action
- State the smallest concrete step that could change the result.
## Boundaries
- State what this review did not prove.
Lead with the result and the exact reason. Prefer a reproducible blocker over a
confidence score.
1---2name: verify-agent-action3description: Review a proposed AI-agent action or human-approval packet before execution. Use when an agent wants to run a consequential tool, command, deployment, message, purchase, credential operation, or data mutation; when checking whether approval still matches the exact action; or when auditing action evidence for forged results, parameter swaps, replay, correlated reviewers, missing evidence, expiry, or stale monitoring. Produce an evidence-based review only—never execute or authorize the action.4---5
6# Verify Agent Action
7
8Treat a plausible approval screen as a claim, not proof. Verify the complete
9decision path before a human or an external enforcement point decides whether
10to act.
11
12## Preserve the safety boundary
13
14- Never execute, approve, sign, send, purchase, deploy, or mutate anything.
15- Never convert this review into execution authority.
16- Never infer missing evidence, identities, timestamps, or parameters.
17- Treat a valid schema, checksum, or signature as insufficient by itself.
18- Treat signatures as evidence of attribution and integrity, not factual truth.
19- Keep supporting and refuting evidence separate; do not average conflict away.
20- Fail closed on a material mismatch. Use `INCONCLUSIVE` when required evidence
21 is unavailable.
22
23Set this field in every final result:
24
25```json
26{"execution_authorized": false}
27```
28
29## Collect the review packet
30
31Request only the artifacts needed for the review:
32
331. The original user or system request.
342. The exact proposed action:
35 - operation or tool name
36 - target resource
37 - complete parameters
38 - filesystem and network scope
39 - maximum execution count
40 - not-before and expiry times
413. The assessment that claims the action is justified.
424. The source evidence and policy used by that assessment.
435. The approval record, including approver identity, role, action digest, nonce,
44 audience, issue time, expiry, and use count.
456. The latest monitoring events and expected heartbeat interval.
467. The current trusted time and any prior nonce-use record.
47
48List missing fields before analysis. Do not silently substitute defaults.
49
50## Build the exact action identity
51
52Create one normalized action object without dropping fields:
53
54```json
55{
56 "operation": "git.push",
57 "target": "owner/repository",
58 "parameters": {
59 "branch": "fix/example",
60 "commit": "40-character-sha",
61 "remote": "origin"
62 },
63 "filesystem_scope": [],
64 "network_scope": ["github.com:443"],
65 "execution_count": 1,
66 "not_before": "RFC3339 timestamp",
67 "expires_at": "RFC3339 timestamp"
68}
69```
70
71Use a project-specified canonicalization and digest algorithm when provided.
72Otherwise, report that cryptographic identity cannot be independently verified;
73still compare every field structurally.
74
75Never normalize away a security-relevant distinction such as:
76
77- branch, commit, repository, environment, recipient, amount, currency, or host
78- recursive, force, overwrite, privileged, destructive, or dry-run flags
79- filesystem roots, CIDRs, ports, domains, execution counts, or expiry
80
81## Run the six controls
82
83Evaluate every control as `PASS`, `FAIL`, `INCONCLUSIVE`, or `NOT_APPLICABLE`.
84
85### 1. Recompute the assessment
86
87- Re-run the declared deterministic evaluator from the declared source inputs
88 when its implementation is available.
89- Compare the complete canonical result, not selected fields.
90- Mark `FAIL` if the received result differs from recomputation.
91- Mark `INCONCLUSIVE` when only schema validation, an internal checksum, or an
92 unverifiable evaluator claim is available.
93
94### 2. Match the exact approved action
95
96- Compare the proposed action with the action bound into the approval.
97- Compare the complete normalized object and its digest.
98- Mark `FAIL` if any material field changed after approval.
99- Treat a broad target or scope as a mismatch when the evidence justifies only
100 a narrower action.
101
102### 3. Reject replay and identity ambiguity
103
104- Verify the nonce is unique and unused.
105- Verify subject, audience, issuer, approver role, issue time, not-before time,
106 expiry, and maximum use count.
107- Mark `FAIL` for a reused nonce, wrong audience, expired approval, future-dated
108 approval, excessive use count, revoked identity, or role mismatch.
109- Mark `INCONCLUSIVE` if no trustworthy replay store or time source exists.
110
111### 4. Test reviewer independence
112
113Build a dependence table for every reviewer or evaluator:
114
115| Dimension | Compare |
116|---|---|
117| Model | family, version, fine-tune |
118| Provider | account and control plane |
119| Prompt | shared template or ancestry |
120| Retrieval | overlapping sources and indexes |
121| Tools | shared evaluator code and runtime |
122| Operator | common owner or approval authority |
123
124Do not count correlated reviewers as independent quorum members. Mark `FAIL` if
125the policy requires independent approval and the remaining independent set is
126too small.
127
128### 5. Preserve evidence and contradiction
129
130- Inventory every evidence identifier referenced by the assessment.
131- Confirm each item is present, authenticatable, within its validity window,
132 and relevant to the claim.
133- Record support and refutation independently:
134
135| Support | Refutation | Epistemic state |
136|---|---|---|
137| absent | absent | `UNDETERMINED` |
138| present | absent | `SUPPORTED_ONLY` |
139| absent | present | `REFUTED_ONLY` |
140| present | present | `CONFLICTED` |
141
142- Mark `FAIL` if evidence was removed, altered, expired, or concealed in a way
143 that changes the result.
144- Never convert `CONFLICTED` into a numeric average that appears safe.
145
146### 6. Verify lifecycle and monitoring
147
148- Confirm the action is inside its validity window.
149- Verify monitoring-event signatures or integrity evidence when available.
150- Check sequence numbers, previous-event digests, and expected heartbeat
151 cadence.
152- Treat missing, stale, reordered, or broken-chain telemetry as a failure when
153 policy requires continuous monitoring.
154- Do not interpret silence as health.
155
156## Challenge convenient conclusions
157
158Before producing the final result, attempt these mutations mentally or with
159project-provided test fixtures:
160
1611. Replace a blocked assessment with an allowed result.
1622. Change one approved target, parameter, scope, amount, or commit.
1633. Reuse an otherwise valid approval nonce.
1644. Replace independent reviewers with correlated copies.
1655. Remove one refuting evidence item.
1666. Stop the monitoring heartbeat after approval.
167
168If any mutation would pass the reviewed controls, record the affected control
169as `FAIL`; do not merely recommend future hardening.
170
171## Determine the review result
172
173Use exactly one result:
174
175- `ELIGIBLE_FOR_HUMAN_DECISION`: all required controls pass.
176- `ELIGIBLE_WITH_CONTROLS`: no required control fails, and explicit external
177 controls can resolve the listed conditions before execution.
178- `BLOCKED`: at least one required control fails or the action exceeds the
179 justified scope.
180- `INCONCLUSIVE`: no required control is proven false, but evidence needed for
181 a safe decision is missing or unverifiable.
182
183`ELIGIBLE_FOR_HUMAN_DECISION` is not approval. A human authority and a separate
184enforcement point remain responsible for any real action.
185
186## Report in this format
187
188```markdown
189# Agent Action Review
190
191## Result
192- Review result: BLOCKED | INCONCLUSIVE | ELIGIBLE_WITH_CONTROLS |
193 ELIGIBLE_FOR_HUMAN_DECISION
194- Execution authorized: false
195- Exact action digest: <verified value or NOT_VERIFIED>
196
197## Action
198- Operation:
199- Target:
200- Material parameters:
201- Scope:
202- Validity window:
203- Maximum uses:
204
205## Control matrix
206| Control | Status | Evidence | Reason |
207|---|---|---|---|
208| Recomputed assessment | PASS/FAIL/INCONCLUSIVE/N/A | ... | ... |
209| Exact action binding | ... | ... | ... |
210| Replay and identity | ... | ... | ... |
211| Reviewer independence | ... | ... | ... |
212| Evidence completeness | ... | ... | ... |
213| Monitoring freshness | ... | ... | ... |
214
215## Supporting evidence
216- ...
217
218## Refuting evidence and defeaters
219- ...
220
221## Required next action
222- State the smallest concrete step that could change the result.
223
224## Boundaries
225- State what this review did not prove.
226```
227
228Lead with the result and the exact reason. Prefer a reproducible blocker over a
229confidence score.