workflow.md frontmatter
against — generated from the same JSON Schema the validator loads, so it
cannot drift. Use it like --help for workflow authoring: every field,
type, required flag, enum, and constraint below is enforceable truth.
Numeric and boolean fields also accept {{var}} template strings,
resolved from workflow arguments at dispatch time.
Top-level fields
applies_to
library
agent
agent.thinking
agent.cache_policy
agent.budget
agent.single_agent
agent.single_agent.candidates[]
participants[]
participants[].cli
participants[].cli.startup
participants[].cli.mcp
participants[].cli.skills
participants[].cli.hooks
participants[].cli.routine
participants[].cli.experimental
participants[].thinking
context
context.provider_cache
channel
channel.floor
budget
sandbox
sandbox.filesystem
tools
cadence
cadence.run_contract
cadence.resource_lifecycle
cadence.event_contract
retry
retry.runtime_failure_fallbacks[]
merge_admission
workpad
cache_policy
state_machine
state_machine.states.<name>
state_machine.states.<name>.agent
state_machine.states.<name>.agent.thinking
state_machine.states.<name>.agent.cache_policy
state_machine.states.<name>.agent.budget
state_machine.states.<name>.agent.single_agent
state_machine.states.<name>.agent.single_agent.candidates[]
state_machine.states.<name>.output_schema
state_machine.states.<name>.output_schema.items
Recursive structure — same shape as __schema0 above.
state_machine.states.<name>.fan_out
state_machine.states.<name>.gate
state_machine.states.<name>.loop
state_machine.loop
state_machine.gate
roster[]
roster[].cli
roster[].cli.startup
roster[].cli.mcp
roster[].cli.skills
roster[].cli.hooks
roster[].cli.routine
roster[].cli.experimental
roster[].data_source
execution
execution.provider_native_routine
Validating
Validate before dispatch — Cadence rejects invalid frontmatter at load time. From an agent session, call thethink_workflow_md_validate tool
with your draft; it returns the same errors this schema produces.