Skip to main content

Labinetix workflow CLI for humans and AI agents

Project description

lx-tooling

Tag: Org and orchestration

Labinetix workflow CLI for humans and AI agents. lx-tooling orchestrates GitHub issues, branches, pull requests, releases, local verification, and repository policy checks without owning domain logic.

Non-goals: model semantics, ABI schema ownership, runtime algorithms, or protocol implementations.

Stability

Milestone 1 — issue start and PR prepare. Branch creation and gh pr create require --yes. Release planning comes in Milestone 2.

Quickstart

Prerequisites:

  • Python 3.11+
  • uv
  • gh authenticated (gh auth login)

Local development:

git clone git@github.com:labinetix/lx-tooling.git
cd lx-tooling
uv sync --all-groups
uv run lx --version

Local checks (same as CI):

just check

Or explicitly:

uv sync --all-groups
uv run ruff check .
uv run ruff format --check .
uv run pytest

Install

From PyPI:

uv tool install lx-tooling
lx --version

Upgrade:

uv tool upgrade lx-tooling

From a checkout:

uv sync --all-groups
uv run lx --help

Commands

Inspect the current repository:

lx repo inspect
lx repo inspect --json

Run conservative pre-PR checks:

lx workflow check

Read a GitHub issue with Labinetix readiness hints:

lx issue view 123

Start work from an issue (dry-run by default):

lx issue start 123
lx issue start 123 --yes
lx issue start 123 --yes --comment

Prepare a pull request (dry-run by default):

lx pr prepare
lx pr prepare --yes

Examples:

Development workflow with lx

This is the intended day-to-day loop for a new feature or bugfix in any Labinetix repository once lx is installed. lx wraps git and gh; risky steps stay behind --yes.

flowchart LR
  issue["Issue or bug report"]
  view["lx issue view"]
  start["lx issue start --yes"]
  work["Code tests docs"]
  check["just check + lx workflow check"]
  prepare["lx pr prepare"]
  pr["lx pr prepare --yes"]
  merge["Review + merge main"]
  release["Tag + release notes"]
  issue --> view --> start --> work --> check --> prepare --> pr --> merge --> release

1. Start from an issue

Create a scoped GitHub issue (or use an existing one). The body should include Scope, Tests, and Release impact when possible.

gh issue create --title "fix: ..." --body "## Scope\n..."
lx issue view 123

2. Start the branch

From an up-to-date main:

git checkout main && git pull
lx issue start 123          # preview branch name and readiness
lx issue start 123 --yes --comment

If you prefer a manual branch name, use the Labinetix convention (feat/, fix/, docs/, etc.) and skip --yes.

3. Implement one coherent slice

  • Update code, tests, docs, and examples together
  • Reference the issue in commits: feat(cli): ... (#123) or Refs #123
  • Run the same checks as CI:
just check
lx workflow check

4. Open a pull request

git push -u origin HEAD
lx pr prepare               # preview generated PR body
lx pr prepare --yes         # gh pr create when ready

Review and merge through GitHub as usual. CI and branch protection remain authoritative.

5. Release (maintainers)

After merging to main:

  1. Bump version in pyproject.toml and src/lx_tooling/__init__.py
  2. Add docs/release-notes/vX.Y.Z.md (see below)
  3. Merge the version/release-notes PR
  4. Tag on main and push the tag — CI publishes to PyPI and GitHub Releases
git tag -a v0.2.0 -m "Release v0.2.0"
git push origin v0.2.0

Bugfixes vs features

Kind Branch prefix Typical release
Feature feat/ minor 0.y.0
Bugfix fix/ patch 0.y.z
Docs only docs/ patch or none
CI/tooling ci/ patch

Use lx workflow check before every PR; it warns on wrong branch names, missing AGENTS.md / README.md, and src/ changes without tests/ updates.

What comes later (Milestone 2+)

  • lx release plan — summarize changes since last tag
  • lx release create — guided, dry-run-first release validation
  • More automation does not replace CI, reviews, or protected environments

Design and Agent Rules

Releases and release notes

  • Package name on PyPI: lx-tooling
  • CLI command: lx
  • Latest release: GitHub Releases
  • Artifacts: wheel + sdist built by CI on protected SemVer tags (v*), published to PyPI via trusted publishing (pypi.yml, environment pypi)

Release notes practice

Store release notes in the repository, not only on GitHub:

docs/release-notes/vX.Y.Z.md

Each file should include:

  • User-facing summary and command changes
  • Breaking changes (if any)
  • Linked issues and PRs
  • Session notes when AI agents helped — goal, approach, verification, follow-ups

See docs/release-notes/README.md for the full template and policy.

The PyPI workflow uses the matching file as the GitHub Release body when you push a tag.

Maintainer checklist

  1. Merge feature/fix PRs to main; keep CI green
  2. Open a small PR (or commit on main if policy allows) that bumps version + adds docs/release-notes/vX.Y.Z.md
  3. Merge to main
  4. Tag vX.Y.Z on main and push the tag
  5. Confirm PyPI workflow succeeded; verify uv tool install lx-tooling picks up the new version

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

lx_tooling-0.2.0.tar.gz (28.9 kB view details)

Uploaded Source

Built Distribution

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

lx_tooling-0.2.0-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

Details for the file lx_tooling-0.2.0.tar.gz.

File metadata

  • Download URL: lx_tooling-0.2.0.tar.gz
  • Upload date:
  • Size: 28.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for lx_tooling-0.2.0.tar.gz
Algorithm Hash digest
SHA256 2b7fd27db7ccb36f5f7facfb11308d89f0f5095b40f3530085d9ba45beb14f4d
MD5 29cf22b3ece8cd52da977d37ae1d01d7
BLAKE2b-256 251059f1c4e19f125e4b7ededec73bdd917c5f90c9a1c35e45134332dd232953

See more details on using hashes here.

Provenance

The following attestation bundles were made for lx_tooling-0.2.0.tar.gz:

Publisher: pypi.yml on labinetix/lx-tooling

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

File details

Details for the file lx_tooling-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: lx_tooling-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 18.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for lx_tooling-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f4b9e488965d6c85f0fd6a20c0329eefbf045604e28fbfe3925b96e4b73e9c16
MD5 f3d0dd2381d735a3ad241c9d173c351b
BLAKE2b-256 a0eb0a52268fe768d0f233719b2a38b5317e2316bad9e7b6a2545f5502a5288b

See more details on using hashes here.

Provenance

The following attestation bundles were made for lx_tooling-0.2.0-py3-none-any.whl:

Publisher: pypi.yml on labinetix/lx-tooling

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