Skip to main content

ci docs Version PyPI Python Ruff pre-commit License

Treeparse

Tree-shaped Python CLI framework for building toolboxes you can hand to agents.

Instead of stuffing full tool schemas into an agent's context, give it the toolbox's purpose only — the agent discovers the command tree (-h) or the machine-readable schema (-j) on demand. Treeparse makes this possible by treating your CLI as both an executable interface and a structured data model, which also suits automation workflows and complex nested command hierarchies.

Why Treeparse

Feature argparse Click Typer Treeparse
Tree-structured help No Partial Partial Yes
JSON CLI export No No No Yes
Explicit structural model No No No Yes
Signature validation Minimal No Partial Yes

Quickstart

pip install treeparse
from treeparse import cli, command, argument

def greet(name: str):
    print(f"Hello {name}")

greet_cmd = command(
    name="greet",
    callback=greet,
    arguments=[argument(name="name", arg_type=str)],
)

app = cli(name="demo", commands=[greet_cmd])

if __name__ == "__main__":
    app.run()
$ python app.py greet Alice
Hello Alice

$ python app.py --help
demo
└── greet
    └── <NAME>

$ python app.py --json
{"name": "demo", "commands": [{"name": "greet", "arguments": [{"name": "name", "type": "str"}]}]}

Workflow

1. Build tool 1

# ink.py
ink = cli(name="ink", help="Annotate figures with Inkscape.")
ink.commands.append(command(
    name="new", help="Open a new blank SVG.", callback=new,
    arguments=[argument(name="name", arg_type=str)],
    options=[option(flags=["--notes-dir", "-d"], arg_type=str, default="notes/draw")],
))

2. Build tool 2

# mind.py
mind = cli(name="mind", help="Build mind maps in Minder.")
mind.commands.append(command(
    name="create", help="Create a new mind map.", callback=create,
    arguments=[argument(name="title", arg_type=str)],
))

3. Plug into a toolbox

# toolbox.py
from treeparse import cli
from ink import ink
from mind import mind

toolbox = cli(name="toolbox", help="Creative toolbox.", subgroups=[ink, mind])

if __name__ == "__main__":
    toolbox.run()

4. Teach the LLM

Hand the agent the purpose only — not the schema:

toolbox --stub > skill.md
toolbox — Creative toolbox.

This is a CLI toolbox. Discover its commands and
full schema on demand:
  toolbox -h   # command tree
  toolbox -j   # machine-readable JSON schema

The agent runs -h or -j itself when (and only when) it needs the schema, keeping its context small.

Human-readable tree

toolbox --help
toolbox                      Creative toolbox.
├── ink                      Annotate figures with Inkscape.
│   └── new <NAME>           Open a new blank SVG.
│       └── --notes-dir, -d  Directory to save SVGs (default: notes/draw)
└── mind                     Build mind maps in Minder.
    └── create <TITLE>       Create a new mind map.

Demo

Built-in flags

Two discovery channels: tree for humans, JSON for machines.

Flag Audience Output
--help, -h Human Rich tree, branch-pruned per subcommand
--hv Human Verbose rich tree (callback docstrings)
--json, -j Machine Full CLI structure as plain JSON (no ANSI, no rich wrapping)
--stub Agent skill file Purpose-only blurb — points to -h/-j for the schema
--version, -V Either Auto-detected from package metadata, or set with version= on cli

Examples

The examples/ directory contains 22 executable demonstrations covering every Treeparse feature (themes, group-level arguments/options, chaining, flat sub-cli toolbox composition, nargs="*"| "+", boolean flags, validation errors, root options, JSON export, custom sort/fold, etc.). They are living documentation and the primary reference for users and LLMs.

They are not installed as part of the package. After pip install treeparse only the core library and the treeparse console script are available.

Recommended development workflow

# Clone and set up (once)
git clone https://github.com/wr1/treeparse.git
cd treeparse
uv sync --dev
uv run pre-commit install   # ruff check --fix + ruff format on every commit

# Run any example with an editable install (no need to touch PYTHONPATH)
uv run --with-editable . python examples/demo.py --help
uv run --with-editable . python examples/all_themes_demo.py --help
python examples/validation_error_demo.py --help   # after the uv command above

# Manual lint/format (same as CI and pre-commit)
uv run ruff check --fix .
uv run ruff format .

The test suite (tests/test_examples.py and test_demo_execution.py) loads the examples via importlib.util.spec_from_file_location and will continue to pass without any changes to packaging.

Models

from treeparse import cli, command, group, argument, option
from treeparse.models.chain import chain
Model Purpose
cli Root — reusable as a subgroup in another cli; a flat cli (callback, no commands) acts as a single command when nested
group Namespace with optional fold=True to collapse in help, or default="cmd" to route unknown tokens to a child command
command Executable action with a callback
chain Runs multiple commands in sequence
argument Positional — <ARG> required, [ARG] optional (nargs="?"/"*")
option Named flag, with optional inheritance to child commands

More

  • Folding: group(fold=True) collapses to group [...] — drill in with toolbox ink --help
  • Default subcommand: group(default="open") routes a bare group, an option flag, or an unknown token to that child command (toolbox ink foo → toolbox ink open foo); explicitly-named subcommands always win
  • Inheritance: option(inherit=True) propagates to all child commands
  • Validation: callback param names and types checked against CLI definition at startup
  • YAML config: cli(yml_config=Path("config.yml")) overrides defaults at runtime
  • Themes: theme="github" / "monokai" / "mononeon" / "monochrome"
  • Testing: CliRunner for pytest integration

When to Use

Use Treeparse if you need:

  • Structured CLI composition
  • Toolboxes for LLM agents — purpose-only stubs with schema discovery on demand (--stub, -h, -j)
  • Machine-readable CLI definitions (orchestration, docs pipelines)
  • Complex nested command hierarchies

Avoid if you only need a simple single-script CLI.

Documentation

Hosted docs: https://wr1.github.io/treeparse/

To work on the docs site locally, see docs/README.md.

License

MIT

Metadata

Release files for treeparse 0.3.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for treeparse 0.3.4
File Size Uploaded
treeparse-0.3.4.tar.gz 23.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for treeparse 0.3.4
File Interpreter ABI Platform
treeparse-0.3.4-py3-none-any.whl Python 3 none any Details

Total release size: 51.0 kB

Release files / treeparse-0.3.4.tar.gz

Download URL treeparse-0.3.4.tar.gz
Size 23.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c5421a6441cece94f8964e7c2e7960de6308a0211d10583d47ddae785624b5f4
BLAKE2b-256 checksum
How to use checksums
30aef9627becf20b812ee37203e73ac0b7e519a7761e87fe54c987ca3f08096d
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 Aug 10, 2026.

Transparency log

Release files / treeparse-0.3.4-py3-none-any.whl

Download URL treeparse-0.3.4-py3-none-any.whl
Size 27.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c3b5fd269e613ab34a724da994ff06850f06c61cc353246f6dc406e67441fd43
BLAKE2b-256 checksum
How to use checksums
52503c2bb956a45d998dbbd89955406abd6f0ca0697f701194127064280733ca
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 Aug 10, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.4 This release

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.0

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release 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