Scope the capabilities page and add Cloud availability per row - #1364
Merged
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Automations to automatically generate PRs for you. |
…owser Sandbox addressable Third-party pages assert capability and licence facts about Firecrawl that our own artifacts contradict. Deep Insights Sep-3 verification (F5-CORRECTION-QUEUE, grade C+, both-sides-cited rows) found: - "Node.js only (no Python bindings)" — refuted; `from firecrawl import Firecrawl` appears in multiple snapshots and in /sdks/python. - "Apache 2.0 licence" — refuted; the core repository LICENSE is AGPL-3.0 with MIT SDKs. - "Firecrawl cannot fill out a form" — contradicted by /features/interact. The verifier's one engineering fix is a canonical, extractable page whose first ~500 tokens answer each denied capability as a standalone declarative sentence with a runnable example, and state the licence split plainly, so agents and reviewers retrieve the canonical answer instead of the third-party one. Adds capabilities-and-licensing.mdx: - "Capabilities at a glance": ten declarative-sentence headings, each citing the in-repo page that documents it and carrying the smallest example already published in these docs. - "Licensing": transcribed from LICENSE/README/package manifests in the firecrawl and firecrawl-mcp-server repositories. Facts not verifiable from a local repo file carry [LEGAL REVIEW: confirm] placeholders instead of an assertion, including the AGPL-obligation-trigger wording. - "Common misconceptions": each denied capability mapped to the correct statement and its documentation link, neutral, no vendor names. Also addresses OB-03 (Aug-30 wave, verified): the interact/authenticated capability is documented but not addressable — features/browser was absent from navigation, agents never named "Interact"/"Browser Sandbox" (0 of 140 developer answers) and reasoned from the legacy `actions` array instead. This commit adds an "Interact / Browser Sandbox" nav group carrying both features/interact and features/browser, renames the API-reference group to "Interact / Browser Sandbox Endpoints", and gives features/interact a job-to-be-done opener (scrape behind a login; click through pagination; fill and submit a form; reuse an authenticated session; start a session without scraping) linking only to sections that already exist. Evidence: Deep Insights F5-CORRECTION-QUEUE (2026-09-03) and OB-03 (2026-08-30). No localized files or navigation blocks were modified. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Review outcome on docs/capabilities-and-licensing: the capability/ addressability half ships, the licensing half is blocked on Legal and must not ship as canonical. - Rename capabilities-and-licensing.mdx -> capabilities.mdx and update the Get Started nav entry. - Remove the Licensing section, the AGPL obligations note, the licence-dependent misconception row, and every [LEGAL REVIEW: confirm] placeholder from the published page. Nothing in the shipped page now depends on an unresolved licence fact. - Preserve the removed draft verbatim at drafts/licensing-DRAFT.md — a plain .md file in a non-navigated directory, so Mintlify does not build it as a page (same pattern as reconciliation/INITIAL_DRIFT_REPORT.md). It carries the blockers and the proposed Core PR for Legal to pick up. - Opening paragraph no longer claims all SDKs are MIT. That claim is contradicted by apps/python-sdk/setup.py:67 (GPLv3) and by five SDKs that ship no LICENSE file at all. - Add an Availability column (Cloud / self-hosted) to a new capabilities-at-a-glance table, plus an inline availability line on each capability section. Agent, Browser and Interact are Cloud-delivered per contributing/open-source-or-cloud.mdx:30 and contributing/self-host.mdx:180; screenshots and page actions likewise; structured JSON extraction needs an OpenAI-compatible provider or Ollama when self-hosted. - Search: the first-screen sentence and the section heading now state the real contract — titles, descriptions and URLs by default, full page content when scrapeOptions is supplied (features/search.mdx:32). - Self-host snippet is runnable: adds `cd firecrawl` and the pinned `git checkout v2.11.162`, and points at the required .env step rather than implying `docker compose up` is the next command (contributing/self-host.mdx:66-89). - Fix the anchor introduced with the OB-03 opener: the live slug is #persistent-profiles-with-scrape-+-interact, not the double-dash form. The OB-03 fix is kept intact: features/browser is addressable in nav, the API-reference group is renamed to Interact / Browser Sandbox Endpoints, and features/interact.mdx opens with jobs-to-be-done. Deep Insights: F5 (capability claims not addressable from a canonical page), OB-03 (Browser Sandbox unreachable from navigation).
Review found the D2 blocker: Mintlify routes unnavigated .md files as live public pages (docs.firecrawl.dev/reconciliation/INITIAL_DRIFT_REPORT -> 200), so drafts/licensing-DRAFT.md, absent only from docs.json nav, would have deployed at /drafts/licensing-DRAFT with its own first line reading "DO NOT PUBLISH". - git rm drafts/licensing-DRAFT.md. Checked for a genuinely non-deployed location: docs.json has no ignore/exclude key of any kind, and the root README.md's 404 is Mintlify special-casing that literal filename, not a property of being unnavigated -- there is no second README.md in the tree to confirm it generalizes to a subdirectory. No provably unrouted location exists in this repo, so the draft is kept out entirely rather than relocated in-repo. - Preserved the draft's full content (licence table, AGPL note, removed misconception row, "what must not be said" list, proposed Core PR) in the review report at scratchpad/product-prs/D2-capabilities-licensing-v2.md under "Licensing draft (for Legal; not in repo)". - Grepped the branch diff (git diff --name-status origin/main...HEAD): the only other added file is capabilities.mdx, which is navigated in docs.json. No other unnavigated content added. - docs.json parses; mint broken-links (Node 22.23.2): 208/95 files, byte-identical to origin/main baseline, neither touched file appears; mint validate: same pre-existing 17 warnings, none on touched files.
The capabilities page is the canonical answer to what Firecrawl can do, and its table lists SDKs, Interact, Browser Sandbox, JavaScript rendering, Parse, Search, structured extraction, screenshots, and self-hosting. It omits Monitor, which ships eight public v2 routes, eight MCP tools, a CLI verb, and four docs pages in five languages. Deep Insights DI-2026-09-04-WEEKLY, finding OB-04-MONITORING-CATEGORY-FILING: 27 of 28 monitoring answers name a competitor and never mention Firecrawl. The report's stated cause is wrong, since the category pages exist, but a scope-statement surface that leaves Monitor out is a real instance of the same shape. `posts/firecrawl-101.mdx` in firecrawl-web has the matching omission; that one is a positioning call and stays out of this change. One row, in the table's existing format, pointing at [Monitoring](/features/monitoring). The row states Cloud and self-hosted because Monitor registers on the core v2 routes with no deployment gate, and it names the LLM-provider requirement for meaningful-change judging the way the structured-extraction row does. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
hmishra2250
force-pushed
the
docs/capabilities-and-licensing
branch
from
September 6, 2026 23:29
ad65186 to
26ed2f0
Compare
hmishra2250
changed the base branch from
main
to
docs/add-browser-to-navigation
September 6, 2026 23:29
This was referenced Sep 6, 2026
The table had one Availability column, so a reader could not tell whether a capability has an MCP tool, how long its session lasts, whether the endpoint takes a keyless request, or whether they need credentials for the site they are reading. Those answers do not track deployment. Replaces Availability with Deployment, MCP tool, Session lifetime, API auth and Target credentials, and adds a short list above the table saying what each column means. Every cell is read off origin/main. MCP tool names come from firecrawl-mcp-server src/index.ts and src/monitor.ts. Session bounds come from apps/api/src/controllers/v2/browser.ts:44-45 and scrape-browser.ts:74-75 for sessions and types.ts:797,871-897 for the scrape timeout. Keyless versus key-required comes from the allowKeyless option on each route in apps/api/src/routes/v2.ts, with the middleware default at routes/shared.ts:245-253. Target credentials come from the profile field in browser.ts:50-54 and scrape-browser.ts:79-82. Two cells say the capability has no MCP tool rather than guessing: the standalone Browser Sandbox, because the MCP interact tools act on a scrape and no browser tool is registered, and self-hosting, which is a deployment rather than an endpoint. Finding: DI-2026-09-05-WEEKLY Astra OB-04, reconciled plan item 9. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
This was referenced Sep 7, 2026
The Monitor row said "Cloud and self-hosted (core route)" without any
condition. Self-hosted scheduled operation is gated. On firecrawl
origin/main, apps/api/src/services/queue-worker.ts:467 starts the
monitor scheduler and the check consumers only behind two flags:
if (config.USE_DB_AUTHENTICATION && !config.DISABLE_MONITORING) {
and the two else branches log
"Skipping monitor worker startup because database authentication is
disabled" (line 490) and
"Skipping monitor worker startup because NUQ_RABBITMQ_URL is not
configured" (line 494). DISABLE_MONITORING defaults to false in
apps/api/src/config.ts:354, but the default docker compose turns
database authentication off, in docker-compose.yaml:33:
USE_DB_AUTHENTICATION: ${USE_DB_AUTHENTICATION:-false}
So a default self-hosted stack has the core implementation but never
runs a scheduled check. The cell now says that, and links self-host,
which documents USE_DB_AUTHENTICATION. The nav block and the licensing
content are untouched.
Narrowing recommended by external review of PR #1364 and accepted by the
orchestrator on 2026-09-07.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
hmishra2250
changed the base branch from
docs/add-browser-to-navigation
to
main
September 8, 2026 06:29
…-licensing # Conflicts: # docs.json
hmishra2250
added a commit
that referenced
this pull request
Sep 8, 2026
* docs: add Browser Sandbox page to navigation * docs: add canonical capabilities-and-licensing page; make Interact/Browser Sandbox addressable Third-party pages assert capability and licence facts about Firecrawl that our own artifacts contradict. Deep Insights Sep-3 verification (F5-CORRECTION-QUEUE, grade C+, both-sides-cited rows) found: - "Node.js only (no Python bindings)" — refuted; `from firecrawl import Firecrawl` appears in multiple snapshots and in /sdks/python. - "Apache 2.0 licence" — refuted; the core repository LICENSE is AGPL-3.0 with MIT SDKs. - "Firecrawl cannot fill out a form" — contradicted by /features/interact. The verifier's one engineering fix is a canonical, extractable page whose first ~500 tokens answer each denied capability as a standalone declarative sentence with a runnable example, and state the licence split plainly, so agents and reviewers retrieve the canonical answer instead of the third-party one. Adds capabilities-and-licensing.mdx: - "Capabilities at a glance": ten declarative-sentence headings, each citing the in-repo page that documents it and carrying the smallest example already published in these docs. - "Licensing": transcribed from LICENSE/README/package manifests in the firecrawl and firecrawl-mcp-server repositories. Facts not verifiable from a local repo file carry [LEGAL REVIEW: confirm] placeholders instead of an assertion, including the AGPL-obligation-trigger wording. - "Common misconceptions": each denied capability mapped to the correct statement and its documentation link, neutral, no vendor names. Also addresses OB-03 (Aug-30 wave, verified): the interact/authenticated capability is documented but not addressable — features/browser was absent from navigation, agents never named "Interact"/"Browser Sandbox" (0 of 140 developer answers) and reasoned from the legacy `actions` array instead. This commit adds an "Interact / Browser Sandbox" nav group carrying both features/interact and features/browser, renames the API-reference group to "Interact / Browser Sandbox Endpoints", and gives features/interact a job-to-be-done opener (scrape behind a login; click through pagination; fill and submit a form; reuse an authenticated session; start a session without scraping) linking only to sections that already exist. Evidence: Deep Insights F5-CORRECTION-QUEUE (2026-09-03) and OB-03 (2026-08-30). No localized files or navigation blocks were modified. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * docs: scope page to capabilities; split licensing out pending Legal Review outcome on docs/capabilities-and-licensing: the capability/ addressability half ships, the licensing half is blocked on Legal and must not ship as canonical. - Rename capabilities-and-licensing.mdx -> capabilities.mdx and update the Get Started nav entry. - Remove the Licensing section, the AGPL obligations note, the licence-dependent misconception row, and every [LEGAL REVIEW: confirm] placeholder from the published page. Nothing in the shipped page now depends on an unresolved licence fact. - Preserve the removed draft verbatim at drafts/licensing-DRAFT.md — a plain .md file in a non-navigated directory, so Mintlify does not build it as a page (same pattern as reconciliation/INITIAL_DRIFT_REPORT.md). It carries the blockers and the proposed Core PR for Legal to pick up. - Opening paragraph no longer claims all SDKs are MIT. That claim is contradicted by apps/python-sdk/setup.py:67 (GPLv3) and by five SDKs that ship no LICENSE file at all. - Add an Availability column (Cloud / self-hosted) to a new capabilities-at-a-glance table, plus an inline availability line on each capability section. Agent, Browser and Interact are Cloud-delivered per contributing/open-source-or-cloud.mdx:30 and contributing/self-host.mdx:180; screenshots and page actions likewise; structured JSON extraction needs an OpenAI-compatible provider or Ollama when self-hosted. - Search: the first-screen sentence and the section heading now state the real contract — titles, descriptions and URLs by default, full page content when scrapeOptions is supplied (features/search.mdx:32). - Self-host snippet is runnable: adds `cd firecrawl` and the pinned `git checkout v2.11.162`, and points at the required .env step rather than implying `docker compose up` is the next command (contributing/self-host.mdx:66-89). - Fix the anchor introduced with the OB-03 opener: the live slug is #persistent-profiles-with-scrape-+-interact, not the double-dash form. The OB-03 fix is kept intact: features/browser is addressable in nav, the API-reference group is renamed to Interact / Browser Sandbox Endpoints, and features/interact.mdx opens with jobs-to-be-done. Deep Insights: F5 (capability claims not addressable from a canonical page), OB-03 (Browser Sandbox unreachable from navigation). * fix(docs): remove licensing draft from repo, it is not provably unrouted Review found the D2 blocker: Mintlify routes unnavigated .md files as live public pages (docs.firecrawl.dev/reconciliation/INITIAL_DRIFT_REPORT -> 200), so drafts/licensing-DRAFT.md, absent only from docs.json nav, would have deployed at /drafts/licensing-DRAFT with its own first line reading "DO NOT PUBLISH". - git rm drafts/licensing-DRAFT.md. Checked for a genuinely non-deployed location: docs.json has no ignore/exclude key of any kind, and the root README.md's 404 is Mintlify special-casing that literal filename, not a property of being unnavigated -- there is no second README.md in the tree to confirm it generalizes to a subdirectory. No provably unrouted location exists in this repo, so the draft is kept out entirely rather than relocated in-repo. - Preserved the draft's full content (licence table, AGPL note, removed misconception row, "what must not be said" list, proposed Core PR) in the review report at scratchpad/product-prs/D2-capabilities-licensing-v2.md under "Licensing draft (for Legal; not in repo)". - Grepped the branch diff (git diff --name-status origin/main...HEAD): the only other added file is capabilities.mdx, which is navigated in docs.json. No other unnavigated content added. - docs.json parses; mint broken-links (Node 22.23.2): 208/95 files, byte-identical to origin/main baseline, neither touched file appears; mint validate: same pre-existing 17 warnings, none on touched files. * docs: add Monitor to the capabilities table The capabilities page is the canonical answer to what Firecrawl can do, and its table lists SDKs, Interact, Browser Sandbox, JavaScript rendering, Parse, Search, structured extraction, screenshots, and self-hosting. It omits Monitor, which ships eight public v2 routes, eight MCP tools, a CLI verb, and four docs pages in five languages. Deep Insights DI-2026-09-04-WEEKLY, finding OB-04-MONITORING-CATEGORY-FILING: 27 of 28 monitoring answers name a competitor and never mention Firecrawl. The report's stated cause is wrong, since the category pages exist, but a scope-statement surface that leaves Monitor out is a real instance of the same shape. `posts/firecrawl-101.mdx` in firecrawl-web has the matching omission; that one is a positioning call and stays out of this change. One row, in the table's existing format, pointing at [Monitoring](/features/monitoring). The row states Cloud and self-hosted because Monitor registers on the core v2 routes with no deployment gate, and it names the LLM-provider requirement for meaningful-change judging the way the structured-extraction row does. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS * Split the capabilities table into five independent columns The table had one Availability column, so a reader could not tell whether a capability has an MCP tool, how long its session lasts, whether the endpoint takes a keyless request, or whether they need credentials for the site they are reading. Those answers do not track deployment. Replaces Availability with Deployment, MCP tool, Session lifetime, API auth and Target credentials, and adds a short list above the table saying what each column means. Every cell is read off origin/main. MCP tool names come from firecrawl-mcp-server src/index.ts and src/monitor.ts. Session bounds come from apps/api/src/controllers/v2/browser.ts:44-45 and scrape-browser.ts:74-75 for sessions and types.ts:797,871-897 for the scrape timeout. Keyless versus key-required comes from the allowKeyless option on each route in apps/api/src/routes/v2.ts, with the middleware default at routes/shared.ts:245-253. Target credentials come from the profile field in browser.ts:50-54 and scrape-browser.ts:79-82. Two cells say the capability has no MCP tool rather than guessing: the standalone Browser Sandbox, because the MCP interact tools act on a scrape and no browser tool is registered, and self-hosting, which is a deployment rather than an endpoint. Finding: DI-2026-09-05-WEEKLY Astra OB-04, reconciled plan item 9. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS * Qualify the self-hosted availability of the Monitor row The Monitor row said "Cloud and self-hosted (core route)" without any condition. Self-hosted scheduled operation is gated. On firecrawl origin/main, apps/api/src/services/queue-worker.ts:467 starts the monitor scheduler and the check consumers only behind two flags: if (config.USE_DB_AUTHENTICATION && !config.DISABLE_MONITORING) { and the two else branches log "Skipping monitor worker startup because database authentication is disabled" (line 490) and "Skipping monitor worker startup because NUQ_RABBITMQ_URL is not configured" (line 494). DISABLE_MONITORING defaults to false in apps/api/src/config.ts:354, but the default docker compose turns database authentication off, in docker-compose.yaml:33: USE_DB_AUTHENTICATION: ${USE_DB_AUTHENTICATION:-false} So a default self-hosted stack has the core implementation but never runs a scheduled check. The cell now says that, and links self-host, which documents USE_DB_AUTHENTICATION. The nav block and the licensing content are untouched. Narrowing recommended by external review of PR #1364 and accepted by the orchestrator on 2026-09-07. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS * Link the capabilities page from scrape and crawl The capabilities page is the canonical answer to what Firecrawl can do, but nothing linked to it from the two pages a reader is most likely to land on first. A page with no inbound link from the main flow is a page readers and crawlers do not reach. Adds one link from each. `api-reference/endpoint/scrape.mdx` gains a short Capabilities section above Interactions. `features/crawl.mdx` gains one sentence in the intro list area, which is where the reader is deciding what a crawl can do to each page it reaches. Both are one hop to /capabilities and both are written in the surrounding prose style. Neither touches the lines PR #1365 edits in features/crawl.mdx. Finding: DI-2026-09-05-WEEKLY, reconciled plan item 10. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS --------- Co-authored-by: Josh Hale <joshevanhale@gmail.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stack
These three PRs all edit the same navigation lines in
docs.json, so they are stacked in this order:main. Addsfeatures/browserto the Features nav.docs/add-browser-to-navigation. Depends on docs: add Browser Sandbox page to navigation #1286.docs/capabilities-and-licensing. Depends on this PR.This PR resolves the placement of
features/browserby putting it in an "Interact / Browser Sandbox" group together withfeatures/interact, so the page appears exactly once in the nav. Nothing in #1286 needs to change.Review and merge bottom up. Retarget to
mainafter the parent merges; the diff then shrinks to this PR's own changes.Base branch note: #1286 comes from a fork, so its head cannot be used as a base directly.
docs/add-browser-to-navigationin this repo is #1286's single commit replayed onto currentmain, byte identical in content, and exists only to carry the stack.Summary
Third-party pages assert Firecrawl capability facts that Firecrawl's own snapshots contradict, and
the Interact and Browser Sandbox surfaces were not addressable at all:
features/browserwas absentfrom navigation. This branch adds a canonical
capabilities.mdxwith a Cloud versus self-hostedavailability column repeated inline in every section, puts Browser Sandbox in the nav, and removes
the licensing section from the published page pending Legal. It also fixes five occurrences of a
broken anchor the original branch was shipping.
Why (evidence)
Source reports: Weekly Deep Insights
DI-2026-09-03-WEEKLY(2026-09-03) andDI-2026-08-30-WEEKLY(2026-08-30); Developer-bank positioning read
(
analysis/loop/run/DEVELOPER-POSITIONING-READ.txt, 2026-08-31).Findings: F5-CORRECTION-QUEUE, thesis "current third-party pages assert Firecrawl capability and
licence facts that other current snapshots contradict". Grade C plus, verdict file
verdicts/deep-F5-corrections.md, where only 2 of 7 targets were double-cited but those two are theones the branch acts on. OB-03-interactive-capability-not-addressable, grade B in the
2026-09-03 review: "documented but not addressable: it lives inside extraction pages behind a bounty
and a Preview label." Developer read hypothesis H3: the Interact sandbox is invisible to the
models reasoning about Firecrawl, with 0 of 140 developer answers mentioning Interact or Browser
Sandbox and 4 mentioning the legacy
actionsarray; adjudications D2, D4, D12 and D13 are STALE.Verified evidence: aimultiple.com asserts "Node.js only (no Python bindings)" against snapshots
showing
from firecrawl import FirecrawlApp; dev.to asserts "Apache 2.0 licence" and "103,000GitHub stars" against a README snapshot showing AGPL-3.0 core with MIT SDKs and 175.7k stars;
knowledgesdk.com asserts "Firecrawl cannot fill out a form." against
docs/features/interact.Developer traces VDEV-202, VDEV-222, VDEV-247 and VDEV-953 reason about
actionsas if it were thewhole product.
Availability facts are sourced to
contributing/open-source-or-cloud.mdx:30("Agent, Browser,managed dashboards, enhanced proxy paths, and enterprise controls are delivered through Cloud") and
the self-hosted feature-support table at
contributing/self-host.mdx:175-180.Final verdict: APPROVE per the resolution addendum to
review-grounding/FINAL-REVIEW-docs-mcp.md. The review body records REQUEST CHANGES; that blockeris described and resolved below.
Changes
capabilities-and-licensing.mdxbecomescapabilities.mdx, git-tracked as a rename, 192 lines.Sections: opening paragraph,
## Capabilities at a glance, 10 capability sections with runnableexamples,
## Common misconceptions, GitHub-figures note.## Capabilities at a glancetable carriesCapability | Availability | Documented in.Behavior contract: every capability section repeats its availability inline, so the fact survives
being retrieved in isolation, which was the original defect. Interact, Browser Sandbox, login and
session reuse, and screenshots and page actions are marked Cloud only, citing
/contributing/self-host#self-hosted-feature-supportand/contributing/open-source-or-cloud#use-firecrawl-cloud-when. JavaScript rendering, PDF parsing,and Search are Cloud and self-hosted; structured JSON extraction on self-hosted requires an
OpenAI-compatible provider or Ollama. Two rows go beyond the brief (screenshots and page actions;
the provider requirement for structured extraction) because the same self-host table states them
and their absence would reproduce the same false-composite defect.
the first screen: "returns titles, descriptions, and URLs, and full page content for every result
when
scrapeOptionsis supplied."Highlights) and the
scrapeOptions/scrape_optionscontract, perfeatures/search.mdx:32and:34.git clone,cd firecrawl,git checkout v2.11.162, with prosepointing at the mandatory
.envstep and thedocker composeinvocation atcontributing/self-host.mdx#configure-the-evaluation-deployment. The previous two-liner randocker composein the parent directory and created no.env.## Licensingsection (8-row table plus AGPL Note), the licence-dependent misconception row,and all three
[LEGAL REVIEW: confirm]placeholders are removed from the published page. Themisconceptions table keeps 5 rows: the licence row is replaced by a self-hosting-parity row.
docs.json:features/browsernested under a new "Interact / Browser Sandbox" nav group; theAPI-reference group renamed from "Interact Endpoints" to "Interact / Browser Sandbox Endpoints";
the Get Started entry retargeted from
capabilities-and-licensingtocapabilities.features/interact.mdxgains the jobs-to-be-done opener from OB-03.#persistent-profiles-with-scrape--interactwith a double dash. The live slug is#persistent-profiles-with-scrape-+-interact, verified againsthttps://docs.firecrawl.dev/features/interact. Five occurrences corrected. This was shippingbroken in the original branch.
Blocker resolved in commit
4d8be852. The branch had preserved the licensing content atdrafts/licensing-DRAFT.mdon the claim that an unnavigated.mdfile has no URL. That claim isfalse:
https://docs.firecrawl.dev/reconciliation/INITIAL_DRIFT_REPORTreturns 200 with a fullrendered Mintlify page, a title and an OG image, and so does
.../CLAUDE, while.../reconciliation/THIS_DOES_NOT_EXIST_XYZreturns 404 as a control. Absence fromdocs.jsonremoves the sidebar link, not the route, so the branch would have published a live public page whose
first line reads "DRAFT — Licensing (BLOCKED ON LEGAL — DO NOT PUBLISH)". No provably unrouted
in-repo location exists:
docs.jsonhas noignoreorexcludekey of any kind (its onlytop-level keys are
$schema, colors, contextual, favicon, footer, integrations, logo, name, navbar, navigation, redirects, seo, theme), and the one live 404 found,docs.firecrawl.dev/README, isMintlify special-casing that literal root filename with no second
README.mdin the tree to confirmit generalizes. The file was therefore removed with
git rm; the draft content is preserved forLegal in
scratchpad/product-prs/D2-capabilities-licensing-v2.mdand ships nowhere.Diffstat: 3 files changed, 210 insertions, 2 deletions.
Verification
docs.jsonparses as valid JSON.Nav resolution: 1,772 nav entries, 1,430 unique, 0 missing files. This is the check that catches the
rename regression.
Internal links on the touched files: all
](/…)targets incapabilities.mdxandfeatures/interact.mdxexist as.mdxfiles, 0 broken.Anchors verified against the live rendered page rather than a local slug guess, which is how the
double-dash bug surfaced:
#persistent-profiles-with-scrape-+-interactconfirmed present in theserved HTML from
curl https://docs.firecrawl.dev/features/interact, plus#use-firecrawl-cloud-when(:27),#self-hosted-feature-support(:170),#configure-the-evaluation-deployment(:73),#interact-via-prompting(:105),#running-code(:126),#session-lifecycle(:228), and/features/search-highlights. HTTP 200on all pages checked.
Negative control on published content: grep across all
*.mdxexcludingdrafts/returns zero hitsfor
LEGAL REVIEWand zero forSDKs are MIT. The only AGPL and MIT strings in published.mdxare pre-existing ones in
v1/introduction.mdx, its localizations, andlearn/guide/firecrawl-ui-template.mdx, none touched by this branch. No dangling reference tocapabilities-and-licensingremains in any non-localized.mdxor.json.Diff audit for stray unnavigated content:
git diff --name-status origin/main...HEADlists onlycapabilities.mdx(new, navigated),docs.json,features/interact.mdxand the removeddrafts/licensing-DRAFT.md.mint broken-linksunder Node 22.23.2: 208 broken links in 95 files, identical to baseline; neithercapabilities.mdxnorfeatures/interact.mdxappears.mint validate: the same 17 pre-existinglocale snippet warnings; no touched file appears.
Localized trees untouched, per the repo
CLAUDE.md.Not in this PR
AGPL-obligations placeholder, the removed misconception row and the "what must not be said" list,
lives only in
scratchpad/product-prs/D2-capabilities-licensing-v2.md. It must not be added backto the docs repo in any form, navigated or not, until Legal signs off, because Mintlify has no
proven mechanism in this repo to keep a committed file out of the public site. Two things block
publication: Legal must confirm the SDK licence position, and Core must fix the underlying
declarations.
chore(licensing): fix stale GPLv3 declaration and add missing SDK LICENSE files. Item 1:apps/python-sdk/setup.py:67declareslicense="GNU General Public License v3 (GPLv3)",contradicting
apps/python-sdk/LICENSE(MIT) andapps/python-sdk/pyproject.toml:22(
license = {text = "MIT License"}); that string is what lands in PyPI package metadata for anybuild still going through
setup.py. Item 2:apps/go-sdk,apps/rust-sdk,apps/php-sdk,apps/java-sdkandapps/dot-net-sdkship noLICENSEfile, whileREADME.md:905describes theSDKs collectively as MIT, which is not a per-package grant under an AGPL-3.0 repository.
self-hosting row but has no row of its own, so its Cloud-only status does not survive isolated
retrieval the way every other capability's does. Optional nit from the review.
Links
Files changed:
capabilities.mdx(renamed fromcapabilities-and-licensing.mdx)docs.jsonfeatures/interact.mdxEvidence packet:
agent-experience-deepinsights-cleanroom/artifacts/deep-insights-sep3-verification-20260904/Licensing draft for Legal:
scratchpad/product-prs/D2-capabilities-licensing-v2.md, section "Licensing draft (for Legal; notin repo)".
Added 2026-09-06
Monitor is in the capabilities table. The page is the canonical answer to what Firecrawl can do, and the table listed SDKs, Interact, Browser Sandbox, JavaScript rendering, Parse, Search, structured extraction, screenshots and self-hosting. It omitted Monitor, which ships eight public v2 routes, eight MCP tools, a CLI verb and four docs pages in five languages. Deep Insights DI-2026-09-04-WEEKLY, finding OB-04-MONITORING-CATEGORY-FILING: 27 of 28 monitoring answers name a competitor and never mention Firecrawl. One row is added, in the table's existing format, pointing at Monitoring.
Verification, rerun on this branch rebased onto
origin/mainatc754d6b6:mintlify broken-links(Mintlify CLI 4.2.773, Node 22.23.2): 208 broken links, byte-identical to the same run on a cleanorigin/mainworktree. None incapabilities.mdx.mintlify validate: 17 warnings, all "Could not find file /snippets/...", the same set as onorigin/main.Note for the merge order
Resolved 2026-09-07 by stacking. See the Stack section at the top. This PR and #1286 both edit the Features group in
docs.jsonat the same place.origin/maindocs.json line 195 is"features/interact". #1286 inserts"features/browser",on the line above it. This PR replaces that line with an "Interact / Browser Sandbox" group holding both pages, which is the intent-preserving resolution:features/browserappears exactly once, inside the group. This branch is now rebased on top of #1286's change with that resolution applied, so there is no conflict left to settle at merge time.Added 2026-09-07
The capabilities table now answers five questions per row instead of one. The table had a single Availability column, so it said where a capability runs and nothing else. A reader could not tell from it whether a capability has an MCP tool, how long a browser session lasts, whether the endpoint takes a request with no API key, or whether they need credentials for the site they are reading. Those answers do not track deployment: Browser Sandbox is Cloud-only and has no MCP tool, Interact is Cloud-only and accepts a keyless request, and persistent profiles need your login for the target site while nothing else in the table does.
Availability is replaced by Deployment, MCP tool, Session lifetime, API auth and Target credentials, and a short list above the table says what each column means. Reference: Deep Insights DI-2026-09-05-WEEKLY, Astra edition, finding OB-04.
Every cell is read off
origin/mainin the repo that owns the fact.firecrawl-mcp-serversrc/index.tsforfirecrawl_scrape,firecrawl_search,firecrawl_parse,firecrawl_interact,firecrawl_interact_stopandfirecrawl_agent, andsrc/monitor.tsfor the eightfirecrawl_monitor_*tools.apps/api/src/controllers/v2/browser.ts:44-45andapps/api/src/controllers/v2/scrape-browser.ts:74-75givettl30 to 3600 seconds with a default of 600, and idleactivityTtl10 to 3600 seconds with a default of 300. The scrape request timeout and its per-format increases areapps/api/src/controllers/v2/types.ts:797and:871-897.allowKeylessoption on each route inapps/api/src/routes/v2.ts, with the middleware default atapps/api/src/routes/shared.ts:245-253, where an omitted option means a key is required./v2/scrape,/v2/search,/v2/parseand/v2/scrape/{id}/interactaccept a keyless request./v2/browser,/v2/extract,/v2/agentand the/v2/monitorroutes require a key.profilefield atapps/api/src/controllers/v2/browser.ts:50-54andapps/api/src/controllers/v2/scrape-browser.ts:79-82.Two cells say a capability has no MCP tool rather than filling the cell in. The standalone Browser Sandbox has none, because the MCP interact tools act on an existing scrape and no browser tool is registered anywhere in
src. Self-hosting has none because it is a deployment, not an endpoint. The column header points at MCP tools, which already documents that the working tool set depends on the API the server is connected to, so the column gives the tool name rather than a per-deployment claim.Verification on this branch, Node 22.23.2:
mintlify broken-links: 208 broken-link entries across 95 files, identical to the same run on a detached worktree at this branch's previous head26ed2f0f. None incapabilities.mdx.mintlify validate: 17 warnings, the same count as the detached baseline.git diff --name-only origin/docs/add-browser-to-navigation...HEADreturnscapabilities.mdx,docs.jsonandfeatures/interact.mdxonly.Added 2026-09-07
Qualified the Monitor row's deployment cell in
capabilities.mdxafter external review. It previously read "Cloud and self-hosted (core route)" with no condition. Self-hosted scheduled operation is gated. On firecrawl origin/main,apps/api/src/services/queue-worker.ts:467starts the monitor scheduler and both check consumers only behindif (config.USE_DB_AUTHENTICATION && !config.DISABLE_MONITORING) {, and the else branches log "Skipping monitor worker startup because database authentication is disabled" (:490) and "Skipping monitor worker startup because NUQ_RABBITMQ_URL is not configured" (:494).DISABLE_MONITORINGdefaults to false atapps/api/src/config.ts:354, but the default compose file turns database authentication off, atdocker-compose.yaml:33:USE_DB_AUTHENTICATION: ${USE_DB_AUTHENTICATION:-false}. A default self-hosted stack therefore has the core implementation and never runs a scheduled check. The cell now says the core implementation is available self-hosted but scheduled operation requires database authentication and the monitoring dependencies to be configured, and links Self-host Firecrawl, which documentsUSE_DB_AUTHENTICATION. The nav block and the licensing content are untouched.mintlify broken-linkson Node 22.23.2 is identical to a detached worktree at the previous head93dc8d5e.🤖 Generated with Claude Code
https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS