framework: key in YAML picks which execution backend runs your agents — but the rules differ between agents.yaml and workflow YAML.
framework: selects the backend that runs the workflow.
See also: the top-level
run_on: key (the Python AgentFlow(run_on=…) kwarg) shares one remote sandbox across every step — Remote execution (run_on:) and Placement.Quick Start
1
agents.yaml — any registered framework
2
workflow YAML — needs SUPPORTS_WORKFLOW
Which file uses which?
Workflow YAML dispatch requires an adapter whose
SUPPORTS_WORKFLOW = True. The built-in praisonai adapter has it. Third-party adapters opt in by setting the flag on their subclass — see Capability Flags.
If framework: is omitted, both agents.yaml and workflow YAML resolve via FrameworkAdapterRegistry.resolve_or_default(None) — which delegates to pick_default(). The observability session tagged around a workflow-YAML run now reflects the config-resolved framework, not a hardcoded "praisonai" label.
What you’ll see if the framework isn’t workflow-capable
Selecting a framework whose adapter hasSUPPORTS_WORKFLOW = False raises:
SUPPORTS_WORKFLOW flag is True, so it grows as you install workflow-capable plugins.
Make a custom framework workflow-capable
SetSUPPORTS_WORKFLOW = True on your adapter subclass to accept workflow YAML dispatch:
myframework is accepted in workflow YAML and appears in the “Frameworks supporting workflow execution” list. See Capability Flags.
What to do
Programmatic check
framework_from_config({}) returns the process-default registry’s pick_default() ("praisonai" on a standard install), not a hardcoded literal. framework_from_config({"framework": "CrewAI"}) returns "crewai" (lowercased before validation). Pass registry= (new in PR #5039) to route the default through an injected registry:
validate_workflow_framework() reads the adapter’s SUPPORTS_WORKFLOW flag from the default registry. Pass registry= to test against an isolated registry:
How It Works
Best Practices
Use agents.yaml for multi-framework work
Use agents.yaml for multi-framework work
If you need CrewAI, AutoGen, or a custom framework, write your config as
roles:/topic: agents.yaml. The framework: key there accepts any registered adapter.Omit framework: in workflow YAML
Omit framework: in workflow YAML
On a standard install the registry-selected default is
praisonai, so you can omit the framework: key entirely in workflow YAML. In a custom or tenant-scoped registry, ensure the default your registry picks has SUPPORTS_WORKFLOW = True before omitting the key, or the workflow validator will refuse the run.Validate early in custom code
Validate early in custom code
Call
validate_workflow_framework(fw) immediately after parsing config if you’re building tooling around workflow YAML. It raises ValueError with an actionable message before any execution starts. Pass registry= to validate against an isolated registry in tests.Set SUPPORTS_WORKFLOW to enable workflow YAML
Set SUPPORTS_WORKFLOW to enable workflow YAML
A custom adapter cannot run workflow YAML until it sets
SUPPORTS_WORKFLOW = True (class-level). Leaving it False keeps the adapter agents.yaml-only and blocks workflow dispatch with a clear error.Related
Add new execution backends via Python entry points
Full workflow YAML reference

