Skip to main content

bhtool

Assorted CLI utilities that are handy in Bosco’s day-to-day work—version bumps, file conversions, process helpers, macOS shortcuts, LLM-assisted movie renaming, and other small odds and ends. Python ≥3.13.

Install options

Option Description
uvx bhtool … Run from PyPI on demand (no clone). Example:uvx bhtool --help, uvx bhtool run cursor.
uv tool install bhtool Install**b** / bhtool globally from PyPI (released versions).
uv sync then uv run bhtool … Use the project venv from a checkout (no global install).
uv tool install . Install**b** / bhtool globally from the current directory (pinned copy).
uv tool install --editable . Install**b** / bhtool globally in editable mode from a checkout (code changes apply without reinstall).

Commands

Command Description
bumpver Bump version inpyproject.toml, commit, push; PyPI publish is on by default (--no-publish to skip)
run Open macOS applications by partial name (e.g.uvx bhtool run cursor or b run cursor after a local install)
clr-chmod Remove execute bit from non-shell files; tighten group/other write
npread Print the shape of NumPy.npy files
psword Find processes by name;--kill to terminate
port Find processes listening on TCP ports;--kill to terminate
rm-npm Recursively deletenode_modules dirs and package-lock.json files
text Convert between Markdown, HTML, DOCX, and Pug (needspandoc and related tools on PATH)
todict JSON or YAML file, or stdin, → Pythondict(...)-style repr on stdout
movies uvx bhtool movies (or b movies) — ask an LLM for normalized names; writes movie_mapping.json in the current working directory; --execute applies renames (default is dry-run table)
gdoc Pull/push Google Docs as Markdown (`b gdoc pull push

Movies + LLM

b movies asks an LLM for normalized names. --service <name> selects a provider for one run (groq, google, openai, anthropic, mistral, deepseek, xai, bedrock, ollama — see b movies --help). Without it, the provider comes from LLM_SERVICE, else from the first API key in the environment, else ollama. Set keys in the process environment or in bhtool/.env (loaded from the installed package directory). Each provider uses one cheap model from bhtool/llm_services.py through pydantic-ai.


jtools

Node CLI: pug formatting, agent config copy. Usage: jtools <subcommand>

Install: cd jtools && npm install — dependencies only; this package is not published, so run it from that directory (or npm link after install).

Run (after install): npx jtools <subcommand> resolves the local jtools binary (same as node_modules/.bin/jtools). Examples: npx jtools format-pug, npx jtools copy-agent.

Subcommand Description
format-pug Format pug in./index.html
copy-agent Copy~/.claude/CLAUDE.md → ./AGENT.md

Metadata

Release files for bhtool 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for bhtool 0.5.0
File Size Uploaded
bhtool-0.5.0.tar.gz 19.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bhtool 0.5.0
File Interpreter ABI Platform
bhtool-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 43.0 kB

Release files / bhtool-0.5.0.tar.gz

Download URL bhtool-0.5.0.tar.gz
Size 19.7 kB
Tags Source
SHA-256 checksum
How to use checksums
af45826e246b9ac336ece2f9a14453cfc507c0fc1689b1b7f318cfcf2806fd5a
BLAKE2b-256 checksum
How to use checksums
2901d3dab14f284919c000407458e1f88f264948f5f00305cb85b29459b19074
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / bhtool-0.5.0-py3-none-any.whl

Download URL bhtool-0.5.0-py3-none-any.whl
Size 23.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c60255ef3f12641234eae9c52522b369ca331ebf87f797d41a89dbc3a155aa95
BLAKE2b-256 checksum
How to use checksums
85189fbc2227f6351a03c392131ed71a5b0a293656830b373831525eaf2ab515
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release history Release notifications | RSS feed

0.5.1

2 release files

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.10

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page