writ plan
Use writ plan before you start or issue a writ.
Select exactly one agent or target:
writ plan <file> --agent <agent>writ plan <file> --target <target>An agent is claude, codex, cursor, or opencode. A target is managed,
gate, mcp-local, or mcp-remote.
Read the result
Section titled “Read the result”The output contains one row for each authored clause. A full tool-authority
target also contains a /grants row. This row checks the default-deny rule
across the complete agent tool surface.
An adapter can satisfy this row by observing every tool source. It can also use an independent control that disables every source it cannot observe. No current Codex, Cursor, or OpenCode adapter has that control.
An enforced row means that the target supplies the required events and
evidence. An unsupported row names each missing capability. It can also give
a reason when the policy path itself cannot support the clause.
enforced /grantsenforced /grants/0/readunsupported /bounds/cost missing: cost.coverage.completeA source-specific grant can pass while the complete grants policy fails. For example, Codex exposes MCP calls but does not expose every built-in and hosted tool call:
unsupported /grants missing: tool.pre.coverage.completeenforced /grants/0/mcpDo not attach this plan. An unobserved tool source could bypass the default denial. A scoped MCP proxy does not claim full agent authority, so its plan checks only the MCP boundary.
The command exits with code 2 when one or more entries are unsupported. writ start and writ issue repeat the plan check before they begin.
Do not remove or weaken a clause only to make a plan pass. Select a target that supplies the required capability.
The gate target observes model traffic only. A writ must contain a grant, and
the gate cannot enforce grants. writ gate therefore needs --allow-partial
after you review the unsupported paths.
Omitted bounds
Section titled “Omitted bounds”An omitted bound is authored-unbounded. It does not appear as an authored
clause in the plan. The managed writ issue target adds operational defaults
of 25 iterations, $1.00, and 15 minutes. These defaults do not become authored
clauses.
The planner still checks these operational defaults when it plans a global
on_bound_breach remedy. A revert remedy is unsupported because an
iteration, cost, or wall-clock breach can occur without a reversible tool
result receipt.
The planner applies the same rule to invariant checkpoints and assent refusal.
It prints the path that can breach without a receipt. Select halt, inform,
pause, or escalate, or narrow the invariant to a receipt-backed checkpoint.
unsupported /remedies/on_invariant_breach reason: Revert cannot handle /invariants/0/clause. This checkpoint has no completed tool result with a reversible receipt.Bind placeholders
Section titled “Bind placeholders”Use --set name=value when the file has a placeholder. Repeat the flag for
more values.
writ plan task.yaml --agent claude --set package=src/syncDo not put a secret in a placeholder value. Attached activation state stores the bound document.