shelp
cmd? → TL;DR. cmd?? → a full, man-page-grounded cheat sheet. ?? → chat.
All backed by your choice of model via OpenRouter (or any local
OpenAI-compatible server) — no agent harness, no vendor lock.
$ jq? # TL;DR — one-liner + 5 common invocations
$ ffmpeg?? # full sheet: tasks · flags · gotchas · preview safely
c) chat · r) regenerate · q) quit
$ tar?? list a tar.gz # sheet + inline answer
$ ?? # general chat (shelp's own agentic loop)
(IPython muscle memory: obj? → docstring, obj?? → source.)
Setup
Python 3.11+, plus either an OpenRouter key or any OpenAI-compatible endpoint:
uv tool install shelp-llm # PyPI dist name; installs the `shelp` command
export OPENROUTER_API_KEY=sk-or-…
shelp init zsh && exec zsh # or: shelp init bash && exec bash
(pipx install shelp-llm works too; uvx --from shelp-llm shelp jq tries it
without installing.) Straight from the repo instead of PyPI:
uv tool install git+https://github.com/HenryNebula/shelp
Upgrades: uv tool upgrade shelp-llm — or for a git install, re-run its
install command.
PowerShell (Windows; PS 7 recommended, 5.1 supported)
uv tool install shelp-llm
shelp init powershell # writes shelp.ps1 + a line in $PROFILE
Works in Windows Terminal and in pwsh on macOS/Linux. PS 5.1 gets the same
Enter-handler layer (only the CommandNotFoundHandler fallback needs
PSReadLine ≥ 2.3.6, probed at load). The trigger intercepts the raw buffer
before PowerShell parses it, so bare ?? works even though PS 7 defines
?? as an operator. Question text travels via an env var (PS 5.1 mangles
quotes in native args), and cmdlet triggers (Get-ChildItem??, gci?)
harvest Get-Help — via one PowerShell spawn on the generation path only,
so cache hits stay fast.
Chat's tool speaks your shell (the plugin stamps it): PowerShell in PS
sessions, bash in Git Bash (with MSYS_NO_PATHCONV=1 so /etc in a
question isn't rewritten to a Windows path), never cmd.exe. Sheets for
Windows exes that answer /? instead of --help (ipconfig, robocopy) are
harvested too.
For development: clone, uv sync, then uv run shelp …
(.envrc.example shows optional uv cache/venv relocation), or
uv tool install --editable . for a live-installed copy.
Releases: push a v* tag — CI builds the wheel, attaches it to a GitHub
Release, and publishes to PyPI as shelp-llm
(.github/workflows/release.yml).
Config (environment, all optional except the key with remote providers):
| var | default | |
|---|---|---|
SHELP_API_KEY / OPENROUTER_API_KEY |
— | provider key (unneeded for local servers) |
SHELP_MODEL |
nvidia/nemotron-3-ultra-550b-a55b:free |
any OpenRouter slug |
SHELP_CHAT_MODEL |
= SHELP_MODEL |
stronger model for chat if you like |
SHELP_BASE_URL |
https://openrouter.ai/api/v1 |
any OpenAI-compatible endpoint |
SHELP_CACHE_DIR |
$XDG_CACHE_HOME/shelp (else ~/.cache/shelp; Windows: %LOCALAPPDATA%\shelp\cache) |
sheets + chat sessions |
SHELP_NO_PAGER |
unset | never page long sheets |
The default model is on OpenRouter's free tier (≈20 req/min, 200 req/day —
plenty for sheet generation). Free variants come and go, and some keys
restrict which providers they may use — if you get a 404 "no allowed
providers", point SHELP_MODEL at another :free slug.
Fully offline: export SHELP_BASE_URL=http://localhost:30000/v1 SHELP_API_KEY=local SHELP_MODEL=qwen3.5-4b (llama-server's OpenAI endpoint).
Tool calling in chat depends on the local model's support for it.
The chat (??, c, shelp chat <cmd>)
shelp's own agentic loop — ~150 lines, no framework:
- streams replies; one tool:
shell(bash on POSIX, PowerShell on Windows — the shell the plugin stamped, so a Git Bash session gets bash, never cmd.exe) - read-only lookups (
man,--help,Get-Help,Get-ChildItem,which,ls,cat,grep, pipes of those) auto-run; anything else asksy/Nfirst (chaining, redirection, substitution, or unknown commands) - sessions persist per command under the cache dir and resume on re-entry;
shelp chat <cmd> --newstarts clean;q/Ctrl-D exits
Commands
shelp <cmd> [--refresh] [--raw] [--short] |
sheet / TL;DR |
shelp chat [cmd] [question] [--new] |
agentic chat |
shelp warm tar rsync ffmpeg |
pre-generate sheets |
shelp list / prune [--older-than Nd] [--all] |
cache management |
shelp doctor [--live] |
provider check + ping |
Sheets are grounded in the local man page + --help (so they match the
installed flavor/version), cached with hash invalidation, and hand-editable —
shelp show --raw <cmd> then set pinned: true in the front-matter to opt out
of auto-regeneration. First generation per command: ~5–15s depending on
provider (it streams while generating); after that: ~0.2s.
Design notes: DESIGN.md.
License
MIT — see LICENSE.
Release files for shelp-llm 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| shelp_llm-0.5.0.tar.gz | 75.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| shelp_llm-0.5.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 106.2 kB
Release files / shelp_llm-0.5.0.tar.gz
| Download URL | shelp_llm-0.5.0.tar.gz |
|---|---|
| Size | 75.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
62143cbe54b16e6db543d8fa9b621867f799171160878d8b1027d5d91ae1d29e
|
|
BLAKE2b-256 checksum How to use checksums |
f053702ebbbced61d8a5c3efa0e16c2800010c372f7dc9e3c010969b2ff423ca
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency logRelease files / shelp_llm-0.5.0-py3-none-any.whl
| Download URL | shelp_llm-0.5.0-py3-none-any.whl |
|---|---|
| Size | 31.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3e0941bcfd9777c0b2da2c8b2fafd4aa8ac235b4a50cc666667f05d23e5599af
|
|
BLAKE2b-256 checksum How to use checksums |
c170e431c8cb180fd2868d5a18b3032685bf15e6d91095557466f43071b6a3fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 27, 2026.
Transparency log