Skip to content

Packaging: let users install a single tool (e.g. voice-type) without the whole suite #115

Description

@pchalasani

Problem

claude-code-tools ships ~17 CLI tools in one PyPI package. Installing any one tool (e.g. just voice-type) pulls the base dependencies for all of them, and there is no way to say "give me only this tool."

Options

A. Slim base + per-tool extras (cheap; no restructure)

Move heavy base deps (tantivy, mcp, questionary, ...) into per-tool optional-dependency groups so the base install is a skeleton. Each tool documents its extra: uv tool install "claude-code-tools[voice-mlx]", `[aichat]", etc. All entry points still land on PATH (unavoidable within one package) but dependency weight becomes pay-per-tool. Cost: existing users must add the right extra; imports must stay lazy (mostly already true).

B. uvx-first docs (zero work)

uvx --from "claude-code-tools[voice-mlx]" voice-type avoids any permanent install. Complements A; doesn't reduce resolution weight.

C. Extract voice-type as a uv workspace member publishing its own PyPI package

Give claude_code_tools/voice_type/ its own pyproject.toml as a uv workspace member in this same repo (no code moves, monorepo intact). Publishes as voice-type -> users run uvx voice-type. claude-code-tools[voice] then depends on it, so existing users are unaffected. voice-type is the easiest candidate: fully self-contained subpackage, zero imports from the rest of the repo. Cost: second publish target in Makefile/commitizen, PyPI name claim. Also the best marketing story (standalone Show-HN-able tool).

Non-options

  • uv tool install/pipx have no "subset of entry points" flag.
  • PEP 735 dependency groups aren't consumable by end users from PyPI.

Recommendation

A now (pyproject-only, benefits every tool), C for voice-type when we want to promote it standalone.

Context: raised while building voice-type on PR #114.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions