Observed since 20 Oct, 19:58 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
404reportor
AI-assisted CLI that turns raw cybersecurity notes and screenshots into professional reports.
4️⃣0️⃣4️⃣ reportor
Turn your raw hacking notes into professional security reports — in one command.
404reportor is a CLI tool that takes your messy pentest notes and screenshots, and turns them into clean, professional HTML / PDF / Markdown reports. Works great for HTB, CTF, OSCP, CPTS labs, or real pentests.
It uses Google Gemini or Anthropic Claude to write the report for you. No API key? No problem — it works offline too with a built-in fallback.
npx 404reportor init
This creates the workspace files. Now:
main.md — just dump your writeup, commands, outputs, everythingimg/ foldernpx 404reportor run --format html
That's it. Open the .html file and you're done.
npm install -g 404reportor
Then use 404reportor instead of npx 404reportor everywhere.
By default 404reportor tries to use AI to rewrite your notes into a proper report. To set it up:
cp .env.example .env
Open .env and paste your free Google AI Studio API key:
GEMINI_API_KEY=your_key_here
Get a free key at aistudio.google.com
That's it. Run the tool and it'll use Gemini to generate the report.
If no API key is set, 404reportor will automatically fall back to a local report generator.
RECON_REPORT_PROVIDER=anthropic
ANTHROPIC_API_KEY=your_key_here
main.md)Just write naturally. The parser picks up commands, outputs, credentials, services, CVEs, and flags automatically. Here's a quick example:
TARGET: 10.10.11.42
MACHINE: Cascade
OS: Windows
DIFFICULTY: Medium
# Recon
nmap -sC -sV 10.10.11.42
22/tcp open ssh OpenSSH 7.4
80/tcp open http Apache 2.4.18
445/tcp open smb Samba 4.7.6
# Web Enumeration
gobuster dir -u http://10.10.11.42 -w /usr/share/wordlists/dirb/common.txt
Found: /admin (302)
Found: /uploads (200)
# Initial Access
Used SQLi on login page to get shell as www-data.
password: SuperSecret123
# Privilege Escalation
sudo -l shows we can run /usr/bin/vim as root.
# Proof
user.txt: abc123def456
root.txt: 789xyz000111
The tool understands metadata lines (TARGET:, OS:, etc.), headings, shell prompts, common tools (nmap, gobuster, evil-winrm, etc.), and credential patterns.
Drop screenshots in img/. Supported formats: .png, .jpg, .jpeg, .gif, .webp, .bmp
You can organize them in subfolders:
img/
01-nmap.png
exploit/02-shell.png
privesc/03-root.png
Want captions? Create img/captions.txt:
01-nmap.png: Initial Nmap scan showing exposed services.
exploit/02-shell.png: Got shell as www-data.
| Command | What It Does |
|---|---|
404reportor init | Creates main.md, img/, .env in current folder |
404reportor setup --provider google | Set up AI provider config |
404reportor run | Parse notes → AI generate → render report |
404reportor --help | Show all options |
| Flag | Description | Default |
|---|---|---|
-f, --format | html, pdf, or md | html |
-t, --type | htb, ctf, pentest, cpts, oscp | pentest |
--provider | auto, google, anthropic | auto |
--model | AI model name | auto |
--save-md | Save markdown draft alongside HTML/PDF | off |
-i, --input | Notes file path | main.md |
--img-dir | Screenshots directory | img |
-o, --output | Output directory | . |
# HTB writeup with AI
npx 404reportor run --type htb --format html
# OSCP-style PDF report
npx 404reportor run --type oscp --format pdf
# Save the markdown draft too
npx 404reportor run --type ctf --format html --save-md
# Use Claude instead of Gemini
npx 404reportor run --provider anthropic --format html
npx puppeteer browsers install chrome
--save-md).Your notes might have real passwords, hashes, or flags. The tool auto-masks these in the output. But if you use AI mode, your notes are sent to Google/Anthropic servers. If you're working with sensitive client data, don't set an API key — the tool will use its local report builder instead.
PRs welcome! Fork → branch → commit → PR.
git clone https://github.com/Hacck3y/404reportor.git
cd 404reportor
npm install
npm link
MIT © 2025-2026
Made with ☕ by Hacck3y
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
@anthropic-ai/sdkEnvironment{
"local_name": "@anthropic-ai/sdk",
"alias": false,
"peer_metadata": null
} | ^0.56.0 | runtime |
chalkEnvironment{
"local_name": "chalk",
"alias": false,
"peer_metadata": null
} | ^5.4.1 | runtime |
commanderEnvironment{
"local_name": "commander",
"alias": false,
"peer_metadata": null
} | ^14.0.0 | runtime |
dotenvEnvironment{
"local_name": "dotenv",
"alias": false,
"peer_metadata": null
} | ^17.2.0 | runtime |
highlight.jsEnvironment{
"local_name": "highlight.js",
"alias": false,
"peer_metadata": null
} | ^11.11.1 | runtime |
markedEnvironment{
"local_name": "marked",
"alias": false,
"peer_metadata": null
} | ^16.0.0 | runtime |
oraEnvironment{
"local_name": "ora",
"alias": false,
"peer_metadata": null
} | ^8.2.0 | runtime |
puppeteerEnvironment{
"local_name": "puppeteer",
"alias": false,
"peer_metadata": null
} | ^24.12.1 | runtime |
sharpEnvironment{
"local_name": "sharp",
"alias": false,
"peer_metadata": null
} | ^0.34.2 | runtime |
Source distribution
{
"integrity": "sha512-qsKWWmyQ1EthRNozNDRxksKhcyfR7yUyZ/B8F3kQGbsmX7ehTBKU9ihV+Ge3Nm3R+Y+YQpTdZ83uqFEeQgluYg==",
"shasum": "0ff81226a4e380e4740d87a8c84fd1801271fc90",
"tarball": "https://registry.npmjs.org/404reportor/-/404reportor-1.5.0.tgz",
"fileCount": 10,
"unpackedSize": 118705,
"signatures": [
{
"keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U",
"sig": "MEQCIGk6GLxnytrQRfRKmjJWd65DKApf35lSjOhbgwakzSxbAiASC7Bgek8X+XLczwd8pUZwnZ+PKC/EiA/uE6rnCLA+Qw=="
}
]
}Observed since 20 Oct, 19:58 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:71817ade61a0749d10213b80dc9de9ffc708d396ca05f8d972760700cbff69c7