Experimental, non-executing check planning
September 18, 2026 ยท View on GitHub
ah checks plan [TARGET] [--config PATH] reads an explicitly authored policy and emits a JSON review preview. It does not discover, approve or run scripts. Exit 0 means the preview was produced; invalid or incomplete declared inputs exit 2 with a diagnostic. Existing audit/gate meanings are unchanged.
Create .agentic/checks.json in the target repository using only input files/directories that exist and are appropriate to inspect:
{
"format_version": 1,
"kind": "check-policy",
"inputs": ["src", "package.json"],
"checks": [{
"id": "unit",
"argv": ["node", "--test"],
"cwd": ".",
"required": true,
"timeout_ms": 60000,
"max_output_bytes": 65536
}],
"required_controls": [{"rule_id": "architecture.boundaries", "capability": "checked"}],
"max_age_ms": 3600000
}
ah checks plan
ah checks plan ./project --config .agentic/checks.json
The preview contains the interpreted policy, exact input manifest, source/policy/planner/review digests and source pins. Executable identity, actual execution and host controls remain unverified. The plan review digest is not an execution approval token. --apply, --approve and --write are unsupported. Duplicate object keys in policy JSON are rejected rather than silently taking the last value.
Separate execution review
A separate opt-in execution workflow now uses checks prepare to review absolute tool bindings and the explicit environment, then requires its own matching approval digest plus --allow-unsandboxed for checks run. That does not change checks plan: it stays non-executing. Linux/macOS support local execution; Windows explicitly refuses execution pending equivalent cleanup support. No workflow here establishes host sandboxing or owner authentication.
Input and privacy boundaries
Inputs are explicit normalized relative ASCII paths, not globs. . is allowed for cwd but not as an input root. Missing/unreadable paths, symlinks/reparse points, non-regular files and exceeded limits fail rather than producing a successful partial snapshot. No implicit ignore rules hide declared files. Binary data and empty directories contribute to identity; overlapping roots are deduplicated. Paths containing .git, .env or .env.* are rejected, but this is not comprehensive secret detection. Do not select sensitive data under other names. Arguments and paths appear in previews, so keep credentials out of policies.
Bounds: 2 MB/file, 64 MB total, 10000 entries, depth 64 and 262144 policy bytes. Unsupported scope must be revised explicitly, not silently skipped. Two snapshots plus metadata checks detect ordinary concurrent changes in a quiescent non-hostile worktree, not every malicious race. Identity covers declared input bytes, not host state, transitive dependencies or omitted files.
Compatibility
Canonical contract: upstream/agentic-harness/catalog/schema/checks.v1.schema.json. Digest framing and semantics are in its accompanying check-evidence-v1.md. Exact-byte hashing means whitespace or line-ending changes invalidate a preview. Hashes do not authenticate a producer or prove tests ran.
Planning tests cover non-execution, deterministic output, byte changes, malformed inputs, bounds and platform path restrictions. Actual output and independent hash framing are checked against pinned schemas. Trusted imported-evidence evaluation, freshness after execution and whole-project completion remain separate unfinished work under CLI #55 and canonical #85.