The CLI: sharness-ai
A Python package, sharness-ai, that will carry the SHarness launcher and components. Its command is sharness-ai. Source: SHarness-AI/SHarness-AI__CLI.
Install & use
$ pip install sharness-ai $ sharness-ai --version sharness-ai v0.1.0 $ sharness-ai usage: sharness-ai [-h] [--version]
Requires Python 3.11 or later. No runtime dependencies. The release shown is the first one, as of 24 Oct 2026.
Why sharness-ai, not sharness
Plain sharness is the Debian, pkgsrc and OpenBSD package name of an unrelated shell test library, so SHarness does not use it as a command. sharness-ai matches the PyPI distribution. The first release, v0.1.0, also installed a sharness shorthand; it is removed on the CLI's dev branch and goes with the next release. Environment variables will use the prefix SHARNESS_AI_ (proposed).
Where the version lives
One file owns it: sharness_ai/version. sharness-ai --version reads that file at import time; CI writes it, together with the version in pyproject.toml, on every release. The same convention as sgit.
How it is released
Day-to-day work lands on dev, the default branch. Merging dev into main cuts a release: every push to main runs .github/workflows/workflow.yml in the CLI repository:
| Job | What it does |
|---|---|
| Run Unit Tests | pytest tests/unit with coverage. A failure stops the release. |
| Increment Tag | Bumps the middle number (v0.N.0 → v0.N+1.0), writes it to the version file, pyproject.toml and the README badge, commits, and tags. |
| Publish to: PYPI | Builds with Poetry and uploads with twine through Trusted Publishing: GitHub's OIDC token is exchanged for a short-lived PyPI token, so no API key is stored anywhere. |
sharness-ai is bound to the repository and the workflow filename (workflow.yml). The publish job therefore lives in that file, not in a reusable workflow it calls. Renaming the file breaks publishing until the PyPI configuration is updated to match.