Skip to main content

auntiepypi — both ends of the Python distribution pipe for the AgentCulture mesh.

Project description

auntiepypi

auntie (Python distribution: auntiepypi) is both a CLI and an agent that maintains, uses, and serves the CLI for managing PyPI packages. It overviews packages on pypi.org, detects PyPI-flavored servers running locally, and can start declared servers — informational first, actionable with --apply. Stop/restart lands in v0.5.0.

Status: v0.4.0 — doctor lifecycle landed. auntie doctor is now a managed_by-aware lifecycle dispatcher: --apply replaces --fix, _actions/ provides systemd-user and command strategies, numbered .bak snapshots guard every pyproject.toml mutation. The packages noun is removed — use auntie overview <PKG> instead.

Quick start

uv tool install auntiepypi
auntie --version
auntie overview --json | jq '.sections[] | select(.category == "servers")'
auntie overview requests            # deep-dive into a PyPI package
auntie doctor                       # diagnose declared servers (dry-run)
auntie doctor --apply               # act on actionable remediations

Example servers-section output (one declared server):

{
  "category": "servers",
  "title": "main",
  "light": "green",
  "fields": [
    {"name": "flavor", "value": "pypiserver"},
    {"name": "port",   "value": "8080"},
    {"name": "status", "value": "up"},
    {"name": "source", "value": "declared"}
  ]
}

For the overview and doctor to show anything, add the relevant blocks to your repo's pyproject.toml:

[tool.auntiepypi]
packages = ["requests", "pip"]
scan_processes = false             # opt into /proc scan; same as `--proc`

[[tool.auntiepypi.servers]]
name = "main"
flavor = "pypiserver"
port = 8080
managed_by = "systemd-user"
unit = "pypi-server.service"

auntie doctor walkthrough

auntie doctor classifies every known server into one of four categories and explains exactly what to do next:

$ auntie doctor
# auntie doctor
summary: 1 actionable, 1 half-supervised, 1 skip, 0 ambiguous (3 total)

  main          down     declared    managed_by=command
      diagnosis: down; would dispatch managed_by='command'
      remediation: auntie doctor --apply

  stale         down     declared    managed_by=systemd-user
      config_gap: managed_by="systemd-user" requires `unit`
      diagnosis: half-supervised; --apply would delete this entry
      remediation: add `unit = "…"` to keep supervision, or run `auntie doctor --apply`

  pypiserver:8080  up    port        observed; not declared
      remediation:
          [[tool.auntiepypi.servers]]
          name = "…"
          flavor = "pypiserver"
          port = 8080
          managed_by = "manual"

(dry-run; pass --apply to act on 2 remediations)

Pass --apply to act. A numbered snapshot is written before any edit:

$ auntie doctor --apply
wrote pyproject.toml.1.bak (rollback: mv pyproject.toml.1.bak pyproject.toml)
...

If two entries share the same name, use --decide to choose which to keep (or remove):

$ auntie doctor --apply --decide=duplicate:main=1
wrote pyproject.toml.1.bak (rollback: mv pyproject.toml.1.bak pyproject.toml)
wrote pyproject.toml: removed [[tool.auntiepypi.servers]] entry 'main' occurrence 1 (lines 7-12)
...

See docs/about.md for the longer non-technical explainer. systemd-user unit templates for pypiserver / devpi-server live in docs/deploy/.

Develop

uv sync                          # install + dev deps
uv run pytest -n auto -v         # tests
uv run auntie --version          # smoke
uv run pre-commit install        # enable lint hooks

Quality pipeline mirrors the rest of the AgentCulture mesh: black, isort, flake8 (+ flake8-bandit, flake8-bugbear), pylint, bandit, markdownlint-cli2. CI runs on every PR + push to main.

Trusted Publishing

ghafi provisions the pypi / testpypi GitHub Environments and .github/workflows/publish.yml follows the same OIDC Trusted Publishing pattern every sibling uses — no secrets in the repo.

License

MIT. © 2026 Ori Nachum / AgentCulture.

— Claude

Project details


Download files

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

Source Distribution

auntiepypi-0.4.0.tar.gz (242.0 kB view details)

Uploaded Source

Built Distribution

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

auntiepypi-0.4.0-py3-none-any.whl (63.2 kB view details)

Uploaded Python 3

File details

Details for the file auntiepypi-0.4.0.tar.gz.

File metadata

  • Download URL: auntiepypi-0.4.0.tar.gz
  • Upload date:
  • Size: 242.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for auntiepypi-0.4.0.tar.gz
Algorithm Hash digest
SHA256 70c1e5c8f1f972937336a698eb5a5222feaa48f088bfdc40e374f46100157cc3
MD5 df9fe842960f746821eba8c94e61b8bb
BLAKE2b-256 afc1363668686c5cfd581a62630acb28bcd4fda455c9eb55662504acdd30c6b2

See more details on using hashes here.

File details

Details for the file auntiepypi-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: auntiepypi-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 63.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for auntiepypi-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 71f5efda74f647845d823140bb6bb87023b7d1cceeb8b6429e158f1468d885e8
MD5 52b886cbb3b77e780c9dc217b9574e1e
BLAKE2b-256 ee601c8fc6653bf185394f260d2a17e01f49fe421eed204e5b9c752b1300d594

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page