DRAGON Report Generator
DRAGON Report Generator turns security-assessment workflow activity into ready-to-use reports.
Tired of making reports manually?
DRAGON tracks commands during an active engagement, categorizes common security tools, imports evidence such as screenshots and scan output, redacts sensitive data, and generates professional reports in HTML, Markdown, and JSON.
Features
- Command tracking for active projects, scoped to the terminal you enable it in
- Automatic filtering of shell noise (
clear,fastfetch,cd,ls, pagers, editors, and more) - Security-tool categorization
- Evidence collection and sensitive-data redaction
- HTML, Markdown, and JSON reports, plus optional PDF export
- Project-based storage with a terminal dashboard
- Zsh, Bash, and Fish shell hooks
Requirements
- Python 3.9 or newer
- Linux, macOS, or another Unix-like environment for shell-hook functionality
Installation
All methods end with the same dragonrepo CLI on your PATH.
From PyPI (recommended):
python3 -m pip install dragonrepo
From source (system-wide install script):
git clone https://github.com/12hrformat/dragonrepo.git
cd dragonrepo
chmod +x install.sh
sudo ./install.sh
The script installs the package into an isolated virtual environment at /opt/dragonrepo/.venv and links the dragonrepo launcher into /usr/local/bin. It requires sudo, Python 3.9 or newer, and leaves your system Python untouched. Re-run it any time to update.
If you prefer not to install system-wide, install the package directly instead (it still exposes the same dragonrepo command):
cd dragonrepo
python3 -m pip install .
From a built wheel:
git clone https://github.com/12hrformat/dragonrepo.git
cd dragonrepo
python3 -m pip install --upgrade build
python3 -m build
python3 -m pip install dist/dragonrepo-*.whl
Verify:
dragonrepo --help
dragonrepo doctor
Quick Start
dragonrepo start test-lab # create or resume a project
eval "$(dragonrepo hook)" # enable tracking in THIS terminal (auto-detects your shell)
nmap -sV 10.10.10.5 # work normally
dragonrepo status # active project and command count
dragonrepo generate # build HTML, Markdown, and JSON reports
dragonrepo open-report # open the HTML report
Run dragonrepo with no arguments for the same workflow as an on-screen guide.
Shell Hooks
DRAGON tracks commands per terminal. The hook only enables recording for the terminal where you run it — every other terminal keeps working normally and is not logged. When tracking is enabled, the shell prints a short reminder so it is always clear which terminal is being recorded.
The hook auto-detects your shell:
eval "$(dragonrepo hook)"
If detection fails, or you want to be explicit, pass the shell name (zsh, bash, or fish):
eval "$(dragonrepo hook zsh)"
eval "$(dragonrepo hook bash)"
dragonrepo hook fish
Running a hook for a different shell than your current one prints an error instead of silently doing nothing.
To enable it automatically, add the matching line to your shell rc file, for example:
echo 'eval "$(dragonrepo hook zsh)"' >> ~/.zshrc
Only use command tracking for systems and engagements you are authorized to assess.
Noise Filtering
Not every command belongs in a report. DRAGON automatically skips shell noise so your timeline stays focused on real assessment activity:
- Terminal control:
clear,reset,cls - System-info splashes:
fastfetch,neofetch,screenfetch,pfetch,archey, and similar - Navigation and builtins:
cd,pwd,ls,ll,la,exit,history,alias,jobs,fg,bg,source,which,type - Pagers:
man,less,more,most - Editors:
vi,vim,nvim,nano,emacs,micro,hx - DRAGON's own commands (for example
dragonrepo status)
Compound commands are always kept, because they may contain real activity:
cd /tmp && nmap -sV 10.10.10.5
The list lives in dragonrepo/modules/parser.py (NOISE_COMMANDS) if you want to extend it.
Commands
| Command | Description |
|---|---|
dragonrepo start <project> |
Create or resume a project and make it active. |
dragonrepo stop |
Stop the active tracking session. |
dragonrepo status |
Show the active project, start time, and command count. |
dragonrepo list |
List known projects. |
dragonrepo generate [project] |
Generate HTML, Markdown, and JSON reports. |
dragonrepo open-report [project] |
Open the HTML report, generating it first if needed. |
dragonrepo pdf [project] |
Export the HTML report to PDF (wkhtmltopdf or WeasyPrint). |
dragonrepo where [project] |
Show project files, evidence, and report locations. |
dragonrepo dashboard [project] |
Show activity categories and command frequency. |
dragonrepo tools |
Show recognized security tools. |
dragonrepo delete <project> |
Delete a project and its local data. |
dragonrepo doctor |
Check local directories and launcher state. |
dragonrepo guide |
Display the basic workflow. |
dragonrepo hook <shell> |
Print shell integration code (zsh, bash, or fish). |
Commands that accept [project] default to the active project.
Example Full Session
dragonrepo start htb-machine
eval "$(dragonrepo hook zsh)"
nmap -sV -oX scans/nmap.xml 10.10.10.5
subfinder -d example.com -o scans/subdomains.txt
ffuf -u http://10.10.10.5/FUZZ -w /usr/share/wordlists/dirb/common.txt
dragonrepo status
dragonrepo generate
dragonrepo open-report
Project Storage
Project data lives in ~/.dragonrepo/projects/<project>/:
commands.log
notes/ screenshots/ scans/ evidence/ reports/
config.json
dragonrepo.sqlite3
Drop evidence files (.xml, .json, .txt, .csv, .png, .jpg, .jpeg) into the matching subdirectory, then run dragonrepo generate to include them. Reports are written to reports/ as report.html, report.md, and report.json.
Recognized Tools
DRAGON automatically categorizes common security tools, including nmap, rustscan, masscan, ffuf, gobuster, feroxbuster, dirsearch, nuclei, httpx, katana, amass, subfinder, nikto, sqlmap, hydra, smbclient, enum4linux, and ldapsearch.
Sensitive Data Protection
Before reports are generated, DRAGON attempts to redact sensitive information such as API keys, tokens, passwords, authorization headers, bearer tokens, secrets, and session cookies.
Redaction is a safety aid, not a replacement for manual review. Always review generated reports before sharing them externally.
Development
Run the CLI directly from a cloned source tree without installing:
git clone https://github.com/12hrformat/dragonrepo.git
cd dragonrepo
python3 -m dragonrepo.cli --help
The package layout is a standard Python package (dragonrepo/cli.py, dragonrepo/modules/, and bundled Jinja templates in dragonrepo/templates/), exposed through the dragonrepo.cli:app entry point.
Troubleshooting
dragonrepois not found — reinstall withpython3 -m pip install .and verify withdragonrepo --help. If it installed to a user-local bin directory, add that directory toPATH.- Commands are not tracked — enable the hook again with
eval "$(dragonrepo hook)"(it auto-detects the shell, or passzsh/bash/fish), run a command, then checkdragonrepo status. - Report generation fails — confirm the active project exists (
dragonrepo status) and regenerate withdragonrepo generate. report.htmlcannot be opened — it is a file, not a directory. Usedragonrepo open-reportor open the file in a browser.
License
MIT License.
Metadata
Release files for dragonrepo 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| dragonrepo-1.0.2.tar.gz | 23.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dragonrepo-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 48.5 kB
Release files / dragonrepo-1.0.2.tar.gz
| Download URL | dragonrepo-1.0.2.tar.gz |
|---|---|
| Size | 23.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8c44df3147de331d1c172123257923327aec7647ee9ad103f32223dc45876057
|
|
BLAKE2b-256 checksum How to use checksums |
3aa526d739f69e1f0b261f062a3c37dcc857db5a360a7d71987ee2e7235728d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logRelease files / dragonrepo-1.0.2-py3-none-any.whl
| Download URL | dragonrepo-1.0.2-py3-none-any.whl |
|---|---|
| Size | 24.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
39fc9251271ca6f3c0e36464ab176d4dc4a413959439d54cb4a071b19b1ba848
|
|
BLAKE2b-256 checksum How to use checksums |
87ac2cc4e4e63b3875eeb4e2f6499f62ecaceaf22ca7802f3b5e784761d000c4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logSecurity for dragonrepo 1.0.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for dragonrepo-1.0.2.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 20, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.