warpdotdev/warp · error

Failed to parse saved prompt ID '{id}': {err}

Error message

Failed to parse saved prompt ID '{id}': {err}

What it means

--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.

Source

Thrown at app/src/ai/agent_sdk/ambient.rs:278

                    anyhow::anyhow!("Either --prompt, --skill, or --conversation must be provided"),
                    ctx,
                );
                return;
            }
            let prompt = match prompt {
                Some(Prompt::PlainText(text)) => Some(text),
                Some(Prompt::SavedPrompt(id)) => {
                    // Resolve the saved prompt to pass along as the ambient agent query.
                    // We look up the prompt text here, rather than passing along the saved prompt ID,
                    // in order to support personal saved prompts, which team service accounts would not
                    // have access to.
                    // TODO: we should pipe the saved prompt ID through the API, and resolve it server-side.
                    // That'd also allow finding all tasks which used a given saved prompt.
                    let sync_id: SyncId = match ServerId::try_from(id.as_str()) {
                        Ok(server_id) => server_id.into(),
                        Err(err) => {
                            super::report_fatal_error(
                                anyhow::anyhow!("Failed to parse saved prompt ID '{id}': {err}"),
                                ctx,
                            );
                            return;
                        }
                    };

                    let cloud_model = CloudModel::handle(ctx);
                    let workflow = cloud_model.as_ref(ctx).get_workflow(&sync_id);

                    match workflow {
                        Some(cloud_workflow) => match cloud_workflow.model().data.prompt() {
                            Some(prompt_text) => Some(prompt_text.to_string()),
                            None => {
                                super::report_fatal_error(
                                    anyhow::anyhow!("'{id}' is not a saved prompt"),
                                    ctx,
                                );
                                return;

View on GitHub (pinned to e72fd7aacb)

Solutions

  1. Copy the exact saved-prompt ID from the prompt listing output
  2. Trim whitespace and remove surrounding quotes from the value
  3. If you only have the text, pass it directly with --prompt instead of an ID
Defensive patterns

Strategy: validation

Validate before calling

if let Some(Prompt::SavedPrompt(id)) = args.prompt_arg.to_prompt() {
    if ServerId::try_from(id.as_str()).is_err() {
        // reject the ID early instead of letting the run abort later
    }
}

Type guard

fn saved_prompt_id_is_parsable(id: &str) -> bool {
    ServerId::try_from(id).is_ok()
}

Prevention

When it happens

Trigger: 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.

Common situations: Users typing the prompt's display name where the ID is expected; IDs mangled by shell quoting or copy-truncation.

Understand the failure class

Related errors


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