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
- JSON
Features
- Command tracking for active projects
- Security-tool categorization
- Evidence collection
- Sensitive-data redaction
- HTML, Markdown, and JSON report generation
- Project-based engagement storage
- Terminal dashboard and statistics
- Zsh, Bash, and Fish shell hooks
- Optional PDF export when a supported PDF engine is installed
Requirements
- Python 3.9 or newer
- Linux, macOS, or another Unix-like environment for shell-hook functionality
- Git for cloning the repository
Installation
Clone the repository and enter the project directory:
git clone https://github.com/12hrformat/dragonrepo.git
cd dragonrepo
Install DRAGON as a Python package:
python3 -m pip install .
After installation, verify the CLI:
dragonrepo --help
You can also verify the installation:
dragonrepo doctor
Installing from a built wheel
To build the distributable package:
python3 -m pip install --upgrade build
python3 -m build
The build produces a wheel and source archive in dist/.
Install the wheel with:
python3 -m pip install dist/dragonrepo-1.0.0-py3-none-any.whl
Quick Start
Create or activate a project:
dragonrepo start test-lab
Enable command tracking in your current terminal.
For Zsh:
eval "$(dragonrepo hook zsh)"
For Bash:
eval "$(dragonrepo hook bash)"
For Fish:
dragonrepo hook fish
Run your normal security-assessment tools during an authorized engagement.
For example:
nmap -sV 10.10.10.5
ffuf -u http://10.10.10.5/FUZZ -w /usr/share/wordlists/dirb/common.txt
Check the active project:
dragonrepo status
Generate the reports:
dragonrepo generate
The generated files are:
report.html
report.md
report.json
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
If you forget the basic workflow:
dragonrepo
Commands
dragonrepo start <project>
Creates or resumes a project and makes it the active tracking session.
dragonrepo start acme-corp
dragonrepo stop
Stops the active tracking session.
dragonrepo stop
dragonrepo status
Shows the active project, start time, command count, and project directory.
dragonrepo status
dragonrepo list
Lists known projects.
dragonrepo list
dragonrepo generate [project]
Generates HTML, Markdown, and JSON reports.
For the active project:
dragonrepo generate
For a specific project:
dragonrepo generate acme-corp
dragonrepo open-report [project]
Opens the project's HTML report using an available desktop opener.
dragonrepo open-report
For a specific project:
dragonrepo open-report acme-corp
dragonrepo pdf [project]
Exports the generated HTML report to PDF when a supported PDF engine is available.
dragonrepo pdf
Supported PDF engines currently include wkhtmltopdf and WeasyPrint.
dragonrepo where [project]
Shows project files, evidence, screenshots, scans, and report locations.
dragonrepo where
dragonrepo dashboard [project]
Shows activity categories and command frequency.
dragonrepo dashboard
dragonrepo tools
Shows recognized security tools.
dragonrepo tools
dragonrepo delete <project>
Deletes a project and its local report data.
dragonrepo delete old-project
dragonrepo doctor
Checks local DRAGON directories and launcher state.
dragonrepo doctor
dragonrepo guide
Displays the basic DRAGON workflow.
dragonrepo guide
dragonrepo hook <shell>
Prints shell integration code for command tracking.
dragonrepo hook zsh
dragonrepo hook bash
dragonrepo hook fish
Shell Hooks
Enable the shell hook in every terminal you want tracked.
Zsh
eval "$(dragonrepo hook zsh)"
To enable it automatically:
echo 'eval "$(dragonrepo hook zsh)"' >> ~/.zshrc
Bash
eval "$(dragonrepo hook bash)"
Fish
dragonrepo hook fish
Only use command tracking for systems and engagements you are authorized to assess.
Project Storage
DRAGON stores project data in the user's home directory:
~/.dragonrepo/projects/<project>/
Example:
~/.dragonrepo/projects/test-lab/
A project may contain:
commands.log
notes/
screenshots/
scans/
evidence/
reports/
config.json
dragonrepo.sqlite3
Reports are stored in:
~/.dragonrepo/projects/<project>/reports/
For example:
~/.dragonrepo/projects/test-lab/reports/report.html
~/.dragonrepo/projects/test-lab/reports/report.md
~/.dragonrepo/projects/test-lab/reports/report.json
Evidence
Place evidence files in the appropriate project directory:
~/.dragonrepo/projects/<project>/notes/
~/.dragonrepo/projects/<project>/screenshots/
~/.dragonrepo/projects/<project>/scans/
~/.dragonrepo/projects/<project>/evidence/
Supported evidence file types include:
.xml
.json
.txt
.csv
.png
.jpg
.jpeg
After adding or changing evidence, regenerate the reports:
dragonrepo generate
Recognized Tools
DRAGON automatically categorizes common security tools such as:
nmaprustscanmasscanffufgobusterferoxbusterdirsearchnucleihttpxkatanaamasssubfinderniktosqlmaphydrasmbclientenum4linuxldapsearch
Sensitive Data Protection
Before reports are generated, DRAGON attempts to redact sensitive information such as:
- API keys
- Tokens
- Passwords
- Authorization headers
- Bearer tokens
- Secrets
- Session cookies
Always review generated reports before sharing them externally.
Redaction is a safety aid and should not replace manual review.
Project Structure
The source repository uses a standard Python package layout:
dragonrepo/
├── pyproject.toml
├── README.md
├── LICENSE
├── requirements.txt
└── dragonrepo/
├── __init__.py
├── cli.py
├── modules/
│ ├── __init__.py
│ ├── evidence.py
│ ├── parser.py
│ ├── redactor.py
│ ├── reporter.py
│ ├── timeline.py
│ └── tracker.py
└── templates/
├── report.html.j2
└── report.md.j2
The CLI is exposed through the package entry point:
dragonrepo.cli:app
The Jinja templates are bundled inside the Python package so report generation works after installation.
Development
Build the package locally:
python3 -m pip install --upgrade build
python3 -m build
Run the CLI directly from the source tree:
python3 -m dragonrepo.cli --help
For a clean package test:
python3 -m pip install dist/dragonrepo-1.0.0-py3-none-any.whl
dragonrepo --help
Then test the main workflow:
dragonrepo start packaging-test
dragonrepo status
dragonrepo generate
Troubleshooting
dragonrepo is not found
Make sure the package was installed successfully:
python3 -m pip install .
Then verify:
dragonrepo --help
If the executable was installed into a user-local directory that is not on PATH, add that directory to your shell's PATH.
Report generation fails
Check that the active project exists:
dragonrepo status
Then regenerate:
dragonrepo generate
Commands are not being tracked
Enable the appropriate shell hook again.
For Zsh:
eval "$(dragonrepo hook zsh)"
For Bash:
eval "$(dragonrepo hook bash)"
For Fish:
dragonrepo hook fish
Then run a command and check:
dragonrepo status
report.html cannot be opened
report.html is a file, not a directory.
Use:
dragonrepo open-report
TODO: convert dragonrepo into a pypi package so users can install it with just
pip install dragonrepo
or open the generated HTML file manually in a browser.
License
MIT License.
Metadata
Release files for dragonrepo 1.0.1
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.1.tar.gz | 21.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dragonrepo-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 44.1 kB
Release files / dragonrepo-1.0.1.tar.gz
| Download URL | dragonrepo-1.0.1.tar.gz |
|---|---|
| Size | 21.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
672feb55d9dfd00b9f2e97e7d7042cf83618d0386ce87b28145f6dec8196d2d1
|
|
BLAKE2b-256 checksum How to use checksums |
02dd51dd93dcdc6990d009db84679d70853cb8337912ce8ddbd590656e14a4db
|
| 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 Sep 11, 2026.
Transparency logRelease files / dragonrepo-1.0.1-py3-none-any.whl
| Download URL | dragonrepo-1.0.1-py3-none-any.whl |
|---|---|
| Size | 22.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7bedfffafe590cd0afc9b11ba053bd3ad5d760b745ba4cabc4c15e2b4c0d2bcb
|
|
BLAKE2b-256 checksum How to use checksums |
bd7b48d91328e3a69539ef15ab682cf52231f9141e0bb36ecbaa4b3ba03a9b07
|
| 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 Sep 11, 2026.
Transparency logSecurity for dragonrepo 1.0.1
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.1.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 Sep 11, 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.