Last updated

Project Settings Registry

Every configurable parameter of a RedAmon project, with what it means, what it accepts and whether an external agent may write it. GENERATED from recon_settings/registry.yaml; a test fails the build when this page and the registry disagree, so it cannot go stale.

There are 770 parameters. 702 are settable over the MCP surface at any time, 19 are fixed when a project is created, and 49 are not pipeline parameters at all. 14 of the settable ones are the engagement's LIMITS - a rate ceiling, an exclusion list, a time window, the agent's denylists - which the form and the MCP surface reach alike and which the pipeline enforces at scan start whatever tuning says.

For the narrative version with screenshots, see Project Settings Reference.

How to read this

  • Accepts is the ENFORCED bound, not a suggestion. A value outside it is refused by name rather than clamped, and one bad key refuses a whole batch.
  • Written vs resolved. Several values are corrected at scan start rather than refused: a rate above the engagement ceiling comes down to the ceiling, a container image outside the shipped set is pinned back to the default, and a wordlist path outside the project directory is dropped. Each is logged with a [guardrail] line.
  • Zero is not always the slowest value. Several rate fields treat 0 as UNLIMITED, which makes it the most aggressive setting available. Those say so.
  • Two levels. scanModules decides which PHASES run; a per-tool *Enabled flag decides which tools run inside a phase. Setting one without the other is a silent no-op. JS recon is the exception: it is no phase, jsReconEnabled alone switches it on, and it analyzes the JS files resource_enum and http_probe found, so it needs one of those. jsluice runs inside resource_enum.
  • One capability surface. Every settable field has an input in the project form and is writable through update_recon_settings; neither door reaches something the other cannot. The exception is the engagement RECORD, which is deliberately UI-only.

Contents


