{"record":{"id":"e2eac64bb49fa401","repo":"warpdotdev/warp","slug":"failed-to-parse-saved-prompt-id-id-err","errorCode":null,"errorMessage":"Failed to parse saved prompt ID '{id}': {err}","messagePattern":"Failed to parse saved prompt ID '(.+?)': (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/src/ai/agent_sdk/ambient.rs","lineNumber":278,"sourceCode":"                    anyhow::anyhow!(\"Either --prompt, --skill, or --conversation must be provided\"),\n                    ctx,\n                );\n                return;\n            }\n            let prompt = match prompt {\n                Some(Prompt::PlainText(text)) => Some(text),\n                Some(Prompt::SavedPrompt(id)) => {\n                    // Resolve the saved prompt to pass along as the ambient agent query.\n                    // We look up the prompt text here, rather than passing along the saved prompt ID,\n                    // in order to support personal saved prompts, which team service accounts would not\n                    // have access to.\n                    // TODO: we should pipe the saved prompt ID through the API, and resolve it server-side.\n                    // That'd also allow finding all tasks which used a given saved prompt.\n                    let sync_id: SyncId = match ServerId::try_from(id.as_str()) {\n                        Ok(server_id) => server_id.into(),\n                        Err(err) => {\n                            super::report_fatal_error(\n                                anyhow::anyhow!(\"Failed to parse saved prompt ID '{id}': {err}\"),\n                                ctx,\n                            );\n                            return;\n                        }\n                    };\n\n                    let cloud_model = CloudModel::handle(ctx);\n                    let workflow = cloud_model.as_ref(ctx).get_workflow(&sync_id);\n\n                    match workflow {\n                        Some(cloud_workflow) => match cloud_workflow.model().data.prompt() {\n                            Some(prompt_text) => Some(prompt_text.to_string()),\n                            None => {\n                                super::report_fatal_error(\n                                    anyhow::anyhow!(\"'{id}' is not a saved prompt\"),\n                                    ctx,\n                                );\n                                return;","sourceCodeStart":260,"sourceCodeEnd":296,"githubUrl":"https://github.com/warpdotdev/warp/blob/e72fd7aacbbb2236d9b3be2aad7e7178fe94b4bc/app/src/ai/agent_sdk/ambient.rs#L260-L296","documentation":"--prompt accepts a saved-prompt reference, which must convert to a ServerId (then a SyncId) via ServerId::try_from (app/src/ai/agent_sdk/ambient.rs:275-284). A malformed ID fails the conversion and the error embeds both the offending ID and the underlying parse error. This fails before any CloudModel lookup happens.","triggerScenarios":"Passing a prompt name or free text instead of the sync ID; copying an ID with extra characters, truncation, or surrounding quotes; an ID belonging to a different entity scheme.","commonSituations":"Users typing the prompt's display name where the ID is expected; IDs mangled by shell quoting or copy-truncation.","solutions":["Copy the exact saved-prompt ID from the prompt listing output","Trim whitespace and remove surrounding quotes from the value","If you only have the text, pass it directly with --prompt instead of an ID"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if let Some(Prompt::SavedPrompt(id)) = args.prompt_arg.to_prompt() {\n    if ServerId::try_from(id.as_str()).is_err() {\n        // reject the ID early instead of letting the run abort later\n    }\n}","typeGuard":"fn saved_prompt_id_is_parsable(id: &str) -> bool {\n    ServerId::try_from(id).is_ok()\n}","tryCatchPattern":null,"preventionTips":["Pass IDs verbatim from the prompts listing; never the display name","Trim whitespace/quotes around IDs in wrappers before forwarding them"],"tags":["saved-prompts","parsing","cli"],"backgroundTag":null,"analyzedSha":"e72fd7aacbbb2236d9b3be2aad7e7178fe94b4bc","analyzedAt":"2026-08-16T08:27:25.381Z","schemaVersion":2},"datasetVersion":"2026-08-16T13:17:31.715Z"}