What Can You Build?#
| Extension Point | What It Is | Effort | Start Here |
|---|---|---|---|
| Agent Package | A complete deployable agent with its own crypto, wire protocol, build pipeline, and capabilities | Large | You want to create a new agent in Go, Rust, C, etc. |
| Agent Module | A compiled payload (BOF, shellcode, DLL, etc.) loaded into agents at runtime | Medium | You have compiled tradecraft to deploy through agents |
| Tools Module | A Python plugin for direct network interaction (SSH, SMB, LDAP, etc.) | Small | You want to interact with a new protocol without an agent |
| Transport Plugin | A listener implementation (HTTP, DNS, named pipes, etc.) | Medium | You need a new C2 channel |
How Plugins Work#
All plugin types share the same underlying mechanism:
- Every plugin extends
PluginBasewith a uniqueplugin_name()and aplugin_type() - Discovery is automatic — drop a
.pyfile in the right directory, or install a wheel with entry points - Hot-reload without restart — the plugin watcher detects changes and reloads
- No core changes needed — the framework discovers and wires everything at runtime
| |
Plugin Discovery#
Plugins are discovered through three mechanisms:
1. Directory Scanning#
Drop a .py file in the appropriate directory. The framework scans for PluginBase subclasses:
| |
2. Python Entry Points#
Package your plugin as a wheel and declare entry points in pyproject.toml:
| |
Entry point names must match plugin_name() return values.
3. Plugin Inbox#
Drop .py or .whl files into the inbox directory (plugin_inbox_dir config). The watcher auto-detects the plugin type, moves .py files to the correct directory, and pip-installs .whl files.
Dependencies#
Modules can declare pip dependencies in their metadata:
| |
Missing packages are auto-installed at discovery time. If installation fails, the module is tracked as unavailable (queryable via unavailable_modules).
Development Setup#
| |
Next Steps#
Pick the extension point that matches your goal and follow the dedicated guide.