axm-doctor — Environment detection and setup orchestration
Environment detection, install planning and credential setup orchestration for AXM. Python 3.12+; part of the axm-forge workspace.
Features
- Report installed tools, authentication states and missing credentials.
- Prepare install plans without executing them.
- Expose structured preflight through AXM tools and a human-readable CLI.
- Orchestrate confirmed setup through axm-vault without owning a secret store.
Installation
Requires Python 3.12 or newer. In a Python project managed by uv:
uv add axm-doctor
Quick Start
After installation, inspect the environment:
uv run axm-doctor check
check reports tools, third-party authentication, declaration provenance and
missing credentials. It does not install or prompt. Normal reporting exits 0;
--strict exits 1 for absent tools, logged_out auth or any missing credential,
including optional ones. Operational errors also exit 1 without --strict.
Usage
Choose an interface
| Need | Interface |
|---|---|
| Human-readable environment report / CI exit code | axm-doctor check [--strict] |
| Structured request–response preflight | env_doctor AXMTool |
| Authentication and value-free provenance | auth_status AXMTool |
| Inspect one tool or prepare an install | Root Python exports |
| Interactive install / vault setup | axm-doctor bootstrap |
The AXM tools are discovered through axm.tools, exposed as axm env_doctor
and axm auth_status, through MCP, and through tool_node. Successful
report generation does not mean the machine is healthy; evaluate the returned
states for your own preflight policy.
Install and inspect
Use uv run axm-doctor check --strict when the report should gate CI.
from axm_doctor import install_command, run_install
plan = install_command("uv")
assert plan is not None
print(plan.human_command)
result = run_install(plan)
assert not result.executed
Planning runs nothing. Installation requires run_install(plan, confirm=True).
The built-in uv plan currently pins 0.8.4; a plan is not a latest-version lookup.
Boundaries
- Importing
axm_doctorresolves exports lazily;detect_toolneeds only stdlib and pydantic. Full reports also use axm-config and axm-vault. - Authentication probes belong to installed credential declarations. Without
a declaration, an installed binary is
undetermined. A declared probe failure or timeout is currentlylogged_out; it is not proof of logout.detect_authcurrently leaveslogin_cmd=None. - Reports contain metadata, not credential values. Detection can launch subprocesses and invoke provider probes; read-only does not mean no I/O.
- Doctor owns no credential store.
provision_missing()plans groups; confirmed execution delegates writes and prompts to vault.provide_secret()writes a value the caller already holds through vault without a TTY, and attests it by re-resolving the catalog rather than by the write returning.
Documentation
Getting started · Task guides · CLI · Python contracts · Architecture and limits
The README is the repository entry point; docs/index.md is the site homepage.
Development
From the axm-forge workspace root:
uv sync --all-packages --all-groups
uv run --package axm-doctor --directory packages/axm-doctor pytest
uv run --package axm-doctor --directory packages/axm-doctor --group docs mkdocs build --strict
The package's configured test root is tests_axm_doctor/. Its standalone
MkDocs build uses the documentation dependencies from the docs group.
License
Licensed under Apache-2.0. See LICENSE.
Metadata
Release files for axm-doctor 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| axm_doctor-0.2.0.tar.gz | 62.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| axm_doctor-0.2.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 91.7 kB
Release files / axm_doctor-0.2.0.tar.gz
| Download URL | axm_doctor-0.2.0.tar.gz |
|---|---|
| Size | 62.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e880836f8bab777e17893af324eb28794b0769e4301f801ed3aa1e880d6db75d
|
|
BLAKE2b-256 checksum How to use checksums |
835be73a4e10870fd23d97f8adf05d2f5a7548f5a3155bf177b7c0c5aa5eb1af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.
Transparency logRelease files / axm_doctor-0.2.0-py3-none-any.whl
| Download URL | axm_doctor-0.2.0-py3-none-any.whl |
|---|---|
| Size | 29.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2dd7b92858b129a3bbe2b3067c90bc27c926b37df8e89fa6a2438864f3e5cd8d
|
|
BLAKE2b-256 checksum How to use checksums |
04de3b5b38bc96e51ea4fdf507b6fadf8b285106bedfa3efba5d819fabebf403
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 15, 2026.
Transparency log