Skip to main content
Preflight checks whether a run can launch before Synth spends runtime.

Use preflight before project runs

preflight = project.runs.preflight(
    host_kind="daytona",
    work_mode="directed_effort",
    providers=[{"provider": "openrouter"}],
    runbook="lite",
)

if not preflight.clear_to_trigger:
    raise RuntimeError(preflight.resolution_reason or "Run is not ready to start")

Error contract

Launch denials are errors:
  • MCP returns tool errors.
  • Python raises typed exceptions.
  • Direct /smr REST is not the public external integration path.
Do not build integrations that expect success payloads with embedded error fields.

Common blockers

BlockerMeaning
Unsupported harness/model pairThe selected agent_model is not available for the selected agent_harness.
Unsupported reasoning effortThe requested agent_model_params.reasoning_effort is not listed for that model.
Missing authSYNTH_API_KEY or workspace credentials are missing or invalid.
Budget exceededRun or monthly budget caps prevent launch or stop runtime.
Project setup incompleteRepo, setup, onboarding, or runtime requirements are not ready.
Provider unavailableProvider binding is missing, disabled, or lacks required capability.
Approval requiredThe run is blocked until an operator action is resolved.

Where to look next