Skip to main content

A batteries-included CLI framework for building standalone DevOps tools.

Project description

untaped

untaped is a batteries-included CLI framework for building standalone DevOps tools on cyclopts. It is an SDK, not an app: there is no central untaped command. You build a tool, depend on the SDK, and ship an independent CLI.

The SDK gives every tool, for free:

  • Config — a shared ~/.untaped/config.yml with top-level active: / profiles:, per-profile SDK http / ui settings, and each tool's own profile settings plus tool-managed top-level state.
  • Profiles — named overlays (dev, prod, homelab) and a --profile root option, built in.
  • Themes — built-in theme presets for consistent terminal styling.
  • Output — consistent --format json|yaml|table|raw|pipe and --columns, so commands compose. pipe is a self-describing NDJSON record stream another untaped tool can read back. emit(...) renders a single entity as a vertical detail view or a sequence as a collection, dispatching by shape.
  • HTTP / UI helpers — an HttpClient with profile-aware TLS, automatic retries for transient failures (RetryPolicy), and pagination helpers, plus a UiContext for messages, prompts, and progress.
  • Config tooling<tool> config doctor diagnoses the shared file and <tool> config edit opens it in $VISUAL/$EDITOR; a --quiet root option mutes progress and success/info chatter.

You import the surface from untaped.api (re-exported from the untaped package root), declare a ToolSpec, and call run_tool(app, spec) from your tool's main(). The contract surface is the __all__ list in src/untaped/api.py.

# my_tool/__main__.py
from untaped.api import create_app, run_tool, ToolSpec
from my_tool.settings import MyProfile

app = create_app(...)

def main() -> None:
    run_tool(app, ToolSpec(
        command="untaped-mytool",
        section="mytool",
        profile_model=MyProfile,
    ))
# pyproject.toml
[project]
dependencies = [
    "untaped>=2.4.4,<3",
]

[project.scripts]
untaped-mytool = "my_tool.__main__:main"

Suite repos may keep a [tool.uv.sources] git tag while developing against an exact SDK release. Published wheels are built with uv build --no-sources, so package metadata resolves from the declared PyPI range.

Requirements

Python 3.14 and uv.

The suite

Seven tools are built on the SDK. Each is an independent CLI installed into its own uv tool environment. As each PyPI-backed tool completes its first package release, install it by package name:

uv tool install untaped-github
uv tool install untaped-jira
uv tool install untaped-awx
uv tool install untaped-ansible
uv tool install untaped-workspace
uv tool install untaped-recipe
uv tool install git+https://github.com/alexisbeaulieu97/untaped-apple-health.git

untaped-apple-health is outside the current PyPI release wave; install it from git until that repo owns a package release workflow.

Because every tool reads the same ~/.untaped/config.yml and shares the same --format pipe envelope, independently installed tools interoperate and compose:

untaped-awx job-templates list --format raw --columns name \
  | fzf \
  | untaped-awx job-templates get --stdin --format json

Documentation

User-facing docs live in docs/:

Per-tool command references live in each tool's own repo:

Security

Please report suspected vulnerabilities privately. See SECURITY.md.

Contributing

See CONTRIBUTING.md and AGENTS.md for the local workflow, architecture rules, and recipes for extending the SDK and its tools.

License

MIT. See LICENSE.

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

untaped-2.4.4.tar.gz (69.5 kB view details)

Uploaded Source

Built Distribution

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

untaped-2.4.4-py3-none-any.whl (90.4 kB view details)

Uploaded Python 3

File details

Details for the file untaped-2.4.4.tar.gz.

File metadata

  • Download URL: untaped-2.4.4.tar.gz
  • Upload date:
  • Size: 69.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for untaped-2.4.4.tar.gz
Algorithm Hash digest
SHA256 7a1a153099efe7f609f2cdc42d4adbd27fb9f0cbccffbb46e2e55e7cb456101a
MD5 16b0ea70349097903cf8e83018adc114
BLAKE2b-256 ed084846e16233853f1430006c1768a449ea0d927db7792a518c882b9a7079e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for untaped-2.4.4.tar.gz:

Publisher: release.yml on alexisbeaulieu97/untaped

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file untaped-2.4.4-py3-none-any.whl.

File metadata

  • Download URL: untaped-2.4.4-py3-none-any.whl
  • Upload date:
  • Size: 90.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.13

File hashes

Hashes for untaped-2.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 838097528a191b4f98d82dcf04507107397df3fc3f9fbb4f540648706f0a2ace
MD5 4d0c0e31c8cb631adf4c03abcb36ac4a
BLAKE2b-256 8af0739c38dc49700538d040bd76eff79f26f9959b717cef97c5de57777f77bc

See more details on using hashes here.

Provenance

The following attestation bundles were made for untaped-2.4.4-py3-none-any.whl:

Publisher: release.yml on alexisbeaulieu97/untaped

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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