plan-auditor
Independent deterministic verification for AI coding-agent work.
plan-auditor answers one question:
Did the AI actually complete the user's requirements and approved plan, or did it only say that it did?
PASS is not based on the agent's narration. It requires explicit requirements, real behavioral checks, dependency/output proof, formal plan validation when enabled, an intact seal, fresh execution evidence, and an aggregate gate across every active plan.
Use it directly by skill name
In a skill-capable coding environment, call:
plan-auditor
or:
plan-auditor: implement this change and prove it is complete
The normal skill workflow handles the internal plan, automatic formalization, sealing, evidence, and final audit. The user does not need to hand-write STRIPS/PDDL or auditor metadata.
Automatic formalization
For non-trivial multi-step work, Plan Auditor can now compile the structured plan into a conservative STRIPS contract automatically:
plan-auditor-formalize compile .
The compiler does not ask an LLM to invent symbolic semantics. It derives only from explicit Plan Auditor structure:
must/shouldrequirement IDs,- step
coversbindings, depends_on,- named
outputs, requires_outputs,- deterministic verification checks.
Generated facts are limited to:
formalization-source:<SHA256>
step-completed:<STEP-ID>
output-available:<STEP-ID>:...
requirement-satisfied:<REQ-ID>
A generated contract is checked twice:
- STRIPS reachability —
plan-auditor-formal verifyproves the symbolic plan can reach all goals while respecting dependencies and dataflow. - Independent deterministic recompilation —
plan-auditor-formalize verifyrebuilds the expected contract from the current structured plan and requires exact equality.
This blocks a generated formal model from silently omitting a requirement, dropping an output precondition, weakening a goal, or becoming stale after the plan changes—even if someone recomputes the contract SHA.
Manual domain-specific STRIPS contracts remain supported and are never overwritten by the automatic compiler.
Completion model
Host-owned request + acceptance checks
|
v
Explicit requirements + covers
|
v
Dependency / output dataflow DAG
|
v
Deterministic auto-formalizer
|
+--> source SHA-256
+--> requirement goals
+--> output facts / preconditions
+--> one action per step
|
v
Independent deterministic recompilation
|
v
Grounded STRIPS reachability
|
+--> PDDL / Fast Downward (optional)
|
v
Format-v4 sealed verification contract
|
v
Real subprocess/filesystem checks
|
v
Hash-chained fresh evidence
|
v
Aggregate supervisor gate
|
v
PASS / FAIL / UNKNOWN
What PASS requires
In Supervisor Mode, every active plan must satisfy the full contract, including:
- valid plan schema,
- explicit non-empty requirements,
- complete
must/shouldcoverage, - real behavioral verification for every step,
- valid dependency DAG,
- concrete
requires_outputsbacking for explicit dependency edges, - successful formal reachability when a formal anchor is present,
- canonical requirement-to-formal-goal binding,
- exact deterministic recompilation for auto-generated formal contracts,
- intact format-v4 seal,
- unchanged sealed supervisor environment/policies,
- fresh full-audit plan/workspace fingerprints,
- valid active and archived evidence chains,
- valid agent registry,
- required tools present,
- no blocking policy result.
A passing default plan cannot hide an unfinished named plan.
Example structured plan
{
"task": "build and consume a verified artifact",
"created": "2026-09-06T00:00:00Z",
"requirements": [
{"id": "REQ-001", "description": "produce the artifact", "priority": "must"},
{"id": "REQ-002", "description": "consume the artifact", "priority": "must"}
],
"steps": [
{
"id": 1,
"title": "produce",
"depends_on": [],
"covers": ["REQ-001"],
"verify": [{"type": "run", "argv": ["python", "tests/build.py"]}],
"outputs": [
{
"name": "artifact",
"verify": [{"type": "file_exists", "path": "result.json"}]
}
]
},
{
"id": 2,
"title": "consume",
"depends_on": [1],
"requires_outputs": [{"step": 1, "name": "artifact"}],
"covers": ["REQ-002"],
"verify": [{"type": "run", "argv": ["python", "tests/use.py"]}]
}
]
}
Then:
plan-auditor validate .
plan-auditor-formalize compile .
plan-auditor plan verify .
plan-auditor audit .
The auto-formalizer runs before sealing and refuses to mutate an already sealed plan.
Classical STRIPS / PDDL
The built-in grounded STRIPS-style planner is local and CPU-only.
- no-delete contracts use deterministic forward reasoning,
- delete-effect contracts use bounded state-space search,
- state-limit exhaustion returns UNKNOWN/REVISE rather than PASS,
- every Plan Auditor step must execute exactly once in the formal solution.
PDDL export:
plan-auditor-formal export-pddl . \
--contract-sha <sha256> \
--output ./pddl-proof
Optional Fast Downward cross-check can be embedded during automatic compilation:
plan-auditor-formalize compile . \
--fast-downward auto \
--require-fast-downward
For reviewed domain-specific models, manual contracts can still be wrapped with:
plan-auditor-formal make-check formal-contract.json
See docs/formal-planning.md.
Deterministic checks
Prefer structured argv:
{
"type": "run",
"argv": ["python", "-m", "pytest", "tests/", "-q"],
"expect_exit": 0
}
Shell interpretation is disabled by default. "shell": true is an explicit trust-boundary opt-in. Verifier output is bounded.
Sealing and evidence
Seal the complete verification contract with:
plan-auditor plan verify .
The v4 seal binds requirements, coverage, tools, step identity, checks, dependencies, outputs, generated/manual formal-planning data, and supervisor environment/policy fingerprints.
Evidence is append-only JSONL with SHA-256 chain continuity across rotations. Optional external-key HMAC authenticates evidence, checkpoints, registry state, seals, and integrity metadata.
# set PLAN_AUDITOR_HMAC_KEY or PLAN_AUDITOR_HMAC_KEY_FILE first
plan-auditor integrity init .
plan-auditor audit .
The key file must resolve outside the workspace.
Multi-plan and multi-agent state
Default plan:
.plan-auditor/plan.json
Named plans:
.plan-auditor/plans/<name>.json
The aggregate gate includes every active plan.
Agent registry modes:
serialparallel-warnparallel-strict
Ownership paths are canonicalized to prevent alternate-path conflict bypasses.
Snapshot / rollback
Default snapshots capture product state while excluding .git, .plan-auditor, and cache metadata. Manifests include file type, mode, and hash. Full-scope rollback restores the snapshot and removes files introduced afterwards.
CLI
plan-auditor validate <dir> [--plan NAME]
plan-auditor plan verify <dir> [--plan NAME] [--reseal]
plan-auditor plan inspect <dir> [--plan NAME]
plan-auditor run <dir> [step ids ...] [--plan NAME]
plan-auditor audit <dir> [--plan NAME]
plan-auditor evidence verify <dir>
plan-auditor integrity init|status <dir>
plan-auditor doctor <dir>
plan-auditor task list <dir>
plan-auditor agents list|register|heartbeat|claim|release ...
plan-auditor supervisor start|stop|status ...
plan-auditor-formalize compile <dir> [--plan NAME]
plan-auditor-formalize verify <dir> --contract-sha <sha256>
plan-auditor-formal make-check <formal-contract.json>
plan-auditor-formal verify <dir> --contract-sha <sha256>
plan-auditor-formal export-pddl <dir> --contract-sha <sha256> --output <dir>
Cross-platform packaging
CI builds and installs real wheels in clean environments on:
- Ubuntu,
- Windows,
- macOS.
Python compatibility is tested on 3.10, 3.11, 3.12, and 3.13.
Architecture
The project combines deterministic requirement alignment, workspace observation, rule/policy evaluation, explicit plan DAGs, BDI-inspired goal state, grounded STRIPS planning, Soar-like lifecycle control, subsumption-inspired authority, cryptographic sealing, evidence integrity, watchdog supervision, and multi-agent coordination.
See:
docs/architecture.mddocs/dependency-graph.mddocs/formal-planning.mddocs/threat-model.mdreferences/plan-format.md
Trust boundary
Plan Auditor verifies completion; it is not an OS sandbox.
Automatic formalization removes the need to trust an LLM-generated symbolic model for the structural layer, but it does not claim perfect arbitrary natural-language theorem formalization. The host-owned request and deterministic acceptance checks remain authoritative. Domain semantics that cannot be derived mechanically should be reviewed explicitly rather than guessed.
A malicious same-OS-user process that can read external integrity key material remains outside the local integrity guarantee; use a separate OS account, container, or VM when that attacker is in scope.
Version
Latest stable release: 2.4.0
Current source version: 2.4.0
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plan_auditor-2.4.0.tar.gz.
File metadata
- Download URL: plan_auditor-2.4.0.tar.gz
- Upload date:
- Size: 156.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b88f5caf3da1e8edd8dddbb3fd8a4df230bf9a13deaa5133dd44ee99ed538f19
|
|
| MD5 |
bc3ac6809c2acc6b7ec6b78c14bac47e
|
|
| BLAKE2b-256 |
332035ad26f34e411afeab7cd034113dee3de364f0d1f1e410868f376a3e4d4f
|
Provenance
The following attestation bundles were made for plan_auditor-2.4.0.tar.gz:
Publisher:
release.yml on Furox-Art/plan-auditor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plan_auditor-2.4.0.tar.gz -
Subject digest:
b88f5caf3da1e8edd8dddbb3fd8a4df230bf9a13deaa5133dd44ee99ed538f19 - Sigstore transparency entry: 2731846690
- Sigstore integration time:
-
Permalink:
Furox-Art/plan-auditor@9aae9d7984326e3237fd37b490ff4a79fde63cf4 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Furox-Art
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9aae9d7984326e3237fd37b490ff4a79fde63cf4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file plan_auditor-2.4.0-py3-none-any.whl.
File metadata
- Download URL: plan_auditor-2.4.0-py3-none-any.whl
- Upload date:
- Size: 123.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a6c8f05cf5e6f249716cce981c231f29bc63ca2eb52771203da31f9cfae32e3
|
|
| MD5 |
7c1a3e77e5b95dfdbf328a768824f367
|
|
| BLAKE2b-256 |
a877dbf072a88da35f142af148305206d360872024012d313835addb6bcae84c
|
Provenance
The following attestation bundles were made for plan_auditor-2.4.0-py3-none-any.whl:
Publisher:
release.yml on Furox-Art/plan-auditor
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
plan_auditor-2.4.0-py3-none-any.whl -
Subject digest:
3a6c8f05cf5e6f249716cce981c231f29bc63ca2eb52771203da31f9cfae32e3 - Sigstore transparency entry: 2731847389
- Sigstore integration time:
-
Permalink:
Furox-Art/plan-auditor@9aae9d7984326e3237fd37b490ff4a79fde63cf4 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/Furox-Art
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@9aae9d7984326e3237fd37b490ff4a79fde63cf4 -
Trigger Event:
push
-
Statement type: