Skip to content

Fix interact sample variables, dead paths, and crawler access guidance - #1369

Merged
hmishra2250 merged 13 commits into
mainfrom
docs/fix-samples-dead-paths-and-crawler-guidance
Sep 8, 2026
Merged

hmishra2250 merged 13 commits into
mainfrom
docs/fix-samples-dead-paths-and-crawler-guidance

Conversation

@hmishra2250

@hmishra2250 hmishra2250 commented Sep 6, 2026 •

Copy link
Copy Markdown
Contributor

Stack

These three PRs all edit the same navigation lines in docs.json, so they are stacked in this order:

  1. docs: add Browser Sandbox page to navigation #1286, base main. Adds features/browser to the Features nav.
  2. Scope the capabilities page and add Cloud availability per row #1364, base docs/add-browser-to-navigation. Depends on docs: add Browser Sandbox page to navigation #1286. Groups features/browser with features/interact so the page appears exactly once.
  3. This PR (Fix interact sample variables, dead paths, and crawler access guidance #1369), base docs/capabilities-and-licensing. Depends on Scope the capabilities page and add Cloud availability per row #1364.

This PR's own docs.json change is the five common-sites redirects, which sit in a different block from the nav edits above and merge cleanly on top of them.

Review and merge bottom up. Retarget to main after the parent merges; the diff then shrinks to this PR's own changes.


Summary

Four small docs defects that agents and site operators hit on the live site. A copyable interact sample sends an undefined shell variable to the API, the retired common-sites guides still 404, the monitoring pages do not link the two facts a monitoring reader needs next, and the advanced scraping guide tells operators to allowlist a user agent Firecrawl does not send.

Why

Interact samples. Deep Insights report DI-2026-09-05-WEEKLY records the retrieved body Cannot GET /v2/scrape/$SCRAPE_ID/interact (source page:ee2fc1b4..., SHA-256 d9144198...), and names it "a path shaped exactly like an unresolved '$SCRAPE_ID' placeholder from the interact docs". On main, six of the eight curl samples on features/interact.mdx use $SCRAPE_ID in the request path and never set it, while the quickstart and profile samples on the same page do set it. Each sample has its own copy button, so the six ship a variable that expands to nothing.

Common sites. The same report notes the Amazon common-sites guide 404s. That tree was deleted on purpose in 2ed95d92 "rm-common-sites" on 2026-08-04 and nothing was left behind. The commit removed four pages: amazon, etsy, github and wikipedia. Checked live on 2026-09-06: all four paths under /developer-guides/common-sites/ and the bare /developer-guides/common-sites return 404.

Monitoring cross-links. Report DI-2026-09-04-WEEKLY, finding OB-04, found that features/monitoring.mdx answers six of the seven questions a monitoring reader asks. The seventh, webhook retry, lives in webhooks/overview.mdx lines 50 to 62, and the monitoring page had no link to it. Separately, features/change-tracking.mdx had zero links to /features/monitoring, so the page an agent actually retrieves dead-ends with respect to the scheduled product built on it.

Crawler access guidance. Finding OB-06 in report DI-2026-09-05-WEEKLY, Astra edition, run 34015460876, flagged advanced-scraping-guide.mdx:667:

User Agent: Allow FirecrawlAgent in your firewall or security rules.

Product truth on firecrawl main: apps/api/src/lib/robots-txt.ts:140 passes ["FireCrawlAgent", "FirecrawlAgent"] to the robots parser, so the token decides which robots.txt block applies and is never written into an outgoing header. apps/api/src/scraper/scrapeURL/engines/fetch/index.ts:170 forwards meta.options.headers only, and no core fetch path sets a default User-Agent. apps/api/src/scraper/WebScraper/crawler.ts:523 runs the robots check on crawl. Live on 2026-09-06, a scrape of https://httpbin.org/headers through api.firecrawl.dev on default settings returned:

"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36"

Repeating with proxy: basic and no cache gave the same result. An operator who follows the current instruction gets a rule that never fires. The same behavior is reported from outside in firecrawl/firecrawl#1169.

Changes

  • snippets/v2/interact/{prompt,execute-python,execute-node,execute-bash}/*curl*.mdx: each standalone curl sample now scrapes first and reads data.metadata.scrapeId into SCRAPE_ID, matching the quickstart and profile samples. snippets/v2/interact/stop/curl.mdx keeps its single DELETE call and states in a comment where SCRAPE_ID comes from.
  • docs.json: five redirects sending /developer-guides/common-sites and its four removed pages to /features/scrape, the closest current page. All four taught the same thing applied to one site: scrape with JSON mode, search, scrape, map, crawl, batch scrape.
  • features/monitoring.mdx: the notifications section states the 10 second timeout and the three retries at 1, 5, and 15 minutes and links /webhooks/overview#timeouts--retries. Its change tracking section links /features/change-tracking.
  • features/change-tracking.mdx: links /features/monitoring in the lead-in and again in the scheduling section.
  • advanced-scraping-guide.mdx, one section, three bullets: a new robots.txt bullet stating that Firecrawl reads robots.txt before crawling and applies rules written for FirecrawlAgent and for *; the User Agent bullet now says Firecrawl does not send FirecrawlAgent in the User-Agent header of its page requests, so firewall and WAF rules matching that token will not match Firecrawl traffic; the IP addresses bullet is unchanged.

gt-lock.json still carries five stale translation records for each removed common-sites page. That file is generated by gtx-cli from gt.config.json, so it is not hand-edited here and will settle on the next translation run. Localized copies of the interact snippets and of the crawler-access section are generated the same way and are also left alone, per CLAUDE.md.

Verification

  • mintlify broken-links (Mintlify CLI 4.2.773, Node 22.23.2): 208 broken links, byte-identical to the same run on a clean origin/main worktree. None in the changed files.
  • mintlify validate: 17 warnings, all missing snippet imports, byte-identical to the same run on origin/main.
  • Live 404s confirmed by curl on 2026-09-06 for all five common-sites paths above.
  • Live user-agent check described above, run twice.
  • Repo search for Signature-Agent, Signature-Input, web-bot-auth, RFC 9421, ed25519 and http-message-signatures across firecrawl, firecrawl-docs, firecrawl-web and firecrawl-mcp-server on main: no matches. Nothing in the change assumes request signing that does not exist.
  • git diff --name-only origin/main...HEAD lists 11 files, all docs content.

Not in this PR

Shipping an identifiable user agent, publishing an outbound IP list, and applying for Cloudflare bot verification are product decisions, not docs edits. PR firecrawl/firecrawl#2766 attempted the first and was closed unmerged on 2026-03-04.

Added 2026-09-07

The Monitor operating contract is now on the page. features/monitoring.mdx listed six check statuses and answered none of the three questions an operator asks next: what happens when a check cannot run, whether there is a failure count to read, and whether Firecrawl ever stops a schedule by itself. A new "Skipped checks and paused monitors" section answers all three, and one existing line is corrected. Reference: Deep Insights DI-2026-09-05-WEEKLY, path IP-D5.

skipped_no_credits was missing from the status set. The page said checks can be filtered by queued, running, completed, failed, partial, or skipped_overlap. The status exists and is written at apps/api/src/services/monitoring/runner.ts:1033, typed at apps/api/src/services/monitoring/types.ts:277-288 and :342-349, and declared in both SDKs at apps/js-sdk/firecrawl/src/v2/types.ts:1185-1195 and apps/python-sdk/firecrawl/v2/types.py:1356. The two status enums in api-reference/v2-openapi.json omitted it too, at the checks-list query parameter and on the MonitorCheck schema, so the API reference under-reported the set as well. Both enums and the prose line now carry it, and the prose says the set of seven is complete.

There is no aggregate failure counter, and stating that is safe. apps/api/src/services/monitoring/store.ts:849-853 derives the credit-skip streak by query and says why: "Derived rather than counted: a stored counter would be a second source of truth to keep correct across retries." No failure count, error rate or consecutive-skip field appears on either the Monitor or the MonitorCheck schema in api-reference/v2-openapi.json. The page now names what a monitor does return, status, nextRunAt, lastRunAt, currentCheckId and lastCheckSummary, and shows how to derive a streak from the checks list, which is returned newest first.

Auto-pause exists, so the page describes it instead of denying its absence. apps/api/src/services/monitoring/runner.ts:1047-1058 calls pauseMonitor (store.ts:883-901) when the credit lock is denied with reason job_revoked and the leading run of credit-skipped checks has reached three. That reason comes from the partner gate rather than from the team's own balance, per the comment at apps/api/src/services/autumn/types.ts:59-67: "job_revoked is the only one that never resolves on its own, and so the only one a caller may answer by stopping a schedule." So the page states the partner-revocation rule, states explicitly that an ordinary team running out of credits is not paused and keeps recording skipped checks, and notes that the pause is a status change with no webhook event and no email behind it. Returning the monitor to active is already in the MonitorUpdateRequest status enum.

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 head 32f8ac97. None in features/monitoring.mdx.
  • mintlify validate: 17 warnings, the same count as the detached baseline.
  • api-reference/v2-openapi.json parses after the edit.

Rebase note

This branch was rebased onto the new head of its base branch docs/capabilities-and-licensing (93dc8d5e), which gained one commit on #1364 the same day. The rebase was clean and no earlier commit changed.

Added 2026-09-07

Narrowed the user-agent bullet in advanced-scraping-guide.mdx after external review. The bullet previously said Firecrawl does not send FirecrawlAgent in the User-Agent header of its page requests. The code evidence supports only that the token is used for robots.txt rule matching, at apps/api/src/lib/robots-txt.ts:143 on firecrawl origin/main: userAgents: string[] = ["FireCrawlAgent", "FirecrawlAgent"],. That default does not establish the outbound identity of every managed request, so a universal absence claim is wider than the evidence. The bullet now gives the actionable distinction instead: FirecrawlAgent is the token Firecrawl matches against in robots.txt, do not assume it is the User-Agent header on the fetch, and allow-list by robots directive rather than by User-Agent string. The corrected robots.txt bullet is unchanged. mintlify broken-links on Node 22.23.2 is identical to a detached worktree at the previous head 9d0b60e2.

🤖 Generated with Claude Code

https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS

@mintlify

mintlify Bot commented Sep 6, 2026 •

Copy link
Copy Markdown

Preview deployment for your docs. Learn more about Mintlify Previews.

Project Status Preview Updated
firecrawl 🟢 Ready View Preview Sep 6, 2026, 10:27 AM

💡 Tip: Enable Automations to automatically generate PRs for you.

LegoGuy32109 and others added 5 commits September 7, 2026 04:56
…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
hmishra2250 force-pushed the docs/fix-samples-dead-paths-and-crawler-guidance branch from 57296ec to 32f8ac9 Compare September 6, 2026 23:30
@hmishra2250
hmishra2250 changed the base branch from main to docs/capabilities-and-licensing September 6, 2026 23:30
hmishra2250 and others added 6 commits September 7, 2026 14:00
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
The interact page ships curl samples that use $SCRAPE_ID in the request
path but never set it. Copied on their own they send a literal
"$SCRAPE_ID" to the API, which answers "Cannot GET
/v2/scrape/$SCRAPE_ID/interact" with no error code and no docs link.
Deep Insights report DI-2026-09-05-WEEKLY records that exact string as a
retrieved page body, so agents are dereferencing the placeholder.

Each standalone curl sample now scrapes first and reads
data.metadata.scrapeId into SCRAPE_ID, matching the pattern the
quickstart and profile samples on the same page already use. The stop
sample keeps a single DELETE call and states in a comment where
SCRAPE_ID comes from.

Localized copies under snippets/es, fr, ja, pt-BR and zh are generated by
gtx-cli and are not edited here.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
The developer-guides/common-sites tree (amazon, etsy, github, wikipedia)
was removed on purpose in 2ed95d9 "rm-common-sites" and nothing was left
behind, so those URLs still return 404. Checked on 2026-09-06:
docs.firecrawl.dev/developer-guides/common-sites/amazon,
/developer-guides/common-sites/linkedin and the bare
/developer-guides/common-sites all return 404. Deep Insights report
DI-2026-09-05-WEEKLY reports the Amazon guide as a 404 an agent hit.

All four pages taught the same thing applied to one site: scrape with
JSON mode, search, scrape, map, crawl, batch scrape. The closest current
page is /features/scrape, so all five sources point there.

gt-lock.json still carries five translation records per removed page.
That file is generated by gtx-cli from gt.config.json, so it is not
hand-edited here and will settle on the next translation run.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
Deep Insights report DI-2026-09-04-WEEKLY, finding OB-04, notes that a
reader arriving on the monitoring pages cannot reach the two facts they
need next.

features/monitoring.mdx answered six of seven questions a monitoring
reader asks but not webhook retry, which lives in webhooks/overview.mdx
lines 50 to 62, and the monitoring page had no link to it. The
notifications section now states the 10 second timeout and the three
retries at 1, 5, and 15 minutes, and links to
/webhooks/overview#timeouts--retries.

features/change-tracking.mdx had zero links to /features/monitoring even
though monitoring is the scheduled product built on it. It now says so in
the lead-in and again in the scheduling section, where the page otherwise
sends readers straight to cron. features/monitoring.mdx links back from
its own change tracking section.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
The advanced scraping guide told site operators to allow FirecrawlAgent
in their firewall or security rules. Firecrawl does not send that token
in the User-Agent header of its page requests, so a firewall or WAF rule
matching it never matches Firecrawl traffic. FirecrawlAgent is the token
Firecrawl matches robots.txt rules against when it crawls a site, which
is what the section now says.

Verified on firecrawl origin/main: apps/api/src/lib/robots-txt.ts:140
passes ["FireCrawlAgent", "FirecrawlAgent"] to the robots parser, and no
core fetch path sets a default User-Agent. Verified live on 2026-09-06:
a scrape of https://httpbin.org/headers through api.firecrawl.dev
returned User-Agent "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/152.0.0.0 Safari/537.36" and no Signature
headers.

Finding OB-06 in report DI-2026-09-05-WEEKLY (Astra edition, run
34015460876). Only the English source file changes here; the localized
copies are generated separately.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
The Monitor page listed six check statuses and said nothing about what
happens when a check cannot run, whether there is a failure count to
read, or when Firecrawl stops a schedule on its own. Readers had to guess
all three.

Three corrections, all read off firecrawl origin/main.

`skipped_no_credits` is a real seventh status. It is written at
apps/api/src/services/monitoring/runner.ts:1033 and typed at
services/monitoring/types.ts:277-288 and :342-349, and both SDKs declare
it (apps/js-sdk/firecrawl/src/v2/types.ts:1185-1195,
apps/python-sdk/firecrawl/v2/types.py:1356). The docs status list and the
two status enums in api-reference/v2-openapi.json omitted it, so the page
and the API reference both under-reported the set. Adds it to all three
and says the set is complete.

There is no aggregate failure counter, and now the page says so.
store.ts:849-853 derives the credit-skip streak by query and gives the
reason: "Derived rather than counted: a stored counter would be a second
source of truth to keep correct across retries." No failure count, error
rate or consecutive-skip field appears on the Monitor or MonitorCheck
schema in api-reference/v2-openapi.json. The page now names the fields
that are returned and shows how to derive a streak from the checks list,
which is ordered newest first.

Auto-pause exists, so the page describes it rather than denying it.
runner.ts:1047-1058 calls pauseMonitor (store.ts:883-901) when the credit
lock is denied with reason job_revoked and the leading run of
credit-skipped checks has reached three. The reason comes from the
partner gate, not from the team's own balance
(services/autumn/types.ts:59-67), so an ordinary team out of credits is
never paused. The page states the partner-revocation rule, states that
running out of credits does not pause a schedule, and says the pause is a
status change with no webhook or email behind it. Setting status back to
active is already in the MonitorUpdateRequest enum.

Finding: DI-2026-09-05-WEEKLY IP-D5, reconciled plan item 11.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
The user-agent bullet asserted that Firecrawl never sends FirecrawlAgent
in the User-Agent header of its page requests. The code evidence we have
does not support a universal absence claim. It shows only that the token
is used for robots.txt rule matching, in
apps/api/src/lib/robots-txt.ts:143 on firecrawl origin/main:

  userAgents: string[] = ["FireCrawlAgent", "FirecrawlAgent"],

That default is passed to isUrlAllowedByRobots and reaches the robots
parser. It does not establish the outbound identity of every managed
request, so the bullet now states the actionable distinction instead:
FirecrawlAgent is the token Firecrawl matches against in robots.txt, it
should not be assumed to be the User-Agent header on the fetch, and site
operators should allow-list by robots directive rather than by
User-Agent string. The corrected robots.txt bullet above it is unchanged.

Narrowing recommended by external review of PR #1369 and accepted by the
orchestrator on 2026-09-07. Only the English source file changes here.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SL5chNkWnr4Gy6uuB8PeKS
@hmishra2250
hmishra2250 changed the base branch from docs/capabilities-and-licensing to main September 8, 2026 06:34
…-paths-and-crawler-guidance

# Conflicts:
#	capabilities.mdx
@hmishra2250
hmishra2250 merged commit 08e488e into main Sep 8, 2026
2 checks passed

This branch was successfully deployed

1 active deployment
staging — 8e78a135 Deployed Sep 8, 2026 by mintlify[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants