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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lazyaddon-1.0.0.tar.gz (36.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lazyaddon-1.0.0-py3-none-any.whl (35.4 kB view details)

Uploaded Python 3

File details

Details for the file lazyaddon-1.0.0.tar.gz.

File metadata

  • Download URL: lazyaddon-1.0.0.tar.gz
  • Upload date:
  • Size: 36.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for lazyaddon-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0b2b8448c293a319e6b0fc41715af73942fc257e69d4e4cd116a62bc7ebe9d59
MD5 795727aa27d8db78c77213cb11d634d7
BLAKE2b-256 3f556da414e348878f93904061422b0a4aff03687c6e851da6fe210468ad7c9e

See more details on using hashes here.

File details

Details for the file lazyaddon-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: lazyaddon-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 35.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for lazyaddon-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 da627f9f8abfc038a254b2a3241187535de3c29541f67ff2385eb250acb583ee
MD5 3701103356b551a526aa31506fe3f6b0
BLAKE2b-256 a35f5756305075d8e2636a8b579ed71aa5a92994016c9fd97e49a936926eebb7

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 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