warpdotdev/warp · error
`runner_id` is set in the config file but runner support is
Error message
`runner_id` is set in the config file but runner support is not enabled
What it means
Thrown by the agent run path after merging the loaded config file with defaults: the merged config contains `runner_id`, but the CloudRunners feature flag is disabled in this build. The `run` command has no `--runner` flag to validate against, so this explicit check is the only guard. It rejects runner targeting on builds where cloud runner support has not been rolled out.
Source
Thrown at app/src/ai/agent_sdk/mod.rs:382
// No config file is involved — the worker never passes --file alongside --task-id.
if args.task_id.is_some() {
return build_server_side_task(args, resolved_skill, ctx);
}
let loaded_file = match args.config_file.file.as_deref() {
Some(path) => Some(config_file::load_config_file(path)?),
None => None,
};
let cli_mcp_servers = build_mcp_servers_from_specs(&args.all_mcp_specs())?;
// Merge precedence: file < CLI < skill
let file_merged = config_file::merge_with_precedence(loaded_file.as_ref(), Default::default());
// Runner support is gated. The `run` command has no `--runner` flag, but a
// config file can still set `runner_id`, so reject it when the flag is off.
if file_merged.runner_id.is_some() && !FeatureFlag::CloudRunners.is_enabled() {
return Err(anyhow::anyhow!(
"`runner_id` is set in the config file but runner support is not enabled"
));
}
// Skill provides base_prompt and optionally name
let (skill_name, runtime_base_prompt) = match resolved_skill {
Some(skill) => (Some(skill.name.clone()), Some(skill.instructions.clone())),
None => (None, None),
};
// When a non-Oz harness is active, --model targets the harness rather than the Oz model.
let harness_model_id = if args.harness != Harness::Oz {
args.model.model.clone()
} else {
None
};
let harness_override = (args.harness != Harness::Oz).then_some(HarnessConfig {
harness_type: args.harness,View on GitHub (pinned to e72fd7aacb)
Solutions
- Remove `runner_id` from the agent config file so the task runs on the default runtime
- Switch to a build/channel where the CloudRunners feature flag is enabled (dogfood or preview build)
- Keep per-channel config files so a stable-channel run never sees a runner_id key
Example fix
# before (agent.toml, on a stable build without CloudRunners) runner_id = "rnr_123" # after # runner_id removed; task runs on the default runtime
Defensive patterns
Strategy: validation
Validate before calling
# Before running on a stable channel, reject configs that target runners if grep -Eq '^[[:space:]]*runner_id[[:space:]]*=' "$CONFIG" && ! is_dogfood_build; then echo "config sets runner_id but this build has no runner support" >&2 exit 1 fi warp agent run --config "$CONFIG"
Prevention
- Keep per-channel config files; never share a dogfood config with stable-channel runs
- Document flag requirements as comments inside the config file itself
- Lint agent configs in CI against the exact CLI build the job uses
When it happens
Trigger: Running `warp agent run` with a config file (resolved via the config-file path in the run args) that sets `runner_id`, on any build where `FeatureFlag::CloudRunners.is_enabled()` returns false (flag absent from DOGFOOD/PREVIEW/RELEASE flag sets for that channel).
Common situations: A config file authored on a dogfood or preview build (where CloudRunners is on) is reused on a stable build; a leftover `runner_id` key from an earlier runner experiment; CI pinned to an older CLI while the config assumes runner support.
Related errors
- Runner '{name}' not found
- Multiple runners match '{name}'; specify the runner by UID
- --vcpus is required when setting an instance shape for a run
- --memory-gb is required when setting an instance shape for a
- This feature is not enabled
AI-assisted analysis of warpdotdev/warp@e72fd7aacb (2026-08-16).
Data as JSON: /api/errors/f63c167adf505c17.
Report an issue: GitHub.