Posture is available in policy schema 1.2.0+ under policy.posture.
posture:
initial: <state_name>
states:
<state_name>:
description: <optional string>
capabilities: [<capability>, ...]
budgets:
<budget_key>: <non-negative integer>
transitions:
- from: <state_name|"*">
to: <state_name>
on: <trigger>
after: <duration> # required only for timeout
requires: [] # reservedfile_accessfile_writeegressshellmcp_toolpatchcustom
file_writesegress_callsshell_commandsmcp_tool_callspatchescustom_calls
user_approvaluser_denialcritical_violationany_violationtimeoutbudget_exhaustedpattern_match(reserved)
Timeout transitions require after in one of:
<n>s<n>m<n>h
Examples: 30s, 5m, 1h.
posture.initialmust exist inposture.states- unknown capabilities are rejected
- unknown budget keys are rejected
- negative budget values are rejected
- transition
frommust be a known state or"*" - transition
tomust be a known state ("*"is invalid) - timeout transitions require a valid
afterduration
When posture is enabled, runtime state is stored per session in SessionContext.state["posture"] with:
current_stateentered_atbudgetstransition_history