warpdotdev/warp · warning

unexpected argument '--skill' found

Error message

unexpected argument '--skill' found

What it means

The --skill argument parses unconditionally but is only honored when FeatureFlag::OzPlatformSkills is enabled; when disabled, run_agent (app/src/ai/agent_sdk/ambient.rs:239) rejects it with a clap-style 'unexpected argument' message so behavior matches help output that hides the flag.

Source

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

        future: impl Spawnable<Output = anyhow::Result<()>>,
        ctx: &mut ModelContext<Self>,
    ) {
        ctx.spawn(future, |_, result, ctx| match result {
            Ok(()) => {
                ctx.terminate_app(TerminationMode::ForceTerminate, None);
            }
            Err(err) => {
                super::report_fatal_error(err, ctx);
            }
        });
    }
    fn run_agent(&self, args: RunCloudArgs, ctx: &mut ModelContext<Self>) -> anyhow::Result<()> {
        if !FeatureFlag::AmbientAgentsCommandLine.is_enabled() {
            return Err(anyhow::anyhow!("Unsupported feature"));
        }
        let skill_enabled = FeatureFlag::OzPlatformSkills.is_enabled();
        if args.skill.is_some() && !skill_enabled {
            return Err(anyhow::anyhow!("unexpected argument '--skill' found"));
        }

        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();

View on GitHub (pinned to e72fd7aacb)

Solutions

  1. Drop --skill and pass --prompt with the skill's text or reference instead
  2. Run on a build/account where OzPlatformSkills is enabled

Example fix

# before
run ... --skill my-skill
# after
run ... --prompt "<prompt text or saved prompt id>"
Defensive patterns

Strategy: validation

Validate before calling

if args.skill.is_some() && !FeatureFlag::OzPlatformSkills.is_enabled() {
    // drop --skill and use --prompt before invoking the command
}

Type guard

fn skill_flag_available() -> bool {
    FeatureFlag::OzPlatformSkills.is_enabled()
}

Prevention

When it happens

Trigger: Passing --skill on a build/account where OzPlatformSkills is disabled (regardless of the AmbientAgentsCommandLine gate, which is checked first).

Common situations: Commands or docs written against a dogfood build re-used on stable; flag rolled back server-side while scripts keep passing --skill.

Related errors


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