{"record":{"id":"ce45f6bbd8cd819a","repo":"warpdotdev/warp","slug":"runner-name-not-found","errorCode":null,"errorMessage":"Runner '{name}' not found","messagePattern":"Runner '(.+?)' not found","errorType":"validation","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"app/src/ai/agent_sdk/runner.rs","lineNumber":243,"sourceCode":"fn resolve_runner<'a>(\n    runners: &'a [Runner],\n    id: Option<&str>,\n    name: Option<&str>,\n) -> Result<&'a Runner> {\n    if let Some(id) = id {\n        return runners\n            .iter()\n            .find(|runner| runner.uid.inner() == id)\n            .ok_or_else(|| anyhow!(\"Runner '{id}' not found\"));\n    }\n\n    let name = name.ok_or_else(|| anyhow!(\"A runner UID or --name is required\"))?;\n    let matches: Vec<&Runner> = runners\n        .iter()\n        .filter(|runner| runner.config.name == name)\n        .collect();\n    match matches.as_slice() {\n        [] => Err(anyhow!(\"Runner '{name}' not found\")),\n        [runner] => Ok(runner),\n        _ => Err(anyhow!(\n            \"Multiple runners match '{name}'; specify the runner by UID\"\n        )),\n    }\n}\n\n/// Build the [`RunnerInput`] for a create operation.\nfn build_create_input(args: CreateRunnerArgs, owner: GqlOwner) -> UpsertRunnerInput {\n    let os = os_to_gql(args.os);\n    let (linux, mac) = match args.os {\n        RunnerOsArg::Linux => (\n            args.docker_image\n                .map(|docker_image| LinuxConfigInput { docker_image }),\n            None,\n        ),\n        RunnerOsArg::Macos => (\n            None,","sourceCodeStart":225,"sourceCodeEnd":261,"githubUrl":"https://github.com/warpdotdev/warp/blob/e72fd7aacbbb2236d9b3be2aad7e7178fe94b4bc/app/src/ai/agent_sdk/runner.rs#L225-L261","documentation":"Thrown by the agent SDK runner resolver when a command selects a runner by --name but no runner in the fetched server-side list has that exact config.name. The resolver filters the runner list after fetching it from the server, so the name must match exactly (case-sensitive) a runner visible to the current owner. This is the empty-match branch; one match returns the runner and multiple matches raise a separate ambiguity error.","triggerScenarios":"Running a runner subcommand with --name <name> (e.g. an update command) where zero fetched runners have config.name == name: typo, different casing, the runner was deleted, or it belongs to another owner/team not included in the fetched list.","commonSituations":"Runner renamed or deleted from another machine and an old command re-run; CI scripts hard-coding a runner name; assuming names are case-insensitive or fuzzy-matched; runner list not yet synced after an account or team switch.","solutions":["Run the runner list subcommand for the current owner and copy the exact name (check casing)","Pass the runner UID instead of the name; UIDs are unique and avoid both not-found and ambiguity errors","Verify you are targeting the right owner/team scope so the runner appears in the fetched list","If the runner was recently created or renamed, re-run after the runner list syncs"],"exampleFix":"// before\noz runner update --name Ci-Runner --memory-gb 8\n# Error: Runner 'Ci-Runner' not found\n\n// after\noz runner list                 # copy exact name and uid\noz runner update --name ci-runner --memory-gb 8\n# or uniquely:\noz runner update --uid rnr_abc123 --memory-gb 8","handlingStrategy":"validation","validationCode":"let runners = fetch_runners(&owner).await?;\nif !runners.iter().any(|r| r.config.name == name) {\n    anyhow::bail!(\n        \"no runner named '{name}'; known: {}\",\n        runners.iter().map(|r| r.config.name.as_str()).collect::<Vec<_>>().join(\", \")\n    );\n}\nupdate_runner_by_name(name, input).await?;","typeGuard":"fn runner_name_exists(runners: &[Runner], name: &str) -> bool {\n    runners.iter().any(|r| r.config.name == name)\n}","tryCatchPattern":null,"preventionTips":["Prefer runner UIDs in scripts; names are not unique and are case-sensitive","Run the runner list command after creates/renames before using --name","Copy names from listings instead of typing them"],"tags":["agent-sdk","runner","cli","not-found","validation"],"backgroundTag":null,"analyzedSha":"e72fd7aacbbb2236d9b3be2aad7e7178fe94b4bc","analyzedAt":"2026-08-16T08:27:25.381Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}