firecrawlsolid
Install: claude install-skill intentic/intentic
# Firecrawl (connected)
Key in `$FIRECRAWL_API_KEY`, base in `$FIRECRAWL_API_URL` (`https://api.firecrawl.dev` unless self-hosted).
Everything is `POST /v2/<endpoint>` with a JSON body. Define this helper once per shell: `fc <path> '<json>'`:
```sh
fc() { curl -s -X POST -H "Authorization: Bearer $FIRECRAWL_API_KEY" -H "Content-Type: application/json" \
-d "$2" "$FIRECRAWL_API_URL/v2/$1"; }
```
Responses are `{success, data}` (or `{success:false, error}`: read `error`, it says what was wrong). **This is
metered: one page ≈ one credit.** Prefer `scrape` on a known URL and `map` to find one; reach for `crawl` only
when whole-site content is genuinely wanted, and **always pass `limit`**.
- Scrape one page: `fc scrape '{"url":"<URL>","formats":["markdown"]}' | jq -r '.data.markdown'`, `.data.metadata` carries `{title, description, sourceURL, statusCode}`
- Keep the page's own boilerplate out (default) or bring it back: `"onlyMainContent": false`. For a JS-heavy page add `"waitFor": 3000`
- Just the links / a summary: `"formats":["links"]` → `.data.links` · `"formats":["summary"]` → `.data.summary`
- Structured fields out of a page: `fc scrape '{"url":"<URL>","formats":[{"type":"json","prompt":"the price and the release date","schema":{"type":"object","properties":{"price":{"type":"string"},"released":{"type":"string"}}}}]}' | jq '.data.json'`
- Map a site's URLs, cheap, and the right first move on an unfamiliar site: `fc map '{"url":"<URL>","limit":100}' | jq -r '.links[] |