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
- Add --prompt '...', --skill, or --conversation to the invocation
- 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
- Require a prompt source in your wrapper before invoking the run command
- Remember a disabled skills flag makes --skill not count as a prompt source
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
- Invalid repo format: '{}'. Expected 'owner/repo' or 'https:/
- No updates requested
- Unsupported feature
- Too many attachments. Maximum {} attachments allowed, but {}
- Streaming commands require `--output-format ndjson`
AI-assisted analysis of warpdotdev/warp@e72fd7aacb (2026-08-16).
Data as JSON: /api/errors/2e84f85aea596a8d.
Report an issue: GitHub.