Skip to main content

Scaffold a clispec-compliant, agent-facing Rust CLI in seconds.

Project description

clihatch

CI crates.io clispec

Scaffold a complete, clispec-compliant, agent-facing Rust CLI in seconds - source skeleton, schema + conformance test, and the GitHub-hosted dual-publish release pipeline. No more copying your last tool and sed-ing the name.

Install

cargo install clihatch

Usage

clihatch new my-tool
cd my-tool && make check      # lint + tests pass out of the box
./target/debug/my-tool 21     # the example command runs

Options: --description, --owner (default rvben), --author (default: git config), --into <dir>, --no-git, --github.

The whole path from nothing to a published release is four steps, and clihatch does three of them:

clihatch new my-tool --github   # scaffold + git commit + create & push the repo
cd my-tool && make check        # lint + tests, green out of the box
clihatch secrets my-tool        # bootstrap the three release secrets
vership release                 # tag + dual-publish

--github creates the public owner/name repo and pushes the initial commit (via gh), so clihatch secrets can run immediately. Without it, clihatch new prints the exact gh repo create command in its next-steps. Every new run lists the remaining steps through to a release.

Bootstrap release secrets

Once the repo exists on GitHub, wire up the three secrets the release pipeline needs in one step:

clihatch secrets my-tool            # -> rvben/my-tool
clihatch secrets my-tool --dry-run  # show what would be set, touch nothing
  • HOMEBREW_TAP_DEPLOY_KEY - generates an ed25519 key, registers it as a write deploy key on the tap (--tap, default rvben/homebrew-tap), and stores the private key. This is the fiddly part, fully automated.
  • CARGO_REGISTRY_TOKEN - read from $CARGO_REGISTRY_TOKEN or ~/.cargo/credentials.toml.
  • PYPI_API_TOKEN - read from $PYPI_API_TOKEN / $UV_PUBLISH_TOKEN, the [pypi] token in ~/.pypirc, or --pypi-token-stdin.

It preflights gh auth and repo access, so it fails fast (before generating a key) if you are not logged in. Re-running is idempotent: it rotates the deploy key (dropping the prior key with the same title) so the key and the stored secret stay in sync. Missing token sources are skipped with a hint, never invented.

What you get

A ready-to-cargo build, ready-to-release crate:

  • src/ - a minimal but complete clispec CLI: a default command, schema, completions, the structured-error envelope, exit-code contract, and TTY-aware -o auto|json|text. Replace the example run logic with yours.
  • schemas/clispec-v0.2.json + tests/conformance.rs - your schema output is validated against the spec by the test suite.
  • tests/cli.rs - end-to-end tests of the binary.
  • The dual-publish pipeline - .github/workflows/{ci,release}.yml (GitHub-hosted, building macOS + Linux for crates.io + PyPI + Homebrew), pyproject.toml (maturin), Makefile, prek.toml, README.md, LICENSE, .gitignore.
  • A git init + initial commit (skip with --no-git). Generated sources are cargo fmt-clean.

clihatch is itself built with its own output's conventions - it eats its own dog food, and its test suite scaffolds a crate and compiles it to prove the templates stay valid.

Exit codes

code meaning
0 success
2 IO, git, or backend (gh/ssh-keygen) failure
3 usage error, or the target directory already exists

For agents (clispec)

clihatch schema

Structured output on stdout, structured error envelopes on stderr, a schema subcommand validated against clispec.dev/schema/v0.2.json. new and secrets are the mutating: true commands; new never overwrites, and secrets supports --dry-run.

License

MIT

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

clihatch-0.1.4.tar.gz (42.0 kB view details)

Uploaded Source

Built Distributions

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

clihatch-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (559.2 kB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

clihatch-0.1.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (518.7 kB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

clihatch-0.1.4-py3-none-macosx_11_0_arm64.whl (504.3 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

clihatch-0.1.4-py3-none-macosx_10_12_x86_64.whl (541.9 kB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file clihatch-0.1.4.tar.gz.

File metadata

  • Download URL: clihatch-0.1.4.tar.gz
  • Upload date:
  • Size: 42.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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 clihatch-0.1.4.tar.gz
Algorithm Hash digest
SHA256 e31451bf50dc9f2b6ecc32ed10782d7becc62560eebf1c2f425ab00a3e035c33
MD5 6fd781a2869e930988cf5015c783d73a
BLAKE2b-256 d5337294b14d6face581c4b50dc3266dda941e401fff510312cd404a79be8951

See more details on using hashes here.

File details

Details for the file clihatch-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: clihatch-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 559.2 kB
  • Tags: Python 3, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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 clihatch-0.1.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f2985db1c35f764c59af5ca37d0894c7016f7290c6f90df4f8d356eaba050d2c
MD5 a9e69ceaa788e00dc9f2b92f7e2a3013
BLAKE2b-256 c6c81e6d8cb4a32922615efd327aeda63e947bba27f5410e3090892d39bf6dbc

See more details on using hashes here.

File details

Details for the file clihatch-0.1.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

  • Download URL: clihatch-0.1.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
  • Upload date:
  • Size: 518.7 kB
  • Tags: Python 3, manylinux: glibc 2.17+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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 clihatch-0.1.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5b19ffbc022ebcb41b4961866528815e1e0e20746857937593dc6d67d213e196
MD5 da3d7e7731fba8c5329e2af5208e94e5
BLAKE2b-256 8d327b463db3da11b209ccb76e5c421aba9fb7112134cb29c67fae5a2fee4f54

See more details on using hashes here.

File details

Details for the file clihatch-0.1.4-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: clihatch-0.1.4-py3-none-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 504.3 kB
  • Tags: Python 3, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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 clihatch-0.1.4-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0dbc98e02003d9bba7b83f5bb5058aae502777f0d1b1b150cc85359f6d20e046
MD5 761297c9d0309c568461422cb4f498eb
BLAKE2b-256 9dcbc6e5816c514ec55fd115d0b5d0a531052a527be8cd42f29e3ee9adfcc695

See more details on using hashes here.

File details

Details for the file clihatch-0.1.4-py3-none-macosx_10_12_x86_64.whl.

File metadata

  • Download URL: clihatch-0.1.4-py3-none-macosx_10_12_x86_64.whl
  • Upload date:
  • Size: 541.9 kB
  • Tags: Python 3, macOS 10.12+ x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.23 {"installer":{"name":"uv","version":"0.11.23","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 clihatch-0.1.4-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2b096d2d25643083acdd923b84e10ccd922bf731e7be37f22a8f5a85e9666833
MD5 fdaee8e84d94c0496615f6a355756946
BLAKE2b-256 df12629919d3ccf900337074baf60f1670a9857ecd1b9abec18fe1224d450f23

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