Skip to main content

lazyaddon

Declarative tool and extension manager. Turn any GitHub/GitLab project into an installable, runnable addon from a single YAML file — then use it programmatically, from the lazyaddon CLI, or through a declarative project file. Born from the spirit of LazyOwn's lazyaddons and Estorides' source marketplace: simplify extending a tool by adding new sources, origins or apps as versioned, shareable YAML addons.

Features

  • YAML-declared addons with params, install and execute commands.
  • Safe placeholder substitution ({name} / {{ name }}) with shell-quoting of runtime-injected values to prevent command injection.
  • Security policy: allows only https repo URLs, optional host allow-list, length limits, and install paths that cannot escape the install root.
  • Install is idempotent: clone + build only when not already present.
  • Marketplace: add / remove register new addons as YAML files.
  • Declarative project runner for non-programmers.
  • Fully typed, single-file-per-contract, DRY and SOLID.

Installation

pip install lazyaddon

Quick start

Programmatic

from lazyaddon import LazyAddonEngine

engine = LazyAddonEngine()          # configurable via AddonConfig
engine.discover()                   # scan ./addons/*.yaml
result = engine.run("beacon", {"lhost": "10.0.0.1"})
print(result.stdout)

CLI

lazyaddon list
lazyaddon run beacon --param lhost=10.0.0.1
lazyaddon add mytool --repo https://github.com/user/repo.git --cmd "./build.sh"

Declarative project YAML (non-programmers)

project.yaml:

install_root: external
addons_dir: addons
addons:
  - name: beacon
    install: true
    run: true
    params:
      lhost: 10.0.0.1
lazyaddon project project.yaml

Addon schema

name: beacon
description: Builds and deploys a C2 beacon.
author: Red Team
version: "1.0"
enabled: true
os: any
category: 10. Command & Control
params:
  - name: lhost
    type: string
    required: true
    description: Listener host.
tool:
  name: beacon
  repo_url: https://github.com/grisuno/beacon.git
  install_path: c2/beacon
  install_command: make windows
  execute_command: ./gen_beacon.sh --lhost {lhost}
  lazycommand: encode --in payload.bin
  remote_command: run --payload payload.bin
  upload_file: payload.bin
  download_file: C:\\results\\out.txt
  env:
    KEY: "{aes_key}"

Runtime parameter values are shell-quoted on substitution; YAML-declared defaults are trusted and left unquoted.

Configuration

Every tunable knob lives in AddonConfig (no magic numbers):

Field Default Purpose
addons_dir addons Directory scanned for addon YAMLs
install_root external Root for cloned repos
allowed_repo_hosts () Allowed repo hostnames (empty = any https)
allowed_repo_schemes ("https",) Permitted repo URL schemes
clone_depth 1 git clone --depth
command_timeout_seconds 600 Subprocess timeout
quote_runtime_values True Shell-quote runtime param values

Security

See SECURITY.md. Key guarantees:

  • https-only repository URLs, optional host allow-list.
  • No arbitrary code evaluation in placeholders.
  • Install paths confined to the install root (no traversal).
  • Null-byte and length checks on commands.
  • Shell-quoting of untrusted parameter values.

Development

pip install -e ".[dev]"
pytest                          # TDD/BDD suite
pytest --cov=lazyaddon          # coverage
ruff check lazyaddon tests      # lint
mypy lazyaddon                  # types
bandit -r lazyaddon             # security scan
mutmut run --paths-to-mutate lazyaddon  # mutation testing
python -m build                 # build sdist + wheel for PyPI

License

GPL-3.0-or-later. See LICENSE.

Metadata

Release files for lazyaddon 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for lazyaddon 1.0.0
File Size Uploaded
lazyaddon-1.0.0.tar.gz 36.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for lazyaddon 1.0.0
File Interpreter ABI Platform
lazyaddon-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 72.0 kB

Release files / lazyaddon-1.0.0.tar.gz

Download URL lazyaddon-1.0.0.tar.gz
Size 36.6 kB
Tags Source
SHA-256 checksum
How to use checksums
0b2b8448c293a319e6b0fc41715af73942fc257e69d4e4cd116a62bc7ebe9d59
BLAKE2b-256 checksum
How to use checksums
3f556da414e348878f93904061422b0a4aff03687c6e851da6fe210468ad7c9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / lazyaddon-1.0.0-py3-none-any.whl

Download URL lazyaddon-1.0.0-py3-none-any.whl
Size 35.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
da627f9f8abfc038a254b2a3241187535de3c29541f67ff2385eb250acb583ee
BLAKE2b-256 checksum
How to use checksums
a35f5756305075d8e2636a8b579ed71aa5a92994016c9fd97e49a936926eebb7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page