agentmandate 0.3.0__tar.gz → 0.3.2__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.
- {agentmandate-0.3.0 → agentmandate-0.3.2}/CHANGELOG.md +19 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/PKG-INFO +25 -7
- {agentmandate-0.3.0 → agentmandate-0.3.2}/README.md +24 -6
- {agentmandate-0.3.0 → agentmandate-0.3.2}/ROADMAP.md +36 -2
- {agentmandate-0.3.0 → agentmandate-0.3.2}/agentmandate/__init__.py +1 -1
- {agentmandate-0.3.0 → agentmandate-0.3.2}/pyproject.toml +1 -1
- {agentmandate-0.3.0 → agentmandate-0.3.2}/.github/workflows/ci.yml +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/.github/workflows/release.yml +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/.gitignore +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/CONTRIBUTING.md +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/DESIGN.md +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/LICENSE +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/RELEASING.md +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/SECURITY.md +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/STABILITY.md +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/agentmandate/cli.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/agentmandate/diff.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/agentmandate/lint.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/agentmandate/manifest.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/agentmandate/obligations.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/agentmandate/py.typed +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/agentmandate/reach.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/agentmandate/scan.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/agentmandate/verify.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/docs/assets/authority-path.svg +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/docs/manifest.md +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/docs/test-obligations.md +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/examples/dispute-resolver-sod.yaml +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/examples/dispute-resolver-v2.yaml +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/examples/dispute-resolver.yaml +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/examples/mcp-tools.json +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/examples/observed-calls.jsonl +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/examples/reviewed-obligations.json +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/tests/test_cli.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/tests/test_diff.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/tests/test_lint.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/tests/test_manifest.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/tests/test_obligations.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/tests/test_reach.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/tests/test_scan.py +0 -0
- {agentmandate-0.3.0 → agentmandate-0.3.2}/tests/test_verify.py +0 -0
|
@@ -6,6 +6,25 @@ All notable changes to this project are documented here. The format follows
|
|
|
6
6
|
|
|
7
7
|
## Unreleased
|
|
8
8
|
|
|
9
|
+
## 0.3.2 - 2026-07-28
|
|
10
|
+
|
|
11
|
+
### Changed
|
|
12
|
+
|
|
13
|
+
- The README scopes every finding to permitted reachability under the reviewed
|
|
14
|
+
manifest and bounded abstraction, rather than observed model behaviour or
|
|
15
|
+
undeclared downstream enforcement.
|
|
16
|
+
- The roadmap makes external tool-graph validation a prerequisite for model
|
|
17
|
+
growth, then ranks bounded cardinality, reviewed resource relationships, and
|
|
18
|
+
non-monetary effect budgets as evidence-dependent candidates.
|
|
19
|
+
|
|
20
|
+
## 0.3.1 - 2026-07-28
|
|
21
|
+
|
|
22
|
+
### Changed
|
|
23
|
+
|
|
24
|
+
- The README opens with the compound-authority problem in plain language and
|
|
25
|
+
separates per-call policy, reviewed decision evidence, and runtime-control
|
|
26
|
+
evidence without weakening their boundaries.
|
|
27
|
+
|
|
9
28
|
## 0.3.0 - 2026-07-28
|
|
10
29
|
|
|
11
30
|
### Added
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentmandate
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.2
|
|
4
4
|
Summary: Compound-path and cross-release analysis of what an AI agent is permitted to do
|
|
5
5
|
Project-URL: Homepage, https://github.com/mrwersa/agentmandate
|
|
6
6
|
Project-URL: Repository, https://github.com/mrwersa/agentmandate
|
|
@@ -34,7 +34,7 @@ Description-Content-Type: text/markdown
|
|
|
34
34
|
|
|
35
35
|
# AgentMandate
|
|
36
36
|
|
|
37
|
-
> **
|
|
37
|
+
> **What is your AI agent actually allowed to do?**
|
|
38
38
|
|
|
39
39
|
[](https://pypi.org/project/agentmandate/)
|
|
40
40
|
[](https://www.python.org/downloads/)
|
|
@@ -42,16 +42,30 @@ Description-Content-Type: text/markdown
|
|
|
42
42
|
[](#development)
|
|
43
43
|
[](https://github.com/mrwersa/agentmandate/blob/main/LICENSE)
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
A Python library and CLI that reads a short description of your agent's tools,
|
|
46
|
+
called a **manifest**, and finds the limits it can slip past by combining
|
|
47
|
+
actions that are each permitted on their own. It also tells you when a release
|
|
48
|
+
widened what the agent can reach, before that release ships.
|
|
49
|
+
|
|
50
|
+
Policy engines decide one call at a time. This looks at the whole tool graph
|
|
51
|
+
offline, so it catches the gaps that only appear across a sequence.
|
|
52
|
+
|
|
53
|
+
| What you run | Question it answers |
|
|
54
|
+
|---|---|
|
|
55
|
+
| Cedar, OPA, AgentCore Policy, AgentWard | May this agent make this call, right now? |
|
|
56
|
+
| **AgentMandate** | **What can it reach by combining permitted calls, and did this release widen that?** |
|
|
57
|
+
| [AgentVerity](https://github.com/mrwersa/agentverity) | Were the reviewed decision routes exercised repeatably? |
|
|
58
|
+
| Your tests and runtime traces | Did the tools execute and the declared controls hold? |
|
|
46
59
|
|
|
47
60
|
Imagine a payment-dispute agent that can open a case and issue a
|
|
48
61
|
human-approved refund. Each refund is capped at 500 GBP per case, and the
|
|
49
62
|
whole run is capped at 500 GBP. Release 2 adds one read-only tool:
|
|
50
63
|
`search_cases`.
|
|
51
64
|
|
|
52
|
-
That tool spends nothing. It does, however,
|
|
53
|
-
|
|
54
|
-
|
|
65
|
+
That tool spends nothing. It does, however, let the agent get hold of more
|
|
66
|
+
cases, and the 500 GBP cap is measured *per case*. Two separately valid refunds
|
|
67
|
+
become reachable under the manifest, so reachable extraction doubles to 1,000 GBP
|
|
68
|
+
while every individual call still looks permitted.
|
|
55
69
|
|
|
56
70
|

|
|
57
71
|
|
|
@@ -255,6 +269,10 @@ The `lint` command deliberately overlaps the scanners above. A tool that reporte
|
|
|
255
269
|
|
|
256
270
|
## Scope
|
|
257
271
|
|
|
272
|
+
Read every finding as **permitted by the reviewed manifest within this bounded
|
|
273
|
+
abstraction**. It is not proof that the model will choose the path or that an
|
|
274
|
+
undeclared downstream invariant will accept it.
|
|
275
|
+
|
|
258
276
|
What this does not do, on purpose:
|
|
259
277
|
|
|
260
278
|
- **No enforcement.** No proxy, no runtime interception, no blocking.
|
|
@@ -286,7 +304,7 @@ ruff check .
|
|
|
286
304
|
|
|
287
305
|
## Status
|
|
288
306
|
|
|
289
|
-
Alpha, version 0.3.
|
|
307
|
+
Alpha, version 0.3.2. The authority model is the part most likely to change,
|
|
290
308
|
because it has not yet been pointed at enough real tool graphs to know where it
|
|
291
309
|
is too coarse. Issues describing a graph it models badly are the most useful
|
|
292
310
|
thing you can file.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AgentMandate
|
|
2
2
|
|
|
3
|
-
> **
|
|
3
|
+
> **What is your AI agent actually allowed to do?**
|
|
4
4
|
|
|
5
5
|
[](https://pypi.org/project/agentmandate/)
|
|
6
6
|
[](https://www.python.org/downloads/)
|
|
@@ -8,16 +8,30 @@
|
|
|
8
8
|
[](#development)
|
|
9
9
|
[](https://github.com/mrwersa/agentmandate/blob/main/LICENSE)
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
A Python library and CLI that reads a short description of your agent's tools,
|
|
12
|
+
called a **manifest**, and finds the limits it can slip past by combining
|
|
13
|
+
actions that are each permitted on their own. It also tells you when a release
|
|
14
|
+
widened what the agent can reach, before that release ships.
|
|
15
|
+
|
|
16
|
+
Policy engines decide one call at a time. This looks at the whole tool graph
|
|
17
|
+
offline, so it catches the gaps that only appear across a sequence.
|
|
18
|
+
|
|
19
|
+
| What you run | Question it answers |
|
|
20
|
+
|---|---|
|
|
21
|
+
| Cedar, OPA, AgentCore Policy, AgentWard | May this agent make this call, right now? |
|
|
22
|
+
| **AgentMandate** | **What can it reach by combining permitted calls, and did this release widen that?** |
|
|
23
|
+
| [AgentVerity](https://github.com/mrwersa/agentverity) | Were the reviewed decision routes exercised repeatably? |
|
|
24
|
+
| Your tests and runtime traces | Did the tools execute and the declared controls hold? |
|
|
12
25
|
|
|
13
26
|
Imagine a payment-dispute agent that can open a case and issue a
|
|
14
27
|
human-approved refund. Each refund is capped at 500 GBP per case, and the
|
|
15
28
|
whole run is capped at 500 GBP. Release 2 adds one read-only tool:
|
|
16
29
|
`search_cases`.
|
|
17
30
|
|
|
18
|
-
That tool spends nothing. It does, however,
|
|
19
|
-
|
|
20
|
-
|
|
31
|
+
That tool spends nothing. It does, however, let the agent get hold of more
|
|
32
|
+
cases, and the 500 GBP cap is measured *per case*. Two separately valid refunds
|
|
33
|
+
become reachable under the manifest, so reachable extraction doubles to 1,000 GBP
|
|
34
|
+
while every individual call still looks permitted.
|
|
21
35
|
|
|
22
36
|

|
|
23
37
|
|
|
@@ -221,6 +235,10 @@ The `lint` command deliberately overlaps the scanners above. A tool that reporte
|
|
|
221
235
|
|
|
222
236
|
## Scope
|
|
223
237
|
|
|
238
|
+
Read every finding as **permitted by the reviewed manifest within this bounded
|
|
239
|
+
abstraction**. It is not proof that the model will choose the path or that an
|
|
240
|
+
undeclared downstream invariant will accept it.
|
|
241
|
+
|
|
224
242
|
What this does not do, on purpose:
|
|
225
243
|
|
|
226
244
|
- **No enforcement.** No proxy, no runtime interception, no blocking.
|
|
@@ -252,7 +270,7 @@ ruff check .
|
|
|
252
270
|
|
|
253
271
|
## Status
|
|
254
272
|
|
|
255
|
-
Alpha, version 0.3.
|
|
273
|
+
Alpha, version 0.3.2. The authority model is the part most likely to change,
|
|
256
274
|
because it has not yet been pointed at enough real tool graphs to know where it
|
|
257
275
|
is too coarse. Issues describing a graph it models badly are the most useful
|
|
258
276
|
thing you can file.
|
|
@@ -7,15 +7,16 @@ runtime proxy or general agent-security scanner.
|
|
|
7
7
|
|
|
8
8
|
This is direction, not a release promise.
|
|
9
9
|
|
|
10
|
-
##
|
|
10
|
+
## Current foundation: trustworthy authority analysis
|
|
11
11
|
|
|
12
|
-
Version 0.2 makes the existing gate dependable:
|
|
12
|
+
Version 0.3.2 makes the existing gate dependable:
|
|
13
13
|
|
|
14
14
|
- fail-closed replay when control evidence is missing
|
|
15
15
|
- tool-contract and run-limit comparison across releases
|
|
16
16
|
- one search depth on both sides of a diff
|
|
17
17
|
- safe ingestion of untrusted MCP catalogues
|
|
18
18
|
- explicit handling of incomparable currencies and different agents
|
|
19
|
+
- reviewed test obligations reconciled against current reachable authority
|
|
19
20
|
|
|
20
21
|
## Next: easier adoption
|
|
21
22
|
|
|
@@ -35,6 +36,39 @@ new value remains the authority graph and its counterexamples.
|
|
|
35
36
|
|
|
36
37
|
## Then: widen the model where evidence demands it
|
|
37
38
|
|
|
39
|
+
Do not implement every candidate below in parallel. First collect tool graphs
|
|
40
|
+
from independent users and identify which abstraction forces them to distort a
|
|
41
|
+
real control. Expressiveness increases the search state and the annotation
|
|
42
|
+
burden, so a feature needs a concrete graph and counterexample before it earns
|
|
43
|
+
that cost.
|
|
44
|
+
|
|
45
|
+
### Bounded scope cardinality
|
|
46
|
+
|
|
47
|
+
The current `unbounded` flag distinguishes one binding from an unlimited
|
|
48
|
+
source. Real tools often expose a finite collection, such as at most ten cases
|
|
49
|
+
or one refund per transaction. A reviewed `max_bindings` bound is the first
|
|
50
|
+
candidate extension because it sharpens the existing scope model without
|
|
51
|
+
turning the manifest into a full application specification.
|
|
52
|
+
|
|
53
|
+
Per-customer or relational limits come later. They require resource identity
|
|
54
|
+
and relationships, not another integer placed beside the current type count.
|
|
55
|
+
|
|
56
|
+
### Resource relationships
|
|
57
|
+
|
|
58
|
+
Scope counts deliberately forget which customer owns a case or whether two
|
|
59
|
+
bindings refer to the same object. If real graphs show that this creates false
|
|
60
|
+
or missed paths, add a small reviewed relation vocabulary and preserve binding
|
|
61
|
+
provenance through tool transitions. Do not jump directly to arbitrary
|
|
62
|
+
preconditions and postconditions.
|
|
63
|
+
|
|
64
|
+
### Non-monetary effect budgets
|
|
65
|
+
|
|
66
|
+
Some authority limits count irreversible actions rather than currency, such as
|
|
67
|
+
accounts closed, credentials rotated, or external messages sent. Generalise
|
|
68
|
+
the current cumulative-value mechanism only when those limits share a clear,
|
|
69
|
+
reviewable accumulation rule. Confidentiality and data flow remain a separate
|
|
70
|
+
model rather than being disguised as a numeric budget.
|
|
71
|
+
|
|
38
72
|
### Data-flow reachability
|
|
39
73
|
|
|
40
74
|
Add reviewed source, transform, and sink labels so the analyser can detect a
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|