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.

Solutions

  1. Remove `runner_id` from the agent config file so the task runs on the default runtime
  2. Switch to a build/channel where the CloudRunners feature flag is enabled (dogfood or preview build)
  3. 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

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


AI-assisted analysis of warpdotdev/warp@e72fd7aacb (2026-08-16). Data as JSON: /api/errors/f63c167adf505c17. Report an issue: GitHub.

Appendix: 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)