## TL;DR
nuclei cannot find or read its template library, so it aborts before touching the target. Update the templates with nuclei -update-templates, point -t at the right directory, and reinstall the templates repo if the checkout is corrupt. Then confirm with a single-template run.

```text
[FATAL] Could not load template: open /root/nuclei-templates/http/missing.yaml: no such file or directory
```

## Use this when
- nuclei prints the FATAL line and exits before any request goes out.
- You recently moved, updated, or reinstalled nuclei.
- The scan target is in your authorized scope.

## Not for this skill when
- Templates load but find nothing. That is a matching problem, not a load problem.
- One custom template fails. Validate that template instead.

## Steps
1. Update the template library: `nuclei -update-templates`. Verify: the command completes and reports the template count.
2. Check the template path nuclei expects: `ls ~/nuclei-templates | head -5`. A moved home directory or changed -td flag breaks the default. Verify: the directory exists and holds category folders.
3. If the checkout is corrupt, delete and re-clone it, then update again. Verify: `nuclei -update-templates` succeeds on the fresh checkout.
4. Point -t explicitly if you use a non-default location: `nuclei -t /opt/templates/http/ -u https://target.example.com`. Verify: nuclei loads templates instead of printing FATAL.
5. Smoke-test with one template against a lab host before the engagement run: `nuclei -t ~/nuclei-templates/http/technologies/ -u https://target.example.com`. Verify: the scan starts and templates execute.

Compatibility: nuclei 3.x. Template layout is stable across recent 3.x releases.

## Variant phrasings
### nuclei could not load template fatal
Same fix path, common phrasing.
### nuclei templates not found
Symptom-level search.
### nuclei -update-templates failed
The update-flavored search.

## Why it happens
nuclei loads templates from disk at startup, defaulting to ~/nuclei-templates. A failed or partial update, a relocated home directory, or a -t path pointing at nothing leaves the loader with no files, and it treats that as fatal rather than scanning blind. Corrupt git checkouts after interrupted updates are the classic cause.

## Edge cases / pitfalls
- -update-templates needs network access to the template repo. Offline test boxes need a pre-seeded templates directory.
- Deleting the templates directory mid-engagement loses your place. Re-seed from a known-good copy instead.
- Custom -t paths must point at directories or files that exist. A typo'd path gives the same FATAL.
- Only scan targets in your written authorization. A working template library does not expand scope.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_zYYGmP6ds1m7fqo6sYT-Rw
