mirror of
https://github.com/firecrawl/skills.git
synced 2026-09-14 18:22:20 +08:00
feat: make the catalog a pure read-only distribution repo
Every category is now a CI-synced mirror: workflow skills stay authored in firecrawl/firecrawl-workflows (sync direction reversed), and the research/developer index skills move to firecrawl/cli as CLI skills backing the firecrawl research/developer commands, retiring the reference category. Add repo-wide lockdown config and bundle the index skills in the editor plugins via skills/cli/.
This commit is contained in:
@@ -22,6 +22,8 @@
|
||||
"./skills/cli/firecrawl-monitor",
|
||||
"./skills/cli/firecrawl-parse",
|
||||
"./skills/cli/firecrawl-download",
|
||||
"./skills/cli/firecrawl-research-index",
|
||||
"./skills/cli/firecrawl-developer-index",
|
||||
"./skills/build/firecrawl-build",
|
||||
"./skills/build/firecrawl-build-onboarding",
|
||||
"./skills/build/firecrawl-build-scrape",
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# Configuration for the Repo Lockdown app: https://github.com/apps/repo-lockdown
|
||||
# This repo is a read-only distribution catalog; every directory is CI-synced.
|
||||
|
||||
issues:
|
||||
comment: >
|
||||
This catalog is read-only — every skill is synced from its source repo.
|
||||
Please open this issue against the source: CLI + index skills →
|
||||
[firecrawl/cli](https://github.com/firecrawl/cli), build/SDK skills →
|
||||
[firecrawl/firecrawl](https://github.com/firecrawl/firecrawl) (`skills/`),
|
||||
workflow skills →
|
||||
[firecrawl/firecrawl-workflows](https://github.com/firecrawl/firecrawl-workflows).
|
||||
close: true
|
||||
lock: true
|
||||
|
||||
pulls:
|
||||
comment: >
|
||||
This catalog is read-only and CI-synced; direct changes are overwritten on
|
||||
the next sync. Please open this PR against the source repo: CLI + index
|
||||
skills → [firecrawl/cli](https://github.com/firecrawl/cli), build/SDK
|
||||
skills → [firecrawl/firecrawl](https://github.com/firecrawl/firecrawl)
|
||||
(`skills/`), workflow skills →
|
||||
[firecrawl/firecrawl-workflows](https://github.com/firecrawl/firecrawl-workflows).
|
||||
close: true
|
||||
lock: true
|
||||
@@ -1,62 +0,0 @@
|
||||
name: Sync workflow skills to legacy mirror
|
||||
|
||||
# Mirrors skills/workflows/ into firecrawl/firecrawl-workflows so the legacy
|
||||
# install path `npx skills add firecrawl/firecrawl-workflows` keeps working
|
||||
# and keeps meaning "the 16 workflow skills", not the whole catalog.
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
paths:
|
||||
- "skills/workflows/**"
|
||||
- ".github/workflows/sync-workflows-mirror.yml"
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: workflows-mirror-sync
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout catalog
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
path: catalog
|
||||
|
||||
- name: Checkout legacy mirror
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
repository: firecrawl/firecrawl-workflows
|
||||
ssh-key: ${{ secrets.WORKFLOWS_MIRROR_DEPLOY_KEY }}
|
||||
path: mirror
|
||||
|
||||
- name: Sync skills
|
||||
run: |
|
||||
cd mirror
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||
|
||||
rm -rf skills
|
||||
mkdir -p skills
|
||||
cp -R ../catalog/skills/workflows/. skills/
|
||||
|
||||
# The catalog category README does not belong in the flat mirror.
|
||||
rm -f skills/README.md
|
||||
|
||||
git add -A
|
||||
if git diff --cached --quiet; then
|
||||
echo "No changes to sync"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
SHORT_SHA="${GITHUB_SHA:0:7}"
|
||||
git commit -m "Sync from firecrawl/skills@${SHORT_SHA}" \
|
||||
-m "Source: https://github.com/${GITHUB_REPOSITORY}/commit/${GITHUB_SHA}"
|
||||
|
||||
# Retry once if another sync landed first; never force-push.
|
||||
git push origin main || { git pull --rebase origin main && git push origin main; }
|
||||
@@ -1,38 +1,23 @@
|
||||
# Firecrawl Skills Catalog
|
||||
|
||||
Full catalog of Firecrawl agent skills, organized by category under `skills/`.
|
||||
Read-only distribution catalog for all Firecrawl agent skills. **Every skill directory here is a CI-synced mirror — do not edit skills in this repo.**
|
||||
|
||||
## Layout and edit rules
|
||||
## Layout and sources
|
||||
|
||||
- `skills/cli/` — **mirror** of `firecrawl/cli` `skills/`. Do not edit here; CI overwrites on every sync. PR against `firecrawl/cli`.
|
||||
- `skills/build/` — **mirror** of the `firecrawl` monorepo `skills/`. Do not edit here; CI overwrites on every sync. PR against `firecrawl/firecrawl`.
|
||||
- `skills/workflows/` — **source of truth**, authored here. Safe to edit.
|
||||
- `skills/reference/` — **source of truth**, authored here. Safe to edit.
|
||||
- `skills/cli/` — mirror of `firecrawl/cli` `skills/` (CLI skills + the research/developer index skills)
|
||||
- `skills/build/` — mirror of the `firecrawl` monorepo `skills/`
|
||||
- `skills/workflows/` — mirror of `firecrawl/firecrawl-workflows` `skills/`
|
||||
|
||||
Plugin metadata and top-level docs are safe to edit:
|
||||
|
||||
- `.cursor-plugin/`, `.claude-plugin/`, `.codex-plugin/`
|
||||
- `README.md`, `AGENTS.md`, `.mcp.json`, `mcp.json`
|
||||
- `.github/workflows/` (sync automation)
|
||||
Only repo metadata is authored here: `.cursor-plugin/`, `.claude-plugin/`, `.codex-plugin/`, `README.md`, `AGENTS.md`, `.mcp.json`, `mcp.json`, `.github/`.
|
||||
|
||||
## Routing rule
|
||||
|
||||
CLI skills → PR `firecrawl/cli`. Build/SDK skills → PR `firecrawl` (monorepo, `skills/`). Everything else (workflows, reference) → PR this repo. New skills always land in an existing repo — when in doubt, this repo under `skills/workflows/`.
|
||||
CLI skills (including the research/developer index skills) → PR `firecrawl/cli`. Build/SDK skills → PR `firecrawl` (monorepo, `skills/`). Workflow skills → PR `firecrawl/firecrawl-workflows`. Never PR skill content against this catalog — CI overwrites it on the next sync.
|
||||
|
||||
## Intent
|
||||
|
||||
Use the skills here when the task is:
|
||||
|
||||
- live web work during a session (CLI skills)
|
||||
- live web work during a session, or querying the research paper / developer indexes (CLI skills)
|
||||
- adding Firecrawl to a codebase, choosing between `/scrape`, `/search`, and `/interact`, getting `FIRECRAWL_API_KEY` into `.env` (build skills)
|
||||
- end-to-end recipes like lead gen, deep research, SEO audits (workflow skills)
|
||||
- querying the research paper index or developer index, which `/search` does not query (reference skills)
|
||||
|
||||
## Authoring Rules (workflows + reference)
|
||||
|
||||
- Keep each `SKILL.md` concise and trigger-oriented.
|
||||
- Lead with "use this when..." guidance.
|
||||
- Favor endpoint names in slash notation: `/scrape`, `/search`, `/interact`.
|
||||
- Keep CLI references short and defer to `firecrawl/cli` instead of duplicating command manuals.
|
||||
- Treat [`https://www.firecrawl.dev/agent-onboarding/SKILL.md`](https://www.firecrawl.dev/agent-onboarding/SKILL.md) as the canonical source for the two-path framing.
|
||||
- Skill layout: `skills/<category>/<skill-name>/SKILL.md`, deeper docs in `skills/<category>/<skill-name>/references/`, one level deep.
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
# Firecrawl Skills
|
||||
|
||||
Full catalog of Firecrawl agent skills, organized under `skills/` by category:
|
||||
Read-only distribution catalog of Firecrawl agent skills. Every directory under `skills/` is CI-synced from its source repo:
|
||||
|
||||
- `skills/cli/` — CLI skills for live web work (mirror of `firecrawl/cli`; do not edit here)
|
||||
- `skills/build/` — app-integration skills (mirror of the `firecrawl` monorepo; do not edit here)
|
||||
- `skills/workflows/` — end-to-end session recipes (authored here)
|
||||
- `skills/reference/` — research paper index and developer index skills (authored here)
|
||||
- `skills/cli/` — CLI skills + research/developer index skills (source: `firecrawl/cli`)
|
||||
- `skills/build/` — app-integration skills (source: the `firecrawl` monorepo)
|
||||
- `skills/workflows/` — end-to-end session recipes (source: `firecrawl/firecrawl-workflows`)
|
||||
|
||||
See `AGENTS.md` for the routing rule and authoring guidance.
|
||||
Never edit skills here — PR the source repo. See `AGENTS.md` for the routing rule.
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
The full catalog of Firecrawl skills for AI coding agents, following the [Agent Skills](https://agentskills.io) format. Available as a plugin for Claude Code, Cursor, and OpenAI Codex.
|
||||
|
||||
> **This repo is read-only.** Every skill here is CI-synced from its source repo — see [Contributing](#contributing-where-does-my-pr-go). Install from here; contribute at the source.
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
@@ -24,24 +26,26 @@ npx -y firecrawl-cli@latest init
|
||||
|
||||
| Category | Path | What it's for | Source of truth |
|
||||
|---|---|---|---|
|
||||
| CLI | [`skills/cli/`](./skills/cli) | Live web work during an agent session: search, scrape, crawl, interact from the terminal | **Mirror** of [`firecrawl/cli`](https://github.com/firecrawl/cli/tree/main/skills) — do not edit here |
|
||||
| Build | [`skills/build/`](./skills/build) | Integrating Firecrawl APIs into product code: SDKs, REST, endpoint selection, API keys | **Mirror** of the [`firecrawl` monorepo `skills/`](https://github.com/firecrawl/firecrawl/tree/main/skills) — do not edit here |
|
||||
| Workflows | [`skills/workflows/`](./skills/workflows) | End-to-end session recipes: lead gen, deep research, SEO audit, knowledge bases, and more | **Authored here** — PRs welcome |
|
||||
| Reference | [`skills/reference/`](./skills/reference) | Query Firecrawl's research paper index and developer index | **Authored here** — PRs welcome |
|
||||
| CLI | [`skills/cli/`](./skills/cli) | Live web work during an agent session (search, scrape, crawl, interact from the terminal), plus the research paper index and developer index skills | [`firecrawl/cli`](https://github.com/firecrawl/cli/tree/main/skills) |
|
||||
| Build | [`skills/build/`](./skills/build) | Integrating Firecrawl APIs into product code: SDKs, REST, endpoint selection, API keys | [`firecrawl` monorepo `skills/`](https://github.com/firecrawl/firecrawl/tree/main/skills) |
|
||||
| Workflows | [`skills/workflows/`](./skills/workflows) | End-to-end session recipes: lead gen, deep research, SEO audit, knowledge bases, and more | [`firecrawl/firecrawl-workflows`](https://github.com/firecrawl/firecrawl-workflows) |
|
||||
|
||||
## Contributing: where does my PR go?
|
||||
|
||||
> **CLI skills → PR [`firecrawl/cli`](https://github.com/firecrawl/cli). Build/SDK skills → PR the [`firecrawl`](https://github.com/firecrawl/firecrawl) monorepo (`skills/`). Everything else (workflows, reference) → PR this repo. New skills always land in an existing repo — when in doubt, this repo under `skills/workflows/`.**
|
||||
|
||||
Mirrored directories (`skills/cli/`, `skills/build/`) are overwritten by CI on every upstream sync; PRs against them will be redirected to the source repo.
|
||||
> **CLI skills (including the research/developer index skills) → PR [`firecrawl/cli`](https://github.com/firecrawl/cli). Build/SDK skills → PR the [`firecrawl`](https://github.com/firecrawl/firecrawl) monorepo (`skills/`). Workflow skills → PR [`firecrawl/firecrawl-workflows`](https://github.com/firecrawl/firecrawl-workflows). Never PR this catalog — CI overwrites every directory on the next sync.**
|
||||
|
||||
## Skills
|
||||
|
||||
### CLI (`skills/cli/`, mirror)
|
||||
### CLI (`skills/cli/`)
|
||||
|
||||
Skills that teach agents to use the [Firecrawl CLI](https://github.com/firecrawl/cli) for live web work: `firecrawl`, `firecrawl-scrape`, `firecrawl-search`, `firecrawl-crawl`, `firecrawl-map`, `firecrawl-interact`, `firecrawl-agent`, `firecrawl-monitor`, `firecrawl-parse`, `firecrawl-download`.
|
||||
Skills that teach agents the [Firecrawl CLI](https://github.com/firecrawl/cli) for live web work — `firecrawl`, `firecrawl-scrape`, `firecrawl-search`, `firecrawl-crawl`, `firecrawl-map`, `firecrawl-interact`, `firecrawl-agent`, `firecrawl-monitor`, `firecrawl-parse`, `firecrawl-download` — plus the index skills backing the `firecrawl research` and `firecrawl developer` commands:
|
||||
|
||||
### Build (`skills/build/`, mirror)
|
||||
| Skill | Description |
|
||||
|---|---|
|
||||
| [`firecrawl-research-index`](./skills/cli/firecrawl-research-index) | Find papers in the research paper index — biomedical and life-science literature (PubMed, bioRxiv, medRxiv) plus arXiv preprints |
|
||||
| [`firecrawl-developer-index`](./skills/cli/firecrawl-developer-index) | Answer developer questions from issues, pull requests, READMEs, and documentation pages |
|
||||
|
||||
### Build (`skills/build/`)
|
||||
|
||||
| Skill | Description |
|
||||
|---|---|
|
||||
@@ -51,17 +55,10 @@ Skills that teach agents to use the [Firecrawl CLI](https://github.com/firecrawl
|
||||
| [`firecrawl-build-search`](./skills/build/firecrawl-build-search) | Integrate `/search` for discovery-first workflows |
|
||||
| [`firecrawl-build-interact`](./skills/build/firecrawl-build-interact) | Integrate `/interact` for clicks, forms, and dynamic flows after scrape |
|
||||
|
||||
### Workflows (`skills/workflows/`, authored here)
|
||||
### Workflows (`skills/workflows/`)
|
||||
|
||||
End-to-end recipes such as [`firecrawl-lead-gen`](./skills/workflows/firecrawl-lead-gen), [`firecrawl-deep-research`](./skills/workflows/firecrawl-deep-research), [`firecrawl-seo-audit`](./skills/workflows/firecrawl-seo-audit), [`firecrawl-competitive-intel`](./skills/workflows/firecrawl-competitive-intel), and more — see [`skills/workflows/`](./skills/workflows) for the full set, and [`firecrawl-workflows`](./skills/workflows/firecrawl-workflows) for the umbrella skill and authoring guide.
|
||||
|
||||
### Reference (`skills/reference/`, authored here)
|
||||
|
||||
| Skill | Description |
|
||||
|---|---|
|
||||
| [`firecrawl-research-index`](./skills/reference/firecrawl-research-index) | Find papers in the research paper index — biomedical and life-science literature (PubMed, bioRxiv, medRxiv) plus arXiv preprints |
|
||||
| [`firecrawl-developer-index`](./skills/reference/firecrawl-developer-index) | Answer developer questions from issues, pull requests, READMEs, and documentation pages |
|
||||
|
||||
## MCP Server
|
||||
|
||||
The plugin includes Firecrawl MCP configuration for the official [Firecrawl MCP server](https://github.com/firecrawl/firecrawl-mcp-server), so editors that support bundled MCP metadata can wire Firecrawl tools with `FIRECRAWL_API_KEY`.
|
||||
@@ -84,9 +81,9 @@ Get your API key at [firecrawl.dev/app](https://www.firecrawl.dev/app). If you d
|
||||
## Which skills do I need?
|
||||
|
||||
- **"Search/scrape the web for me right now, during this session"** → CLI skills (`skills/cli/`)
|
||||
- **"Query published research papers or developer docs indexes"** → index skills (`skills/cli/`)
|
||||
- **"Add Firecrawl to this codebase"** → build skills (`skills/build/`)
|
||||
- **"Run an end-to-end task like lead gen or deep research"** → workflow skills (`skills/workflows/`)
|
||||
- **"Query published research papers or developer docs indexes"** → reference skills (`skills/reference/`)
|
||||
|
||||
Both usage paths follow Firecrawl's onboarding skill (same install, different use cases): [firecrawl.dev/agent-onboarding/SKILL.md](https://www.firecrawl.dev/agent-onboarding/SKILL.md).
|
||||
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
# Task: set up deploy keys for the Firecrawl skills sync workflows
|
||||
|
||||
You need admin access to these GitHub repos: `firecrawl/skills`, `firecrawl/cli`, `firecrawl/firecrawl`, `firecrawl/firecrawl-workflows`, and the `gh` CLI authenticated (`gh auth status`).
|
||||
|
||||
Three CI sync workflows push commits across repos. Each needs its own SSH deploy keypair: the **public** key goes on the repo being pushed to (deploy key, write access), the **private** key goes on the repo running the workflow (Actions secret). Do not swap these.
|
||||
|
||||
| # | Source (private key as secret) | Secret name | Target (public key as deploy key) |
|
||||
|---|---|---|---|
|
||||
| A | `firecrawl/cli` | `CATALOG_DEPLOY_KEY` | `firecrawl/skills` |
|
||||
| B | `firecrawl/firecrawl` | `CATALOG_DEPLOY_KEY` | `firecrawl/skills` |
|
||||
| C | `firecrawl/skills` | `WORKFLOWS_MIRROR_DEPLOY_KEY` | `firecrawl/firecrawl-workflows` |
|
||||
|
||||
A deploy key attaches to exactly one repo, so A and B need separate keypairs even though both target `firecrawl/skills`.
|
||||
|
||||
Run exactly this:
|
||||
|
||||
```bash
|
||||
cd "$(mktemp -d)"
|
||||
|
||||
ssh-keygen -t ed25519 -N "" -f cli-to-catalog -C "sync: firecrawl/cli -> firecrawl/skills"
|
||||
ssh-keygen -t ed25519 -N "" -f monorepo-to-catalog -C "sync: firecrawl/firecrawl -> firecrawl/skills"
|
||||
ssh-keygen -t ed25519 -N "" -f catalog-to-workflows -C "sync: firecrawl/skills -> firecrawl/firecrawl-workflows"
|
||||
|
||||
# Public keys -> deploy keys on targets (write access required)
|
||||
gh repo deploy-key add cli-to-catalog.pub -R firecrawl/skills --allow-write -t "sync from firecrawl/cli"
|
||||
gh repo deploy-key add monorepo-to-catalog.pub -R firecrawl/skills --allow-write -t "sync from firecrawl/firecrawl"
|
||||
gh repo deploy-key add catalog-to-workflows.pub -R firecrawl/firecrawl-workflows --allow-write -t "sync from firecrawl/skills"
|
||||
|
||||
# Private keys -> Actions secrets on sources (names must match exactly)
|
||||
gh secret set CATALOG_DEPLOY_KEY -R firecrawl/cli < cli-to-catalog
|
||||
gh secret set CATALOG_DEPLOY_KEY -R firecrawl/firecrawl < monorepo-to-catalog
|
||||
gh secret set WORKFLOWS_MIRROR_DEPLOY_KEY -R firecrawl/skills < catalog-to-workflows
|
||||
|
||||
# Destroy local copies; keys now live only in GitHub
|
||||
cd - && rm -rf "$OLDPWD"
|
||||
```
|
||||
|
||||
## Verify
|
||||
|
||||
```bash
|
||||
gh repo deploy-key list -R firecrawl/skills # expect 2 keys, both read/write
|
||||
gh repo deploy-key list -R firecrawl/firecrawl-workflows # expect 1 key, read/write
|
||||
gh secret list -R firecrawl/cli # expect CATALOG_DEPLOY_KEY
|
||||
gh secret list -R firecrawl/firecrawl # expect CATALOG_DEPLOY_KEY
|
||||
gh secret list -R firecrawl/skills # expect WORKFLOWS_MIRROR_DEPLOY_KEY
|
||||
```
|
||||
|
||||
If the sync workflows already exist on `main`, also trigger one end-to-end run:
|
||||
|
||||
```bash
|
||||
gh workflow run sync-catalog.yml -R firecrawl/cli && gh run watch -R firecrawl/cli
|
||||
```
|
||||
|
||||
Success: a `Sync from firecrawl/cli@<sha>` commit lands on `firecrawl/skills` `main`, or the run logs "No changes to sync". Failure `Permission denied (publickey)` means a public/private half was swapped — redo that pair.
|
||||
|
||||
## Report back
|
||||
|
||||
- Output of the five verify commands
|
||||
- Whether the test run succeeded
|
||||
- Anything you had to deviate from
|
||||
@@ -0,0 +1,210 @@
|
||||
# Skills Structure: Recommendation & Migration Plan
|
||||
|
||||
Response to the August 2026 skills-repos handoff. Additive-only per the rule:
|
||||
every install command that works today keeps working.
|
||||
|
||||
## Recommendation in one paragraph
|
||||
|
||||
Make `firecrawl/skills` the **full catalog** — the one repo users install from
|
||||
and the one path we promote everywhere. Keep each skill's **source of truth
|
||||
co-located with the code it teaches**: CLI skills stay in `firecrawl/cli`,
|
||||
build skills move to the `firecrawl` monorepo next to the SDKs, and workflow +
|
||||
reference skills are authored directly in the catalog. CI (never humans) syncs
|
||||
copies from each source into the catalog, and from the catalog out to the
|
||||
legacy `firecrawl-workflows` mirror. No install path moves or breaks; changes
|
||||
are additive.
|
||||
|
||||
## Why this works: install paths and authoring are decoupled
|
||||
|
||||
skills.sh keys install counts to `owner/repo/skill-name` — the repo users
|
||||
install from, not where the skill is authored, and not the directory path
|
||||
inside the repo. Two consequences:
|
||||
|
||||
1. Moving *authorship* of the build skills into the monorepo costs zero
|
||||
installs, because their install path (`firecrawl/skills`) never changes.
|
||||
2. Reorganizing the catalog into category subdirectories does not reset any
|
||||
counter, because the key is the skill name, not the path.
|
||||
|
||||
We only start new counters where we change the *promoted* install path: CLI
|
||||
skills and workflows get new catalog counters starting at zero, while their
|
||||
old paths keep working (and keep counting) for anyone still using them.
|
||||
|
||||
| Family | Source of truth (humans edit) | Install path (promoted) | Legacy path | Count effect |
|
||||
|---|---|---|---|---|
|
||||
| CLI (10) | `firecrawl/cli` `skills/` | catalog `skills/cli/` | `firecrawl/cli` keeps working | new catalog counters; old 725K freezes as legacy installs taper |
|
||||
| Build (5) | `firecrawl` monorepo `skills/` (moved) | catalog `skills/build/` | n/a — same repo as today | **none** — 256K keeps accruing uninterrupted |
|
||||
| Workflows (16) | catalog `skills/workflows/` (moved) | catalog `skills/workflows/` | `firecrawl-workflows` mirror keeps working | new catalog counters; old 498K keeps counting for legacy installers |
|
||||
| Reference/index (2) | catalog `skills/reference/` | catalog `skills/reference/` | n/a — same repo as today | none |
|
||||
|
||||
## Target catalog layout
|
||||
|
||||
```
|
||||
firecrawl/skills
|
||||
├── skills/
|
||||
│ ├── cli/ # MIRROR — synced from firecrawl/cli, do not edit here
|
||||
│ │ └── firecrawl, firecrawl-scrape, … (10)
|
||||
│ ├── build/ # MIRROR — synced from firecrawl monorepo, do not edit here
|
||||
│ │ └── firecrawl-build, firecrawl-build-scrape, … (5)
|
||||
│ ├── workflows/ # SOURCE — PRs welcome here
|
||||
│ │ └── firecrawl-lead-gen, firecrawl-deep-research, … (16)
|
||||
│ └── reference/ # SOURCE — PRs welcome here
|
||||
│ └── firecrawl-developer-index, firecrawl-research-index
|
||||
├── .claude-plugin/ .cursor-plugin/ .codex-plugin/ # consolidated plugins
|
||||
├── .mcp.json
|
||||
└── README.md # routing rule + mirror notice per category
|
||||
```
|
||||
|
||||
The `npx skills` CLI walks skill containers up to three levels deep, so
|
||||
`skills/<category>/<name>/SKILL.md` is discovered natively. `--skill <name>`
|
||||
and `owner/repo@skill` are name-based, so
|
||||
`npx skills add firecrawl/skills --skill firecrawl-build` works identically
|
||||
before and after categorization.
|
||||
|
||||
Bare `npx skills add firecrawl/skills` changes meaning from "5 build skills"
|
||||
to "pick from the full catalog" — accepted deliberately. Without `-y` the CLI
|
||||
shows an interactive skill multi-select, so this is a picker over ~33 skills,
|
||||
not a blind bulk install.
|
||||
|
||||
## Sync design
|
||||
|
||||
Four push-based workflows, modeled on Anthropic's battle-tested
|
||||
claude-code-action → claude-code-base-action mirror (461+ automated sync
|
||||
commits). Pattern per workflow: trigger `on: push` with a `paths:` filter +
|
||||
`workflow_dispatch`, wipe **only the owned subdirectory** in the target,
|
||||
`cp -r` fresh content, skip commit when `git diff --quiet`, commit as
|
||||
`Sync from <repo>@<shortsha>` with the full source SHA in the body, push with
|
||||
a **repo-scoped deploy key** (no PAT expiry, no `workflow` scope wall).
|
||||
|
||||
```
|
||||
1. firecrawl/cli push(skills/**) ─▶ catalog skills/cli/
|
||||
2. firecrawl (monorepo) push(skills/**) ─▶ catalog skills/build/
|
||||
3. catalog push(skills/workflows/**) ─▶ firecrawl-workflows skills/
|
||||
4. repo-lockdown on firecrawl-workflows (auto-close + lock PRs/issues with redirect comment)
|
||||
```
|
||||
|
||||
Details:
|
||||
|
||||
- Workflows 1 and 2 write disjoint catalog paths; add
|
||||
`concurrency: { group: catalog-sync }` per source repo and a
|
||||
`git pull --rebase && git push` retry — never force-push.
|
||||
- Workflow 3 copies **only the workflows subset**, so
|
||||
`npx skills add firecrawl/firecrawl-workflows` keeps meaning "the 16
|
||||
workflow skills," not the whole catalog.
|
||||
- Mirrored directories get a `README.md` banner prepended on every sync:
|
||||
"Mirror of `<source>` — do not edit here, PR against `<source>`." The
|
||||
legacy mirror additionally gets issues disabled and branch protection so
|
||||
only the deploy key writes.
|
||||
- Not chosen: git subtree (slow, re-splits history every push, no benefit for
|
||||
a snapshot mirror), pull-based cron (staleness + GitHub auto-disables
|
||||
scheduled workflows in quiet public repos after 60 days), symlinks/submodules
|
||||
(the skills CLI follows symlinks fragilely and does not clone submodules).
|
||||
|
||||
## `firecrawl init` revamp
|
||||
|
||||
Keep init — it is the only install surface whose UX we control — but fix what
|
||||
it installs:
|
||||
|
||||
- Installs the **CLI skills by default** (a coding-agent CLI user's actual need).
|
||||
- Shows a **multi-select for workflow skills** as optional extras.
|
||||
- **Stops installing build skills** — they are for people integrating the SDK
|
||||
into product code, not CLI users. Build skills remain one command away and
|
||||
are what the editor plugins bundle.
|
||||
- Implemented as a thin wrapper over
|
||||
`npx skills add firecrawl/skills --skill … -y`, so init's install volume
|
||||
accrues to catalog counters from day one and we maintain no install plumbing.
|
||||
|
||||
## Plugins (and the Codex fix)
|
||||
|
||||
Consolidate Cursor/Claude/Codex plugin metadata in the catalog repo, bundling
|
||||
**CLI usage + build skills** (`skills/cli/` + `skills/build/`), not the 16
|
||||
workflows — workflows are session recipes, not editor-integration material.
|
||||
|
||||
This fixes "Codex has the wrong skills" as a side effect: today the Codex
|
||||
plugin in `firecrawl/skills` points at `./skills/`, which contains only build
|
||||
skills. After the catalog sync lands, the same repo contains the CLI skills
|
||||
too, and the plugin manifest is updated to reference the two bundled
|
||||
categories. Bonus: the skills CLI also reads `.claude-plugin/marketplace.json`,
|
||||
so plugin manifests in the catalog do double duty for discovery.
|
||||
|
||||
Plugin metadata in `firecrawl-workflows` stays as-is (backward compat) but is
|
||||
no longer promoted.
|
||||
|
||||
## Contributor routing rule (goes in every README)
|
||||
|
||||
> **CLI skills → PR `firecrawl/cli`. Build/SDK skills → PR `firecrawl`
|
||||
> (monorepo, `skills/`). Everything else (workflows, reference) → PR
|
||||
> `firecrawl/skills`. New skills always land in an existing repo — when in
|
||||
> doubt, `firecrawl/skills` under `skills/workflows/`.**
|
||||
|
||||
## Backward-compatibility matrix
|
||||
|
||||
| Existing surface | After migration |
|
||||
|---|---|
|
||||
| `npx skills add firecrawl/cli --skill firecrawl` | unchanged — cli repo is still the CLI source of truth |
|
||||
| `npx skills add firecrawl/skills` | still works; now offers the full catalog via interactive picker |
|
||||
| `npx skills add firecrawl/skills --skill <build-skill>` | unchanged — name-based selection is path-independent |
|
||||
| `npx skills add firecrawl/firecrawl-workflows` | unchanged — served by the CI-synced mirror |
|
||||
| `firecrawl init` | still works; installs CLI skills + optional workflows instead of build skills |
|
||||
| Editor plugin installs | unchanged manifests keep resolving; bundles gain the CLI skills |
|
||||
| skills.sh counts | no existing counter breaks; build counters continue; cli/workflows old counters keep counting legacy installs |
|
||||
|
||||
## Migration action plan
|
||||
|
||||
Additive-only; each phase leaves every surface working. Sequencing rule:
|
||||
**populate and sync the catalog before any README or command points at it.**
|
||||
|
||||
### Phase 0 — prep (no user-visible change)
|
||||
1. Generate deploy keys: cli→catalog, monorepo→catalog, catalog→workflows-mirror.
|
||||
2. Archive `web-agent` and `opencode-firecrawl` (GitHub archive keeps installs
|
||||
working); point their READMEs at the catalog first.
|
||||
|
||||
### Phase 1 — build the catalog (additive inside `firecrawl/skills`)
|
||||
3. Restructure: move the 5 build skills to `skills/build/`, the 2 index skills
|
||||
to `skills/reference/` (safe — counts are name-keyed, `--skill` is name-based).
|
||||
4. Copy the 16 workflow skills into `skills/workflows/` — this is the new
|
||||
source of truth for workflows. `firecrawl-workflows` is untouched and still
|
||||
canonical until Phase 2 flips it.
|
||||
5. Add sync workflow 1 to `firecrawl/cli` → catalog `skills/cli/` lands via CI.
|
||||
6. Add the routing rule + per-category mirror notices to the catalog README.
|
||||
|
||||
### Phase 2 — flip sources of truth
|
||||
7. Move build skills' authorship into the `firecrawl` monorepo root `skills/`
|
||||
(replacing today's pointer-README stubs); add sync workflow 2
|
||||
(monorepo → catalog `skills/build/`). Mark catalog `skills/build/` as mirror.
|
||||
8. Add sync workflow 3 (catalog `skills/workflows/` → `firecrawl-workflows`);
|
||||
convert `firecrawl-workflows` to mirror: banner README, issues off,
|
||||
repo-lockdown, branch protection. Routing rule in its README points PRs at
|
||||
the catalog.
|
||||
9. Freeze direct edits to mirrored dirs (banner + lockdown; social enforcement
|
||||
is enough given CI overwrites drift on next sync).
|
||||
|
||||
### Phase 3 — fix the integrations
|
||||
10. Update the catalog's Codex/Cursor/Claude plugin manifests to bundle
|
||||
`skills/cli/` + `skills/build/`. This closes the Codex bug.
|
||||
11. Revamp `firecrawl init`: CLI skills by default, workflow multi-select,
|
||||
drop build skills, delegate to `npx skills add firecrawl/skills`.
|
||||
|
||||
### Phase 4 — flip promotion
|
||||
12. Update every README, doc, and marketing surface to promote exactly one
|
||||
command: `npx skills add firecrawl/skills` (plus `firecrawl init` for CLI
|
||||
onboarding). Old commands are never mentioned as removed — they simply
|
||||
stop being promoted.
|
||||
13. Add the routing rule to `firecrawl/cli` and monorepo READMEs.
|
||||
|
||||
### Phase 5 — steady state
|
||||
14. New skills land per the routing rule; the growth lever (keep shipping,
|
||||
especially workflows) now has exactly one obvious destination per skill type.
|
||||
15. Revisit the parked A/B question (granular vs consolidated packaging) once
|
||||
catalog activation data accumulates — the catalog's category layout makes
|
||||
adding experimental consolidated bundles additive and cheap.
|
||||
|
||||
## Risks & open items
|
||||
|
||||
- **Catalog counters start at zero** for CLI and workflow skills. Mitigated by
|
||||
`firecrawl init` volume flowing to the catalog immediately, and by never
|
||||
breaking the old paths.
|
||||
- **Drive-by PRs against mirrored catalog dirs** will happen. CI overwrite +
|
||||
banner + a maintainer redirect comment is sufficient; repo-lockdown on the
|
||||
catalog itself is not an option since two of its categories accept PRs.
|
||||
- **skills.sh stale entries** (~41 shown vs 7 real in this repo) have no
|
||||
self-service cleanup mechanism today; they stay visible on the org page.
|
||||
@@ -1,59 +0,0 @@
|
||||
---
|
||||
name: firecrawl-developer-index
|
||||
description: Search issues, merged pull requests, READMEs, and documentation. Use when the question is how a library or API behaves, what an error means, or whether a bug was fixed; prefer this over a general web page.
|
||||
---
|
||||
|
||||
# Firecrawl Developer Index
|
||||
|
||||
Answer a developer question from the primary source: the issue where the bug was reported, the merged pull request that fixed it, the README or documentation page that states the contract. A blog post that describes a behaviour is a weaker answer than the passage that defines it, so reach for the index first and the open web second.
|
||||
|
||||
There is **no fixed recipe**. Read the question, decide what kind it is, and choose the approach below. A literal error string wants a different move than "how do I do X". Don't run machinery a question doesn't call for.
|
||||
|
||||
## The tools, and what each is uniquely good at
|
||||
|
||||
- HTTP: **`GET|POST https://api.firecrawl.dev/v2/search/developer`**
|
||||
MCP: **`firecrawl_developer_search(query, k?, skills?)`**
|
||||
CLI: **`firecrawl developer <query> [--limit <n>] [--skills-only]`**
|
||||
Ranked results over the whole index. Each carries `id` (`issue:owner/repo#123`), `url`, and the **matched passages in markdown**, so tables and code blocks survive. The artifact kind is the `id` prefix: `doc:`, `issue:`, `pull_request:`, or `readme:`.
|
||||
The default first move for a developer question. It is the only surface that returns the passages, which is what lets you answer instead of pointing at a page.
|
||||
`k` / `--limit` is 1–100 and defaults to 10. `skills="only"` / `--skills-only` restricts the search to agent-skill files.
|
||||
Keyless; send `Authorization: Bearer $FIRECRAWL_API_KEY` for higher rate limits.
|
||||
|
||||
- MCP: **`firecrawl_search(query, categories: ["developer"])`**
|
||||
CLI: **`firecrawl search <query> --categories developer`**
|
||||
Developer hits in a `developer` group beside `web`, each with `url`, `title`, `description` (the matched passage), `position`, and `category: "developer"` — web results carry no `category`, so that is the field to key on when merging.
|
||||
Use this when you are **already** running a web search and want developer sources weighed in the same call. It exposes none of the filters and no passage control.
|
||||
|
||||
- MCP: **`firecrawl_scrape(url)` / `firecrawl_search(query)`**
|
||||
CLI: **`firecrawl scrape <url>` / `firecrawl search <query>`**
|
||||
General web fetch and search, for what no primary source states: a comparison between two libraries, an outage, a migration write-up, a project with no public repository or indexed docs.
|
||||
Also the follow-through when a hit is the right page but you need all of it — `scrape` the result's `url`.
|
||||
|
||||
## Filters, and what each one costs you
|
||||
|
||||
Only the HTTP surface takes these. On `GET`, pass `types=issue,pull_request` or repeat the parameter; on `POST`, pass arrays. All are optional.
|
||||
|
||||
- `types` — which of `doc`, `issue`, `pull_request`, `readme` to search. Defaults to all four. Narrowing here is the cheapest way to sharpen a query.
|
||||
- `repos` (`owner/name`) scopes the repository half, meaning `issue`, `pull_request`, and `readme`; `sources` (documentation source ids, at most 20) scopes the documentation half, meaning `doc`. Passing both **unions** the halves rather than intersecting them. Both echo back in the response with `indexed: true|false` — that is how you tell "not in the index" from "found nothing".
|
||||
- A filter that cannot match any requested `type` is a `400`, not an empty list: `repos` with no repository type in `types`, or `sources` without `doc`.
|
||||
- `passages` (1–5, default 1) is the *maximum* passages per result, not a guarantee. Raise it when one page is clearly the right page but the first passage is the wrong part of it.
|
||||
- `language`, `topic`, `license`, `min_stars`, `max_stars`, `archived`, `fork` describe a **repository**. Most documentation pages in the index have no repository behind them, so no repository fact can admit or exclude one. Send any of these without a `sources` scope and the response holds repository evidence only — `issue`, `pull_request`, `readme`. That is the design, not an index fault: do not retry it and do not report the index broken. To keep documentation, drop the repository filters, or scope the documentation half with `sources` and read the `sources` echo to confirm the id is indexed.
|
||||
|
||||
## Match the approach to the question
|
||||
|
||||
- **Literal error message or stack-trace string** → search the string itself plus the library name, with `types=["issue","pull_request"]`. Whoever hit it filed it. If nothing matches, strip the volatile parts (paths, line numbers, ids, addresses) and retry — the invariant middle of the message is what is indexed.
|
||||
- **Conceptual "how do I do X"** → the full question in natural language, all four types. The answer is usually a `doc` or a `readme`; raise `passages` before raising `k`.
|
||||
- **Known bug** → the issue reports it, the merged pull request *fixes* it, and the fix is what you want. Search `types=["issue","pull_request"]`, then re-query the issue's own terms scoped to its repo with `types=["pull_request"]`. A merged PR's passages tell you what changed and in which direction.
|
||||
- **API contract** ("what does X return", "is Y required", "what is the default") → `readme` and `doc` are authoritative and a blog post is not. Use `types=["readme","doc"]`. If the contract looks like it moved, follow up with `pull_request` for the change that moved it.
|
||||
- **Version-specific behaviour** → an issue's opening report describes the broken version; its resolution supersedes it. Raise `passages` to see further into the thread, and read the resolution and the linked pull request before answering. Never answer from an opening report alone.
|
||||
- **Scoped to one library** → `repos=["owner/name"]` when you know the slug, plus `sources` if you want its docs in the same call. If a scoped search comes back empty, read the echoed `indexed` flag first: `false` means nothing from that repo or source can ever match and no rephrasing will help — drop the scope and search the whole index, or go to the web.
|
||||
- **Ecosystem-wide** ("which libraries do X", "who else hit this") → no scope. Use `language` / `topic` / `min_stars` to keep to maintained repositories, accepting that this gives up all `doc` results.
|
||||
- **Agent skills and tooling conventions** → `skills="only"` / `--skills-only`.
|
||||
- **Comparison, opinion, news, or an unindexed project** → the open web. `firecrawl_search`, then `firecrawl_scrape` whatever deserves a full read. Combining is often right: take the contract from the index and the trade-off from the web.
|
||||
|
||||
## Principles
|
||||
|
||||
- **Quote the passage, cite the `url`.** The passages are the evidence; hand them over rather than paraphrasing them into a claim the reader can't check. `title` is frequently absent on `doc` results — fall back to `url`.
|
||||
- **A merge supersedes a report.** When an issue and a pull request disagree, the merged pull request is the current behaviour. Say which one you read.
|
||||
- **Scope last, not first.** Search the whole index, then narrow with `types`, `repos`, or `sources` once you know what the hits look like. Scoping first hides the result that would have told you where to look.
|
||||
- **Go to the web when the index has nothing to say.** Trade-offs, ecosystem opinion, and anything about an unindexed project are web questions. Don't force them through the index, and don't dress a general web page up as a primary source.
|
||||
@@ -1,69 +0,0 @@
|
||||
---
|
||||
name: firecrawl-research-index
|
||||
description: Find the papers that answer a research query in Firecrawl's research paper index — a corpus of paper abstracts whose largest share is biomedical and life-science literature (PubMed, bioRxiv, medRxiv), alongside arXiv preprints in CS, physics, and math — using semantic search, semantic and structural expansion, and in-body verification. Use this skill for literature-finding and paper-retrieval tasks of any kind, including clinical, biomedical, drug, gene, disease, and other life-science questions, whether the answer is a single paper or a full multi-paper set. The index is reached only through the `firecrawl_research_*` MCP tools or the `firecrawl research` CLI subcommands. Calling `firecrawl_search` with its `categories` option set to `["research"]` is a different feature — it filters ordinary web search to research-affiliated websites (the list includes PubMed, bioRxiv, medRxiv, arXiv, and publisher sites) and returns page results from them, without querying the paper records in this index.
|
||||
---
|
||||
|
||||
# Firecrawl Research Index
|
||||
|
||||
Find the research papers that answer a research query. Some questions have a single answer; many have several — and when in doubt, lean toward returning the fuller relevant set (most relevant first) rather than narrowing to one. A reader is better served seeing the neighboring methods and papers than having them silently dropped.
|
||||
|
||||
## What is in the index
|
||||
|
||||
Paper abstracts, with full text reachable per paper. The largest share of the corpus is **biomedical and life-science** literature — **PubMed** journal articles plus **bioRxiv** and **medRxiv** preprints — so clinical, drug, gene, disease, epidemiology, and public-health questions are in scope. **arXiv** preprints cover computer science, physics, and mathematics. Coverage outside those sources is thinner: a paper that exists only behind a publisher paywall or in a niche venue may not be indexed, and the general web tools below are the fallback when it isn't.
|
||||
|
||||
There is **no fixed recipe**. Read the query, decide what kind it is, and choose the approach below. Some queries need a single search; others need heavy sturctural/semantic expansion. Don't run machinery a query doesn't call for.
|
||||
|
||||
## The tools, and what each is uniquely good at
|
||||
|
||||
- MCP: **`firecrawl_research_search_papers(query, k?)`**
|
||||
CLI: **`firecrawl research search-papers <query> [--k <number>]`**
|
||||
Semantic (HyDE) search over **abstracts**. The natural first move for almost any query.
|
||||
If results look thin or all-alike, re-run with a different framing (sibling domain, rival method, dataset/benchmark name) rather than giving up.
|
||||
|
||||
- MCP: **`firecrawl_research_related_papers(seed_ids, intent, mode?, k?)`**
|
||||
CLI: **`firecrawl research related-papers <seedIds...> --intent <intent> [--mode <similar|citers|references>] [--k <number>]`**
|
||||
Semantic and structural expansion, ranked to your `intent`.
|
||||
This reaches papers semantic search *cannot*, and it's how you turn one good hit into the rest of a set.
|
||||
`mode=similar` → niche siblings; `citers` → who uses/builds on the seeds; `references` → what they build on / compare against.
|
||||
|
||||
- MCP: **`firecrawl_research_inspect_paper(id)`**
|
||||
CLI: **`firecrawl research inspect-paper <id>`**
|
||||
Canonical metadata for **one** paper: title, abstract, authors, categories, source ids, and dates.
|
||||
Use it after `search_papers` or `related_papers` when you need the complete citation/metadata for a candidate, or when you have an id from elsewhere and need to confirm what paper it resolves to.
|
||||
This does **not** read the paper body; use `read_paper` for specific full-text questions.
|
||||
|
||||
- MCP: **`firecrawl_research_read_paper(id, question)`**
|
||||
CLI: **`firecrawl research read-paper <id> --question <question>`**
|
||||
In-body passages of **one** paper, to verify a load-bearing constraint (a method actually used, a score actually reported, an affiliation, what a paper compares to).
|
||||
Use it to settle a specific doubt, not on everything.
|
||||
|
||||
- MCP: **`firecrawl_search(query, categories: ["research"])`**
|
||||
CLI: **`firecrawl search <query> --categories research`**
|
||||
**Not this index.** This is a *website* filter: it restricts a normal web search to a short list of research-affiliated domains — the list does include `pubmed.ncbi.nlm.nih.gov`, `biorxiv.org`, `medrxiv.org`, and `arxiv.org` alongside publisher sites — and returns page results in a `research` group beside `web`, each with `url`, `title`, `description` (the matched passage), `position`, and `category: "research"` — web results carry no `category`, so that is the field to key on when merging.
|
||||
So it reaches those sites' **web pages**; what it does not do is query their **paper records** in this index — no semantic search over abstracts, no citation-graph or related-paper expansion, no canonical paper metadata, and no in-body passages. The results are ordinary web results.
|
||||
Use it when you are **already** running a web search and want those sites weighed in the same call. For anything that is actually a paper-finding task, use `firecrawl_research_search_papers` and its siblings above.
|
||||
|
||||
- MCP: **`firecrawl_search(query)` / `firecrawl_scrape(url)`**
|
||||
CLI: **`firecrawl search <query>` / `firecrawl scrape <url>`**
|
||||
General **web** search and page fetch, for facts that don't live in paper abstracts: benchmark **leaderboards**, rankings, "who scores best / is largest / is most used."
|
||||
Find the ranking on the web, then map the top entries back to papers with `search_papers`.
|
||||
Reach for these only when the corpus can't answer the question on its own.
|
||||
|
||||
## Match the approach to the query
|
||||
|
||||
- **Single *named* paper** ("the Qwen3 report") → one `search_papers`, done. This is the only case that truly wants exactly one paper.
|
||||
- **Paper by description / by method or technique** ("the paper that introduced X", "training-free N-gram detection of AI text") → find the best match, then assume there's a *family*: expand with `related_papers` and **include the closely-related methods/papers too**. Even when one paper is the exact literal match, surface and keep its neighbors — don't narrow to the single best hit and reason the rest out. Only treat it as one-answer if the query names a specific paper.
|
||||
- **Enumeration / method-family** ("papers that do X", "alternatives to Adam", "benchmarks for Y") → the answer is a *set*, and this is where `related_papers` earns its keep: expand several strong anchors with `mode=similar`, re-seed from new strong hits. One search is never enough here.
|
||||
- **Exhibiting** ("papers that *use* / exhibit property P") → the relevant papers apply P but their abstracts may not describe it. Go from P's defining paper outward via `citers`/`references`, and use `read_paper` to confirm a candidate actually uses P.
|
||||
- **Superlative / leaderboard** ("best on benchmark X", "largest", "most popular") → the ranking lives on **leaderboards / the web**, not in any single abstract. Use `firecrawl_search` / `firecrawl_scrape` to find the benchmark's leaderboard or rankings, read off the top models/papers, then `search_papers` each to get its paper. As a fallback, search the benchmark and `read_paper` candidates for reported numbers. The hardest kind — cast wide.
|
||||
- **Org / author filtered** ("from \<org\>", "by \<author\>") → topical match isn't enough; verify the affiliation/authorship (metadata or `read_paper`) before keeping a paper.
|
||||
- **Compare-against** ("what does paper X benchmark against / build on") → the answer is *inside* paper X: `read_paper(X, ...)` or `related_papers([X], ..., mode="references")`.
|
||||
|
||||
## Principles
|
||||
|
||||
- **Two different features share the word "research."** The paper index is `firecrawl_research_*` / `firecrawl research`. The `categories: ["research"]` option on `firecrawl_search` is a website filter — it does point web search at PubMed, bioRxiv, medRxiv, arXiv, and publisher sites, but what comes back is their web pages, not paper records. If a task is about finding papers, the tools in this skill are the ones that read the corpus; reaching for `categories: ["research"]` will quietly answer a different question.
|
||||
- **Query shape and subject field are separate.** A clinical-trial question and a machine-learning question take the same shapes above; what differs is only which source the hits come from. Don't send a biomedical or life-science query to the open web on the assumption the corpus is arXiv-only — PubMed, bioRxiv, and medRxiv are the largest part of what `search_papers` reads.
|
||||
- **When in doubt, include.** For any topic / method / comparison question, return the relevant *family*, not just the single best match — err toward keeping a plausibly-relevant paper rather than dropping it. The neighboring methods are part of a good answer; don't reason close work out just because one paper is the most exact match.
|
||||
- **Follow the literature, and keep what you find.** The seminal source, the competing methods, the close neighbors are usually a hop away — use `related_papers`, and *include* them, not just the first hit. Stopping at one good result is the most common way to leave the reader with half an answer.
|
||||
- **Verify to exclude, not to gatekeep.** Use `read_paper` to rule a paper *out* when a hard constraint clearly fails (wrong org/author, doesn't actually report the score). When a paper is plausibly relevant, lean toward keeping it rather than demanding proof.
|
||||
- **Only drop the clearly off-topic.** Don't pad with papers you're confident are unrelated — but that's a high bar; most plausibly-relevant work should make the cut.
|
||||
@@ -0,0 +1,4 @@
|
||||
# Workflow skills (mirror)
|
||||
|
||||
Mirror of [`firecrawl/firecrawl-workflows`](https://github.com/firecrawl/firecrawl-workflows) — do not edit here.
|
||||
PR changes against `firecrawl/firecrawl-workflows`; CI overwrites this directory on every sync.
|
||||
Reference in New Issue
Block a user