Purpose
Thin check-centric setup per the uniform setup contract (docs/PLUGIN-PHILOSOPHY.md
"Setup is explicit and repeatable" in the marketplace repository): check inspects and
reports, apply resolves. This plugin is lazy-install by design, the main skill treats
firecrawl-cli as an escalation option installed when first needed and flags its own
absence in its status line, so a missing CLI is an INFO here, not a failure. This plugin
owns no consumer-project configuration and no userConfig; auth is an OS-environment
concern. So apply is pure guidance-and-verify with no write path: it installs nothing,
writes no environment variables, and defers to the main skill's own documented install flow.
Action routing: no argument or check runs the check; apply runs the check first, then
offers the resolution for each finding. Both are non-interactive, never prompt when the
action is given.
check (read-only)
The main skill is the single source of truth for what the CLI requires and how auth is wired:
${CLAUDE_PLUGIN_ROOT}/skills/firecrawl/SKILL.md (Prerequisites + Configuration sections) and
${CLAUDE_PLUGIN_ROOT}/skills/firecrawl/context/configuration.md (the exact env vars the CLI
reads).
Read it first. Probe what it actually does, don't recite this file. Then run each probe via
Bash and report a PASS/FAIL/INFO table with one remediation line per FAIL. Do not modify anything.
firecrawl-cli binary, the installed binary is firecrawl (the npm package is
firecrawl-cli). command -v firecrawl. INFO when absent (lazy-install design): report
that the CLI installs on first need and the main skill self-flags it; remediation is the
apply guidance below. When present, report the version (firecrawl --version) and the
auth line from firecrawl --status (which states authenticated/unauthenticated).
- Authentication, the verdict comes from the CLI itself when present: the
firecrawl --status auth line is authoritative, because firecrawl login/config state
in the user-level config dir authenticates without any env var. Alongside it, report
FIRECRAWL_API_KEY presence only. Test [[ -n "${FIRECRAWL_API_KEY:-}" ]] and report
set or unset; NEVER print, echo, log, or persist the value. Verdicts, matching the
lazy-install design: status says authenticated → PASS (INFO-note when the source is
persisted CLI config rather than the env var. Env-var auth is the plugin's preferred
single source of truth, but never direct the user to ADD an env key on top of working
CLI-config auth; that would create the second source the plugin warns against). Status
says unauthenticated (an answered probe) and the key is unset → FAIL with the unset-key
remediation. Status says unauthenticated while the key IS set → FAIL with the invalid-key
remediation (below), not the unset-key one. Status CANNOT answer (error, timeout, network
failure) → INDETERMINATE regardless of the key's state, never a FAIL: persisted
login/config credentials may be valid and an unanswered probe proves nothing either
way. Report the status error verbatim, suggest retrying firecrawl --status, and direct
no key change or key creation off an unanswered probe. CLI absent AND key unset → INFO: both arrive at first use, nothing is broken yet.
- Optional env vars. INFO the effective state of the other two the CLI reads
(
FIRECRAWL_API_URL for a self-hosted endpoint, FIRECRAWL_NO_TELEMETRY), presence only,
again without printing any value.
- Install flow location. INFO: the main skill's own install and update flow lives in
${CLAUDE_PLUGIN_ROOT}/skills/firecrawl/SKILL.md; apply defers there rather than
duplicating it.
apply (idempotent)
Run check, then for each finding offer the resolution. This skill installs nothing and
writes nothing, so every remediation is a pointer the user acts on:
- CLI absent. Defer to the main skill's documented flow:
npm install -g firecrawl-cli
(stated guidance; the user runs it). Do not duplicate the update/rollback mechanics the main
skill owns. Avoid firecrawl init --all --browser, which installs a parallel shadow copy: the main skill IS the maintained integration.
FIRECRAWL_API_KEY unset. Obtain a key from the https://firecrawl.dev dashboard and
set FIRECRAWL_API_KEY as an OS user environment variable (Windows: setx or System
Properties → Environment Variables; macOS/Linux: the login shell profile or a secret store).
Prefer env-var auth over firecrawl login / firecrawl config, which write a second source
of truth. This skill never writes the key anywhere. Persistent env changes (setx, a
profile edit) do NOT reach the already-running session. Tell the user the variable becomes
visible only in a new terminal/Claude Code session, and skip the immediate re-check for this
remediation: report "set persistently; verify with setup check in a fresh session" instead
of a false failure.
- Key set but
--status says unauthenticated (expired, revoked, or malformed key): direct the user to mint a fresh key on the https://firecrawl.dev dashboard and replace
the stored value wherever they keep it (env var or secret store), never display, compare,
or handle the old value. Then re-run firecrawl --status (same session works when the
replacement was exported into it; a persistent-only change follows the fresh-session rule
above).
After the user reports acting on any remediation, re-run the relevant check probe (for the
key, re-check firecrawl --status / presence, never the value) and report its actual result.
Re-running apply when everything already passes changes nothing and reports "already
configured".
What this skill does NOT do
- Install
firecrawl-cli, write FIRECRAWL_API_KEY or any environment variable, or print the
key's value. apply is guidance-and-verify with no write path.
- Write the plugin cache, Claude Code user settings, or
pluginConfigs.
- Perform scrapes, searches, or any Firecrawl API call. That is
/firecrawl:firecrawl.
- Run the maintainer update flow (
/firecrawl:update), a separate, gated skill.
1---2name: setup-123description: Verify the firecrawl plugin's runtime prerequisites — the firecrawl-cli binary and FIRECRAWL_API_KEY auth — for this machine, respecting the plugin's lazy-install design. Use when: 'set up firecrawl', 'configure firecrawl', 'is firecrawl working', 'firecrawl auth', a scrape reports the CLI is missing, or before a first Firecrawl call. Actions: check (read-only verification, default) | apply (resolve what check found). Re-runnable and safe.4---56## Purpose78Thin check-centric setup per the uniform setup contract (`docs/PLUGIN-PHILOSOPHY.md`9"Setup is explicit and repeatable" in the marketplace repository): `check` inspects and10reports, `apply` resolves. This plugin is **lazy-install by design**, the main skill treats11`firecrawl-cli` as an escalation option installed when first needed and flags its own12absence in its status line, so a missing CLI is an INFO here, not a failure. This plugin13owns no consumer-project configuration and no `userConfig`; auth is an OS-environment14concern. So `apply` is pure guidance-and-verify with **no write path**: it installs nothing,15writes no environment variables, and defers to the main skill's own documented install flow.1617Action routing: no argument or `check` runs the check; `apply` runs the check first, then18offers the resolution for each finding. Both are non-interactive, never prompt when the19action is given.2021## `check` (read-only)2223The main skill is the single source of truth for what the CLI requires and how auth is wired:24`${CLAUDE_PLUGIN_ROOT}/skills/firecrawl/SKILL.md` (Prerequisites + Configuration sections) and25`${CLAUDE_PLUGIN_ROOT}/skills/firecrawl/context/configuration.md` (the exact env vars the CLI26reads).2728**Read it first.** Probe what it actually does, don't recite this file. Then run each probe via29Bash and report a PASS/FAIL/INFO table with one remediation line per FAIL. Do not modify anything.30311. **`firecrawl-cli` binary**, the installed binary is `firecrawl` (the npm package is32 `firecrawl-cli`). `command -v firecrawl`. INFO when absent (lazy-install design): report33 that the CLI installs on first need and the main skill self-flags it; remediation is the34 `apply` guidance below. When present, report the version (`firecrawl --version`) and the35 auth line from `firecrawl --status` (which states authenticated/unauthenticated).362. **Authentication**, the verdict comes from the CLI itself when present: the37 `firecrawl --status` auth line is authoritative, because `firecrawl login`/`config` state38 in the user-level config dir authenticates without any env var. Alongside it, report39 `FIRECRAWL_API_KEY` presence only. Test `[[ -n "${FIRECRAWL_API_KEY:-}" ]]` and report40 **set** or **unset**; NEVER print, echo, log, or persist the value. Verdicts, matching the41 lazy-install design: status says authenticated → PASS (INFO-note when the source is42 persisted CLI config rather than the env var. Env-var auth is the plugin's preferred43 single source of truth, but never direct the user to ADD an env key on top of working44 CLI-config auth; that would create the second source the plugin warns against). Status45 says unauthenticated (an answered probe) and the key is unset → FAIL with the unset-key46 remediation. Status says unauthenticated while the key IS set → FAIL with the invalid-key47 remediation (below), not the unset-key one. Status CANNOT answer (error, timeout, network48 failure) → INDETERMINATE regardless of the key's state, never a FAIL: persisted49 `login`/`config` credentials may be valid and an unanswered probe proves nothing either50 way. Report the status error verbatim, suggest retrying `firecrawl --status`, and direct51 no key change or key creation off an unanswered probe. CLI absent AND key unset → INFO: both arrive at first use, nothing is broken yet.523. **Optional env vars**. INFO the effective state of the other two the CLI reads53 (`FIRECRAWL_API_URL` for a self-hosted endpoint, `FIRECRAWL_NO_TELEMETRY`), presence only,54 again without printing any value.554. **Install flow location**. INFO: the main skill's own install and update flow lives in56 `${CLAUDE_PLUGIN_ROOT}/skills/firecrawl/SKILL.md`; `apply` defers there rather than57 duplicating it.5859## `apply` (idempotent)6061Run `check`, then for each finding offer the resolution. This skill installs nothing and62writes nothing, so every remediation is a pointer the user acts on:6364- **CLI absent**. Defer to the main skill's documented flow: `npm install -g firecrawl-cli`65 (stated guidance; the user runs it). Do not duplicate the update/rollback mechanics the main66 skill owns. Avoid `firecrawl init --all --browser`, which installs a parallel shadow copy: the main skill IS the maintained integration.67- **`FIRECRAWL_API_KEY` unset**. Obtain a key from the <https://firecrawl.dev> dashboard and68 set `FIRECRAWL_API_KEY` as an OS user environment variable (Windows: `setx` or System69 Properties → Environment Variables; macOS/Linux: the login shell profile or a secret store).70 Prefer env-var auth over `firecrawl login` / `firecrawl config`, which write a second source71 of truth. This skill never writes the key anywhere. Persistent env changes (`setx`, a72 profile edit) do NOT reach the already-running session. Tell the user the variable becomes73 visible only in a new terminal/Claude Code session, and skip the immediate re-check for this74 remediation: report "set persistently; verify with `setup check` in a fresh session" instead75 of a false failure.76- **Key set but `--status` says unauthenticated** (expired, revoked, or malformed key): direct the user to mint a fresh key on the <https://firecrawl.dev> dashboard and replace77 the stored value wherever they keep it (env var or secret store), never display, compare,78 or handle the old value. Then re-run `firecrawl --status` (same session works when the79 replacement was exported into it; a persistent-only change follows the fresh-session rule80 above).8182After the user reports acting on any remediation, re-run the relevant `check` probe (for the83key, re-check `firecrawl --status` / presence, never the value) and report its actual result.84Re-running `apply` when everything already passes changes nothing and reports "already85configured".8687## What this skill does NOT do8889- Install `firecrawl-cli`, write `FIRECRAWL_API_KEY` or any environment variable, or print the90 key's value. `apply` is guidance-and-verify with no write path.91- Write the plugin cache, Claude Code user settings, or `pluginConfigs`.92- Perform scrapes, searches, or any Firecrawl API call. That is `/firecrawl:firecrawl`.93- Run the maintainer update flow (`/firecrawl:update`), a separate, gated skill.