nikivdev/code · error

skill-source is only supported for Codex sessions; use `f co

Error message

skill-source is only supported for Codex sessions; use `f codex skill-source ...`

What it means

Raised by `run_provider` in src/ai.rs when the `skill-source` action is dispatched against a Cursor session. Skill source inspection is a Codex-only integration; the Cursor dispatch explicitly bails and points to `f codex skill-source ...`.

Source

Thrown at src/ai.rs:629

                    "skill-source is only supported for Codex sessions; use `f codex skill-source ...`"
                );
            }
            Some(ProviderAiAction::Agent { .. }) => {
                bail!("agent is only supported for Codex sessions; use `f codex agent ...`");
            }
            Some(ProviderAiAction::Log { .. }) => {
                bail!("log is only supported for Codex sessions; use `f codex log ...`");
            }
            Some(ProviderAiAction::Sessions { .. })
            | Some(ProviderAiAction::Browse { .. })
            | Some(ProviderAiAction::Continue { .. })
            | Some(ProviderAiAction::New)
            | Some(ProviderAiAction::Open { .. })
            | Some(ProviderAiAction::Resolve { .. })
            | Some(ProviderAiAction::Resume { .. })
            | Some(ProviderAiAction::Find { .. })
            | Some(ProviderAiAction::FindAndCopy { .. }) => {
                bail!(
                    "Cursor transcripts are readable only; use `f cursor list`, `f cursor copy`, or `f cursor context`"
                );
            }
            Some(ProviderAiAction::Recover { .. }) => {
                bail!("recover is only supported for Codex sessions; use `f ai codex recover ...`");
            }
        }
        return Ok(());
    }

    match action {
        None => quick_start_session(provider)?,
        Some(ProviderAiAction::List) => list_sessions(provider)?,
        Some(ProviderAiAction::LatestId { path }) => print_latest_session_id(provider, path)?,
        Some(ProviderAiAction::Sessions { path, json }) => provider_sessions(provider, path, json)?,
        Some(ProviderAiAction::Browse { path, query }) => {
            browse_codex_sessions(path, query, provider)?
        }

View on GitHub (pinned to a747e741ae)

Solutions

  1. Run `f codex skill-source ...` instead
  2. Use only the read-only Cursor commands (`f cursor list` / `copy` / `context`) for Cursor data
  3. Assert provider == Codex in scripts before skill-related calls
  4. Fix shell aliases/abbreviations that expand to the wrong provider

Example fix

// before
f cursor skill-source my-skill
// after
f codex skill-source my-skill
Defensive patterns

Strategy: validation

Validate before calling

fn supports_skill_source(provider: Provider) -> bool {
    matches!(provider, Provider::Codex)
}
if !supports_skill_source(provider) {
    eprintln!("skill-source requires Codex: use `f codex skill-source ...`");
    return;
}

Type guard

fn is_codex(provider: Provider) -> bool {
    matches!(provider, Provider::Codex)
}

Try / catch

if let Err(e) = run_provider(provider, Some(ProviderAiAction::SkillSource { .. })) {
    if e.to_string().contains("skill-source is only supported for Codex") {
        eprintln!("rerun as: f codex skill-source ...");
    } else {
        return Err(e);
    }
}

Prevention

When it happens

Trigger: Running `f cursor skill-source ...`, or run_provider(Provider::Cursor, Some(ProviderAiAction::SkillSource{..})). Happens when skill-source lookups are configured for the wrong provider.

Common situations: Skill development workflows copied from Codex setups, wrappers enumerating skill commands across providers, stale aliases after switching default provider.

Related errors


AI-assisted analysis of nikivdev/code@a747e741ae (2026-09-01). Data as JSON: /api/errors/d80083ac42d08f80. Report an issue: GitHub.