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 2 — release planning (lx release plan, lx release create validation). Branch creation and gh pr create require --yes. Tagging and publishing remain manual.

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

List issues ready for agent work:

lx issue list --ready

Filter by one or more labels (repeat --label for AND semantics):

lx issue list --label group:issue-workflow

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

Plan a release (dry-run by default):

lx release plan
lx release create 0.3.0
lx release create 0.3.0 --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

  • Optional lx pr prepare --body-file for manual PR body edits
  • Guarded tag creation and publish automation in a later milestone
  • 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.5.0.tar.gz (59.1 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.5.0-py3-none-any.whl (30.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: lx_tooling-0.5.0.tar.gz
  • Upload date:
  • Size: 59.1 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.5.0.tar.gz
Algorithm Hash digest
SHA256 10c5042e333fbd44746d9c19323b39be3b5611457242b2607d79e788acda4a05
MD5 352b670faa104c5def7f95164f8bd6a5
BLAKE2b-256 0144f4cb34adfa53ec347f7e01207765b0df7cb76b1cb9976b09d55562031483

See more details on using hashes here.

Provenance

The following attestation bundles were made for lx_tooling-0.5.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.5.0-py3-none-any.whl.

File metadata

  • Download URL: lx_tooling-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 30.7 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.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 929aba9d4df088d93cbe017b18005a557d5bc03a9a3abc532b2b630de7869e35
MD5 182951be96e6ad45b48568f8d0c54fd1
BLAKE2b-256 2e810f9ae233527a9f2faf35119ea9d7408050e44620cb2ca9b6e601a735c074

See more details on using hashes here.

Provenance

The following attestation bundles were made for lx_tooling-0.5.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