{"record":{"id":"fa0e85a94c534bb2","repo":"warpdotdev/warp","slug":"runner-id-is-set-in-the-config-file-but-runner-s","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/ambient.rs","lineNumber":331,"sourceCode":"                    Ok(file) => Some(file),\n                    Err(err) => {\n                        super::report_fatal_error(err, ctx);\n                        return;\n                    }\n                },\n                None => None,\n            };\n\n            // The `--runner` CLI flag is gated in `run_agent`, but a config file\n            // can also set `runner_id`, which would otherwise bypass the gate.\n            if loaded_file\n                .as_ref()\n                .and_then(|f| f.file.runner_id.as_ref())\n                .is_some()\n                && !FeatureFlag::CloudRunners.is_enabled()\n            {\n                super::report_fatal_error(\n                    anyhow::anyhow!(\n                        \"`runner_id` is set in the config file but runner support is not enabled\"\n                    ),\n                    ctx,\n                );\n                return;\n            }\n\n            // Validate and process attachments early, before environment selection\n            // This ensures users don't have to go through env selection if attachment validation fails\n            if args.attachment_paths.len() > MAX_ATTACHMENT_COUNT_FOR_CLOUD_QUERY {\n                super::report_fatal_error(\n                    anyhow::anyhow!(\n                        \"Too many attachments. Maximum {} attachments allowed, but {} were provided.\",\n                        MAX_ATTACHMENT_COUNT_FOR_CLOUD_QUERY,\n                        args.attachment_paths.len()\n                    ),\n                    ctx,\n                );","sourceCodeStart":313,"sourceCodeEnd":349,"githubUrl":"https://github.com/warpdotdev/warp/blob/e72fd7aacbbb2236d9b3be2aad7e7178fe94b4bc/app/src/ai/agent_sdk/ambient.rs#L313-L349","documentation":"The --runner CLI flag is feature-gated, but a config file can also set runner_id, which would bypass that gate; the guard at app/src/ai/agent_sdk/ambient.rs:322-336 catches the bypass and calls report_fatal_error when the config file has runner_id set while FeatureFlag::CloudRunners is disabled.","triggerScenarios":"Supplying a config file (via the run command's config-file argument) whose runner_id field is set, on a build/account where the CloudRunners feature flag is off.","commonSituations":"Config files shared between environments where the flag state differs; a leftover runner_id after the flag was rolled back or the config was copied from a dogfood setup.","solutions":["Remove runner_id from the config file","Or run on a build/account where CloudRunners is enabled"],"exampleFix":"# before (config file)\nrunner_id = \"my-runner\"\n\n# after\n# (field removed)","handlingStrategy":"validation","validationCode":"if let Ok(file) = super::config_file::load_config_file(path) {\n    if file.file.runner_id.is_some() && !FeatureFlag::CloudRunners.is_enabled() {\n        // reject or strip runner_id before launching the run\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate config files against the current feature-flag state before passing them","Keep environment-specific config files separate instead of sharing one with runner_id across flag states"],"tags":["feature-flag","config-file","runners"],"backgroundTag":null,"analyzedSha":"e72fd7aacbbb2236d9b3be2aad7e7178fe94b4bc","analyzedAt":"2026-08-16T08:27:25.381Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}