warpdotdev/warp · warning

Either --prompt, --skill, or --conversation must be provided

Error message

Either --prompt, --skill, or --conversation must be provided

What it means

After setup futures complete, run_agent requires at least one prompt source: --prompt, --skill (counted only when OzPlatformSkills is enabled), or --conversation to continue an existing cloud conversation (app/src/ai/agent_sdk/ambient.rs:253-263). With none present it calls report_fatal_error and terminates. Note the check happens after the metadata/drive refresh, so it fails late, after setup work.

Source

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

        let refresh_future = super::common::refresh_workspace_metadata(ctx);
        let warp_drive_sync_future = super::common::refresh_warp_drive(ctx);
        let setup_future = future::try_join(refresh_future, warp_drive_sync_future);

        ctx.spawn(setup_future, move |_runner, setup_result, ctx| {
            if let Err(err) = setup_result {
                super::report_fatal_error(err, ctx);
                return;
            }

            // Validate that at least one of prompt, skill, or conversation is provided.
            // conversation is used to continue an existing cloud conversation.
            let prompt = args.prompt_arg.to_prompt();
            let has_prompt_source = prompt.is_some()
                || (skill_enabled && args.skill.is_some())
                || args.conversation.is_some();
            if !has_prompt_source {
                super::report_fatal_error(
                    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}"),

View on GitHub (pinned to e72fd7aacb)

Solutions

  1. Add --prompt '...', --skill, or --conversation to the invocation
  2. If using --skill, first confirm the skills feature flag is enabled — otherwise it will not satisfy this requirement

Example fix

# before
run ... 
# after
run ... --prompt "summarize today's incidents"
Defensive patterns

Strategy: validation

Validate before calling

let has_prompt_source = args.prompt_arg.to_prompt().is_some()
    || (FeatureFlag::OzPlatformSkills.is_enabled() && args.skill.is_some())
    || args.conversation.is_some();
if !has_prompt_source {
    // fail fast with your own message before spawning setup work
}

Prevention

When it happens

Trigger: Running the cloud-agent command with no --prompt, no --skill, and no --conversation; or passing only --skill while OzPlatformSkills is disabled, in which case it does not count as a prompt source.

Common situations: Assuming the command reads a default prompt from config; forgetting that a disabled --skill flag neither runs nor satisfies the requirement.

Related errors


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