abx-dl
Purpose
abx-dl runs ArchiveBox plugin hooks against URLs without a full ArchiveBox collection.
Shared Rules
- Keep this repo on branch
main.
- Use
uv and uv run for Python commands.
- Do not use system
python, direct .venv/bin/python, or pip commands.
- Use real CLI commands, real hooks, real installs, real subprocesses, real files, and real URLs or
pytest-httpserver.
- Do not mock, monkeypatch, fake, simulate, skip, xfail, or weaken tests.
- Verify
index.jsonl, hook statuses, output files, config, and filesystem side effects.
- Read
README.md for the full CLI, config, plugin, and release surface.
Development Setup
set -Eeuo pipefail
uv sync
version_output="$(uv run abx-dl version)"
grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$' <<<"$version_output"
Configuration Inspection
set -Eeuo pipefail
timeout_config="$(uv run abx-dl config --get TIMEOUT)"
grep -Eq '^TIMEOUT=[0-9]+$' <<<"$timeout_config"
Basic Usage
set -Eeuo pipefail
output_dir="$(mktemp -d)"
trap 'rm -rf "$output_dir"' EXIT
uv run abx-dl dl --plugins=wget --dir "$output_dir" 'https://example.com'
test -s "$output_dir/index.jsonl"
test -s "$output_dir/wget/example.com/index.html"
grep -q 'Example Domain' "$output_dir/wget/example.com/index.html"
grep -q '"plugin": "wget".*"status": "succeeded"' "$output_dir/index.jsonl"
uv run abx-dl dl --plugins=title,wget,screenshot,pdf 'https://example.com'
uv run abx-dl dl --output=html,json,txt,pdf,image 'https://example.com'
uv run abx-dl install wget ytdlp chrome
uv run abx-dl config --get TIMEOUT
Verification
set -Eeuo pipefail
uv run pytest tests/test_plugins.py::test_filter_plugins_does_not_add_binary_providers_for_wget -q
The basic-usage check above performs the live extractor run and verifies its
manifest and downloaded HTML. Read README.md for install and multi-extractor
examples.
1---2name: abx-dl3description: Use this when working on the standalone ArchiveBox downloader CLI, extractor orchestration, plugin execution, config, and output verification.4---56# abx-dl78## Purpose910`abx-dl` runs ArchiveBox plugin hooks against URLs without a full ArchiveBox collection.1112## Shared Rules1314- Keep this repo on branch `main`.15- Use `uv` and `uv run` for Python commands.16- Do not use system `python`, direct `.venv/bin/python`, or `pip` commands.17- Use real CLI commands, real hooks, real installs, real subprocesses, real files, and real URLs or `pytest-httpserver`.18- Do not mock, monkeypatch, fake, simulate, skip, xfail, or weaken tests.19- Verify `index.jsonl`, hook statuses, output files, config, and filesystem side effects.20- Read `README.md` for the full CLI, config, plugin, and release surface.2122## Development Setup2324<!--25```bash26export UV_PROJECT_ENVIRONMENT="$(mktemp -d)/.venv"27unset VIRTUAL_ENV28```29-->30<!--pytest-codeblocks:cont-->31```bash32set -Eeuo pipefail33uv sync34version_output="$(uv run abx-dl version)"35grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$' <<<"$version_output"36```3738## Configuration Inspection3940```bash41set -Eeuo pipefail42timeout_config="$(uv run abx-dl config --get TIMEOUT)"43grep -Eq '^TIMEOUT=[0-9]+$' <<<"$timeout_config"44```4546## Basic Usage4748```bash49set -Eeuo pipefail50output_dir="$(mktemp -d)"51trap 'rm -rf "$output_dir"' EXIT52uv run abx-dl dl --plugins=wget --dir "$output_dir" 'https://example.com'53test -s "$output_dir/index.jsonl"54test -s "$output_dir/wget/example.com/index.html"55grep -q 'Example Domain' "$output_dir/wget/example.com/index.html"56grep -q '"plugin": "wget".*"status": "succeeded"' "$output_dir/index.jsonl"57```5859```text60uv run abx-dl dl --plugins=title,wget,screenshot,pdf 'https://example.com'61uv run abx-dl dl --output=html,json,txt,pdf,image 'https://example.com'62uv run abx-dl install wget ytdlp chrome63uv run abx-dl config --get TIMEOUT64```6566## Verification6768```bash69set -Eeuo pipefail70uv run pytest tests/test_plugins.py::test_filter_plugins_does_not_add_binary_providers_for_wget -q71```7273The basic-usage check above performs the live extractor run and verifies its74manifest and downloaded HTML. Read `README.md` for install and multi-extractor75examples.