Skip to main content
This is the exact contract Cadence validates 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

FieldTypeRequiredConstraints
idstringyesnon-empty
versionstringyesnon-empty
aliasesarray of stringno
applies_toobjectno
libraryobjectno
agentobjectno
participantsarray of objectno
pair_profilesobjectno
contextobjectno
channelobjectno
budgetobjectno
sandboxobjectno
toolsobjectno
tool_policyread-only | edit | full | networkno
sandbox_profileread-only | edit | full | networkno
cadenceobjectno
review_consensusobject | falseno
retryobjectno
merge_admissionobjectno
workpadobjectno
cache_policyobjectno
hot_reloadboolean | objectno
state_machineobjectno
argumentsobjectno
rosterarray of objectno
adherencearray of stringno
attestations_requiredarray of stringno
triggersarray of string | unknownno
executionobjectno
workspace_modefull_worktree | workleaf_readonlyno
max_full_worktrees_per_runintegernomin 0
mutating_parallel_branchesbooleanno

applies_to

FieldTypeRequiredConstraints
labelsarray of stringno
pair_statearray of stringno
pluginsarray of stringno

library

FieldTypeRequiredConstraints
selectablebooleanno
familystringnonon-empty
product_modesingle | pair | collabno
display_namestringnonon-empty
descriptionstringno
maturitystable | experimental | hidden | deprecatedno
recommended_forarray of stringno
locks_aftercadence_claim | dispatch | neverno

agent

FieldTypeRequiredConstraints
runtime_keystringnonon-empty
providerstringno
modelstringno
rolestringno
task_templatestringno
max_turnsinteger (or {{var}} template)no
max_concurrent_agentsinteger (or {{var}} template)no
reasoning_effortstringno
thinkingobjectno
cache_policyobjectno
budgetobjectno
display_namestringno
naming_modefirst-and-last | first-only | last-onlyno
routing_strategypair_programming | single_agent_routineno
single_agentobjectno
agent_tieropus | sonnet | haikuno
dispatch_pathlocal | cloud_managed | autono

agent.thinking

FieldTypeRequiredConstraints
typeenabled | disabled | adaptiveno
budget_tokensinteger (or {{var}} template)no

agent.cache_policy

FieldTypeRequiredConstraints
enabledbooleanno
strategyauto | explicitno
ttlprovider_default | 5m | 1h | 24hno
min_tokensenforce | best_effortno
key_scopeworkflow | project | conversation | issue | laneno
cached_content_idstringno

agent.budget

FieldTypeRequiredConstraints
tokensinteger (or {{var}} template)no
wall_clock_minutesinteger (or {{var}} template)no
minutesinteger (or {{var}} template)no

agent.single_agent

FieldTypeRequiredConstraints
selectfixed | vendor_auto | orderedyes
runtime_keystringnonon-empty
methodapi | sdk | mcp | cli | desktop_appno
dispatch_pathlocal | cloud_managedno
candidatesarray of objectno
fallback_on_credit_exhaustedbooleanno

agent.single_agent.candidates[]

FieldTypeRequiredConstraints
runtime_keystringyesnon-empty
methodapi | sdk | mcp | cli | desktop_appyes
dispatch_pathlocal | cloud_managedyes

participants[]

FieldTypeRequiredConstraints
providerstringno
runtime_keystringnonon-empty
modelstringno
methodapi | sdk | mcp | cli | desktop_appno
harnessclaude_code | custom | defaultno
dispatch_pathlocal | cloud_managed | autono
mcp_server_configobjectno
cli_flagsobjectno
cliobjectno
workspace_modefull_worktree | workleaf_readonlyno
participant_idstringyesnon-empty
rolestringno
aliasesarray of stringno
reasoning_effortstringno
thinkingobjectno

participants[].cli

FieldTypeRequiredConstraints
profilestringnonon-empty
binarystringnonon-empty
startupobjectno
mcpobjectno
skillsobjectno
hooksobjectno
routineobjectno
experimentalobjectno

participants[].cli.startup

FieldTypeRequiredConstraints
approval_modesupervised | auto | plan | dontAsk | bypassno
sandboxread-only | workspace-write | danger-full-accessno
resumebooleanno

participants[].cli.mcp

FieldTypeRequiredConstraints
serversarray of stringno
allowed_toolsarray of stringno

participants[].cli.skills

FieldTypeRequiredConstraints
includearray of stringyes

participants[].cli.hooks

FieldTypeRequiredConstraints
includearray of stringyes

participants[].cli.routine

FieldTypeRequiredConstraints
triggerstringnonon-empty
steerablebooleanno

participants[].cli.experimental

FieldTypeRequiredConstraints
rawobjectyes

participants[].thinking

FieldTypeRequiredConstraints
typeenabled | disabled | adaptiveno
budget_tokensinteger (or {{var}} template)no

