Live survey304 models · 14 providers · 22,792 auditsAudited grill-with-docs · SAFE →What changedHow we verifyllms.txt

Agent skill · Audited from source

cli

skill · firecrawl/cliLicence not declaredAudited 24 Oct 2026 · source 26630e12ae63

★ 664pushed today
✕BLOCKGrade D · 60/100 · 20 findings · 26630e1
664repo stars · whole firecrawl/cli

Is it safe? No — BLOCK, grade D (60/100). We read this skill's source at commit 26630e12ae63 and observed filesystem, network and shell access and no hard-coded secrets. The audit raised 20 findings, 3 critical or high. What it does: Autonomously navigate websites and extract structured data across pages. Use when the task requires navigation or no suitable ready-made workflow or data provider covers it.

Ask an AI about this pageGChatGPTCClaudePPerplexityGeGeminiXGrok
More
Cite

Cite this page

ModelsAtlas. “cli (firecrawl/cli)”. Retrieved 24 Oct 2026. https://modelsatlas.com/skills/firecrawl/cli

Blocked. The page stays public so you can check this skill if someone recommended it to you. The audit found 3 critical or high findings, starting with “Code injection” in src/commands/init.ts:750. Do not install it without reading them.

Trust audit

Audit 0.4.1 · source read 24 Oct 2026

Trust score60/100✕BLOCK D
0 critical3 high0 medium16 low1 info

BLOCK means the audit found something that could harm you or your machine. Grade D is shared by 721 of 17,602 audited skills.

What the source does

  • FilesystemDeclared1 observation
  • NetworkDeclared9 observations
  • ShellDeclared3 observations
  • DependenciesNot pinnedSome versions float
  • SecretsNone foundNo keys in source

Five audit layers

LayerWhat we checkResultFindings
L0 ProvenanceRepo owner, licence, archive status, activityPASS2
L1 Static sourceSecrets, path traversal, supply chain, hidden codeFAIL17
L2 InstructionsPrompt injection, authority framing, hidden directivesPASS1
L3 InventoryThe files and declarations match the sourcePASS0
L4 SandboxRun in isolation and watch behaviourSKIPPED why0

Gates applied: no behavioural pass, no license.

Findings (20)

