{"record":{"id":"f63c167adf505c17","repo":"warpdotdev/warp","slug":"runner-id-is-set-in-the-config-file-but-runner-s-f63c16","errorCode":null,"errorMessage":"`runner_id` is set in the config file but runner support is not enabled","messagePattern":"`runner_id` is set in the config file but runner support is not enabled","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/src/ai/agent_sdk/mod.rs","lineNumber":382,"sourceCode":"    // No config file is involved — the worker never passes --file alongside --task-id.\n    if args.task_id.is_some() {\n        return build_server_side_task(args, resolved_skill, ctx);\n    }\n\n    let loaded_file = match args.config_file.file.as_deref() {\n        Some(path) => Some(config_file::load_config_file(path)?),\n        None => None,\n    };\n\n    let cli_mcp_servers = build_mcp_servers_from_specs(&args.all_mcp_specs())?;\n\n    // Merge precedence: file < CLI < skill\n    let file_merged = config_file::merge_with_precedence(loaded_file.as_ref(), Default::default());\n\n    // Runner support is gated. The `run` command has no `--runner` flag, but a\n    // config file can still set `runner_id`, so reject it when the flag is off.\n    if file_merged.runner_id.is_some() && !FeatureFlag::CloudRunners.is_enabled() {\n        return Err(anyhow::anyhow!(\n            \"`runner_id` is set in the config file but runner support is not enabled\"\n        ));\n    }\n\n    // Skill provides base_prompt and optionally name\n    let (skill_name, runtime_base_prompt) = match resolved_skill {\n        Some(skill) => (Some(skill.name.clone()), Some(skill.instructions.clone())),\n        None => (None, None),\n    };\n\n    // When a non-Oz harness is active, --model targets the harness rather than the Oz model.\n    let harness_model_id = if args.harness != Harness::Oz {\n        args.model.model.clone()\n    } else {\n        None\n    };\n    let harness_override = (args.harness != Harness::Oz).then_some(HarnessConfig {\n        harness_type: args.harness,","sourceCodeStart":364,"sourceCodeEnd":400,"githubUrl":"https://github.com/warpdotdev/warp/blob/e72fd7aacbbb2236d9b3be2aad7e7178fe94b4bc/app/src/ai/agent_sdk/mod.rs#L364-L400","documentation":"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.","triggerScenarios":"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).","commonSituations":"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.","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"],"exampleFix":"# before (agent.toml, on a stable build without CloudRunners)\nrunner_id = \"rnr_123\"\n\n# after\n# runner_id removed; task runs on the default runtime","handlingStrategy":"validation","validationCode":"# Before running on a stable channel, reject configs that target runners\nif grep -Eq '^[[:space:]]*runner_id[[:space:]]*=' \"$CONFIG\" && ! is_dogfood_build; then\n  echo \"config sets runner_id but this build has no runner support\" >&2\n  exit 1\nfi\nwarp agent run --config \"$CONFIG\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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"],"tags":["config","feature-flag","agent-sdk","runner"],"backgroundTag":null,"analyzedSha":"e72fd7aacbbb2236d9b3be2aad7e7178fe94b4bc","analyzedAt":"2026-08-16T08:27:25.381Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}