See also — Parent: skill/SKILL.md · Authoritative normative source: spec/versions/1.0/validation-rules.md (R1–R36) · Non-normative explainer: docs/validation.md · Where each rule lands (layer): see docs/layer-model.md and the per-layer docs · Runtime enforcement: docs/runtime.md (completion gate chain — L0/R34, R35 repair fixpoint), docs/critique.md, docs/refinement.md (R36) · Sibling skill references: architecture.md, compliance-levels.md, spec-summary.md, tools-reference.md
Use this checklist to validate AWP workflow correctness. All rules are mandatory unless noted.
The authoritative source is spec/versions/1.0/validation-rules.md; this file is a condensed
skill-local reference.
- R1:
workflow.namein the manifest MUST exactly match the workflow directory name. - R2: All agent IDs (the
namefield in graph entries and agent configs) MUST besnake_case-- lowercase letters, digits, and underscores only. No hyphens, spaces, or uppercase.
- R3 (recommended for Python): Every
agent.pySHOULD define a class namedAgentthat extendsAWPAgent(fromawp.agent). - R4 (recommended for Python): The
Agent.nameproperty MUST return the exact same string as the agent's ID in the graph. For example, if the graph entry isname: data_processor, thenAgent.namemust return"data_processor".
- R5: Every agent listed in the graph MUST have a corresponding directory at
agents/{agent_id}/. - R6: Every agent directory MUST contain both
agent.awp.yamlandagent.py. - R7: Every agent MUST have a system prompt at
workflow/instructions/SYSTEM_PROMPT.md. - R8: Every agent MUST have an intro prompt at
workflow/prompt/00_INTRO.md. - R9: Every agent MUST have an output schema at
workflow/output_schema/output_schema.json. - R10: Every agent MUST have field descriptions at
workflow/output_schema_desc/output_schema_desc.json.
- R11:
depends_onentries MUST only reference agent names that are defined in the same workflow graph. No forward references to agents in other workflows. - R12: The agent graph MUST be a directed acyclic graph (DAG). Circular dependencies are not allowed. If A depends on B, B must not depend on A (directly or transitively).
- R13: Every field listed in
share_outputMUST appear as a property in the agent'soutput_schema.json. If an agent shares[summary, findings, confidence], all three must be defined in the schema. - R14: Tool names listed in
tools.allowedMUST reference tools that are registered in the MCP registry. Built-in tools:web.search,http.request,file.read,file.write,file.list,shell.execute,agent.send_message,agent.list_messages,memory.write,memory.read,memory.search,memory.curate,arithmetic.add,arithmetic.subtract,arithmetic.multiply,arithmetic.divide. - R15: If
tools.executeisfalse, thentools.allowedMUST be an empty list or omitted entirely. An agent cannot have allowed tools without tool execution enabled.
- R16:
execution.modeMUST be one of:sequential,parallel,conditional. No other values are accepted.
- R17: Every
output_schema.jsonMUST include aconfidenceproperty of typenumberwithminimum: 0.0andmaximum: 1.0. This field MUST also be listed inrequired. - R18: Every
output_schema.jsonMUST be valid JSON Schema draft-07 (indicated by"$schema": "http://json-schema.org/draft-07/schema#") and MUST have"type": "object"at the root level.
- R19: If
capabilities.codemode.enabledistrue, thencapabilities.tools.enabledMUST betrue. Code Mode generates an SDK from the allowed tools. - R20: If
capabilities.codemode.enabledistrue, thencapabilities.sandbox.typeMUST be set and MUST NOT be"none". Agent-generated code MUST run in a sandbox. - R21:
capabilities.codemode.languageMUST be one of:"typescript","python","javascript". - R22: If
capabilities.codemode.sdk_surface.modeis"explicit", thencapabilities.codemode.sdk_surface.includeMUST contain at least one tool FQN. - R23: Every entry in
capabilities.codemode.sdk_surface.excludeMUST match at least one tool incapabilities.tools.allowed. - R24: If
capabilities.sandbox.typeis"isolate", thecapabilities.sandbox.networksection MUST be present with at leastnetwork.enableddefined.
- R25: If
capabilities.codemode.tool_creationistrue, thetool_creation_namespaceMUST NOT match a reserved namespace (web,http,file,shell,agent,memory,arithmetic,numpy,matplot,pandas,doc,sklearn) AND MUST be listed indynamic_tools.allowed_namespacesinworkflow.awp.yaml. - R26: If
capabilities.codemode.tool_creationistrue, thencapabilities.codemode.enabledMUST betrueANDdynamic_tools.enabledMUST betrueinworkflow.awp.yaml.
- R27: If
observability.evaluation.enabled: true, every metrickindMUST be one ofdeterministic_test,deterministic_assertion,rubric_judge,budget_utility,policy_score. - R28: Evaluation thresholds
accept,retry,failMUST each be in[0.0, 1.0]AND satisfyaccept >= retry >= fail. - R29: Every metric
weightMUST be>= 0; at least one metric MUST have a strictly positive weight. - R30:
step_scores.hooksMUST only contain valid hook names;retry_policy.actions.below_retry/below_failMUST reference valid actions.
- R31 (validator): When
orchestration.delegation_loop.budgetis present,max_depthMUST be an integer>= 0.max_depth: 0disables recursive submanager spawning. - R32 (validator):
delegation_loop.budget.max_depthMUST NOT exceed the hard ceiling of10. Values> 5emit a warning.
Label clarification. A separate prompt-level rule also named
R31(Plan-Tool-Closure, inpackages/awp-runtime/src/awp/data/prompts.py) grades each PLAN subtask'stool_manifest. It is enforced by the runtime when a manager issues a PLAN decision, not byawp validate. The validator-R31 and the prompt-R31 share the label only by historical accident — do not conflate them.
Runtime checks in the delegation-loop runner that reject a manager COMPLETE decision and force another iteration. Every rejection bumps state["_rejected_completions"]; after budget.max_rejected_completions consecutive rejections the run terminates with status=partial, reason=max_rejected_completions.
- critique — mean critique score below
min_score_to_complete(default0.6). - deliverable_presence — every path declared via
required_outputs(preferred) or scraped fromsuccess_criteria/task text MUST exist and be non-empty. - placeholder —
TODO,XX%,???, template stubs in deliverables. - file — rejects 1x1 PNGs and files
< 512 B. - structural_integrity — markdown anchor adjacency, paragraph duplication, reference-format consistency.
- eval — overall
observability.evaluationscore belowthresholds.fail.