Agent

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
agentActivatePostExplPhasetrue / falsetruesettableWhether the post-exploitation phase is available to the agent at all. A Rules of Engagement document may only set it to false.
agentBindPortOnTarget1–65535 count—settableLeave empty if unsure (agent will ask) A Rules of Engagement document may never set this.
agentBruteForceMaxWordlistAttempts0–1000 count3settableThe attempt ceiling for one credential attack, which is what keeps it from running a whole wordlist against a live account.
agentBruteforceSpeed0–10 count5settableHow aggressively the agent's credential attacks run, which trades attempts per second against lockout risk.
agentChiselTunnelEnabledtrue / falsefalsesettableWhether the agent may stand up a chisel tunnel, which gives it network reach beyond its own container. A Rules of Engagement document may only set it to false.
agentCreateGraphImageOnInittrue / falsefalsesettableRenders a picture of the graph when a session starts, so the agent begins with a view of the estate.
agentCypherMaxRetries0–10 count3settableHow many times agent retries a failed request before giving up on it.
agentExecutionTraceMemorySteps1–10000 count100settablePast steps kept in context
agentExplSystemPromptfree_text(empty)settableInjected during the exploitation phase. Leave empty for default. A Rules of Engagement document may never set this.
agentGuardrailEnabledtrue / falsetruesettableThe agent's own scope guardrail, which refuses a tool call aimed outside the project's targets. A Rules of Engagement document may only set it to true.
agentInformationalSystemPromptfree_text(empty)settableInjected during the informational phase. Leave empty for default. A Rules of Engagement document may never set this.
agentKaliInstallAllowedPackagesfree_text(empty)settableComma-separated whitelist. If non-empty, ONLY these packages can be installed. A Rules of Engagement document may never set this.
agentKaliInstallEnabledtrue / falsefalsesettableWhether the agent may install additional packages inside its Kali sandbox. A Rules of Engagement document may only set it to false.
agentKaliInstallForbiddenPackagesfree_text(empty)settableComma-separated blacklist. These packages must NEVER be installed.
agentLatsBranching2–10 count6settablePart of the agent's LATS search configuration, which is how it explores several candidate actions before committing to one.
agentLatsEnabledtrue / falsefalsesettableWhether agent runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
agentLatsMaxDepth2–10 depth6settablePart of the agent's LATS search configuration, which is how it explores several candidate actions before committing to one.
agentLatsMaxRollouts4–300 count50settablePart of the agent's LATS search configuration, which is how it explores several candidate actions before committing to one.
agentLatsMaxTreeNodes10–1000 count120settablePart of the agent's LATS search configuration, which is how it explores several candidate actions before committing to one.
agentLatsMinHypotheses2–4 count2settablePart of the agent's LATS search configuration, which is how it explores several candidate actions before committing to one.
agentLatsPhaseExploitationtrue / falsetruesettableWhether the LATS search runs during the exploitation phase as well as reconnaissance.
agentLatsPhasePostExpltrue / falsefalsesettablePart of the agent's LATS search configuration, which is how it explores several candidate actions before committing to one.
agentLatsPruneFloor0–1 ratio0.15settablePart of the agent's LATS search configuration, which is how it explores several candidate actions before committing to one.
agentLatsShadowModetrue / falsefalsesettableRuns the LATS search without acting on its choices, so its behaviour can be observed before it is trusted.
agentLatsUctC0–10 ratio1.4settablePart of the agent's LATS search configuration, which is how it explores several candidate actions before committing to one.
agentLhostfree_text(empty)settableYour host machine's LAN IP that the target can reach (not the container's 172.x address). Leave empty for bind mode. A Rules of Engagement document may never set this.
agentLlmParseMaxRetries0–20 count3settableHow many times agent retries a failed request before giving up on it.
agentLogBackupCount0–100 count5settableRotated backups to keep
agentLogMaxMb1–1024 count10settableThe size at which the agent's log file rolls, in megabytes.
agentLport1–65535 port—settableLeave empty for bind mode A Rules of Engagement document may never set this.
agentMaxIterations1–1000 count100settableLLM reasoning iterations limit
agentNgrokTunnelEnabledtrue / falsefalsesettableWhether the agent may expose a local listener through ngrok, which makes it reachable from the public internet. A Rules of Engagement document may only set it to false.
agentOpenaiModelfree_textclaude-opus-4-6settableModel used by the agent. Configure providers in Global Settings. A Rules of Engagement document may never set this.
agentPayloadUseHttpstrue / falsefalsesettableWhether a generated payload calls back over HTTPS rather than plain HTTP. A Rules of Engagement document may never set this.
agentPlanMaxParallelTools1–50 count10settableConcurrent tools per plan wave (root + fireteam); extras queue
agentPostExplPhaseTypefree_textstatefullsettableStateful keeps Meterpreter/shell sessions between turns
agentPostExplSystemPromptfree_text(empty)settableInjected during the post-exploitation phase. Leave empty for default. A Rules of Engagement document may never set this.
agentRequireApprovalForExploitationtrue / falsetruesettableWhether the agent must be approved before it moves from reconnaissance into exploitation. A Rules of Engagement document may only set it to true.
agentRequireApprovalForPostExploitationtrue / falsetruesettableWhether the agent must be approved before it acts on a host it has already compromised. A Rules of Engagement document may only set it to true.
agentRequireToolConfirmationtrue / falsetruesettableWhether every agent tool call waits for a human to approve it. A Rules of Engagement document may only set it to true.
agentToolOutputMaxChars1000–100000 count40000settableTruncation limit for tool output
agentToolPhaseMapjson_object{"query_graph":["informational","exploitation","post_exploitation"],"proxy_brainsettablePer-project overrides for which engagement phase each agent tool belongs to. A Rules of Engagement document may never set this.
attackSkillConfigattack_skill_config{"builtIn":{"cve_exploit":true,"brute_force_credential_guess":false,"phishing_sosettablePer-project enable state of the attack skills: builtIn maps each built-in skill id to on or off, user maps the project owner's own uploaded skills by id. A user skill is on only when set to true (missing is off); at most 20 of the owner's skills may be on, ids the owner does not have are dropped, and a quarantined skill cannot be turned on. Rewritten across every project when a user deletes one of their own skills. A Rules of Engagement document may never set this.
triageReviewBudget0–1000 count150settableHow many findings one triage run may have its evidence reviewed by the configured model before it stops and ranks the rest on the rules alone. 0 means no review and needs no model. A run never reviews more than 1000, whatever is stored.

AI attack-surface recon

phase http_probe · active traffic at the target

FieldAcceptsDefaultMCPMeaning
aiSurfaceReconCacheEnabledtrue / falsetruesettableWhether AI attack-surface recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
aiSurfaceReconChatShapeProbeEnabledtrue / falsetruesettableWhether AI attack-surface recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
aiSurfaceReconEnabledtrue / falsetruesettableWhether AI attack-surface recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
aiSurfaceReconJuliusProbePackEnabledtrue / falsetruesettableWhether AI attack-surface recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
aiSurfaceReconLatencyBaselineEnabledtrue / falsetruesettableWhether AI attack-surface recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
aiSurfaceReconMaxWorkers1–500 threads5settableHow many AI attack-surface recon operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 2.
aiSurfaceReconMcpHandshakeEnabledtrue / falsetruesettableWhether AI attack-surface recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
aiSurfaceReconMcpListToolsEnabledtrue / falsetruesettableWhether AI attack-surface recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
aiSurfaceReconMcpYaraEnabledtrue / falsetruesettableWhether AI attack-surface recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
aiSurfaceReconModelListEnabledtrue / falsetruesettableWhether AI attack-surface recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
aiSurfaceReconOpenapiDiscoveryEnabledtrue / falsetruesettableWhether AI attack-surface recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
aiSurfaceReconProbePackVersionfree_textlatestsettablePinned probe-pack identifier recorded on every annotation (default "latest").
aiSurfaceReconTimeout1–86400 seconds10settableHow long AI attack-surface recon may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
aiSurfaceReconUserAgentfree_textRedAmon-AISurfaceRecon/1.0settableUser-Agent sent on every probe.
aiSurfaceReconVectorDbReadEnabledtrue / falsetruesettableWhether AI attack-surface recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.

AlienVault OTX

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
otxEnabledtrue / falsetruesettableWhether otx runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
otxWorkers1–20 threads5settableHow many otx operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.

Amass

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
amassActivetrue / falsefalsesettableAmass active probing mode In stealth mode this is forced to false.
amassBrutetrue / falsefalsesettableAmass DNS brute-force In stealth mode this is forced to false.
amassBruteWordlistsjson_object["default"]settableWordlists amass brute-forces with. Only the shipped list names are accepted.
amassDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestcaffix/amass:latestsettableThe container image spawned for amass. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
amassEnabledtrue / falsefalsesettableWhether amass runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
amassMaxResults1–50000 count50000settableMaximum subdomains taken from an amass run. In stealth mode this is lowered to at most 100; a quieter value is kept.
amassTimeout1–120 minutes10settableHow long amass may run, in MINUTES rather than seconds. The name reads like every other timeout in the model and the unit does not match it.

Arjun

phase resource_enum · active traffic at the target

FieldAcceptsDefaultMCPMeaning
arjunChunkSize10–5000 count500settableParameters tested per request batch. Lower = more requests, higher accuracy
arjunCustomHeadershttp_header(empty)settableAdd auth tokens or custom headers for authenticated parameter testing
arjunDisableRedirectstrue / falsefalsesettableDisable following redirects
arjunEnabledtrue / falsetruesettableWhether arjun runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
arjunMaxEndpoints1–50000 count50000settableThe most results arjun accumulates in one pass. The memory governor budgets it against available RAM, so the effective value can be below what is written here.
arjunMethodsfree_text["GET","POST"]settableHTTP methods: ["GET", "POST", "PUT", "DELETE", "PATCH"]
arjunPassivetrue / falsefalsesettablePassive mode (no requests) In stealth mode this is forced to true.
arjunRateLimit0–100000 rps0settableRequests per second arjun sends while probing for parameters. ZERO MEANS UNLIMITED, so 0 is the most aggressive value available and not the safest. Under an engagement ceiling a 0 here is rewritten to the ceiling at scan start. 0 means UNLIMITED here, so it is the fastest value and not the safest. Capped to the engagement rate ceiling at scan start.
arjunScanTimeout60–86400 seconds600settableHow long arjun may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
arjunStabletrue / falsefalsesettableStability mode (slower but more reliable)
arjunThreads1–20 threads2settableHow many arjun operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
arjunTimeout1–86400 seconds15settableHow long arjun may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.

BadDNS

phase vuln_scan · active traffic at the target

FieldAcceptsDefaultMCPMeaning
baddnsDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestredamon-baddns:latestsettableThe container image spawned for baddns. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
baddnsEnabledtrue / falsefalsesettableWhether baddns runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
baddnsModulesfree_text["cname","ns","mx","txt","spf"]settableSubset of BadDNS modules to run. Valid: cname, ns, mx, txt, spf, dmarc, wildcard, nsec, references, zonetransfer. (MTA-STS exists in baddns 2.1.0 but is not CLI-addressable due to an upstream validator regex bug -- omit.) Default: ["cname","ns","mx","txt","spf"]
baddnsNameserversfree_text(empty)settableOptional custom DNS resolvers (e.g. ["1.1.1.1","8.8.8.8"]). Empty = system resolvers. A Rules of Engagement document may never set this.
baddnsRunTimeout1–86400 seconds1800settableHow long baddns may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.

phase port_scan · active traffic at the target

FieldAcceptsDefaultMCPMeaning
bannerGrabEnabledtrue / falsetruesettableWhether Banner grab runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
bannerGrabMaxLength100–5000 bytes1000settableTruncate banners longer than this (chars)
bannerGrabThreads1–500 threads20settableHow many Banner grab operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
bannerGrabTimeout1–86400 seconds5settableHow long Banner grab may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.

Capture proxy

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
captureProxyEnabledtrue / falsefalsesettableWhether the HTTP capture proxy records the scan's traffic. Capture runs off the scan's critical path, so a capture failure never fails the scan.

Censys

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
censysEnabledtrue / falsefalsesettableWhether censys runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
censysWorkers1–20 threads5settableHow many censys operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.

CriminalIP

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
criminalIpEnabledtrue / falsefalsesettableWhether CriminalIP runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
criminalIpWorkers1–20 threads5settableHow many CriminalIP operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.

crt.sh

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
crtshEnabledtrue / falsetruesettableWhether crtsh runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
crtshMaxResults1–50000 count5000settableMaximum certificate-transparency records read from crt.sh in one pass. In stealth mode this is lowered to at most 100; a quieter value is kept.

CVE lookup

phase vuln_scan · passive traffic

FieldAcceptsDefaultMCPMeaning
cveLookupEnabledtrue / falsetruesettableWhether CVE lookup runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
cveLookupMaxCves1–100 count20settableMaximum CVEs attached to one service before enrichment stops adding more.
cveLookupMinCvss0–10 ratio0settableMinimum CVSS score (0-10)
cveLookupSourcefree_textnvdsettableWhich vulnerability database CVE enrichment queries.

CypherFix

standalone · sends no traffic

FieldAcceptsDefaultMCPMeaning
cypherfixBranchPrefixfree_textcypherfix/settablePrefix for fix branch names (e.g., cypherfix/rem-abc123). A Rules of Engagement document may never set this.
cypherfixDefaultBranchfree_textmainsettableBase branch for creating fix branches (default: main). A Rules of Engagement document may never set this.
cypherfixDefaultRepofree_text(empty)settableGitHub repository to fix (owner/repo format). Can be overridden per remediation. A Rules of Engagement document may never set this.
cypherfixGithubTokenfree_text(empty)closedPersonal access token with Withheld from every read on the MCP surface.
cypherfixLlmModelfree_text(empty)settableNo longer used. The Triage review and CodeFix models are chosen per user, for all of that user's projects, in Global Settings > LLM Providers > Models by feature. Kept only so older exports and presets still load. A Rules of Engagement document may never set this.
cypherfixRequireApprovaltrue / falsetruesettableWhether a CypherFix patch must be approved by a human before it is pushed.

Denial of service

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
dosAssessmentOnlytrue / falsefalsesettableOnly check for availability vulnerabilities (nmap scripts, nuclei) without active testing.
dosConcurrentConnections10–10000 threads1000settableHow many dos operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
dosMaxAttempts1–10 count3settableMax different vectors to try before reporting service is resilient.
dosMaxDuration10–300 seconds60settableThe longest one denial-of-service attempt may run, in seconds. It is only reachable at all when roeAllowDos permits the technique.

DNS

phase domain_discovery · active traffic at the target

FieldAcceptsDefaultMCPMeaning
dnsEnabledtrue / falsetruesettableWhether dns runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
dnsMaxRetries1–10 count3settableHow many times dns retries a failed request before giving up on it.
dnsMaxWorkers1–200 threads80settableHow many dns operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 5.
dnsRecordParallelismtrue / falsetruesettableHow many dns operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to false.

Domain recon AI hints

phase domain_discovery · sends no traffic

FieldAcceptsDefaultMCPMeaning
domainReconAiNsHintEnabledtrue / falsetruesettableWhether Domain recon AI hints runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
domainReconAiTxtHintEnabledtrue / falsetruesettableWhether Domain recon AI hints runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.

Engagement

standalone · sends no traffic

FieldAcceptsDefaultMCPMeaning
engagementIdentityHeaderhttp_header(empty)settableA header every request carries so the target's operators can attribute the traffic to this engagement, for example 'X-Bug-Bounty: your-handle'. Empty sends none. Many programs require one, and it is the difference between a scan that gets a question and one that gets a block. Validated like any other header: no CR or LF, and not Host, Authorization, Cookie or Proxy-*.
engagementKindinternal, third_partyinternalcreate-onlyWho the target belongs to, and therefore what has to be true before a scan may start. 'internal' is your own estate. 'third_party' is somebody else's, and such a project MUST carry a non-zero rate ceiling and an authorization record or start_recon refuses it. Set at creation and immutable afterwards: converting a project after the fact would either claim an authority nobody granted or drop a ceiling a human put there. Every project created before this field existed reads as 'internal', so an old project with no ceiling is flagged rather than blocked. Fixed at project creation; refused on an existing project.

ffuf

phase resource_enum · active traffic at the target

FieldAcceptsDefaultMCPMeaning
ffufAiExtensionstrue / falsefalsesettableWhen true, FFuf file extensions are picked per-target by AI from response headers (requires aiInPipeline=true). The static ffufExtensions list is ignored.
ffufAiUseJevtrue / falsefalsesettableEngine for the FFuf extension picker: false uses the LLM in aiPipelineModel, true uses TypeSafe AI Jev (model jev-1.13.0). Takes effect only when aiInPipeline is true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account; without one the hook uses its static fallback. Jev picks only from a fixed 40-extension catalog.
ffufAutoCalibratetrue / falsetruesettableLearns what a 'not found' response looks like on this target before filtering, which removes most soft-404 noise.
ffufCustomHeadershttp_header(empty)settableOne header per line. Sent with every request
ffufEnabledtrue / falsefalsesettableWhether ffuf runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
ffufExtensionsfree_text(empty)settableFile extensions to fuzz, e.g. [".php", ".asp"]
ffufFilterCodesstatus_codes(empty)settableHTTP status codes to filter out
ffufFilterSizefree_text(empty)settableFilter responses by size
ffufFollowRedirectstrue / falsefalsesettableFollows a redirect rather than recording it, which can turn one request into several.
ffufJevBasePathstrue / falsefalsesettablePicks the smart-fuzz base paths with TypeSafe AI Jev (model jev-1.13.0): false keeps the random pick that fills ffufSmartFuzzMaxBasePaths, true asks Jev, per discovered directory, whether it is likely to hold sensitive, administrative or application content, and FFuf fuzzes the directories Jev ranks highest. Takes effect only when aiInPipeline is true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account; without one the random pick is used. Jev only ranks the directories the crawl found, and the cap keeps the same number either way. Jev's pick is kept in the recon output next to the deterministic one.
ffufMatchCodesstatus_codes[200,201,204,301,302,307,308,401,403,405]settableHTTP status codes to match, e.g. [200, 301, 403]
ffufMaxTime60–86400 seconds1800settableMax total time in seconds
ffufParallelism1–50 threads20settableHow many ffuf operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
ffufRate0–100000 rps0settableRequests per second ffuf sends. ZERO MEANS UNLIMITED, so 0 is the most aggressive value available and not the safest, and it is also the shipped default. Under an engagement ceiling a 0 here is rewritten to the ceiling at scan start. 0 means UNLIMITED here, so it is the fastest value and not the safest. Capped to the engagement rate ceiling at scan start.
ffufRecursiontrue / falsefalsesettableFollows a discovered directory down into its own contents, which multiplies the request count.
ffufRecursionDepth1–5 depth2settableHow many directories deep recursion goes before it stops.
ffufSmartFuzztrue / falsetruesettablePicks extensions and wordlist entries from what the target has already revealed rather than fuzzing blind.
ffufSmartFuzzMaxBasePaths1–50 count20settableThe most crawler-discovered directory prefixes smart fuzz runs the whole wordlist under, on every target. Each one adds a full wordlist pass per target, so this multiplies the request count. When crawlers find more, a random sample of this size is fuzzed.
ffufThreads1–200 threads40settableHow many ffuf operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
ffufTimeout1–86400 seconds10settableHow long ffuf may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
ffufWordlistproject_file/usr/share/seclists/Discovery/Web-Content/common.txtsettablePath to wordlist file

Fireteam

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
fireteamAllowedPhasesfree_text["informational","exploitation","post_exploitation"]settableEngagement phases in which the fireteam may operate. A Rules of Engagement document may never set this.
fireteamConfirmationTimeoutSec0–86400 count600settableHow long a fireteam member waits for confirmation before giving up on a step.
fireteamEnabledtrue / falsetruesettableWhether the agent may split work across a fireteam of sub-agents.
fireteamMaxConcurrent1–8 count5settable1-8. Upper limit on members in-flight at once.
fireteamMaxMembers2–8 count5settable2-8. Hard cap on fireteam size the LLM can request.
fireteamMemberMaxIterations5–50 count10settable5-50. Each member's ReAct budget before it exits.
fireteamPropensity1–5 count3settableHow strongly the agent leans toward deploying a fireteam over single-agent or plan_tools. Injected into the system prompt as a directive the LLM must follow.
fireteamTimeoutSec60–7200 count7200settable60-7200. Hard wall-clock ceiling for the whole fireteam.

FOFA

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
fofaEnabledtrue / falsefalsesettableWhether fofa runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
fofaMaxResults1–10000 count1000settableThe most results fofa accumulates in one pass. The memory governor budgets it against available RAM, so the effective value can be below what is written here. An empty value is replaced by the default rather than honoured.
fofaWorkers1–20 threads5settableHow many fofa operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.

gau

phase resource_enum · passive traffic

FieldAcceptsDefaultMCPMeaning
gauBlacklistExtensionsfree_text["png","jpg","jpeg","gif","svg","ico","webp","avif","css","woff","woff2","ttf","settableFile extensions to skip, e.g. [".jpg", ".css"]
gauDetectMethodstrue / falsetruesettableDetect allowed HTTP methods
gauDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestsxcurity/gau:latestsettableThe container image spawned for gau. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
gauEnabledtrue / falsefalsesettableWhether gau runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to true.
gauFilterDeadEndpointstrue / falsetruesettableDrops archived URLs that no longer respond, so the result reflects the live surface.
gauMaxUrls1–100000 count50000settableThe most results gau accumulates in one pass. The memory governor budgets it against available RAM, so the effective value can be below what is written here.
gauMethodDetectRateLimit1–100000 rps50settableRequests per second the gau method-detection pass sends to the target. Active traffic despite gau's passive reputation, so the engagement ceiling caps it. Capped to the engagement rate ceiling at scan start. In stealth mode this is forced to 2.
gauMethodDetectThreads1–500 threads25settableHow many gau operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.
gauMethodDetectTimeout1–86400 seconds5settableHow long gau may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
gauProvidersfree_text["wayback","commoncrawl","otx","urlscan"]settableSources: "wayback", "commoncrawl", "otx", "urlscan"
gauThreads1–20 threads5settableHow many gau operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
gauTimeout10–86400 seconds60settableHow long gau may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
gauVerbosetrue / falsefalsesettableEmits per-URL progress, which is useful while debugging and noisy otherwise.
gauVerifyAcceptStatusstatus_codes[200,201,301,302,307,308,401,403]settableStatus codes that indicate a live URL. Include 401/403 for auth-protected endpoints
gauVerifyDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestprojectdiscovery/httpx:latestsettableThe container image spawned for gau. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
gauVerifyRateLimit1–100000 rps100settableRequests per second the gau verification pass sends. gau itself only reads public archives, but verification dials the target, so this is active traffic and the engagement ceiling caps it. Capped to the engagement rate ceiling at scan start. In stealth mode this is forced to 2.
gauVerifyThreads1–100 threads50settableHow many gau operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.
gauVerifyTimeout1–86400 seconds5settableHow long gau may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
gauVerifyUrlstrue / falsetruesettableVerify discovered URLs are alive
gauWorkers1–20 threads10settableHow many gau operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.
gauYearRangefree_text(empty)settableFilter Wayback Machine by year (e.g., 2020, 2024)

GitHub secret hunt

standalone · passive traffic

FieldAcceptsDefaultMCPMeaning
githubMaxCommits1–1000 count100settableThe most results github accumulates in one pass. The memory governor budgets it against available RAM, so the effective value can be below what is written here.
githubOutputJsontrue / falsetruesettableEmits machine-readable output alongside the human-readable report.
githubScanCommitstrue / falsetruesettableWalks commit history as well as the working tree, which is where most leaked secrets actually live.
githubScanGiststrue / falsetruesettableIncludes the organisation members' public gists in the hunt.
githubScanMemberstrue / falsefalsesettableIncludes the organisation members' own repositories in the hunt.
githubTargetOrggithub_name(empty)create-onlyThe GitHub organisation the secret hunt scans. It points a scanner at someone else's assets, so it is scope by another name: set when the project is created, and afterwards changed only by the project form or by update_project_scope under its own permission. Fixed at project creation; refused on an existing project.
githubTargetReposgithub_repo_list(empty)create-onlyComma-separated list. Leave empty to scan all repositories. Fixed at project creation; refused on an existing project.

GraphQL Cop

phase vuln_scan · active traffic at the target

FieldAcceptsDefaultMCPMeaning
graphqlCopDebugtrue / falsefalsesettable-d flag: adds X-GraphQL-Cop-Test header per request
graphqlCopDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestdolevf/graphql-cop:1.14settableThe container image spawned for GraphQL Cop. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
graphqlCopEnabledtrue / falsefalsesettableWhether GraphQL Cop runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
graphqlCopForceScantrue / falsefalsesettable-f flag: scan even if endpoint doesn't look GraphQL-like
graphqlCopTestAliasOverloadingtrue / falsetruesettableHIGH DoS, 101-alias rate-limit bypass (default true, disabled in stealth) In stealth mode this is forced to false.
graphqlCopTestBatchQuerytrue / falsetruesettableHIGH DoS, array-based batch queries (default true, disabled in stealth) In stealth mode this is forced to false.
graphqlCopTestCircularIntrospectiontrue / falsetruesettableHIGH DoS, deep nested introspection (default true, disabled in stealth) In stealth mode this is forced to false.
graphqlCopTestDirectiveOverloadingtrue / falsetruesettableHIGH DoS (default true, disabled in stealth) In stealth mode this is forced to false.
graphqlCopTestFieldSuggestionstrue / falsetruesettableLOW info-leak check (default true)
graphqlCopTestGetMethodtrue / falsetruesettableMEDIUM CSRF, GET-method queries allowed (default true)
graphqlCopTestGetMutationtrue / falsetruesettableMEDIUM CSRF, GET-based mutations (default true)
graphqlCopTestGraphiqltrue / falsetruesettableLOW info-leak, detects GraphiQL/Playground UI (default true)
graphqlCopTestIntrospectiontrue / falsefalsesettableHIGH info-leak check (default false, dedupes with native scanner)
graphqlCopTestPostCsrftrue / falsetruesettableMEDIUM CSRF, url-encoded POST (default true)
graphqlCopTestTraceModetrue / falsetruesettableINFO, Apollo tracing extension disclosure (default true)
graphqlCopTestUnhandledErrortrue / falsetruesettableINFO info-leak, exception stack traces (default true)
graphqlCopTimeout10–600 seconds120settableHow long GraphQL Cop may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.

GraphQL security

phase vuln_scan · active traffic at the target

FieldAcceptsDefaultMCPMeaning
graphqlAuthHeaderfree_text(empty)settableHeader name when graphqlAuthType = "custom" A Rules of Engagement document may never set this.
graphqlAuthTypefree_text(empty)settable"", "bearer", "basic", "cookie", "custom"
graphqlAuthValuefree_text(empty)settableAuth credential (token / user:pass / cookie string) A Rules of Engagement document may never set this. Withheld from every read on the MCP surface.
graphqlConcurrency1–20 threads5settableHow many graphql operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.
graphqlDepthLimit1–50 depth10settableMax introspection query nesting depth (default 10)
graphqlEndpointsfree_text(empty)settableComma-separated custom GraphQL endpoints (empty = auto-discover) A Rules of Engagement document may never set this.
graphqlIntrospectionTesttrue / falsetruesettableProbe __schema to detect exposed introspection (default true) In stealth mode this is forced to true.
graphqlRateLimit0–100 rps10settableRequests per second graphql sends. Capped to the engagement ceiling at scan start, so a value above the ceiling is rewritten rather than refused. Capped to the engagement rate ceiling at scan start. In stealth mode this is forced to 2.
graphqlRetryBackoff0–60 ratio2settableExponential backoff base seconds between retries (default 2.0)
graphqlRetryCount0–10 count3settableHow many times graphql retries a failed request before giving up on it.
graphqlSecurityEnabledtrue / falsefalsesettableWhether graphql runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to true.
graphqlTimeout1–600 seconds30settableHow long graphql may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan. In stealth mode this is forced to 60.
graphqlVerifySsltrue / falsetruesettableReject invalid / self-signed TLS certs (default true)

GVM vulnerability scan

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
gvmCleanupAfterScantrue / falsetruesettableRemoves the GVM task and its target after the scan, which keeps the appliance from accumulating state.
gvmPollInterval5–300 count30settableSeconds between scan status checks. Lower values give faster log updates.
gvmPortListfree_textAll TCP and Nmap top 100 UDPsettableWhich ports GVM probes on every target. The full IANA UDP range is the single biggest driver of scan time: closed UDP ports answer with silence and must each be timed out, and GVM reports no progress percentage until that finishes.
gvmScanConfigfree_textFull and fastsettableGVM scan configuration preset. “Full and fast” is recommended for most targets.
gvmScanTargetsboth, ips_only, hostnames_onlybothcreate-onlyWhich targets from recon data to scan: both, ips_only or hostnames_only. Both provides the most thorough coverage. An unknown value makes the GVM scan select nothing, so the value set is closed. Fixed at project creation; refused on an existing project.
gvmTaskTimeout0–86400 seconds14400settableHow long gvm may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.

HackerTarget

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
hackerTargetEnabledtrue / falsetruesettableWhether hackertarget runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
hackerTargetMaxResults1–50000 count5000settableMaximum subdomains taken from the HackerTarget API in one pass. In stealth mode this is lowered to at most 100; a quieter value is kept.

hakrawler

phase resource_enum · active traffic at the target

FieldAcceptsDefaultMCPMeaning
hakrawlerCustomHeadershttp_header(empty)settableOne header per line (e.g., Cookie: value). Sent with every request
hakrawlerDepth1–10 depth2settableHow many links deep to follow
hakrawlerDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestjauderho/hakrawler:latestsettableThe container image spawned for hakrawler. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
hakrawlerEnabledtrue / falsetruesettableWhether hakrawler runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
hakrawlerIncludeSubstrue / falsetruesettableFollows links onto subdomains of the target rather than staying on one host.
hakrawlerInsecuretrue / falsetruesettableSkip TLS verification
hakrawlerJevSeedOrdertrue / falsefalsesettableOrders Hakrawler's seed URLs with TypeSafe AI Jev (model jev-1.13.0): false keeps the alphabetical order, true asks Jev, per probed host, whether it is likely to have a rich web application surface, and Hakrawler crawls the promising hosts first, so under hakrawlerMaxUrls they are reached before the cap. Takes effect only when aiInPipeline is true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account; without one the alphabetical order is used. Ordering only: every seed stays in the list, and partial recon keeps the alphabetical order. Jev's order is kept in the recon output next to the alphabetical one.
hakrawlerMaxUrls1–100000 count50000settableThe most results hakrawler accumulates in one pass. The memory governor budgets it against available RAM, so the effective value can be below what is written here.
hakrawlerParallelism1–10 threads5settableHow many hakrawler operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
hakrawlerThreads1–20 threads5settableHow many hakrawler operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. Capped to the engagement rate ceiling at scan start.
hakrawlerTimeout5–86400 seconds30settableHow long hakrawler may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.

HTTP probe AI hints

phase http_probe · sends no traffic

FieldAcceptsDefaultMCPMeaning
httpProbeAiFaviconHashEnabledtrue / falsetruesettableWhether HTTP probe AI hints runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
httpProbeAiHeaderScanEnabledtrue / falsetruesettableWhether HTTP probe AI hints runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
httpProbeAiTitleDetectionEnabledtrue / falsetruesettableWhether HTTP probe AI hints runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
httpProbeAiWappalyzerEnabledtrue / falsetruesettableWhether HTTP probe AI hints runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
httpxJevPageTypetrue / falsefalsesettableLabels each probed URL with TypeSafe AI Jev (model jev-1.13.0): false labels nothing, true asks Jev whether a page is a login wall, a parked domain, a default install page, a placeholder or an error page, and calls it an app otherwise. A deterministic pre-filter supplies the label for any page Jev gives no answer for. Takes effect only when aiInPipeline is true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account; without one only the pre-filter labels. The label is written onto the page's Endpoint in the graph (page_class) and changes nothing about what is scanned. No traffic to the target: at most 300 distinct pages per scan, within 60 seconds.

httpx

phase http_probe · active traffic at the target

FieldAcceptsDefaultMCPMeaning
httpxCustomHeadershttp_header["User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTMsettableExtra headers sent with every httpx request. Validated: a header may not contain CR or LF, and Host, Authorization, Cookie and Proxy-* are refused, because each would change where the request goes or what it carries rather than annotating it.
httpxDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestprojectdiscovery/httpx:latestsettableThe container image spawned for httpx. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
httpxEnabledtrue / falsetruesettableWhether httpx runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
httpxFilterCodesstatus_codes(empty)settableHide responses with these status codes
httpxFollowRedirectstrue / falsetruesettableFollows a redirect to its destination rather than recording the redirect itself.
httpxIncludeResponsetrue / falsetruesettableStore full response body
httpxIncludeResponseHeaderstrue / falsetruesettableRecords the full response headers, which later checks read and which make the output much larger.
httpxMatchCodesstatus_codes(empty)settableOnly show responses with these status codes
httpxMaxRedirects1–50 count10settableMaximum redirect chain depth to prevent loops
httpxPathsfree_text(empty)settableAdditional URL paths to probe
httpxProbeAsntrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeCdntrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeCnametrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeContentLengthtrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeContentTypetrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeFavicontrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is. In stealth mode this is forced to false.
httpxProbeHashfree_textsha256settableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeIptrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeJarmtrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is. In stealth mode this is forced to false.
httpxProbeLineCounttrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeResponseTimetrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeServertrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeStatusCodetrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeTechDetecttrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeTitletrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeTlsGrabtrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeTlsInfotrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxProbeWordCounttrue / falsetruesettableWhether httpx records this attribute while probing. Each probe adds work per host, and several add requests beyond the first, so the set of probes decides both how much the scan learns and how loud it is.
httpxRateLimit1–100000 rps50settableRequests per second httpx sends while probing. Capped by the engagement ceiling at scan start. Capped to the engagement rate ceiling at scan start. In stealth mode this is forced to 2.
httpxRetries0–10 count2settableHow many times httpx retries a failed request before giving up on it.
httpxThreads1–200 threads50settableHow many httpx operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.
httpxTimeout1–86400 seconds10settableHow long httpx may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.

Hydra

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
hydraConnectionTimeout5–120 seconds32settableHow long hydra may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
hydraEnabledtrue / falsetruesettableWhether hydra runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
hydraExtraChecksfree_textnsrsettableAdditional protocol-specific checks run alongside the credential attempts.
hydraMaxWordlistAttempts1–10 count3settableHow many wordlist strategies to try before giving up.
hydraStopOnFirstFoundtrue / falsetruesettableStop immediately when valid credentials are found.
hydraThreads1–64 threads16settableHow many hydra operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
hydraVerbosetrue / falsetruesettableShow each login attempt in output for progress tracking.
hydraWaitBetweenConnections0–300 threads0settableHow many hydra operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.

Insecure deserialization

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
deserializationExecGadgetsEnabledtrue / falsefalsesettableWhether the Insecure Deserialization skill may escalate a confirmed sink to one code-execution gadget (Step 7). Off by default. Its proof travels over the out-of-band callback, so it also needs the OOB callback on; without it the Step 7 block is left out of the prompt and the agent stops at the confirmed sink.
deserializationFindSinksEnabledtrue / falsetruesettableWhether the Insecure Deserialization skill may sweep the target's inputs for sinks recon never flagged. When off, the agent only confirms the candidates the serialized-object scan wrote to the graph.
deserializationOobCallbackEnabledtrue / falsetruesettableWhether the Insecure Deserialization skill may confirm a sink with the out-of-band interactsh oracle, which makes the target look up a domain registered on the OOB provider. When off, the setup block is left out of the prompt and the agent confirms through the error and timing channels only, never through external callback infrastructure.
deserializationOobProviderhostnameoast.funsettableinteractsh server the deserialization oracle registers its callback domain on. Use a self-hosted instance if oast.fun is blocked or a third-party callback service is not allowed. Empty means oast.fun. Only used when the OOB callback is on. A Rules of Engagement document may never set this.
deserializationPharEnabledtrue / falsefalsesettableWhether the Insecure Deserialization skill may use PHP PHAR polyglots, which means uploading a crafted file to the target. Off by default. Only used when php is among the runtimes.
deserializationRuntimesfree_textjava,java_typed,python,php,node,ruby,dotnetsettableComma-separated runtimes whose oracle blocks ship in the Insecure Deserialization prompt: java, java_typed, python, php, node, ruby, dotnet. Unknown names are ignored; an empty list ships every runtime.
deserializationTimingEnabledtrue / falsetruesettableWhether the Insecure Deserialization skill may confirm a sink through response timing, which holds a request open on the target until a delay or timeout ends. Turn it off on fragile targets or when the rules of engagement forbid anything that ties up a server worker.

IP attribution

phase http_probe · active traffic at the target

FieldAcceptsDefaultMCPMeaning
ipAttributionEnabledtrue / falsetruesettableWhether IP attribution runs. After the HTTP probe it tags every IP of the run shared_edge (a CDN edge serving many tenants), dedicated (the certificate it presents without SNI covers a target domain) or unknown, never "not ours". Vhost/SNI skips its wordlist on a shared edge, origin discovery never reports one as an origin, Shodan and Netlas write no CVE on one, and the Priority Board caps the reach of findings on one. Off, IPs keep no tag and those consumers fall back to their own CDN checks.
ipAttributionTlsMaxProbes0–5000 count500settableThe most TLS handshakes without SNI IP attribution makes in one run, one per IP where port 443 was found open, to read the certificate the IP falls back to. 0 means no handshake at all: the tag then uses only the CDN signals the run already holds. The handshakes skip RoE-excluded hosts and are paced at the engagement rate ceiling, and stealth mode sets this to 0. In stealth mode this is forced to 0.

JS recon

phase js_recon · active traffic at the target

FieldAcceptsDefaultMCPMeaning
jsReconAiSdkDetectionEnabledtrue / falsetruesettableWhether JS recon looks for AI SDKs in the JS it analyzes: LLM and vector database SDK imports, hard-coded provider keys, browser-mode opt-ins and AI front-end markers. Sends no extra traffic. Does nothing while jsReconEnabled is off.
jsReconConcurrency1–30 threads10settableHow many JS recon operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
jsReconCustomEndpointKeywordsfree_text(empty)closedThe uploaded custom endpoint-keyword list. Written only by the custom-files endpoint. Written only by /api/js-recon/[projectId]/custom-files.
jsReconCustomFrameworksfree_text(empty)closedThe uploaded custom framework-signature list. Written only by the custom-files endpoint. Written only by /api/js-recon/[projectId]/custom-files.
jsReconCustomPackagesfree_text(empty)closedThe uploaded custom package list. Written only by the custom-files endpoint. Written only by /api/js-recon/[projectId]/custom-files.
jsReconCustomPatternsfree_text(empty)closedThe uploaded custom secret-pattern file. Written only by the custom-files endpoint, which also places it on disk. Written only by /api/js-recon/[projectId]/custom-files.
jsReconCustomSourcemapPathsfree_text(empty)closedThe uploaded custom source-map path list. Written only by the custom-files endpoint. Written only by /api/js-recon/[projectId]/custom-files.
jsReconDependencyChecktrue / falsetruesettableChecks the packages a bundle names against known-vulnerable versions.
jsReconDevCommentstrue / falsetruesettableExtract developer comments
jsReconDomSinkstrue / falsetruesettableDetect DOM XSS sinks
jsReconEnabledtrue / falsefalsesettableWhether JS recon runs. This flag alone switches it on: JS recon is not a scanModules phase. It runs after resource enumeration and analyzes the JS files the crawlers and HTTP probing found (and any uploaded files), so with neither resource_enum nor http_probe in scanModules it has nothing to read.
jsReconEndpointAcceptStatusstatus_codes[200,201,204,301,302,307,308,401,403,405]settableHTTP status codes treated as live during endpoint verification An empty value is replaced by the default rather than honoured.
jsReconEndpointConcurrency1–20 threads10settableHow many JS recon operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
jsReconEndpointCustomHeadershttp_header(empty)settableHeader lines used when verifying extracted endpoints
jsReconExtractEndpointstrue / falsetruesettableExtracts API endpoints referenced in JavaScript, which is the main reason to read it at all.
jsReconFrameworkDetecttrue / falsetruesettableIdentifies the framework a bundle was built with, which decides which later checks apply.
jsReconIncludeArchivedJstrue / falsetruesettableIncludes JavaScript recovered from web archives, which can reveal endpoints the live site no longer exposes.
jsReconIncludeChunkstrue / falsetruesettableIncludes lazily-loaded chunks, which multiplies the file count on a modern bundler's output. In stealth mode this is forced to false.
jsReconIncludeFrameworkJstrue / falsetruesettableIncludes framework bundles, which are large, mostly third-party, and occasionally where a key is embedded. In stealth mode this is forced to false.
jsReconMaxFiles10–10000 count10000settableThe most JS files JS recon downloads and analyzes in one run, shared round-robin between hosts; files over the cap are recorded as a coverage gap. The memory governor budgets it against available RAM, so the effective value can be below what is written here. In stealth mode this is forced to 50.
jsReconMinConfidencefree_textlowsettable"low", "medium", "high"
jsReconRegexPatternstrue / falsetruesettableAdditional regular expressions applied to retrieved JavaScript, on top of the shipped set.
jsReconSourceMapstrue / falsetruesettableRetrieves source maps when they are published, which recovers the original source rather than the bundle.
jsReconStandaloneCrawlDepth0–50 depth3settableHow many links deep a standalone JS recon run crawls from its seed.
jsReconStandaloneCrawlScopefree_textsubdomainsettableHow far a standalone JS recon run may crawl from its seed: same host, same domain, or anywhere.
jsReconTimeout60–86400 seconds900settableHow long JS recon may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
jsReconTrufflehogEnabledtrue / falsetruesettableRuns TruffleHog over local copies of the JavaScript JS recon analyses, in an isolated container, and merges its findings with JS recon's: one finding per key. With key validation on, TruffleHog also checks the keys it finds with their providers (never a host named in the JavaScript); with it off the container has no network.
jsReconTrufflehogResultsverified, unknown, unverified["verified","unknown","unverified"]settableWhich keys found only by TruffleHog are kept when key validation is on: verified (the provider accepted it), unknown (the check errored) and unverified (not shown live, or not checkable). A key JS recon also found is always kept. Ignored when key validation is off; empty means all three. An empty value is replaced by the default rather than honoured.
jsReconUploadedFilesfree_text(empty)closedJavaScript files uploaded for analysis rather than fetched from the target. Written only by the upload endpoint, which also places each file on disk. Written only by /api/js-recon/[projectId]/upload.
jsReconValidateEndpointstrue / falsefalsesettableProbe extracted endpoints and drop confirmed-dead ones before graph ingestion (default off)
jsReconValidateKeystrue / falsetruesettableValidate discovered API keys by sending each one to its provider (and, with TruffleHog on, letting TruffleHog check the keys it finds the same way): a live key is confirmed, but every key found is used against a third-party service. A Rules of Engagement document can only turn it off. A Rules of Engagement document may only set it to false. In stealth mode this is forced to false.
jsReconValidationTimeout1–30 seconds5settableHow long JS recon may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.

jsluice

phase js_recon · active traffic at the target

FieldAcceptsDefaultMCPMeaning
jsluiceConcurrency1–20 threads5settableHow many jsluice operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
jsluiceEnabledtrue / falsetruesettableWhether jsluice runs. It runs inside resource enumeration, on the JS files the crawlers found, so it is a silent no-op unless resource_enum is in scanModules.
jsluiceExcludePatternsfree_text["/_next/image","/_next/static","/_next/data","/__nextjs","/_nuxt/","/__nuxt","/settableDeny-list patterns. Extensions like ".js" match the path suffix only; everything else is a substring match against the URL path and query. An empty value is replaced by the default rather than honoured.
jsluiceExtractSecretstrue / falsetruesettableWhether jsluice reports secret-shaped strings it finds in JavaScript. A feature toggle, not a credential: it decides what the tool looks for, and any secret found belongs to the target.
jsluiceExtractUrlstrue / falsetruesettableExtracts URLs jsluice finds in JavaScript.
jsluiceMaxFiles1–10000 count10000settableThe most results jsluice accumulates in one pass. The memory governor budgets it against available RAM, so the effective value can be below what is written here. In stealth mode this is forced to 20.
jsluiceParallelism1–10 threads5settableHow many jsluice operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.
jsluiceTimeout30–86400 seconds300settableHow long jsluice may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
jsluiceVerifyAcceptStatusstatus_codes[200,201,301,302,307,308,401,403]settableHTTP status codes treated as "live" by the verifier An empty value is replaced by the default rather than honoured.
jsluiceVerifyDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestprojectdiscovery/httpx:latestsettableThe container image spawned for jsluice. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
jsluiceVerifyRateLimit1–1000 rps50settableRequests per second jsluice sends. Capped to the engagement ceiling at scan start, so a value above the ceiling is rewritten rather than refused. Capped to the engagement rate ceiling at scan start.
jsluiceVerifyThreads1–500 threads50settableHow many jsluice operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
jsluiceVerifyTimeout1–60 seconds5settableHow long jsluice may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
jsluiceVerifyUrlstrue / falsetruesettableAfter extraction, run extracted URLs through httpx and a deny-list filter so only live, non-asset URLs reach the graph. Disable to keep all extracted URLs (legacy behavior).

Katana

phase resource_enum · active traffic at the target

FieldAcceptsDefaultMCPMeaning
katanaConcurrency1–50 threads15settableHow many katana operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.
katanaCustomHeadershttp_header["User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTMsettableCustom HTTP headers for crawler
katanaDepth1–10 depth2settableHow many links deep the crawl goes from each seed URL. In stealth mode this is forced to 1.
katanaDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestprojectdiscovery/katana:latestsettableThe container image spawned for katana. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
katanaEnabledtrue / falsetruesettableWhether katana runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
katanaExcludePatternsfree_text["/_next/image","/_next/static","/_next/data","/__nextjs","/_nuxt/","/__nuxt","/settableRegex patterns to exclude from crawling
katanaJsCrawltrue / falsetruesettableRenders JavaScript with a headless browser, which finds routes a static crawl cannot and costs far more per page. In stealth mode this is forced to false.
katanaMaxUrls1–1000000 count300000settableThe crawl stops after this many URLs, which is what bounds a crawl on a large site. In stealth mode this is forced to 50.
katanaParallelism1–50 threads8settableHow many katana operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.
katanaParamsOnlytrue / falsefalsesettableOnly extract parameterized URLs
katanaRateLimit1–100000 rps50settableRequests per second katana sends. Capped to the engagement ceiling at scan start, so a value above the ceiling is rewritten rather than refused. Capped to the engagement rate ceiling at scan start. In stealth mode this is forced to 2.
katanaScopefree_textdnsettableScope filter: "dn" (domain), "rdn" (root domain), etc. A Rules of Engagement document may never set this.
katanaTimeout60–86400 seconds3600settableHow long katana may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.

Kiterunner

phase resource_enum · active traffic at the target

FieldAcceptsDefaultMCPMeaning
kiterunnerBruteforceMethodsfree_text["POST","PUT","DELETE","PATCH"]settable["GET", "POST", "PUT", "DELETE", "PATCH"]
kiterunnerConnections1–500 threads100settableHow many kiterunner operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
kiterunnerDetectMethodstrue / falsetruesettableEstablishes which HTTP methods each discovered route accepts, at the cost of extra requests per route.
kiterunnerEnabledtrue / falsefalsesettableWhether kiterunner runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
kiterunnerHeadershttp_header(empty)settableAdd auth tokens for authenticated API scanning
kiterunnerIgnoreStatusfree_text(empty)settableBlacklist: filter out noise from common errors
kiterunnerMatchStatusfree_text[200,201,204,301,302,401,403,405]settableWhitelist: only show endpoints with these status codes (includes auth-protected)
kiterunnerMethodDetectionModefree_textbruteforcesettableHow kiterunner establishes which HTTP methods a discovered route accepts.
kiterunnerMethodDetectRateLimit1–100000 rps50settableRequests per second the kiterunner method-detection pass sends. Capped by the engagement ceiling at scan start. Capped to the engagement rate ceiling at scan start.
kiterunnerMethodDetectThreads1–500 threads25settableHow many kiterunner operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
kiterunnerMethodDetectTimeout1–86400 seconds5settableHow long kiterunner may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
kiterunnerMinContentLength0–100000 count0settableIgnore responses smaller than this (bytes)
kiterunnerParallelism1–5 threads3settableHow many kiterunner operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
kiterunnerRateLimit1–100000 rps100settableRequests per second kiterunner sends. Capped to the engagement ceiling at scan start, so a value above the ceiling is rewritten rather than refused. Capped to the engagement rate ceiling at scan start.
kiterunnerScanTimeout60–86400 seconds1000settableHow long kiterunner may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
kiterunnerThreads1–500 threads50settableHow many kiterunner operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
kiterunnerTimeout1–86400 seconds10settableHow long kiterunner may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
kiterunnerWordlistsfree_text["routes-large"]settableWordlists: "routes-small", "routes-large"

knockpy

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
knockpyReconEnabledtrue / falsetruesettableWhether knockpy runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
knockpyReconMaxResults1–50000 count5000settableMaximum subdomains taken from a knockpy run. In stealth mode this is lowered to at most 100; a quieter value is kept.

masscan

phase port_scan · active traffic at the target

FieldAcceptsDefaultMCPMeaning
masscanAiPortCatalogEnabledtrue / falsetruesettableWhether masscan runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
masscanBannerstrue / falsefalsesettableWhether masscan grabs a service banner as well as recording the open port, which turns a SYN scan into a connecting one.
masscanCustomPortsfree_text(empty)settableOverrides Top Ports if set. Use ranges: 8080-8090
masscanEnabledtrue / falsefalsesettableWhether masscan runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
masscanExcludeTargetsfree_text(empty)settableComma-separated targets to exclude
masscanRate1–100000 rps1000settablePackets per second masscan sends. Masscan is the fastest port scanner here and the one most likely to be noticed; the engagement ceiling caps it at scan start. Capped to the engagement rate ceiling at scan start.
masscanRetries0–10 count1settableHow many times masscan retries a failed request before giving up on it.
masscanTopPortsfree_text1000settableUse “100”, “1000”, or “full” for all 65535 ports
masscanWait0–86400 seconds10settableWait time in seconds

MITRE ATT&CK enrichment

phase vuln_scan · sends no traffic

FieldAcceptsDefaultMCPMeaning
mitreAutoUpdateDbtrue / falsetruesettableWhether the MITRE dataset is refreshed before enrichment runs.
mitreCacheTtlHours1–168 count24settablePart of MITRE ATT&CK enrichment, which annotates findings with the technique they correspond to. Enrichment reads existing findings and sends no traffic.
mitreEnabledtrue / falsetruesettableWhether mitre runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
mitreEnrichGvmtrue / falsetruesettableAttaches MITRE ATT&CK technique references to GVM findings.
mitreEnrichRecontrue / falsetruesettableAttaches MITRE ATT&CK technique references to recon findings.
mitreIncludeCapectrue / falsetruesettableIncludes the CAPEC attack-pattern reference alongside each technique.
mitreIncludeCwetrue / falsetruesettableIncludes the CWE weakness reference alongside each technique.

naabu

phase port_scan · active traffic at the target

FieldAcceptsDefaultMCPMeaning
naabuCustomPortsfree_text(empty)settableCustom port list, e.g. "80,443,8080"
naabuDisplayCdntrue / falsetruesettableReports CDN-fronted hosts rather than dropping them silently, so the operator can see what was skipped.
naabuDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestprojectdiscovery/naabu:latestsettableThe container image spawned for naabu. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
naabuEnabledtrue / falsetruesettableWhether naabu runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
naabuExcludeCdntrue / falsefalsesettableSkips hosts that resolve to a CDN, where a port result describes the CDN rather than the target.
naabuPassiveModetrue / falsefalsesettableUse Shodan InternetDB instead of active scan In stealth mode this is forced to true.
naabuRateLimit1–100000 rps1000settablePackets per second naabu sends, across all hosts combined. The engagement ceiling caps it at scan start, so a value above the ceiling is rewritten rather than refused. Capped to the engagement rate ceiling at scan start. In stealth mode this is forced to 10.
naabuRetries0–10 count1settableHow many times naabu retries a failed request before giving up on it.
naabuScanTypefree_textssettable"s" (SYN) or "c" (connect) In stealth mode this is forced to "c".
naabuSkipHostDiscoverytrue / falsetruesettableSkips the ping sweep and scans every listed host directly, which is slower but finds hosts that do not answer ICMP. In stealth mode this is forced to true.
naabuThreads1–100 threads25settableHow many naabu operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.
naabuTimeout1000–3600000 milliseconds10000settableHow long naabu waits for a port to answer, in MILLISECONDS. At the default of 10000 a full sweep of an unresponsive host is slow; below about 1000 a distant host starts reading as closed.
naabuTopPortsfree_text1000settableTop N ports, e.g. "1000"
naabuVerifyPortstrue / falsetruesettableRe-probes each discovered port before reporting it, which removes the false positives a fast SYN scan produces.

Netlas

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
netlasEnabledtrue / falsefalsesettableWhether netlas runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
netlasWorkers1–20 threads5settableHow many netlas operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.

Nmap

phase port_scan · active traffic at the target

FieldAcceptsDefaultMCPMeaning
nmapAiVersionRegexEnabledtrue / falsetruesettableWhether nmap runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
nmapEnabledtrue / falsetruesettableWhether nmap runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
nmapHostTimeout30–86400 seconds300settableHow long nmap may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
nmapParallelism1–10 threads5settableHow many nmap operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.
nmapScriptScantrue / falsetruesettableRun NSE vuln scripts In stealth mode this is forced to false.
nmapTimeout60–86400 seconds600settableHow long nmap may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
nmapTimingTemplatefree_textT3settableNmap's timing template, T0 to T5. Higher is faster and noisier; the stealth pass forces T2. Not a wordlist despite once being classified with them. In stealth mode this is forced to "T2".
nmapVersionDetectiontrue / falsetruesettableDetect service versions

Nuclei

phase vuln_scan · active traffic at the target

FieldAcceptsDefaultMCPMeaning
nucleiAiResponseFiltertrue / falsefalsesettableUse AI to classify Nuclei response bodies as WAF/rate-limit block pages when the static keyword list misses (requires aiInPipeline=true). Augments is_false_positive(); kicks in only on suspicious status codes (403/406/418/429/503) so cost stays bounded. Default false.
nucleiAiTagstrue / falsefalsesettableUse AI to prune the Nuclei tag list based on detected tech stack (requires aiInPipeline=true). Replaces the static nucleiTags list with a tech-aware subset chosen by the LLM at scan time. Default false.
nucleiAutoUpdateTemplatestrue / falsetruesettableWhether nuclei refreshes its template set before scanning. It fetches from the public template repository, so it is an egress decision as well as a freshness one.
nucleiBulkSize1–500 threads25settableNumber of hosts to process in parallel In stealth mode this is forced to 5.
nucleiConcurrency1–500 threads25settableHow many nuclei operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 2.
nucleiCustomTemplatesproject_file(empty)settableCustom template paths
nucleiDastModetrue / falsefalsesettableDynamic testing mode In stealth mode this is forced to false.
nucleiDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestprojectdiscovery/nuclei:latestsettableThe container image spawned for nuclei. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
nucleiEnabledtrue / falsetruesettableWhether nuclei runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
nucleiExcludeTagsfree_text["dos","fuzz"]settableTemplate tags to exclude, e.g. ["dos", "fuzz"]
nucleiExcludeTemplatesfree_text(empty)settableTemplate paths to exclude
nucleiFollowRedirectstrue / falsetruesettableFollows a redirect while running a template rather than matching on the redirect itself. A template that expects its payload to land on the final page needs this; one matching a redirect header does not.
nucleiHeadlesstrue / falsefalsesettableBrowser-based testing In stealth mode this is forced to false.
nucleiInteractshtrue / falsetruesettableOut-of-band interaction detection In stealth mode this is forced to false.
nucleiMaxHostError1–10000 count30settableHow many errors nuclei tolerates from one host before it stops probing that host (nuclei's -mhe), so one dead host in a large target list cannot soak the whole pass in timeouts.
nucleiMaxRedirects0–50 count10settableMaximum redirect chain to follow
nucleiMaxRuntime600–604800 seconds86400settableWall-clock ceiling for a single nuclei pass, in seconds (default 24h). A pass that reaches it is stopped, its partial findings are kept, and the run is recorded as truncated. Not a rate and has no unlimited value; raise it (up to 7 days) rather than disabling it.
nucleiNewTemplatesOnlytrue / falsefalsesettableRestricts the run to templates added since the last template update, for a fast re-check.
nucleiRateLimit1–100000 rps100settableRequests per second nuclei sends, across all templates and all targets combined rather than per template. Capped by the engagement ceiling at scan start. Capped to the engagement rate ceiling at scan start. In stealth mode this is forced to 5.
nucleiRetries0–10 count1settableHow many times nuclei retries a failed request before giving up on it.
nucleiScanAllIpstrue / falsefalsesettableScans every IP a host resolves to rather than the first, which matters behind round-robin DNS.
nucleiSelectedCustomTemplatesproject_file_name(empty)settableWhich of this project's uploaded custom templates to run. Each entry is a path a scan container opens, so it is validated against the project's own upload directory.
nucleiSeverityinfo, low, medium, high, critical, unknown["critical","high","medium","low"]settableSeverity filter: "critical", "high", "medium", "low"
nucleiSystemResolverstrue / falsetruesettableUses the container's own DNS resolvers rather than nuclei's defaults.
nucleiTagsfree_text["cve","xss","sqli","rce","lfi","ssrf","xxe","ssti"]settableTemplate tags to include
nucleiTagsAiUseJevtrue / falsefalsesettableEngine for the Nuclei tag selector: false uses the LLM in aiPipelineModel, true uses TypeSafe AI Jev (model jev-1.13.0). Takes effect only when aiInPipeline is true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account; without one the hook uses its static fallback.
nucleiTakeoverRunTimeout1–86400 seconds1800settableHow long nuclei may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
nucleiTakeoversEnabledtrue / falsetruesettableWhether nuclei runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
nucleiTemplatesfree_text(empty)settableSpecific template paths to include
nucleiTimeout1–86400 seconds10settablePer-request timeout, in seconds: how long nuclei waits for one template's HTTP request (nuclei's -timeout), NOT a cap on the whole run. The wall-clock ceiling for a pass is nucleiMaxRuntime.

OpenAPI ingestion

phase resource_enum · active traffic at the target

FieldAcceptsDefaultMCPMeaning
openapiAutoDiscovertrue / falsefalsesettableDiscover specifications from crawl results and configured paths on known in-scope base URLs. Opt-in and disabled in stealth mode. In stealth mode this is forced to false.
openapiDiscoveryPathsurl_path_list["/openapi.json","/openapi.yaml","/swagger.json","/swagger.yaml","/v3/api-docs",settablePaths probed for OpenAPI documents on every in-scope origin during auto-discovery: at most 200, each starting with /, without whitespace, a query or a fragment. A path that breaks those rules is refused at the write and skipped at scan time without dropping the others. Empty disables common-path probes. A Rules of Engagement document may never set this. In stealth mode this is forced to [].
openapiEnabledtrue / falsetruesettableWhether to import declared API operations from OpenAPI documents. Fetches specifications but never calls declared operations. In stealth mode this is forced to false.
openapiMaxDocuments1–200 count50settableMaximum number of specification documents attempted per target run. In stealth mode this is lowered to at most 1; a quieter value is kept.
openapiSourcesjson_object[]closedProject-specific specification sources. URLs may contain credentials; excluded from MCP reads and writes and reusable presets. Withheld from every read on the MCP surface. In stealth mode this is forced to [].
openapiTimeout1–60 seconds10settablePer-request timeout in seconds when fetching a specification or same-origin reference. In stealth mode this is lowered to at most 10; a quieter value is kept.

Origin discovery

phase http_probe · active traffic at the target

FieldAcceptsDefaultMCPMeaning
originDiscoveryEnabledtrue / falsefalsesettableWhether Origin discovery runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
originDiscoveryKeylesstrue / falsetruesettableNon-CDN subdomains + SPF/MX + crt.sh (no key needed)
originDiscoveryMaxCandidates1–200 count25settableThe most results Origin discovery accumulates in one pass. The memory governor budgets it against available RAM, so the effective value can be below what is written here.
originDiscoveryMaxSearchCalls0–500 count50settablePer-scan budget of keyed scanner-search calls
originDiscoveryPassiveDnstrue / falsetruesettableSecurityTrails + ViewDNS DNS history
originDiscoveryScannerstrue / falsetruesettableFavicon/cert pivots via Shodan/Censys/FOFA/ZoomEye/OTX/VirusTotal (each uses its own key) In stealth mode this is forced to false.
originDiscoveryThreshold0–100 percent60settableWeighted-similarity confidence (0-100) needed to confirm an origin
originDiscoveryTimeout1–60 seconds10settableHow long Origin discovery may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
originDiscoveryWorkers1–30 threads10settableHow many Origin discovery operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.

OSINT enrichment

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
osintEnrichmentEnabledtrue / falsefalsesettableWhether OSINT enrichment runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.

ParamSpider

phase resource_enum · passive traffic

FieldAcceptsDefaultMCPMeaning
paramspiderEnabledtrue / falsefalsesettableWhether paramspider runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to true.
paramspiderPlaceholderfree_textFUZZsettableReplacement value for parameter values (e.g., FUZZ for fuzzing tools)
paramspiderTimeout10–86400 seconds120settableHow long paramspider may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
paramspiderWorkers1–10 threads8settableHow many paramspider operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.

Path traversal

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
pathTraversalArchiveExtractionEnabledtrue / falsefalsesettableWhether Path traversal runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
pathTraversalGitReconstructEnabledtrue / falsefalsesettableLets the path_traversal skill reconstruct a repository from an exposed .git that recon's route exposure scan found: it walks the loose objects in the Kali sandbox (500 objects, 20 MiB, 240 s at most), scans them for secrets, reports counts and types only, and deletes them. Also needs data exfiltration allowed in the Rules of Engagement. Takes effect only while route exposure is on. Off by default.
pathTraversalOobCallbackEnabledtrue / falsetruesettableWhether Path traversal runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
pathTraversalOobProviderfree_textoast.funsettableinteractsh-client server. Use a self-hosted instance if oast.fun is blocked. Only used when the OOB callback workflow is enabled. A Rules of Engagement document may never set this.
pathTraversalPayloadReferenceEnabledtrue / falsetruesettableWhether Path traversal runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
pathTraversalPhpWrappersEnabledtrue / falsetruesettableWhether Path traversal runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
pathTraversalRequestTimeout1–120 seconds10settableHow long Path traversal may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
pathTraversalValidateSecretsEnabledtrue / falsefalsesettableLets the path_traversal skill check a secret found in an exposed file with one identity-only call to its provider (AWS, GitHub, GitLab, Slack). The provider sees the call, and a canary token alerts its owner. Takes effect only while route exposure is on. Off by default.

Phishing

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
phishingSmtpConfigfree_text(empty)settableFree-text SMTP settings injected into the agent prompt for social engineering email delivery. The agent reads this as-is when the social engineering simulation skill is active. A Rules of Engagement document may never set this. Withheld from every read on the MCP surface.

Pipeline

standalone · sends no traffic

FieldAcceptsDefaultMCPMeaning
scanModulesdomain_discovery, port_scan, http_probe, resource_enum, vuln_scan, js_recon["domain_discovery","port_scan","http_probe","resource_enum","vuln_scan"]settablePipeline phases to run. Values: "domain_discovery", "port_scan", "http_probe", "resource_enum", "vuln_scan". "js_recon" is still accepted so older projects and presets load, but it does nothing: JS recon runs on jsReconEnabled alone.
stealthModetrue / falsefalsesettableThe engagement's PASSIVE switch. On, every recon tool is forced to its passive, low-noise profile and the noisiest ones are switched off outright (apply_stealth_overrides in recon/project_settings.py, driven by the registry's own stealth profile). This is the setting a rule of engagement means by "passive only", "no active scanning", "observation only" or "do not send probes to the target": it is one switch rather than the dozens of per-tool flags such a rule would otherwise have to name.
updateGraphDbtrue / falsetrueclosedWhether results are stored in the graph database. Off, the scan still runs and still reaches the target, and writes nothing, so every later read reports "nothing found" where the truth is "nothing was written". That is the scanned-and-clean versus never-scanned confusion, so it is a debug switch rather than a pipeline parameter.
useBruteforceForSubdomainstrue / falsefalsesettableEnable DNS brute-force for subdomain discovery In stealth mode this is forced to false.

Pipeline AI master switch

standalone · sends no traffic

FieldAcceptsDefaultMCPMeaning
aiInPipelinetrue / falsefalsesettableMaster toggle that enables AI-powered enhancements across all recon modules that support them. Cascades on/off to per-tool AI flags (ffufAiExtensions, nucleiAiTags, wafAiClassifier, nucleiAiResponseFilter, takeoverAiClassifier).
aiPipelineModelfree_textclaude-opus-4-6settableModel identifier for the AI hooks in recon (e.g. "claude-opus-4-6", "claude-haiku-4-5-20251001"). Independent of agentOpenaiModel. A Rules of Engagement document may never set this.

Port scan AI catalog

phase port_scan · sends no traffic

FieldAcceptsDefaultMCPMeaning
portScanAiPortCatalogEnabledtrue / falsetruesettableWhether Port scan AI catalog runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.

Project identity

standalone · sends no traffic

FieldAcceptsDefaultMCPMeaning
activationStartedAtfree_text—closedWhen the current version activation took the lock. Used to detect a stale lock left by a crashed activation.
activationStatefree_textidleclosedThe version-activation lock. Taken while a saved scan version rewrites the graph and released afterwards; it is a lock flag the application owns, not a setting.
activationVersionIdfree_text—closedThe scan version currently being activated. Written by the activation state machine.
createdAtfree_textnullclosedWhen the project row was created. Written by the database.
createdByIdfree_text—closedThe user who created the project. Populated going forward only; may be null on older rows.
descriptionfree_text—settableFree-text notes about the engagement, shown beside the project name. A Rules of Engagement document may never set this.
idfree_textnullclosedThe project's primary key. Row identity, not configuration.
loadedPreset——closedThe name of the preset last loaded into this project and a fingerprint of the settings it produced. The UI shows the preset as applied only while the saved settings still match the fingerprint. Written by the load path, not configured directly.
mcpKaliExecEnabledtrue / falsetrueclosedWhether MCP tokens on this project may run shell commands in the Kali sandbox. It decides what a credential can do rather than how the pipeline scans, so it is closed on the MCP surface: a token that could set it would be granting itself shell access.
namefree_text—settableThe project's display name. Ordinary metadata, shown in every list and header. A Rules of Engagement document may never set this.
reconPresetIdfree_text—closedThe preset last applied to this project, recorded so the UI can show which one it came from. Written by the apply path, not configured directly.
updatedAtfree_text—closedWhen the project row last changed. Written by the database on every update.
updatedByIdfree_text—closedThe user who last updated the project. Populated going forward only; may be null on older rows.
userIdfree_text—closedThe owning user. Writing it reassigns the project to someone else and configures nothing, which is why it is closed on every surface. Withheld from every read on the MCP surface.

puredns

phase domain_discovery · active traffic at the target

FieldAcceptsDefaultMCPMeaning
purednsDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestfrost19k/puredns:latestsettableThe container image spawned for puredns. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
purednsEnabledtrue / falsetruesettableWhether puredns runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
purednsRateLimit0–100000 rps0settableDNS queries per second puredns sends to its resolvers. ZERO MEANS UNLIMITED, so 0 is the most aggressive value available and not the safest. Under an engagement ceiling a 0 here is rewritten to the ceiling at scan start. 0 means UNLIMITED here, so it is the fastest value and not the safest. Capped to the engagement rate ceiling at scan start.
purednsSkipValidationtrue / falsefalsesettableSkips the wildcard-validation pass, which is much faster and lets wildcard DNS flood the results.
purednsThreads0–1000 threads0settableHow many puredns operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
purednsWildcardBatch0–100000 count0settableWildcard filtering batch size

Remote code execution

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
rceAggressivePayloadstrue / falsefalsesettableWhether the RCE technique uses payloads that can leave a running process or a changed file behind, rather than proof-of-concept ones that only echo.
rceDeserializationEnabledtrue / falsetruesettableWhether rce runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
rceHeapdumpAnalysisEnabledtrue / falsefalsesettableLets the rce skill download an exposed Spring heap dump once (512 MiB at most), count the credential shapes in it, and delete it. Also needs data exfiltration allowed and sensitive data handling above "no access" in the Rules of Engagement. Takes effect only while route exposure is on. Off by default.
rceOobCallbackEnabledtrue / falsetruesettableWhether rce runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.

Resource enum AI hints

phase resource_enum · sends no traffic

FieldAcceptsDefaultMCPMeaning
resourceEnumAiClassifierEnabledtrue / falsetruesettableWhether Resource enum AI hints runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
resourceEnumAiParamInjectableFlagEnabledtrue / falsetruesettableWhether Resource enum AI hints runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
resourceEnumAiPathClassifierEnabledtrue / falsetruesettableWhether Resource enum AI hints runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
resourceEnumAiRagPathFlagEnabledtrue / falsetruesettableWhether Resource enum AI hints runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
resourceEnumAiToolArgPathEnabledtrue / falsetruesettableWhether Resource enum AI hints runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
resourceEnumJevToolHealthtrue / falsefalsesettableAsks TypeSafe AI Jev (model jev-1.13.0) about a collection tool's empty result whose error output the deterministic checks cannot place: false asks nothing, true asks whether it describes a transient failure that a second run could fix. The deterministic checks always run and record such a result as a coverage gap whatever this says. Takes effect only when aiInPipeline is true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account. At most 20 questions per run, with header values redacted. The verdict (transient or permanent, with its confidence) is kept in the recon output next to the coverage gap; no tool is re-run.

Route exposure scan

phase vuln_scan · active traffic at the target

FieldAcceptsDefaultMCPMeaning
routeExposureBackupFilestrue / falsetruesettableWhether the route exposure scan guesses backup copies of the server-side files recon found (name.bak, name~, .old, .orig, .save, .dist and the editor's .name.swp) plus root archives and dumps (backup.zip, backup.tar.gz, site.zip, db.sql, dump.sql, database.sql). Each guess is read with HEAD, then a 1 KB Range request, never downloaded in full; an archive, SQL dump or PHP source that differs from a made-up path and from the original file becomes a finding. At most 40 guesses per host. On by default.
routeExposureCacheRidertrue / falsetruesettableWhether, on a logged-in route whose answer is personalised and sensitive, the scan checks the response's cache headers and the cache oracle for a layer that would let a logged-in page be served from cache to an anonymous visitor. It never plants or fetches from cache; that proof is the agent's. On by default.
routeExposureCompareLoggedIntrue / falsetruesettableWhether the route exposure scan also requests each route logged in, with the project's authentication profile, wherever that profile covers the host (its scope hosts, never an RoE-excluded host). The logged-in answer is sent whatever the anonymous one was: it finds routes that return too much to their own user (sensitive_data), and compares bodies to tell a personal page from a public one. Without a profile nothing is sent logged in. Logged-in requests go through the capture proxy only for bearer, basic and cookie profiles. On by default.
routeExposureCorsRidertrue / falsetruesettableWhether, on a logged-in route whose answer is personalised and sensitive, the scan resends the request with crafted Origin headers (an attacker origin, null, a suffix and a prefix variant) to detect a reflected origin returned with credentials. At most 4 extra requests per route; it reads only the CORS response headers and never a body. On by default.
routeExposureCrossHosttrue / falsefalsesettableWhether a path that produced a candidate or finding on one in-scope host is tried on the other in-scope hosts that share its technology set or page title. Each target host must still pass the scope and SSRF checks. At most 50 requests. Off by default, because it widens the traffic across hosts.
routeExposureEnabledtrue / falsefalsesettableWhether the route exposure scan runs. It requests the routes recon found (crawl, ffuf, kiterunner, OpenAPI, JS bundles) plus routes it generates, anonymously and, where the authentication profile covers the host, logged in, and writes two kinds of Vulnerability under source route_exposure: leads for the agent to confirm (needs_agent_confirmation true, severity info: a route answering without credentials where authentication was expected, or a response carrying sensitive fields or other people's personal data) and findings a signature proves (exposed .git, .env, web.config, backups, debug consoles and endpoints, debug pages, route catalogs, secrets in a response). It sends GET and HEAD only and never requests a logout, delete, reset or other state- changing path. Personal data is stored as its types and one record count, never a value. It runs in GROUP 6 Phase A whenever active scanning runs (http_probe found live URLs), whatever scanModules says: there is no second level. It needs the routes resource_enum (and js_recon, when on) found. In stealth mode this is forced to false.
routeExposureFollowCatalogstrue / falsetruesettableWhether, when the scan finds an open route catalog (an /actuator/mappings document, an anonymously served OpenAPI or Swagger spec, /rails/info/routes), it parses the routes it lists and requests them once, in a single follow-up round that never recurses. At most 500 routes per host. On by default.
routeExposureFrameworkSeedstrue / falsetruesettableWhether the route exposure scan requests framework-specific debug and management paths based on the technologies recon fingerprinted on the host: Spring actuator endpoints (/actuator/env, /actuator/mappings, and /actuator/heapdump with HEAD only), Django /admin, Laravel /telescope, /horizon and /_ignition/health-check, Rails /rails/info/routes, Go /debug/pprof, .NET /elmah.axd, PHP /phpinfo.php, Apache /server-status. At most 30 per host. On by default.
routeExposureGitWalktrue / falsetruesettableWhether, after an exposed /.git/HEAD is confirmed, the scan fetches the ref it names and one loose commit object and inflates it with a bounded decompressor, to prove the repository is reconstructable. At most 4 requests, each body at most 64 KiB; it stores only the proof and the commit tree's hash prefix, and never downloads the tree or blobs. On by default.
routeExposureJevAssesstrue / falsefalsesettableAssesses each route exposure lead with TypeSafe AI Jev (model jev-1.13.0): false keeps the deterministic route class only, true asks Jev which kind of route it is and how sensitive what it returns is, from the evidence alone (the statuses, content class, masked key names and closed hints, never the route class or a value). Both answers are saved on the lead (route_jev_kind, route_jev_sensitivity) and the agent confirms the leads most sensitive first, a lead Jev reads as public content at confidence 70 or more last. It never drops a lead and never rewrites its route class. Takes effect only when aiInPipeline and routeExposureEnabled are both true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account. At most 200 leads per scan, one Jev request each, 4 per call, within a 60-second budget.
routeExposureJevRanktrue / falsefalsesettableRanks the route exposure scan's routes with TypeSafe AI Jev (model jev-1.13.0): false keeps the deterministic budget order (floor first, then the prior score), true asks Jev, per route, whether it is meant only for logged-in, internal or administrative callers, and its answer fills the budget after the floor: the routes Jev reads as private are requested first, the ones it did not answer follow by prior score. The answer is saved on each finding as route_jev_privacy. It never drops a floor route and never invents one, and when Jev cannot answer the order is the deterministic one. Takes effect only when aiInPipeline and routeExposureEnabled are both true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account. At most 400 routes per scan, sent as path, method, a closed category and four flags.
routeExposureJevWallChecktrue / falsefalsesettableAsks TypeSafe AI Jev (model jev-1.13.0) whether an HTML page the route exposure scan kept as a lead is really a login form, an error page or a placeholder that the deterministic page check could not place: false keeps the deterministic verdict only, true saves Jev's page class on the lead (anon_page_class) and puts a lead Jev places as a wall (a non-app class at confidence 70 or more) last in the order the agent confirms; it never drops a lead. The page body reaches Jev masked and capped. Takes effect only when aiInPipeline and routeExposureEnabled are both true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account. At most 100 pages per scan, 4 per call, within a 60-second budget.
routeExposureMaxRoutesPerHost10–5000 count300settableThe most routes the route exposure scan requests on one host, per scope group of a Domain batch. Routes with a prior score of 5 or more (an OpenAPI security declaration, a discovery tool's 401/403, an internal path word) and every version-control or env guess go first; the rest are cut and counted as budget_cut.
routeExposureMaxRoutesTotal50–50000 count3000settableThe most routes the route exposure scan requests in one invocation, across all hosts, per scope group of a Domain batch. Hosts take turns, so one host never spends the whole budget.
routeExposureMaxRps1–50 rps5settableRequests per second the route exposure scan sends across all hosts, shared by every worker and counting control requests, logged-in comparisons and backup reads. It runs at the same time as the other Phase A scanners (nuclei, cache poisoning, GraphQL), so the load on a target is the sum of their rates. One clock serves the whole run, so a Domain batch's groups never reset it. Capped to the engagement rate ceiling at scan start.
routeExposurePiiDetectiontrue / falsetruesettableWhether the route exposure scan looks for personal data in the answers it reads: e-mail addresses, phone numbers and dates of birth under their keys, card numbers passing Luhn, IBANs with a valid checksum, US SSNs and Italian fiscal codes. It stores the kinds found and the largest count of distinct values, never a value; three or more e-mails or phones in one answer mark other people's records. Sends no extra request. On by default.
routeExposureSeedPathstrue / falsetruesettableWhether the route exposure scan requests well-known internal, admin and debug paths (/internal, /api/admin/users, /actuator/env, /console, /phpinfo.php ...) at each base URL and under each API prefix recon saw (/api, /api/v1). At most 60 per host. On by default.
routeExposureSiblingstrue / falsetruesettableWhether the route exposure scan generates sibling routes from each harvested API route: the collection (dropping a trailing id), its /export, /all and /list, an admin or internal segment inserted after the API prefix, and an /internal or /private prefix. At most 6 per route and 100 per host. On by default.
routeExposureTimeout2–60 seconds10settableSeconds the route exposure scan waits for one answer. A route that times out costs that route only; a host is skipped once it stops answering altogether.
routeExposureVcsFilestrue / falsetruesettableWhether the route exposure scan requests version-control and environment files at each base URL and under each top-level directory recon saw (a nested application): /.git/HEAD, /.git/config, /.svn/entries, /.svn/wc.db, /.hg/requires, /.env, /.env.local, /.env.production, /.env.bak and /web.config. At most 30 per host. These always get a request, ahead of the budget. On by default.
routeExposureVersionVariantstrue / falsetruesettableWhether the route exposure scan requests the older API versions of each versioned route recon found: /api/v2/x is tried as /api/v1/x and /api/x, at most 3 per route. An older version that answers anonymously while the newer one is locked is a high-confidence lead. On by default.
routeExposureWorkers1–16 threads4settableHow many routes the route exposure scan requests at once. The request rate stays capped by routeExposureMaxRps whatever this is. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.

Rules of Engagement

standalone · sends no traffic

FieldAcceptsDefaultMCPMeaning
roeAllowAccountLockouttrue / falsefalsesettableWhether a technique that can lock a real account out is permitted. Off keeps credential attacks to a single attempt per account and withholds the lockout-capable skills from the agent's options. An engagement LIMIT: enforced at scan start whatever tuning says.
roeAllowDataExfiltrationtrue / falsefalseclosedWhether a finding may be proven by moving data off the target. Part of the engagement RECORD: it is injected into the agent's prompt and read by a model, and no code refuses an exfiltration path on it. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeAllowDostrue / falsefalsesettableWhether denial-of-service techniques are permitted. Off means the DoS path is refused before it runs and the DoS skill is withheld from the agent's options, whatever their own toggles say. An engagement LIMIT: enforced at scan start whatever tuning says.
roeAllowPhysicalAccesstrue / falsefalseclosedWhether the engagement covers physical access. Recorded for the report; the pipeline has no physical capability. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeAllowProductionTestingtrue / falsetrueclosedWhether production systems are in scope. Off is a statement the operator makes about the estate, not something the scanner can verify, so it constrains what an agent may choose rather than what a tool can reach. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeAllowSocialEngineeringtrue / falsefalsesettableWhether techniques aimed at people rather than systems are permitted. Off withholds the social-engineering skills from the agent's options. An engagement LIMIT: enforced at scan start whatever tuning says.
roeClientContactEmailfree_text(empty)closedWhere to reach the client contact by email. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it. Withheld from every read on the MCP surface.
roeClientContactNamefree_text(empty)closedThe named client contact for this engagement. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it. Withheld from every read on the MCP surface.
roeClientContactPhonefree_text(empty)closedWhere to reach the client contact by phone. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it. Withheld from every read on the MCP surface.
roeClientNamefree_text(empty)closedThe client the engagement is for, as it should appear in the report. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it. Withheld from every read on the MCP surface.
roeComplianceFrameworksPCI-DSS, HIPAA, SOC2, GDPR, ISO27001(empty)closedCompliance frameworks the engagement is conducted under, recorded for the report. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeCriticalFindingNotifytrue / falsetrueclosedWhether a critical finding triggers an immediate notification rather than waiting for the report. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeDataRetentionDays0–3650 count90closedHow many days findings and captured data may be kept after the engagement ends. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeDocumentDatafree_text—closedThe uploaded Rules of Engagement document itself, stored so the engagement carries its own authority. A Bytes column written only by the project create and import endpoints, which receive the file. The MCP surface records the document's SHA-256 through attach_engagement_authorization instead; it never carries the bytes. Written only by POST /api/projects, POST and DELETE /api/projects/[id]/roe. Withheld from every read on the MCP surface.
roeDocumentMimeTypefree_text(empty)closedThe media type of the uploaded Rules of Engagement document. Written only by POST /api/projects, POST and DELETE /api/projects/[id]/roe. Withheld from every read on the MCP surface.
roeDocumentNamefree_text(empty)closedThe filename of the uploaded Rules of Engagement document. Written only by POST /api/projects, POST and DELETE /api/projects/[id]/roe. Withheld from every read on the MCP surface.
roeEmergencyContactfree_text(empty)closedWho to reach out of hours if a scan causes an incident. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it. Withheld from every read on the MCP surface.
roeEnabledtrue / falsefalseclosedDERIVED, never written. Engagement limits apply when there is a limit to apply: a non-zero roeGlobalMaxRps, OR a non-empty roeExcludedHosts, OR roeTimeWindowEnabled. The column is kept so old rows and old exports still load, and every service computes the value through recon_settings.engagement.derive_roe_enabled instead of reading it. A writable master switch would be a bypass shipped as a checkbox: one write of false and the ceiling, the exclusions and the window all stop applying at once while every other field still shows its configured value. An engagement LIMIT: enforced at scan start whatever tuning says. DERIVED, never written.
roeEngagementEndDatefree_text(empty)closedThe last date the engagement authorises any activity. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeEngagementStartDatefree_text(empty)closedThe first date the engagement authorises any activity. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeEngagementTypeexternal, internal, web_app, api, mobile, physical, social_engineering, red_teamexternalclosedHow the engagement is classified in the report: pentest, bug bounty, red team and so on. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeExcludedHostReasonsfree_text(empty)settableWhy each excluded host is excluded, parallel to roeExcludedHosts. Read by the report; it does not itself exclude anything. An engagement LIMIT: enforced at scan start whatever tuning says.
roeExcludedHostsfree_text(empty)settableHosts that must never be touched even though they fall inside the target scope. Each entry is an exact host or IP; a domain, which also excludes its subdomains; *.domain, which excludes its subdomains only; or a CIDR. Case, port, scheme, path and a trailing dot are ignored. Enforced in three places in recon/main.py: expanded IPs, discovered subdomains and the target domain itself. A non-empty list is one of the three things that make the engagement limits live at all. An engagement LIMIT: enforced at scan start whatever tuning says.
roeForbiddenCategoriesbrute_force, dos, social_engineering, physical, exploitation(empty)settableTechnique categories the agent may not run on this engagement. Each token is expanded to the tools that perform it and refused before the tool executes, on every executor path (CATEGORY_TOOL_MAP in agentic/orchestrator_helpers/roe_gate.py), and the list is also withheld from the classifier's options. What each token covers: brute_force is any credential guessing, including brute forcing, password spraying and credential stuffing; dos is anything aimed at availability, including denial of service, resource exhaustion and volumetric or high-volume testing; social_engineering is anything aimed at a person rather than a system, including phishing, vishing, smishing and pretexting; physical is physical premises, hardware or tailgating; exploitation is taking a confirmed finding further than proving it. The vocabulary is closed because the gate matches these tokens EXACTLY: a free-text category such as "Denial of Service" reaches the agent's prompt as advice and never reaches the gate, so the refusal the UI promises silently does not happen. An engagement LIMIT: enforced at scan start whatever tuning says.
roeForbiddenToolscve_intel, execute_amass, execute_arjun, execute_code, execute_curl, execute_ffuf, execute_gau, execute_guarddog, execute_httpx, execute_hydra, execute_jsluice, execute_katana, execute_naabu, execute_nmap, execute_nuclei, execute_osv_scanner, execute_playwright, execute_subfinder, execute_wpscan, google_dork, kali_shell, metasploit_console, msf_restart, proxy_brain, query_graph, shodan, tradecraft_lookup, web_search(empty)settableTools the agent may not run on this engagement, by name, whatever their own enable flag says. Refused before the tool executes, on every executor path, by agentic/orchestrator_helpers/roe_gate.py. The vocabulary is closed to the agent's real tool names because that gate is an exact string match: a near-miss like "hydra" for execute_hydra never matches, and the tool runs with the ban recorded and unenforced. An engagement LIMIT: enforced at scan start whatever tuning says.
roeGlobalMaxRps0–10000 count0settableThe engagement's request-rate ceiling, in requests per second. Every per-tool rate is capped to it at scan start, including the ones whose own value means 'unlimited'. ZERO MEANS NO CEILING, so this at 0 is not a slow engagement, it is an unlimited one. A non-zero value is also one of the three things that make the engagement limits live at all. An engagement LIMIT: enforced at scan start whatever tuning says.
roeIncidentProcedurefree_text(empty)closedWhat to do if the engagement causes an outage or a security incident. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeMaxSeverityPhaseinformational, exploitation, post_exploitationpost_exploitationsettableThe most severe phase the engagement permits, which bounds how far an attack chain may be taken: informational, exploitation or post_exploitation. An engagement LIMIT: enforced at scan start whatever tuning says.
roeNotesfree_text(empty)closedFree-text engagement notes that did not fit another field. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeParsedJsonjson_object—closedThe structured form extracted from the uploaded document, which populated the fields above. Written only by POST /api/projects, POST and DELETE /api/projects/[id]/roe. Withheld from every read on the MCP surface.
roeRawTextfree_text(empty)closedThe Rules of Engagement document as plain text, kept so the report can quote it. Written only by POST /api/projects, POST and DELETE /api/projects/[id]/roe. Withheld from every read on the MCP surface.
roeRequireDataEncryptiontrue / falsetrueclosedWhether engagement data must be encrypted at rest. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeSensitiveDataHandlingno_access, prove_access_only, limited_collection, full_accessno_accessclosedThe agreed handling rule for sensitive data encountered during the engagement. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeStatusUpdateFrequencydaily, weekly, on_finding, nonedailyclosedHow often the client expects a progress update during the engagement. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeThirdPartyProvidersfree_text(empty)closedThird-party providers hosting in-scope assets, who may need their own notification. Part of the engagement RECORD. A person writes it, a model reads it, nothing enforces it; the MCP surface never touches it.
roeTimeWindowDaysfree_text["monday","tuesday","wednesday","thursday","friday"]settableDays of the week on which scanning is permitted, lower-case English names. Empty means every day, once the window is switched on. An engagement LIMIT: enforced at scan start whatever tuning says.
roeTimeWindowEnabledtrue / falsefalsesettableWhether scanning is restricted to an agreed time window. The recon pipeline and the orchestrator both enforce it, and the orchestrator refuses a scan start outside the window with HTTP 403 rather than queueing it. Switching it on is one of the three things that make the engagement limits live at all. An engagement LIMIT: enforced at scan start whatever tuning says.
roeTimeWindowEndTimefree_text18:00settableLocal end of the permitted scanning window, as HH:MM. An end before the start is read as a window that crosses midnight. An engagement LIMIT: enforced at scan start whatever tuning says.
roeTimeWindowStartTimefree_text09:00settableLocal start of the permitted scanning window, as HH:MM. An engagement LIMIT: enforced at scan start whatever tuning says.
roeTimeWindowTimezonefree_textUTCsettableThe IANA timezone the scanning window's times are read in. An engagement LIMIT: enforced at scan start whatever tuning says.

Security checks

phase http_probe · active traffic at the target

FieldAcceptsDefaultMCPMeaning
securityCheckAdminPortExposedtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest. In stealth mode this is forced to false.
securityCheckBasicAuthNoTlstrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckCacheControlMissingtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckCspUnsafeInlinetrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckDatabaseExposedtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest. In stealth mode this is forced to false.
securityCheckDirectIpHttptrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest. In stealth mode this is forced to false.
securityCheckDirectIpHttpstrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest. In stealth mode this is forced to false.
securityCheckDmarcMissingtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckDnssecMissingtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckEnabledtrue / falsetruesettableWhether Security checks runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
securityCheckInsecureFormActiontrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckIpApiExposedtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckKubernetesApiExposedtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest. In stealth mode this is forced to false.
securityCheckLoginNoHttpstrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckMaxWorkers1–50 threads10settableHow many security checks run concurrently.
securityCheckMissingCoeptrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckMissingCooptrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckMissingCorptrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckMissingPermissionsPolicytrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckMissingReferrerPolicytrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckNoRateLimitingtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest. In stealth mode this is forced to false.
securityCheckRedisNoAuthtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest. In stealth mode this is forced to false.
securityCheckSessionNoHttponlytrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckSessionNoSecuretrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckSmtpOpenRelaytrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest. In stealth mode this is forced to false.
securityCheckSpfMissingtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckTimeout1–86400 seconds10settableHow long Security checks may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
securityCheckTlsExpiredtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckTlsExpiringSoontrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckTlsExpiryDays1–365 count30settableHow many days before expiry a certificate starts being reported as expiring soon.
securityCheckTlsHostnameMismatchtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckTlsSelfSignedtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckTlsWeakCiphertrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckTlsWeakVersiontrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckTlsWildcardOverbroadtrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest.
securityCheckWafBypasstrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest. In stealth mode this is forced to false.
securityCheckZoneTransfertrue / falsetruesettableWhether this individual check runs during the security-check pass. Each check is one condition tested against what the earlier phases already found; turning it off removes that finding class without affecting the rest. In stealth mode this is forced to false.

Serialized object scan

phase js_recon · passive traffic

FieldAcceptsDefaultMCPMeaning
serializedScanEnabledtrue / falsefalsesettableWhether the serialized-object scan runs. It is passive and in-memory: it scans the response headers, Set-Cookie, enumerated parameters and crawled form fields the pipeline already holds for serialized-object signatures (Java, PHP, Python, .NET, Ruby, Hessian, polymorphic JSON/XML/YAML), never deserializes, and writes one info-severity :Vulnerability candidate per sink and format for the agent's deserialization skill to confirm out of band.
serializedScanJevRanktrue / falsefalsesettableAssesses the serialized-object candidates with TypeSafe AI Jev (model jev-1.13.0): false leaves them as the deterministic signatures flagged them, true asks Jev, per distinct blob, which serialization format it is and how likely it is to be an attacker-reachable sink, writes both onto the candidate (deser_jev_format, deser_jev_exploitability) and orders the candidates so the agent's deserialization skill confirms the most reachable first. Jev sees the blob's evidence only, never the format the signatures matched. It never drops a candidate and never changes the format the signatures matched. Takes effect only when aiInPipeline and serializedScanEnabled are both true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account; without one, or for a blob Jev cannot answer, the candidates stand exactly as the signatures flagged them. No traffic to the target: at most 200 distinct blobs per scan, request-side ones first, within a 60-second budget checked between calls.

Server-side request forgery

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
ssrfCloudMetadataEnabledtrue / falsetruesettableWhether ssrf runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
ssrfCloudProvidersfree_textaws,gcp,azure,digitalocean,alibabasettableComma-separated cloud providers to include in the metadata-pivots section. Filters which provider endpoint tables ship in the prompt. Ignored when cloud metadata is disabled.
ssrfCustomInternalTargetsfree_text(empty)settableOne hostname or IP[:port] per line. Injected into the prompt so the agent prioritizes these alongside the generic loopback / RFC1918 sweep. A Rules of Engagement document may never set this.
ssrfDnsRebindingEnabledtrue / falsetruesettableWhether ssrf runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
ssrfGopherEnabledtrue / falsetruesettableWhether ssrf runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
ssrfInternalRangesfree_text127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,169.254.0.0/16settableComma-separated CIDR blocks the agent treats as internal. Adjust for orgs using non-standard internal addressing (e.g., 100.64.0.0/10 carrier-grade NAT). A Rules of Engagement document may never set this.
ssrfOobCallbackEnabledtrue / falsetruesettableWhether ssrf runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
ssrfOobProviderfree_textoast.funsettableinteractsh-client server. Use a self-hosted instance if oast.fun is blocked. A Rules of Engagement document may never set this.
ssrfPayloadReferenceEnabledtrue / falsetruesettableWhether ssrf runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
ssrfPortScanPortsfree_text22,80,443,2375,3306,5432,6379,8080,8500,9200,27017settableComma-separated ports to probe via SSRF. Trim for quieter scans, extend for thorough coverage.
ssrfRequestTimeout1–120 seconds10settableHow long ssrf may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.

Shodan

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
shodanDomainDnstrue / falsefalsesettablePulls Shodan's own DNS record set for the domain.
shodanEnabledtrue / falsetruesettableWhether shodan runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
shodanHostLookuptrue / falsetruesettableLooks each discovered IP up in Shodan, which costs one API credit per host.
shodanPassiveCvestrue / falsetruesettablePassive CVE lookup via Shodan
shodanReverseDnstrue / falsetruesettableAsks Shodan for the names an IP is known by, which often reveals hosts DNS enumeration missed.
shodanWorkers1–20 threads5settableHow many shodan operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.

SQL injection

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
sqliLevel1–5 count1settableHigher levels test more injection points (headers, cookies). Default: 1.
sqliRisk1–3 count1settableHigher risk uses more aggressive payloads (e.g., OR-based). Default: 1.
sqliTamperScriptsfree_text(empty)settableComma-separated SQLMap tamper scripts for WAF bypass. Leave empty for auto-detection.

Subdomain discovery

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
subdomainDiscoveryEnabledtrue / falsetruesettableWhether Subdomain discovery runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In a Domain batch it is narrower still: it governs only the groups whose hostname carried a "*" marker, because every other group scans the exact hostnames it was given whatever this flag says.

Subdomain takeover

phase vuln_scan · active traffic at the target

FieldAcceptsDefaultMCPMeaning
subdomainTakeoverEnabledtrue / falsefalsesettableWhether takeover runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
takeoverAiClassifiertrue / falsefalsesettableUse AI to disambiguate takeover findings from WAF "no host" block pages that match the same static fingerprint (requires aiInPipeline=true). For each finding the scanner probes the host, short-circuits on third-party vendor tokens, and otherwise asks the LLM to classify the body. AI-flagged collisions get score -40 (lands in manual_review). Default false.
takeoverAiUseJevtrue / falsefalsesettableEngine for the takeover disambiguator: false uses the LLM in aiPipelineModel, true uses TypeSafe AI Jev (model jev-1.13.0). Takes effect only when aiInPipeline is true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account; without one the hook uses its static fallback.
takeoverCertValidationEnabledtrue / falsetruesettableWhether takeover runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
takeoverConfidenceThreshold0–100 percent60settable0..100. Findings >= threshold+10 are confirmed, >= threshold are likely, otherwise manual_review
takeoverManualReviewAutoPublishtrue / falsefalsesettablePublish manual_review findings into the main Vulnerability stream (default false)
takeoverRateLimit1–500 rps50settableRequests per second takeover sends. Capped to the engagement ceiling at scan start, so a value above the ceiling is rewritten rather than refused. Capped to the engagement rate ceiling at scan start. In stealth mode this is forced to 10.
takeoverSeverityinfo, low, medium, high, critical, unknown["critical","high","medium"]settableSeverity filter for Nuclei takeover templates (e.g. ["critical","high","medium"])

subfinder

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
subfinderDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestprojectdiscovery/subfinder:latestsettableThe container image spawned for subfinder. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
subfinderEnabledtrue / falsetruesettableWhether subfinder runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
subfinderMaxResults1–50000 count5000settableMaximum subdomains taken from a subfinder run. In stealth mode this is lowered to at most 100; a quieter value is kept.

subjack

phase vuln_scan · active traffic at the target

FieldAcceptsDefaultMCPMeaning
subjackAlltrue / falsefalsesettableTest every URL, not just identified CNAMEs - slower (default false) In stealth mode this is forced to false.
subjackCheckArtrue / falsefalsesettableDetect stale A records pointing to dead cloud IPs (manual review)
subjackCheckMailtrue / falsefalsesettableCheck SPF include + MX takeovers In stealth mode this is forced to true.
subjackCheckNstrue / falsefalsesettableDetect NS takeovers (expired nameservers / dangling cloud DNS delegations) In stealth mode this is forced to true.
subjackEnabledtrue / falsetruesettableWhether subjack runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
subjackRunTimeout1–86400 seconds900settableHow long subjack may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
subjackSsltrue / falsetruesettableForce HTTPS probing for higher accuracy (default true)
subjackThreads1–100 threads10settableHow many subjack operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 3.
subjackTimeout1–86400 seconds30settableHow long subjack may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.

Supply chain recon

standalone · passive traffic

FieldAcceptsDefaultMCPMeaning
scaIntelCorrelationEnabledtrue / falsetruecreate-onlyWhether supply-chain findings are correlated against the wider intelligence set. It reaches beyond this project's own assets, so it moves with the scope. Fixed at project creation; refused on an existing project.
supplyChainReconDeepAnalysisEnabledtrue / falsefalsesettableWhether Supply chain recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
supplyChainReconEcosystemsfree_textnpmsettableComma-separated OSV ecosystems to report (default "npm"). Matched EXACTLY against the harvested package ecosystem, so use these names verbatim, case included: npm, PyPI, Go, Maven, crates.io, Packagist, RubyGems, NuGet. Empty string means no filter (report every ecosystem)
supplyChainReconEnabledtrue / falsefalsesettableWhether Supply chain recon runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.

Supply chain scan

standalone · passive traffic

FieldAcceptsDefaultMCPMeaning
supplyChainDeepAnalysisEnabledtrue / falsefalsesettableWhether Supply chain scan runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
supplyChainEcosystemsfree_textnpm,PyPI,Go,Maven,crates.io,Packagist,RubyGems,NuGetsettablePackage ecosystems the supply-chain scan analyses, such as npm, pypi or go.
supplyChainInputModeupload, github, orguploadsettableWhether the supply-chain scan reads an uploaded SBOM, a repository, or an organisation.
supplyChainOrgDeepAnalysisEnabledtrue / falsefalsesettableWhether Supply chain scan runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
supplyChainOrgIncludeArchivedtrue / falsefalsesettableWhether archived repositories are included when scanning an organisation.
supplyChainOrgIncludeForkstrue / falsefalsesettableWhether forked repositories are included when scanning an organisation.
supplyChainOrgMaxRepos0–10000 count50settableMaximum repositories walked when scanning an organisation.
supplyChainOrgNamefree_text(empty)create-onlyThe GitHub organisation whose repositories the supply-chain scan walks. Points the scanner at someone else's assets, so after creation only the project form or update_project_scope changes it. Fixed at project creation; refused on an existing project.
supplyChainOrgReffree_text(empty)settableThe git ref checked out in each organisation repository, when one is pinned.
supplyChainRepoReffree_text(empty)create-onlyThe git ref checked out in the scanned repository. Changed together with the repository it belongs to. Fixed at project creation; refused on an existing project.
supplyChainRepoScopefree_text(empty)create-onlyWhich parts of the repository the scan reads. Changed together with the repository it belongs to. Fixed at project creation; refused on an existing project.
supplyChainRepoUrlfree_text(empty)create-onlyThe repository the supply-chain scan clones. It becomes a git clone argument against a third party's infrastructure, so like the scope it is changed after creation only by the project form or by update_project_scope. Fixed at project creation; refused on an existing project.
supplyChainSbomFilefree_text(empty)closedThe uploaded SBOM this project analyses. Written only by the upload endpoint, which also places the file on disk; a second writer could name a file the project never uploaded. Written only by /api/supply-chain/[projectId]/upload.
supplyChainTyposquatEnabledtrue / falsefalsesettableWhether Supply chain scan runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.

Targeting and scope

standalone · sends no traffic

FieldAcceptsDefaultMCPMeaning
domainBatchGroupsjson_object—closedThe legacy record of the batch scope, [{ rootDomain, prefixes[], hosts[], wildcard }], recomputed server-side from domainBatchHosts at every save and never trusted from a body. domainBatchHosts is the source of truth; the scope every service reads is scopeGroups, which GET /api/projects/[id] derives from it on each read. Kept for readers that have not moved and for a rollback. A prefix is a subdomain label, or one of two sentinels: "." meaning the scan root itself, and "*" meaning enumerate it.
domainBatchHostsfree_text(empty)create-onlyRaw hostname list as entered or uploaded. What the operator edits. An entry may carry a wildcard marker - "*.example.com" or "*example.com" - which makes that one domain be fully enumerated instead of scanned as listed; every other entry stays literal. Editable after creation from the project form, and over MCP only by update_project_scope under its own permission: update_recon_settings and a parsed Rules of Engagement document can never re-point the platform's targets. Fixed at project creation; refused on an existing project.
domainBatchModetrue / falsefalsecreate-onlyDomain batch: the third targeting mode. Mutually exclusive with ipMode. One full recon walks the derived groups in order, appending to one graph. Fixed at project creation; refused on an existing project.
ipModetrue / falsefalsecreate-onlySwitches targeting from a domain to the explicit IP list. Mutually exclusive with domainBatchMode, and part of the scope, so it is write-once. Fixed at project creation; refused on an existing project.
ownershipTokenfree_textyour-secret-token-herecreate-onlyThe secret published in the ownership TXT record. Compared against what DNS returns, so it proves the scope rather than configuring a tool. Fixed at project creation; refused on an existing project. Withheld from every read on the MCP surface.
ownershipTxtPrefixfree_text_redamon-verifycreate-onlyThe label the ownership TXT record is looked up under, prepended to the target domain. Moves with the scope. Fixed at project creation; refused on an existing project.
subdomainListfree_text(empty)create-onlyHosts seeded into the scan in addition to whatever discovery finds. Part of the engagement scope, so it is write-once. Empty entries are dropped and every entry is whitespace-stripped at load. Fixed at project creation; refused on an existing project.
targetDomainfree_text(empty)create-onlyThe single root domain this engagement covers. THE scope column: every phase derives its hosts from it and the target guardrail measures against it. Set once at creation and immutable afterwards, because changing it on an existing project turns a rescan credential into one aimed at a third party. Leading and trailing whitespace is stripped at load. Fixed at project creation; refused on an existing project.
targetGuardrailEnabledtrue / falsetruecreate-onlyThe hard guardrail that refuses to scan a host outside the declared scope. Turning it off removes the control that keeps the pipeline inside its engagement, which is why it moves with the scope and cannot change on an existing project. Fixed at project creation; refused on an existing project.
targetIpsfree_text(empty)create-onlyThe IP addresses or CIDR ranges scanned when ipMode is on. Part of the engagement scope, so it is write-once. Empty entries are dropped and every entry is stripped at load. Fixed at project creation; refused on an existing project.
verifyDomainOwnershiptrue / falsefalsecreate-onlyRequires a DNS TXT record proving control of the target before any active phase runs. Part of the scope's proof, so it is write-once. Fixed at project creation; refused on an existing project.

tlsx

phase http_probe · active traffic at the target

FieldAcceptsDefaultMCPMeaning
tlsxCipherConcurrency1–500 threads10settableHow many tlsx operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
tlsxCipherEnumtrue / falsefalsesettableEnumerate weak supported ciphers (extra connections per target). Default false. In stealth mode this is forced to false.
tlsxConcurrency1–300 threads50settableHow many tlsx operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 5.
tlsxDelayfree_text(empty)settableOptional -delay between connections (e.g. "200ms"); stealth only. Default "".
tlsxDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestprojectdiscovery/tlsx:latestsettableThe container image spawned for tlsx. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
tlsxEnabledtrue / falsetruesettableWhether tlsx runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
tlsxIncludeHttpPortstrue / falsefalsesettableAlso grab certs on HTTP/HTTPS ports httpx already covers (duplicate handshakes). Default false.
tlsxInjectHostnamestrue / falsetruesettableMerge in-scope certificate SAN hostnames into dns.subdomains as new probe targets. Default true.
tlsxMaxHostnamesPerIp0–1000 count1settableWhen one IP serves several known hostnames, how many to scan (each may present a different cert). Default 1.
tlsxMaxInjectedHostnames0–10000 count200settableCap on in-scope hostnames merged back into dns.subdomains as scan targets from certificate SANs and from JavaScript recon, applied to each source separately. Default 200.
tlsxMaxTargets1–100000 count2000settableHard cap on ip:port pairs tlsx scans. Default 2000.
tlsxProbeJarmtrue / falsefalsesettableCompute JARM + JA3 fingerprints (~10 extra handshakes per target, loud). Default false. In stealth mode this is forced to false.
tlsxRetries0–10 count1settableHow many times tlsx retries a failed request before giving up on it.
tlsxRevPtrSnitrue / falsefalsesettableReverse-PTR to derive an SNI for bare IPs (extra DNS lookups). Default false.
tlsxRunTimeout1–86400 seconds900settableHow long tlsx may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
tlsxScanModefree_textautosettableTLS stack: ctls|ztls|openssl|auto. Default auto.
tlsxTimeout1–60 seconds5settableHow long tlsx may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
tlsxVersionEnumtrue / falsefalsesettableEnumerate every supported TLS version (extra connections per target). Default false. In stealth mode this is forced to false.

TruffleHog

standalone · passive traffic

FieldAcceptsDefaultMCPMeaning
trufflehogAllowVerificationOverlaptrue / falsefalsesettableWhether several detectors may verify the same candidate, which costs requests but catches more.
trufflehogArchiveMaxDepth0–50 depth0settableHow many nested archives are extracted before the scan stops descending.
trufflehogArchiveMaxSizefree_text(empty)settableThe largest archive extracted, in bytes. A larger one is skipped rather than exhausting the container.
trufflehogArchiveTimeoutfree_text(empty)settableSeconds one archive extraction may take before it is abandoned.
trufflehogConcurrency1–500 threads8settableHow many sources trufflehog scans at once.
trufflehogDetectorTimeoutfree_text(empty)settableSeconds one detector may spend verifying a candidate before it is abandoned.
trufflehogDropUnverifiedJwttrue / falsefalsesettableDiscards JWTs that could not be verified, which are the bulk of the false positives in this class.
trufflehogEnabledtrue / falsefalsesettableWhether trufflehog runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
trufflehogExcludeDetectorsfree_text(empty)settableDetectors that never run, whatever the include list says.
trufflehogFilterEntropyfree_text(empty)settableThe Shannon entropy below which a candidate string is discarded before detection runs.
trufflehogForceSkipArchivestrue / falsefalsesettableSkips archives entirely rather than extracting them, which is faster and misses anything inside.
trufflehogForceSkipBinariestrue / falsefalsesettableSkips binary files rather than scanning them for embedded strings.
trufflehogIncludeDetectorsfree_text(empty)settableRestricts the run to these detectors. Empty means every detector runs.
trufflehogMaxDecodeDepth0–50 depth5settableHow many nested encodings are unwrapped before giving up on a candidate.
trufflehogNoVerificationtrue / falsefalsesettableSkip live verification entirely. When set, every finding lands unverified (never checked), which is NOT the same as "not live".
trufflehogResultTypesfree_textverified,unverified,unknownsettableWhich result statuses to report: a comma-separated subset of verified,unverified,unknown,filtered_unverified. Replaces the old trufflehogOnlyVerified boolean, which combined with trufflehogNoVerification asked TruffleHog to report only verified results while forbidding it to verify — zero findings, no error.

uncover

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
uncoverDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestprojectdiscovery/uncover:latestsettableThe container image spawned for uncover. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
uncoverEnabledtrue / falsefalsesettableWhether uncover runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
uncoverMaxResults1–50000 count50000settableThe most results uncover accumulates in one pass. The memory governor budgets it against available RAM, so the effective value can be below what is written here. An empty value is replaced by the default rather than honoured.

urlscan.io

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
urlscanEnabledtrue / falsetruesettableWhether urlscan runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
urlscanMaxResults1–50000 count50000settableThe most results urlscan accumulates in one pass. The memory governor budgets it against available RAM, so the effective value can be below what is written here. In stealth mode this is lowered to at most 100; a quieter value is kept.

Vhost / SNI enumeration

phase http_probe · active traffic at the target

FieldAcceptsDefaultMCPMeaning
vhostSniBaselineSizeTolerance0–10000 bytes50settableBody size deltas within this many bytes are not flagged (suppresses Set-Cookie / timestamp jitter). Default 50.
vhostSniConcurrency1–100 threads20settableHow many Vhost / SNI enumeration operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
vhostSniCustomWordlisthostname_list(empty)settableOptional custom candidates as inline text, one per line (not a file path); lines starting with # are ignored. Bare prefixes expand as {prefix}.{target_apex}; full hostnames are used as-is. Default "".
vhostSniEnabledtrue / falsefalsesettableWhether Vhost / SNI enumeration runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
vhostSniInjectDiscoveredtrue / falsetruesettableWhen a hidden vhost is confirmed, create a BaseURL node so a follow-up partial recon (Katana, Nuclei) can scan it. Default true.
vhostSniMaxCandidatesPerIp10–50000 count2000settableHard cap on candidates per IP to bound run time. Default 2000.
vhostSniTestL4true / falsetruesettableRun the TLS SNI trick via curl --resolve (catches modern reverse proxies, k8s ingress, Cloudflare). Default true.
vhostSniTestL7true / falsetruesettableRun the HTTP Host header trick (catches classic Apache/Nginx vhosts). Default true.
vhostSniTimeout1–30 seconds3settableHow long Vhost / SNI enumeration may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
vhostSniUseDefaultWordlisttrue / falsetruesettableUse the bundled vhost-common.txt wordlist (~2,300 admin/dev/staging/internal/modern-stack prefixes, expanded as {prefix}.{target_apex}). Default true.
vhostSniUseGraphCandidatestrue / falsetruesettablePull hostnames from existing Subdomain, ExternalDomain, TLS SAN list, CNAME targets and reverse-DNS PTR records resolving to each target IP. Highest signal source. Default true.

VirusTotal

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
virusTotalEnabledtrue / falsefalsesettableWhether virustotal runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
virusTotalWorkers1–10 threads3settableHow many virustotal operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.

WAF detection

phase http_probe · sends no traffic

FieldAcceptsDefaultMCPMeaning
wafAiClassifiertrue / falsefalsesettableUse AI to classify WAF/CDN presence from response headers/body/latency when the static check misses (requires aiInPipeline=true). Augments _has_cdn_markers and check_waf_bypass; AI-detected bypasses are tagged detection_method=ai_classifier (jev_classifier when wafAiUseJev is on). Default false.
wafAiUseJevtrue / falsefalsesettableEngine for the WAF classifier: false uses the LLM in aiPipelineModel, true uses TypeSafe AI Jev (model jev-1.13.0). Takes effect only when aiInPipeline is true, and aiInPipeline does not reset it. Needs a Jev token on the project owner's account; without one the hook uses its static fallback.

Wappalyzer

phase http_probe · active traffic at the target

FieldAcceptsDefaultMCPMeaning
wappalyzerAutoUpdatetrue / falsetruesettableWappalyzer package version for tech database
wappalyzerCacheTtlHours1–8760 count24settableHow long to cache tech database (0 = always fresh)
wappalyzerEnabledtrue / falsetruesettableWhether wappalyzer runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
wappalyzerMinConfidence0–100 percent50settableThe confidence percentage below which a Wappalyzer technology match is discarded.
wappalyzerNpmVersionfree_text6.10.56settableThe npm version of Wappalyzer the scan container installs at run time. It is fetched from the public registry during the scan, so it decides what code runs inside the container. A Rules of Engagement document may never set this.
wappalyzerRequireHtmltrue / falsetruesettableWhether a technology match requires an HTML response, which suppresses matches on JSON and binary endpoints.

Web cache poisoning

standalone · active traffic at the target

FieldAcceptsDefaultMCPMeaning
webCachePoisonAllowCpdostrue / falsefalsesettableCache-poisoned DoS tests (oversized/meta-char). Only honored in research profile. Default false. In stealth mode this is forced to false.
webCachePoisonAllowDeceptiontrue / falsetruesettableWeb cache deception (path-confusion .css tricks). Default true.
webCachePoisonAllowFrameworkPackstrue / falsetruesettableFire Next.js/Nuxt/Remix-specific vectors only when the tech fingerprint matches. Default true.
webCachePoisonBehavioralDelay1–10 seconds1.1settableSeconds to wait between the two frozen-Date probes. Larger = more reliable on slow origins, but adds latency per silent URL. Default 1.1.
webCachePoisonBehavioralOracletrue / falsetruesettableDetect silent caches (no cache-status headers, common with default Varnish/nginx or hardened CDNs) via a frozen-Date probe: fetch twice across a short delay; a frozen Date header + identical body implies a cache. Catches caches header detection alone would miss. Default true.
webCachePoisonCacheBusterParamfree_textrdmncbsettableQuery param name used to isolate every test into its own cache slot. Default "rdmncb".
webCachePoisonCacheHeaderfree_text(empty)settableOverride the cache hit/miss header if the target uses a non-standard one. Default "".
webCachePoisonConcurrency1–50 threads10settableHow many Web cache poisoning operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
webCachePoisonConfirmWorkers1–16 threads6settableHow many Web cache poisoning operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
webCachePoisonCrossVantagetrue / falsefalsesettableRe-confirm from a second network vantage (requires extra egress infra). Default false.
webCachePoisonDifferentialtrue / falsetruesettableNon-reflective detection. Beyond looking for a benign canary echoed back, also flag a poison that changes the response behaviour (a persisted status code / Location redirect / body) with no echoed marker, guarded against false positives by requiring the affected response dimension to be stable across two clean baselines. Catches CPDoS-style status flips, scheme/redirect poisoning, and cache-key confusion. Adds one extra baseline request per vector. Default true.
webCachePoisonDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestredamon-wcvs:latestsettableThe container image spawned for Web cache poisoning. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
webCachePoisonEnabledtrue / falsefalsesettableWhether Web cache poisoning runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
webCachePoisonMaxRpsPerHost0–1000 rps0settableRequests per second the web-cache-poisoning scan sends to any ONE host. ZERO MEANS UNLIMITED, so 0 is the most aggressive value available and not the safest. Under an engagement ceiling a 0 here is rewritten to the ceiling at scan start. 0 means UNLIMITED here, so it is the fastest value and not the safest. Capped to the engagement rate ceiling at scan start.
webCachePoisonMinConfidence0–1 ratio0.8settableOnly findings scoring at or above this (0-1) become Vulnerability nodes. 0.8 keeps Confirmed + Strong. Default 0.8.
webCachePoisonScanProfilefree_textsafe-confirmsettable"safe-confirm" (production, benign canaries, always isolated), "extended" (owned test targets), or "research" (lab only, enables CPDoS if allowed). Default "safe-confirm".
webCachePoisonTimeout1–86400 seconds1800settableHow long Web cache poisoning may spend before it is abandoned, in seconds. A run that hits it contributes whatever it found so far rather than failing the scan.
webCachePoisonTimeoutPerReq1–86400 seconds10settableNative confirmation per-request timeout in seconds. Default 10.
webCachePoisonVerifySsltrue / falsetruesettableVerify TLS certificates during native confirmation. Default true.

WHOIS

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
whoisEnabledtrue / falsetruesettableWhether whois runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
whoisMaxRetries1–20 count6settableHow many times whois retries a failed request before giving up on it.

ZAP Ajax Spider

phase resource_enum · active traffic at the target

FieldAcceptsDefaultMCPMeaning
zapAjaxSpiderBrowserIdfree_textfirefox-headlesssettableZAP browser id, such as "firefox-headless"
zapAjaxSpiderClickDefaultElemstrue / falsetruesettableClick default clickable elements
zapAjaxSpiderClickElemsOncetrue / falsetruesettableClick each element only once
zapAjaxSpiderCustomHeadershttp_header(empty)settableHeader/cookie lines for authenticated crawling
zapAjaxSpiderDockerImagecaffix/amass:latest, dolevf/graphql-cop:1.14, frost19k/puredns:latest, ghcr.io/zaproxy/zaproxy:stable, jauderho/hakrawler:latest, projectdiscovery/httpx:latest, projectdiscovery/katana:latest, projectdiscovery/naabu:latest, projectdiscovery/nuclei:latest, projectdiscovery/subfinder:latest, projectdiscovery/tlsx:latest, projectdiscovery/uncover:latest, redamon-baddns:latest, redamon-wcvs:latest, sxcurity/gau:latestghcr.io/zaproxy/zaproxy:stablesettableThe container image spawned for zap. Any value outside the shipped allowlist is silently pinned back to the default at scan start, with a [guardrail] line recording it, so the field is open and the runtime is the control.
zapAjaxSpiderEnabledtrue / falsefalsesettableWhether zap runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op. In stealth mode this is forced to false.
zapAjaxSpiderEventWait0–3600000 milliseconds1000settableHow long the Ajax Spider waits after firing a DOM event, in MILLISECONDS. Too low and a single-page app has not rendered its new state before the crawler reads it.
zapAjaxSpiderExcludePatternsfree_text(empty)settableRegex patterns to exclude from Ajax crawling
zapAjaxSpiderLogoutAvoidancetrue / falsetruesettableAvoid actions likely to log out
zapAjaxSpiderMaxCrawlDepth1–50 depth5settableMax crawl depth per seed
zapAjaxSpiderMaxCrawlStates0–100000 count0settableMax crawl states, or 0 for unlimited
zapAjaxSpiderMaxDuration1–1440 minutes10settableHow long the ZAP Ajax Spider may crawl one seed, in MINUTES rather than seconds.
zapAjaxSpiderMaxUrls1–100000 count1000settableThe most results zap accumulates in one pass. The memory governor budgets it against available RAM, so the effective value can be below what is written here.
zapAjaxSpiderNumberOfBrowsers1–10 threads1settableBrowser instances used by Ajax Spider
zapAjaxSpiderParallelism1–10 threads3settableHow many zap operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here.
zapAjaxSpiderRandomInputstrue / falsefalsesettableFill inputs with random values
zapAjaxSpiderReloadWait0–3600000 milliseconds1000settableHow long the Ajax Spider waits after a page reload, in MILLISECONDS.
zapAjaxSpiderScopeCheckfree_textStrictsettableAjax Spider scope check mode
zapAjaxSpiderSeedModefree_textbase_urlssettable"base_urls" or "base_urls_and_endpoints" seed selection

ZoomEye

phase domain_discovery · passive traffic

FieldAcceptsDefaultMCPMeaning
zoomEyeEnabledtrue / falsefalsesettableWhether ZoomEye runs. Configuration is two levels: this flag decides whether the tool runs INSIDE its phase, and scanModules decides whether the phase runs at all. Setting one without the other is a silent no-op.
zoomEyeMaxResults1–10000 count1000settableThe most results ZoomEye accumulates in one pass. The memory governor budgets it against available RAM, so the effective value can be below what is written here.
zoomEyeWorkers1–20 threads5settableHow many ZoomEye operations run at once. The memory governor scales it down when the host is short of RAM, so the effective value can be below what is written here. In stealth mode this is forced to 1.