Nuclei
Comprehensive ProjectDiscovery Nuclei v3 expertise for installing, configuring, running, debugging, and reviewing authorized scans; authoring and validating advanced YAML templates and workflows; and working with HTTP/raw HTTP, payloads, DAST fuzzing, race conditions, unsafe requests, DNS, TCP, file, headless, SSL, WebSocket, WHOIS, JavaScript, code, Flow, matchers, extractors, variables, DSL helpers, Interactsh/OAST, authentication, signing, CI/CD, the hosted Template Editor, and APIs. Use whenever the user mentions Nuclei, nuclei-templates, ProjectDiscovery templates, Nuclei YAML, Interactsh, TemplateMan, Nuclei workflows, Nuclei OAST, or asks to create, fix, optimize, validate, explain, or execute a Nuclei template or scan.From its SKILL.md
npx -y skills add dariuxas/ncl-skill --skill nucleiAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
12.7 KB, ~2.7k tokens by cl100k_base, as published. Nobody here has run it
Nuclei
Use Nuclei as a declarative security-check engine: templates define requests or actions, operators prove a result, and metadata explains the finding. Produce low-noise, reproducible checks and conservative scan commands for targets the user owns or is explicitly authorized to test.
Start with version and scope
-
Distinguish local authoring/validation from a network scan. Authoring and
-validatedo not contact a target; scanning does. -
Before a real scan, establish that the named targets and test class are authorized. Keep targets, redirect destinations, ports, credentials, payload effects, OAST callbacks, rates, and exclusions inside that scope.
-
If
nucleiis installed, inspect the runtime before emitting version-sensitive syntax:nuclei -version nuclei -h nuclei -ldfUse
nuclei -lhawhen designing headless steps. Runtime help and the current schema outrank static aliases in this skill. -
If exact syntax may have changed, consult the official schema and current documentation linked in references/docs-index.md. The requested
nuclei.mintlify.appcorpus is a legacy snapshot and contains stale flags. -
Never claim a template was validated or a target was vulnerable without the corresponding tool output. Treat a Nuclei match as evidence requiring confirmation, not a final vulnerability verdict.
Route the task
- Install, configure, select templates, authenticate, tune performance, export results, or integrate CI/CD: read references/cli-operations.md.
- Create or repair any template: read references/template-schema.md and references/operators-dsl-oob.md, then the relevant protocol reference.
- Build HTTP, raw HTTP, multi-request, authenticated, or request-condition checks: read references/http.md.
- Build payload, fuzzing/DAST, race, pipelining, unsafe/raw, or request-smuggling checks: read references/advanced-http.md.
- Build DNS, TCP, file, SSL, WebSocket, or WHOIS checks: read references/protocols.md.
- Build headless, JavaScript, code, Flow, or multi-protocol checks: read references/execution-engines.md.
- Build conditional workflows or use the hosted editor/API: read references/workflows-editor.md.
- Review quality, reduce false positives, test, sign, or prepare a contribution: read references/quality-testing.md.
- Find every page in the source corpus or resolve legacy/current drift: read references/docs-index.md.
Do not load every reference by default. Read the schema/operator references plus only the protocol and operational references needed for the request.
Author a template
1. Define the proof
Write down:
- the exact product, weakness, affected state, and target form;
- the least-invasive request or observation that distinguishes vulnerable from patched;
- positive evidence, negative controls, expected status/headers/body/protocol data, and any version boundary;
- required authentication, redirects, OAST, payload count, browser actions, code, files, or side effects.
Prefer direct vulnerability proof over version-only detection. Prefer a harmless unique marker, read-only endpoint, response delta, or authorized OAST callback over command execution or state changes.
2. Choose the least-powerful engine
Prefer in this order when each can express the check:
- Standard protocol request (
http,dns,tcp,ssl,websocket,whois,file). - Raw HTTP for exact bytes or multi-step request control.
- Flow for conditional/repeated protocol orchestration.
- Headless only when browser behavior or client-side execution is essential.
- JavaScript only when a native protocol module or custom state machine is essential; custom JavaScript templates require a trusted signature on Nuclei v3.11+.
unsafe, race, DAST fuzzing, self-contained, global matchers, or OAST only when the detection requires them.- External
codeonly as a last resort; inspect and sign it, and require explicit-codeat runtime.
Use current keys: http, not deprecated requests; tcp, not deprecated network.
3. Build metadata first
Create a unique id without spaces and an info block with name, author, and severity. Add a precise description, impact, remediation, primary references, specific comma-separated tags, and applicable classification fields (cve-id, cwe-id, cvss-metrics, cvss-score, epss-*, cpe). Do not assert verified: true, CVSS, affected versions, or attribution without evidence.
4. Compose requests and state
- Use built-in variables with exact case (
BaseURL,RootURL,Hostname,Host,Port,Path,File,Scheme,FQDN, and protocol-specific values). - Use template
constantsfor immutable scalar configuration andvariablesfor evaluated values. Use{{randstr}}or numbered variants when one stable random marker must persist for a template run. - Use named internal extractors to pass tokens or identifiers to later requests. Add request IDs when Flow or per-request DSL fields need them.
- Make payload attack semantics explicit:
batteringram,pitchfork, orclusterbomb. Keep wordlists adjacent to the template unless broader local file access was explicitly approved. - Scope redirects to the same authorized host by default. Do not leak secrets across redirects.
- Remember that current Nuclei reuses cookies by default; set
disable-cookie: trueonly when isolation is required.
5. Prove the result with operators
- Combine independent evidence with
matchers-condition: and: expected status, product-specific marker, vulnerability-specific proof, and a negative control where useful. - Within one matcher, set
condition: and|ordeliberately. Usenegative: trueonly when absence is meaningful. - Select the correct response
part; avoid searchingallwhenbody,header,raw,answer, or protocol data is more precise. - Use DSL for response relationships, lengths, hashes, response-index comparisons, and version ranges. Keep expressions deterministic and readable.
- Use named internal extractors for state; use public extractors for useful result context. A regex
groupreturns one capture group, while the full match remains group0. - For OAST, pair
{{interactsh-url}}with explicitinteractsh_protocol,interactsh_request, orinteractsh_responsematchers. Treat public Interactsh metadata as data sent to a third party.
6. Validate and test
Run the bundled validator from the skill directory:
python3 scripts/validate_template.py path/to/template.yaml
It invokes strict nuclei -validate, uses -w for workflow documents, checks loader warnings, enforces a timeout, and reports elevated capabilities without scanning. Unsigned JavaScript/code fails by default; use --allow-unsigned-authoring only for an intermediate structural pass, then review, sign, and rerun. Do not use -nss to make an invalid template pass.
Then test in layers:
- Validate YAML/schema with the installed engine.
- Inspect the rendered template with
nuclei -t template.yaml -td. - Run against a controlled, known-vulnerable authorized lab with conservative
-rl,-c, and-bs. - Run against a patched instance and at least one similar non-vulnerable product.
- Inspect
-dreq,-dresp, or-debug; redact secrets before sharing logs. - Measure request count, retries, payload expansion, redirects, and OAST delay. Confirm the matcher still proves the claimed issue.
When no positive lab is available, label the template structurally validated but behaviorally unverified.
Operate a scan
- Verify the installed version and health:
nuclei -version,nuclei -hc, and optionallynuclei -tv. - Normalize targets and exclusions. Prefer a file for nontrivial scope and use
-ehfor explicit exclusions. Use-lnawhen untrusted inputs/templates must not reach private networks. - Select narrowly by explicit template, ID, tag, type, severity, or profile. Preview broad selection with
-tl. - Start with conservative limits. A safe initial shape for a small authorized test is
-rl 5 -c 2 -bs 2; tune from measured behavior and program limits. - Keep special capabilities opt-in:
-headless,-code,-file,-dast,-esc,-egm, and-lfa. Never broadly includedosorfuzztags or bypass the maintained ignore list. An exact, reviewed custom DAST file may require both-dastand-it ./template.yamlbecause its safety tags are excluded by default. - Scope authentication with
-sfdomain rules. Never generate catch-all secret scope, print live secrets, or combine sensitive auth with raw debug output unless the user explicitly accepts the exposure. - Prefer machine-readable output with
-jle; use-or,-ot, and-rdwhen raw traffic, templates, or secrets must not be persisted. - Report the command, version, selected templates, scope, rate settings, output path, limitations, and validation status.
Example shape—replace only with an authorized target and verified current flags:
nuclei -duc -u https://authorized.example \
-t ./template.yaml -rl 5 -c 2 -bs 2 \
-jle results.jsonl -or
-duc avoids update network traffic; it does not make the target scan passive.
Apply elevated-feature guardrails
- DAST/fuzzing: Require an explicit authorized scope, tight
-cs/-cos, conservative aggression and rate, and an understood payload count. Do not treat legacy-fuzzas current; prefer runtime help, which currently uses-dast. - Unsafe/smuggling/race/pipeline: These can desynchronize servers, duplicate transactions, or create high load. Use only in an isolated lab or with explicit authorization for that test class. Keep race counts and connections minimal.
- Headless: Browser actions can submit forms, download files, and execute page scripts. Review every action. Linux root disables the browser sandbox; avoid that deployment.
- JavaScript: Treat imported Go-backed modules as executable scanner-side capability. Review destinations, loops, exports, file/network access, and timeouts. Nuclei v3.11+ skips unsigned custom JavaScript templates; sign only after review and re-sign after edits.
- Code: Treat the template as executable software on the scanner host. Review source and referenced files, require a trusted signature, re-sign after intentional edits, and never strip another signer's digest automatically.
- File:
-filereads local content;-lfaexpands access. Limit roots and avoid logging discovered secrets. - OAST: Prefer an approved self-hosted Interactsh service for sensitive environments. Account for polling/cooldown before declaring a negative result.
- Remote templates/API/editor: Treat downloaded, AI-generated, base64-encoded, or shared templates as untrusted input. Base64 is not encryption; unlisted share URLs behave like bearer secrets.
Use bundled starters
Starter files in assets/template-starters/ demonstrate current structure without embedding real exploit payloads. Copy the closest starter, replace every change-me marker, and validate it. Copy workflow.yaml with both adjacent workflow-*.yaml children. The JavaScript starter is intentionally unsigned: edit and review first, then sign it. Do not present a starter as a finished detection rule.
Deliver complete work
For a created or repaired template, return:
- the template file;
- the exact validation command and result;
- a conservative authorized-lab run command;
- expected positive and negative evidence;
- required flags/capabilities and estimated request expansion;
- assumptions, unverified claims, and security/privacy caveats.
For a scan plan or command, return the resolved scope, selector preview strategy, limits, secret handling, output/redaction strategy, and rollback/stop condition. Never execute a network scan merely because the user asked to write or validate a template.
What ships with it: 29 files
131.0 KB alongside SKILL.md, 1 of them executable
agents/
- openai.yaml208 B
assets/
- template-starters/dns.yaml447 B
- template-starters/file.yaml463 B
- template-starters/headless.yaml866 B
- template-starters/http-detection.yaml506 B
- template-starters/http-flow.yaml793 B
- template-starters/http-fuzzing.yaml837 B
- template-starters/http-oob.yaml484 B
- template-starters/http-raw-chain.yaml851 B
- template-starters/javascript.yaml916 B
- template-starters/multi-protocol.yaml593 B
- template-starters/ssl.yaml452 B
- template-starters/tcp.yaml463 B
- template-starters/websocket.yaml688 B
- template-starters/whois.yaml419 B
- template-starters/workflow-detector.yaml437 B
- template-starters/workflow-follow-up.yaml440 B
- template-starters/workflow.yaml301 B
references/
- advanced-http.md11.3 KB
- cli-operations.md15.6 KB
- docs-index.md8.0 KB
- execution-engines.md14.0 KB
- http.md9.9 KB
- operators-dsl-oob.md11.9 KB
- protocols.md9.7 KB
- quality-testing.md9.8 KB
- template-schema.md10.8 KB
- workflows-editor.md9.6 KB
scripts/
- validate_template.pyruns10.3 KB