HIGHCode injectioncode.eval_exec · src/commands/init.ts:750
F-02 Code injectionCWE-78 · CWE-94 · CWE-95Layer L1
exec(`git clone --depth 1 https://github.com/${repo}.git "${tmpDir}"`, {
Why
evaluates text as code
Fix
remove; use a parser or a dispatch table
HIGHCode injectioncode.eval_exec · src/commands/init.ts:801
F-02 Code injectionCWE-78 · CWE-94 · CWE-95Layer L1
exec(
Why
evaluates text as code
Fix
remove; use a parser or a dispatch table
HIGHCode injectioncode.eval_exec · src/utils/auth.ts:50
F-02 Code injectionCWE-78 · CWE-94 · CWE-95Layer L1
exec(command, (error: Error | null) => {
Why
evaluates text as code
Fix
remove; use a parser or a dispatch table
LOWInventory / provenanceinv.hidden_file · .prettierrc.json
F-13 Inventory / provenanceCWE-1104Layer L0
.prettierrc.json
Why
hidden member outside the usual dotfiles
Fix
review its purpose
LOWInventory / provenanceinv.no_license
F-13 Inventory / provenanceCWE-1104Layer L0
Why
no LICENSE file and no repo licence
Fix
add a licence
LOWCode injectioncode.eval_exec · src/__tests__/alexandria-beta.test.ts:63
F-02 Code injectionCWE-78 · CWE-94 · CWE-95Layer L1
...(await exec(process.execPath, ['dist/index.js', ...args], {
Why
evaluates text as code
Fix
remove; use a parser or a dispatch table
LOWCode injectioncode.eval_exec · src/__tests__/commands/skill-updates.integration.test.ts:100
F-02 Code injectionCWE-78 · CWE-94 · CWE-95Layer L1
: exec(command, options)
Why
evaluates text as code
Fix
remove; use a parser or a dispatch table
LOWInsecure cryptocrypto.weak_hash · src/commands/skills-native.ts:283
F-09 Insecure cryptoCWE-327 · CWE-338Layer L1
const hash = crypto.createHash('sha1');
Why
No further detail recorded for this rule.
Fix
—
LOWInsecure cryptocrypto.weak_hash · src/utils/skill-update-notice.ts:215
F-09 Insecure cryptoCWE-327 · CWE-338Layer L1
return createHash('sha1')
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · src/__tests__/alexandria-beta.test.ts:8
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
import packageJson from '../../package.json';
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · src/__tests__/commands/batch-scrape.test.ts:12
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
} from '../../commands/batch-scrape';
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · src/__tests__/commands/batch-scrape.test.ts:13
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
import { getClient } from '../../utils/client';
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · src/__tests__/commands/batch-scrape.test.ts:14
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
import { initializeConfig } from '../../utils/config';
Why
No further detail recorded for this rule.
Fix
—
LOWFilesystem / pathfs.traversal · src/__tests__/commands/batch-scrape.test.ts:17
F-05 Filesystem / pathCWE-22 · CWE-59Layer L1
vi.mock('../../utils/client', async () => {
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · src/__tests__/alexandria-beta.test.ts:33
F-04 Network egressCWE-200 · CWE-319Layer L1
baseUrl = `http://127.0.0.1:${(server.address() as { port: number }).port}`;
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · src/__tests__/commands/skill-updates.integration.test.ts:157
F-04 Network egressCWE-200 · CWE-319Layer L1
url = `http://127.0.0.1:${address.port}`;
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · src/__tests__/scrape-shorthand.test.ts:44
F-04 Network egressCWE-200 · CWE-319Layer L1
FIRECRAWL_API_URL: `http://127.0.0.1:${address.port}`,
Why
No further detail recorded for this rule.
Fix
—
LOWNetwork egressnet.raw_ip · src/__tests__/utils/integration.test.ts:68
F-04 Network egressCWE-200 · CWE-319Layer L1
apiUrl = `http://127.0.0.1:${(server.address() as AddressInfo).port}`;
Why
No further detail recorded for this rule.
Fix
—
LOWSupply chainsupply.unpinned · package.json
F-08 Supply chainCWE-829 · CWE-1357Layer L1
@inquirer/prompts, commander, jsonc-parser, smol-toml, yaml, @types/node, husky, lint-staged
Why
11 dependency range(s) float
Fix
pin exact versions or ship a lockfile
INFOSupply chainprompt.pipe_to_shell · README.md:49
F-08 Supply chainCWE-829 · CWE-1357Layer L2
curl -fsSL https://firecrawl.dev/install.sh | bash -s -- --agent openclaw
Why
No further detail recorded for this rule.
Fix
—

Audit 0.4.1 · source sha 26630e12ae63 · 24 Oct 2026Report an issue or request a re-scan

Provenance

Who published it, and what the verdict is pinned to

  • Publisherfirecrawl GitHub organizationOwner of the repository this skill is read from
  • Source folderfirecrawl/cliThe exact folder we audited
  • LicenceNot declaredAs the repository states it
  • Commit pinned for this verdict26630e12ae63A new audit runs when the source changes
  • Repository statusNot archivedPushed today
  • Sandboxed runNot runSkills are read, not executed; layer L4 is skipped

What it tells the agent

Full source on GitHub ↗

Its description: Autonomously navigate websites and extract structured data across pages. Use when the task requires navigation or no suitable ready-made workflow or data provider covers it.

---
name: firecrawl-agent
description: Autonomously navigate websites and extract structured data across pages. Use when the task requires navigation or no suitable ready-made workflow or data provider covers it.
allowed-tools:
  - Bash(firecrawl *)
  - Bash(npx firecrawl-cli *)
---

# firecrawl agent

AI-powered autonomous extraction. The agent navigates sites and extracts structured data (takes 2-5 minutes).

Before starting autonomous extraction for structured records or listings, check `firecrawl search alexandria '<data you need>'` for a ready-made workflow or data provider. Inspect a matching contract with `firecrawl list <provider> <capability> --pretty` and execute with `firecrawl scrape --alexandria <provider>/<capability> --options '<input JSON>'` if it covers the task. Use the exact provider, capability, and input fields from that contract. Continue with Agent when no suitable tool exists or the task requires autonomous navigation.

## Quick start

```bash
# Extract structured data
firecrawl agent "extract all pricing tiers" --wait --json -o .firecrawl/pricing.json

# With a JSON schema for structured output
firecrawl agent "extract products" --schema '{"type":"object","properties":{"name":{"type":"string"},"price":{"type":"number"}}}' --wait --json -o .firecrawl/products.json

# Focus on specific pages
firecrawl agent "get feature list" --urls "<url>" --wait --json -o .firecrawl/features.json
```

Run `firecrawl agent --help` for the full option list.

**Done when:** the output file contains valid JSON answering the request — or a job ID was intentionally returned for later polling.

## Alexandria providers

A run uses connected Alexandria data providers only when it starts with an Alexandria flag: `--alexandria`, `--toolkits <slugs>` (up to 5), `--max-calls <n>`, `--require-approval`, or `--on-terms-required skip|ask`. Follow-ups on its thread keep those settings.

```bash
firecrawl agent "find the head of sales at <company>" --toolkits apollo,crunchbase --wait --json -o .firecrawl/contacts.json
```

With `--require-approval` (needs `--mode chat`), a run can end on a `pendingApproval` instead of making a paid call. Ask the user, then answer it on the same thread with `firecrawl agent "<follow-up prompt>" --thread <threadId> --mode chat --approve <approvalId>` (or `--decline <approvalId>`). A `terms` approval only continues once an organization admin accepts the provider's terms in the Firecrawl dashboard; give the user https://www.firecrawl.dev/app/settings?tab=data-sources, and use `firecrawl alexandria terms show <provider>` if they want to review the terms first. Approving does not accept them.

## Job IDs

Omitting `--wait` returns a job ID. A UUID positional argument is auto-detected as a status check:

```bash
# Check once (equivalent to adding --status)
firecrawl agent "<job-id>"

# Wait on an existing job, polling every 10 seconds for up to 5 minutes
firecrawl agent "<job-id>" --wait --poll-interval 10 --timeout 300

# Cancel an active job
firecrawl agent "<job-id>" --cancel
```

## Tips

- Use `--wait` for inline results; omit it only when you want a job ID to poll later (see [Job IDs](#job-ids)).
- Use `--schema` for predictable, structured output — otherwise the agent returns freeform data.
- Agent runs consume more credits than simple scrapes. Use `--max-credits` to cap spending.
- For simple single-page extraction, prefer `scrape` — it's faster and cheaper.

## See also

- [firecrawl-scrape](../firecrawl-scrape/SKILL.md) — simpler single-page extraction
- [firecrawl-interact](../firecrawl-interact/SKILL.md) — scrape + interact for manual page interaction (more control)
- [firecrawl-crawl](../firecrawl-crawl/SKILL.md) — bulk extraction without AI
- [firecrawl-build-scrape](https://github.com/firecrawl/skills/tree/main/skills/build/firecrawl-build-scrape) — building structured extraction into an app instead of running it here

## Alexandria session feedback

To report an Alexandria session outcome or a provider/capability gap, use `firecrawl alexandria feedback --rating good|partial|bad --url <website> --requested-functionality '<what was needed>' --objective '<the underlying goal of the task>' --rationale '<what happened>' --json`. Use observed results in the rationale. No job ID is needed; send it within 20 minutes of your last Alexandria search, discovery, or execution, or it is rejected. Each submission refunds 1 credit, up to 10 per website and 100 per team each UTC day. Optional `--provider-feedback` and `--capability-feedback` JSON arrays describe specific gaps; inspect `firecrawl alexandria feedback --help` for their fields. Use the capability issue `missing_capability` when a provider exists but lacks the needed capability, and `new_capability_request` (with `requestedFunctionality`) to ask for one.

Excerpt, first 4,821 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.

Install

Pinned to the audited commit 26630e1

npm install -g firecrawl-cli
npx skills add firecrawl/skills
npm install -g firecrawl-cli@latest

Commands as the repository documents them: shown, never run by us. Our verdict covers commit 26630e12ae63 only.

Works in which agents?

What its own text says, not a test

AgentStatusMore
Claude CodeMentioned in its text, not testedSkills for Claude Code · About Claude Code
CodexMentioned in its text, not testedSkills for Codex · About Codex
CursorMentioned in its text, not testedSkills for Cursor · About Cursor
Gemini CLIMentioned in its text, not testedSkills for Gemini CLI · About Gemini CLI
OpenClawMentioned in its text, not testedSkills for OpenClaw · About OpenClaw
WindsurfMentioned in its text, not testedSkills for Windsurf · About Windsurf
“Mentioned” means the skill’s text names the agent. We have not run it there.

Audit history

Every audit, every source change

  1. ✕BLOCK D 60 / 100

    first audit · source 26630e12ae63

Similar skills

Questions about cli

What does the cli skill do?
Firecrawl CLI and agent skills: search, scrape, and interact with the web from your terminal or any coding agent, plus parse, crawl, map, Agent and Monitor. Firecrawl is the context API for AI agents.
Is cli safe to install?
No — not without reading the findings first. The audit graded it D (60/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.
What can cli access on my machine?
The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.
Which assistants does cli work with?
Its documentation mentions claude-code, codex, cursor, gemini-cli, openclaw and windsurf. That is what the text claims, not a compatibility test we ran.
How current is this page?
The grade is for one exact copy of the source (26630e12ae63), read on 2026-10-24. The repository is watched, and a new audit runs when it changes — this is the first audit.

Sources

Spotted something wrong? Report a correction · Methodology

Keep going in your AI

Opens with this page as the source. We add nothing else to the prompt.