Publishing
Python Packages (PyPI)
Section titled “Python Packages (PyPI)”The repository publishes three independent Python distributions. The root
package is claude-code-tools; voxtype and visual-brief have their own
versions, tags, build artifacts, and PyPI releases.
All publish commands load PYPI_TOKEN from the primary Git checkout’s .env
without printing it. Linked worktrees share that file. To load another dotenv
file, pass PYPI_ENV_FILE=/path/to/file to the publish command.
claude-code-tools
Section titled “claude-code-tools”Use the all-* Make commands to prepare a release, then publish:
make all-patch # or all-minor, all-majormake publishWhat the Commands Do
Section titled “What the Commands Do”Each all-* command automatically:
- Bumps the version (patch, minor, or major)
- Pushes to GitHub and pushes tags
- Creates a GitHub release
- Cleans old builds and builds the package
The wheel build runs npm ci against node_ui/package-lock.json in a
temporary directory. It includes only locked production dependencies and does
not use or change the source tree’s node_modules/ directory. A missing or
inconsistent lock file stops the build.
The built package includes its Node dependencies, so users do not need to run
npm install. They need Node.js 18 or newer.
After the build completes, run make publish to upload to PyPI. It requires
both wheel and source distributions in dist/.
Voxtype
Section titled “Voxtype”Prepare a patch release, then publish its wheel and source distribution:
make voxtype-all-patch # or voxtype-all-minor, voxtype-all-majormake voxtype-publishThe first command runs the Voxtype tests, bumps its independent version,
updates uv.lock, commits the bump, creates and pushes a voxtype-vX.Y.Z tag,
creates the GitHub release, and builds the package. The second command uploads
only dist/voxtype-* to PyPI.
To choose the bump and publish in one invocation, run:
make voxtype-all BUMP=patch # or minor, majorUse make voxtype-version to print the current package version.
Visual Brief
Section titled “Visual Brief”Prepare a patch release, then publish its wheel and source distribution:
make visual-brief-all-patch # or -minor, -majormake visual-brief-publishThe first command runs the Visual Brief tests, bumps its independent version,
updates uv.lock, commits the bump, creates and pushes a
visual-brief-vX.Y.Z tag, creates the GitHub release, verifies the committed
browser bundle, and builds the package. The second command uploads only
dist/visual_brief-* to PyPI.
To choose the bump and publish in one invocation, run:
make visual-brief-all BUMP=patch # or minor, majorUse make visual-brief-version to print the current package version. Rebuild
and commit changed browser assets with make visual-brief-frontend before
starting a release.
Alternate PyPI Credentials
Section titled “Alternate PyPI Credentials”Pass another dotenv file to any publish target when needed:
make publish PYPI_ENV_FILE=~/.config/claude-code-tools/pypi.envmake voxtype-publish PYPI_ENV_FILE=~/.config/claude-code-tools/pypi.envmake visual-brief-publish PYPI_ENV_FILE=~/.config/claude-code-tools/pypi.envRust Binaries (crates.io)
Section titled “Rust Binaries (crates.io)”aichat-search
Section titled “aichat-search”make aichat-search-publishThis command:
- Bumps the version (default: patch; override with
BUMP=minororBUMP=major) - Creates a
rust-v*git tag - Pushes to GitHub (triggers CI for binary releases)
- Publishes to crates.io
After publishing, users can install with:
cargo install aichat-searchOr via Homebrew:
brew install pchalasani/tap/aichat-searchmake lmsh-publishThis command:
- Bumps the patch version
- Publishes to crates.io
After publishing, users can install with:
cargo install lmshSee Also
Section titled “See Also”- Make Commands — full list of all available Make targets
- Testing — verify changes before publishing