crawlx maps the attack surface of dynamic web applications you are authorized to test.
LLM-guided planning and an accessibility-tree browser plane find the pages, forms and
endpoints; an independent safety kernel decides what is allowed to run.
Pinned toolchain · builds from source
$
git clone https://github.com/noxred-research/crawlx.git
cd crawlx
cargo build --release -p crawlx-cli
Summary of a run against the bundled local fixture. Private-network access needs an
authorization record.
Pre-1.0 source release. Production
qualification is in progress — do not expose a checkout as a public service.
01AI/LLM-native
Models propose. The kernel decides.
Language models and learned rankers help crawlx explore single-page applications. They
rank candidate actions; they never authorize one. Model confidence is not safety
confidence, and nothing in the model layer can approve an action.
LLM-guided planning
An optional planner proposes a short plan in a closed vocabulary: at most 20 steps,
candidate indexes and value references only — no selectors, no URLs. Page text
reaches a prompt only as tagged untrusted data, and the safety kernel still
adjudicates every step.
Typed-decision service and ONNX ranker
Calibrated probabilities over a crawler-built candidate list, from an external
typed-decision service or an optional ONNX ranker. A confidence gate abstains when
unsure; a circuit breaker stops a failing engine.
Accessibility-tree understanding
Dynamic apps are read through the accessibility tree, with versioned element
identity, reversible state clustering and a learned enablement graph.
LLM-ready output
Pages become Markdown with metadata and links. Opt-in word-window chunk ranges are
available on the scrape API for downstream LLM pipelines.
MCP server for agent tooling
crawlx mcp serves the Firecrawl MCP tools over stdio, as a thin client
of a crawlx API.
LLM extract and agent endpoints
The Firecrawl-compatible API at /compat/firecrawl/v2 serves
extract and agent, for tool interoperability. They need an
OpenAI-compatible backend you configure; without one the endpoint answers 503.
02Security research
Discover the attack surface of a dynamic app.
Most crawlers stop at HTTP, and most browser automation clicks anything. crawlx
observes what an application exposes, in read-only mode by default, and records what
it did.
Attack-surface discovery
A URL plane for documents and a pinned-Chromium browser plane for script-heavy apps,
in one run. Observe-only mode records states and accessibility-tree snapshots
without interacting.
Form and endpoint discovery
Form extraction, JavaScript endpoint mining (off|regex|ast|both),
sitemaps, feeds and known files, with seeded, reproducible form input.
Secret detection
--detect-secrets flags exposed credentials in crawled content. Secrets
are redacted from logs, traffic metadata and exports.
03Controls
Authorized use, enforced in code.
Defaults refuse. Capabilities widen only through an explicit, recorded grant, and a
kernel independent of the crawl logic enforces it.
Scope by host, registrable domain or domain, robots.txt per RFC 9309,
politeness limits per origin, and a deny-first egress policy that refuses loopback,
private, link-local and cloud-metadata addresses on every redirect hop and browser
request.
Hard safety kernel
Every fetch and browser action is classified. The default
read_only profile cannot change server state;
test_environment and authorized_security_test widen it
only with an authorization record.
Authorization records
Private-network access, elevated profiles and the robots override need an
operator-created record stating what you are authorized to do, with a create,
verify, revoke and offline-sign lifecycle.
Audit journal
Every action is journaled before it is performed and every safety verdict is
recorded. An independent auditor checks the record from outside the worker and
pauses violating runs.
Zero data retention
ZDR mode never creates a durable response cache. Payloads sit in a volatile buffer
with a fixed lifetime.
Encrypted custody of sensitive findings
Retained content and sensitive artifacts are sealed under per-artifact data keys,
wrapped by AWS KMS or an operator key file, and published only after a recheck
against the run-wide secret registry.
04Security research use only
Responsible use.
crawlx exists for authorized security research and testing. You are responsible for
how you use it.
Do
Test only systems you own or are explicitly authorized to test.
Write down the scope in an authorization record before a privileged run.
Keep the default profile and robots enforcement unless your authorization says
otherwise.
Report vulnerabilities you find to the owner, privately.
Do not
Crawl or scrape systems without authorization.
Use it for credential attacks or any form of abuse.
Point it at third-party infrastructure you do not control.
Run a checkout as a public service while it is pre-1.0.
05Architecture
Small crates, strict layers.
A 21-crate Rust workspace with enforced dependency layering. The model layer cannot
depend on the safety kernel, so it cannot authorize anything.
Interfaces
crawlx CLI
REST + SSE API
Firecrawl-compatible API
MCP over stdio
Guidance (advisory)
LLM planner
Typed-decision service
ONNX ranker
Safety kernel admits every fetch and every browser action
You need the pinned Rust toolchain. Dynamic and hybrid crawls also need the pinned
Chrome for Testing build; the helper script downloads it and verifies its SHA-256. Use
a target you are authorized to test.
Step 1 · Build
$
git clone https://github.com/noxred-research/crawlx.git
cd crawlx
cargo build --release -p crawlx-cli
The /compat/firecrawl/v2 facade accepts fc- keys, so
Firecrawl SDKs, its CLI, LangChain’s loader and MCP clients can drive a crawlx you
operate. The integration notes list base URLs per client and what does not work.
crawlx is licensed under the GNU Affero General Public License, version 3 only — not
“version 3 or later.” Third-party dependencies, vendored sources and embedded
resources keep their own licenses and notices.
Use GitHub private vulnerability reporting. Please do not open public issues for
suspected vulnerabilities, and do not include live credentials or real personal data
in a report.