context

FieldTypeRequiredConstraints
modeoff | briefno
max_input_tokensintegernomin > 0
max_output_tokensintegernomin > 0
dynamic_budget_tokensintegernomin 0
context_pack_budget_tokensintegernomin 0, max 3000
governed_query_limitintegernomin 0
recent_thinkids_limitintegernomin 0
graph_focus_limitintegernomin 0
cat_recall_limitintegernomin 0
evidence_excerpt_budget_tokensintegernomin 0
raw_prior_output_policyforbid | digest_only | allowno
compression_policydeterministic_digest | noneno
provider_cacheobjectno

context.provider_cache

FieldTypeRequiredConstraints
stable_prefixbooleanno
dynamic_suffixbooleanno

channel

FieldTypeRequiredConstraints
modeoff | liveno
topologyhuman_pair | pair | small_team | review_panelno
transportin_process | local_socketno
human_seatbooleanno
max_participantsintegernomin > 0, max 5
max_hopsintegernomin > 0, max 3
idle_timeout_sintegernomin > 0
max_messages_per_stageintegernomin > 0
max_bounces_per_pairintegernomin > 0
message_budget_tokensintegernomin > 0
stage_digest_budget_tokensintegernomin > 0
transcript_policydigest_onlyno
artifact_policyrefs_onlyno
redaction_policystandardno
per_channel_lifetime_tokensintegernomin > 0
per_channel_lifetime_cost_usdnumbernomin > 0
floorobjectno
external_a2afalseno

channel.floor

FieldTypeRequiredConstraints
orderfifo | round_robinno
turn_cap_secondsintegernomin > 0
chat_char_capintegernomin > 0
audio_modespeak | quietno
broadcast_aliasesarray of stringno

budget

FieldTypeRequiredConstraints
tokensinteger (or {{var}} template)no
wall_clock_minutesinteger (or {{var}} template)no
minutesinteger (or {{var}} template)no

sandbox

FieldTypeRequiredConstraints
workspace_writebooleanno
networkboolean | array of stringno
filesystemobjectno

sandbox.filesystem

FieldTypeRequiredConstraints
allowarray of stringno
denyarray of stringno

tools

FieldTypeRequiredConstraints
requiredarray of stringno
optionalarray of stringno

cadence

FieldTypeRequiredConstraints
ownercadenceyes
domainsarray of wiki | graph_memory_cat_thinkid | agent_conversation | magic_canvas | computer_control | releaseyes
run_contractobjectyes
resource_lifecycleobjectyes
event_contractobjectno
existing_resource_policyreuse_or_ask | reuse_existing | create_newno

cadence.run_contract

FieldTypeRequiredConstraints
goalstringyesnon-empty
success_criteriaarray of stringyes
done_whenarray of stringyes
non_goalsarray of stringno

cadence.resource_lifecycle

FieldTypeRequiredConstraints
leasesarray of stringno
releasearray of stringyes
terminal_cleanupbooleanno

cadence.event_contract

FieldTypeRequiredConstraints
progressarray of stringno
completionstringyesnon-empty
failurestringnonon-empty

retry

FieldTypeRequiredConstraints
max_attemptsintegernomin > 0
backoff_msintegernomin 0
retryable_runtime_failuresarray of stringno
runtime_failure_fallbacksarray of objectno
stale_base_merge_retrybooleanno
human_review_after_attemptsintegernomin > 0

retry.runtime_failure_fallbacks[]

FieldTypeRequiredConstraints
failure_classstringno
from_providerstringno
from_runtime_keystringno
providerstringno
runtime_keystringno
agent_runtime_keystringno
modelstringno

merge_admission

FieldTypeRequiredConstraints
request_slotbooleanno
stale_base_retrybooleanno
required_axesarray of stringno
fail_codesarray of stringno

workpad

FieldTypeRequiredConstraints
requiredbooleanno
evidence_requiredbooleanno

cache_policy

FieldTypeRequiredConstraints
enabledbooleanno
strategyauto | explicitno
ttlprovider_default | 5m | 1h | 24hno
min_tokensenforce | best_effortno
key_scopeworkflow | project | conversation | issue | laneno
cached_content_idstringno

state_machine

FieldTypeRequiredConstraints
typestringno
startstringno
stage_orderarray of stringno
terminal_statesarray of stringno
on_eventobjectno
loop_capsobjectno
concurrencysequential | pipelineno
statesobjectno
loopobjectno
gateobjectno

state_machine.states.<name>

FieldTypeRequiredConstraints
agentobjectno
output_schemaobjectno
fan_outobjectno
gateobjectno
loopobjectno

state_machine.states.<name>.agent

FieldTypeRequiredConstraints
runtime_keystringnonon-empty
providerstringno
modelstringno
rolestringno
task_templatestringno
max_turnsinteger (or {{var}} template)no
max_concurrent_agentsinteger (or {{var}} template)no
reasoning_effortstringno
thinkingobjectno
cache_policyobjectno
budgetobjectno
display_namestringno
naming_modefirst-and-last | first-only | last-onlyno
routing_strategypair_programming | single_agent_routineno
single_agentobjectno
agent_tieropus | sonnet | haikuno
dispatch_pathlocal | cloud_managed | autono
state_machine.states.<name>.agent.thinking
FieldTypeRequiredConstraints
typeenabled | disabled | adaptiveno
budget_tokensinteger (or {{var}} template)no
state_machine.states.<name>.agent.cache_policy
FieldTypeRequiredConstraints
enabledbooleanno
strategyauto | explicitno
ttlprovider_default | 5m | 1h | 24hno
min_tokensenforce | best_effortno
key_scopeworkflow | project | conversation | issue | laneno
cached_content_idstringno
state_machine.states.<name>.agent.budget
FieldTypeRequiredConstraints
tokensinteger (or {{var}} template)no
wall_clock_minutesinteger (or {{var}} template)no
minutesinteger (or {{var}} template)no
state_machine.states.<name>.agent.single_agent
FieldTypeRequiredConstraints
selectfixed | vendor_auto | orderedyes
runtime_keystringnonon-empty
methodapi | sdk | mcp | cli | desktop_appno
dispatch_pathlocal | cloud_managedno
candidatesarray of objectno
fallback_on_credit_exhaustedbooleanno
state_machine.states.<name>.agent.single_agent.candidates[]
FieldTypeRequiredConstraints
runtime_keystringyesnon-empty
methodapi | sdk | mcp | cli | desktop_appyes
dispatch_pathlocal | cloud_managedyes

state_machine.states.<name>.output_schema

FieldTypeRequiredConstraints
typeobject | array | string | number | booleanno
propertiesobjectno
itemsobjectno
requiredarray of stringno
state_machine.states.<name>.output_schema.items
Recursive structure — same shape as __schema0 above.

state_machine.states.<name>.fan_out

FieldTypeRequiredConstraints
overstringyesnon-empty
asstringyesnon-empty
max_concurrencyintegernomin > 0
backgroundbooleanno

state_machine.states.<name>.gate

FieldTypeRequiredConstraints
humanbooleanyes

state_machine.states.<name>.loop

FieldTypeRequiredConstraints
while_budget_remaining_gtintegeryesmin 0

state_machine.loop

FieldTypeRequiredConstraints
while_budget_remaining_gtintegeryesmin 0

state_machine.gate

FieldTypeRequiredConstraints
humanbooleanyes

roster[]

FieldTypeRequiredConstraints
providerstringyesnon-empty
runtime_keystringyesnon-empty
modelstringno
methodapi | sdk | mcp | cli | desktop_appno
harnessclaude_code | custom | defaultno
dispatch_pathlocal | cloud_managed | autono
mcp_server_configobjectno
cli_flagsobjectno
cliobjectno
workspace_modefull_worktree | workleaf_readonlyno
aliasarray of stringyes
voicestringnonon-empty
voice_namestringnonon-empty
data_sourceobjectno
allowed_toolsarray of stringno
context_budget_tokensintegernomin > 0, max 200000

roster[].cli

FieldTypeRequiredConstraints
profilestringnonon-empty
binarystringnonon-empty
startupobjectno
mcpobjectno
skillsobjectno
hooksobjectno
routineobjectno
experimentalobjectno

roster[].cli.startup

FieldTypeRequiredConstraints
approval_modesupervised | auto | plan | dontAsk | bypassno
sandboxread-only | workspace-write | danger-full-accessno
resumebooleanno

roster[].cli.mcp

FieldTypeRequiredConstraints
serversarray of stringno
allowed_toolsarray of stringno

roster[].cli.skills

FieldTypeRequiredConstraints
includearray of stringyes

roster[].cli.hooks

FieldTypeRequiredConstraints
includearray of stringyes

roster[].cli.routine

FieldTypeRequiredConstraints
triggerstringnonon-empty
steerablebooleanno

roster[].cli.experimental

FieldTypeRequiredConstraints
rawobjectyes

roster[].data_source

FieldTypeRequiredConstraints
domainstringyesnon-empty
symbolsarray of stringno

execution

FieldTypeRequiredConstraints
trigger_ownercadence | providerno
provider_native_routineobjectno

execution.provider_native_routine

FieldTypeRequiredConstraints
enabledbooleanyes

Validating

Validate before dispatch — Cadence rejects invalid frontmatter at load time. From an agent session, call the think_workflow_md_validate tool with your draft; it returns the same errors this schema produces.