Observed since 20 Oct, 21:08 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Monitoring and visualization tool for AFL/AFL++ fuzzing campaigns
Monitoring and visualization tool for AFL/AFL++ fuzzing campaigns.
AFL Overseer monitors AFL and AFL++ fuzzing campaigns, providing real-time statistics and performance metrics. It combines features from the original afl-monitor and AFLplusplus/afl-whatsup with additional capabilities.
Standard AFL metrics plus AFL++ extensions:
testcache_size, testcache_count, testcache_evictcpu_affinity, peak_rss_mbedges_found, total_edgesvar_byte_count, havoc_expansion, auto_dict_entriesafl_version, target_modeslowest_exec_ms, execs_since_crash# Install from PyPI
pip install afl-overseer
# Run directly
afl-overseer /path/to/sync_dir
git clone https://github.com/kirit1193/afl-overseer.git
cd afl-overseer
python3 -m venv venv
source venv/bin/activate
pip3 install -r requirements.txt
chmod +x afl-overseer
./afl-overseer /path/to/sync_dir
git clone https://github.com/kirit1193/afl-overseer.git
cd afl-overseer
pip3 install --user -r requirements.txt
chmod +x afl-overseer
# Optional: Install globally
sudo ln -s $(pwd)/afl-overseer /usr/local/bin/
click>=8.1.0 # CLI framework
rich>=13.0.0 # Terminal output
psutil>=5.9.0 # Process monitoring
textual>=0.40.0 # Interactive TUI
aiohttp>=3.8.0 # Web server
# Launch TUI (default mode)
afl-overseer /path/to/sync_dir
# Keyboard controls:
# q - Quit
# r - Refresh now
# 1/2/3 - Compact/Normal/Detailed view
# n/s/c/e/r - Sort by Name/Speed/Coverage/Execs/Crashes
# d - Toggle dead fuzzers
# p - Pause/Resume auto-refresh
# Start web server with TUI
afl-overseer -w /path/to/sync_dir
# Headless mode (no TUI)
afl-overseer -w --headless /path/to/sync_dir
# Custom port
afl-overseer -w -p 3000 /path/to/sync_dir
# Access at http://localhost:8080
# One-time output
afl-overseer -s /path/to/sync_dir
# Detailed per-fuzzer stats
afl-overseer -s -v /path/to/sync_dir
# Execute command on new crash
afl-overseer -s -e './send_alert.sh' /path/to/sync_dir
| Option | Description |
|---|---|
-t, --tui | Interactive TUI mode (default) |
-s, --static | Static terminal output |
-w, --web | Start web server |
-p, --port PORT | Web server port (default: 8080) |
--headless | Run web server without TUI |
-v, --verbose | Show detailed per-fuzzer statistics |
-n, --no-color | Disable colored output |
-i, --interval SEC | Refresh interval in seconds (default: 5) |
-d, --show-dead | Include dead fuzzers in output |
-m, --minimal | Minimal output mode |
-e, --execute CMD | Execute command on new crash |
--version | Show version |
--help | Show help message |
afl-overseer/
├── afl-overseer # Main executable
├── src/
│ ├── cli.py # Command-line interface
│ ├── tui.py # Interactive TUI
│ ├── webserver.py # Web server and dashboard
│ ├── models.py # Data models
│ ├── parser.py # Stats and plot data parsers
│ ├── process.py # Process detection and monitoring
│ ├── monitor.py # Core monitoring logic
│ ├── utils.py # Utility functions
│ └── output_terminal.py # Terminal output formatter
├── requirements.txt # Python dependencies
└── testing/ # Test utilities and benchmarks
Fuzzer status is determined by:
fuzzer_setup newer than fuzzer_stats with recent modificationAutomatic detection of:
The web interface provides:
/api/statsExample API response:
{
"summary": {
"alive_fuzzers": 3,
"total_fuzzers": 3,
"total_execs": 1000000,
"current_speed": 500.0,
"max_coverage": 45.2,
"total_crashes": 5,
"corpus_count": 250
},
"fuzzers": [...],
"system": {...}
}
Execute custom commands when new crashes are detected:
afl-overseer -s -e './notify.sh' /path/to/sync_dir
The command receives summary information via stdin:
AFL Overseer - New Crash Detected!
Timestamp: 2024-01-15 14:30:00
Total Crashes: 5
New Crashes: 2
Active Fuzzers: 8/10
Coverage: 12.34%
Example notification script:
#!/bin/bash
MESSAGE=$(cat)
curl -X POST https://hooks.slack.com/... -d "{\"text\": \"$MESSAGE\"}"
[Unit]
Description=AFL Overseer Web Dashboard
After=network.target
[Service]
Type=simple
User=fuzzer
WorkingDirectory=/home/fuzzer
ExecStart=/usr/local/bin/afl-overseer -w --headless -i 60 /fuzzing/sync_dir
Restart=always
[Install]
WantedBy=multi-user.target
# Start headless web server
afl-overseer -w --headless -p 8080 /sync_dir
# SSH tunnel from local machine
ssh -L 8080:localhost:8080 user@remote-server
# Access at http://localhost:8080
Optimized for scanning large fuzzing campaigns:
Achieves ~600-900 fuzzers/sec throughput through:
See testing/benchmark.py for performance testing.
If you see warnings about process access:
# Add user to fuzzer's group
sudo usermod -a -G fuzzer $USER
Check directory structure:
/sync_dir/
├── fuzzer01/
│ └── fuzzer_stats
├── fuzzer02/
│ └── fuzzer_stats
└── ...
Use: afl-overseer /sync_dir (not /sync_dir/fuzzer01)
AFL Overseer is designed with security as a primary consideration and is safe to expose to the internet with proper network controls.
The codebase undergoes automated security scanning:
See SECURITY.md for detailed security information and best practices.
While designed to be secure, we recommend:
AFL Overseer is a rewrite of the original afl-monitor tool by Paul S. Ziegler. This version addresses security issues in the Python 2.7 codebase (unsafe pickle usage, deprecated modules) and adds support for AFL++ 4.x features, interactive TUI, and web dashboard capabilities.
Key differences from the original:
Thanks to Paul S. Ziegler for the original afl-monitor.
Copyright (c) 2024 kirit1193. Licensed under the MIT License.
Original afl-monitor: Copyright (c) 2017 Paul S. Ziegler, Reflare Ltd. (Apache License 2.0)
See LICENSE for details.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.1.0 | 14 Nov 2025 | 12 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 21:08 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:ef2d8618356fbb64b8e1aa3372c7f036ee92a6b5180654a9e2df1307c8f86a01