Commands
shllmeta-CLI for the sahil87 toolkit
shll — meta-CLI for the sahil87 toolkit. shll composes operations that span every per-tool CLI (hop, wt, fab-kit, rk, tu, idea) so you have one entry point for cross-toolkit concerns. Subcommands: shll doctor verify every sahil87 tool is installed, runnable, and wired (read-only) shll install brew install every sahil87 tool that isn't already installed shll update brew update + brew upgrade for shll and every installed sahil87 tool shll shell-init <shell> emit a single eval-safe shell-init blob for all installed tools shll shell-setup [shell] append the shell-init eval line to your rc file (idempotent) shll version print versions of shll and every installed sahil87 tool shll list list the managed sahil87 tools with install status and repo links Per-tool CLIs continue to work standalone — shll wraps them, it does not replace them.
shll [command]
| flag | type | description | copy |
|---|---|---|---|
-v, --version | version for shll |
No flags match that filter.
show raw -h output
shll — meta-CLI for the sahil87 toolkit. shll composes operations that span every per-tool CLI (hop, wt, fab-kit, rk, tu, idea) so you have one entry point for cross-toolkit concerns. Subcommands: shll doctor verify every sahil87 tool is installed, runnable, and wired (read-only) shll install brew install every sahil87 tool that isn't already installed shll update brew update + brew upgrade for shll and every installed sahil87 tool shll shell-init <shell> emit a single eval-safe shell-init blob for all installed tools shll shell-setup [shell] append the shell-init eval line to your rc file (idempotent) shll version print versions of shll and every installed sahil87 tool shll list list the managed sahil87 tools with install status and repo links Per-tool CLIs continue to work standalone — shll wraps them, it does not replace them. Usage: shll [command] Available Commands: doctor verify every sahil87 tool is installed, runnable, and wired install brew install every sahil87 tool that isn't already installed list list the sahil87 tools shll manages, with install status and repo links shell-init emit composed shell-init for all installed sahil87 tools shell-setup append the shll shell-init eval line to your rc file update brew update + per-tool update for shll and every installed sahil87 tool version print versions of shll and every installed sahil87 tool Flags: -h, --help help for shll -v, --version version for shll Use "shll [command] --help" for more information about a command.
shll doctorverify every sahil87 tool is installed, runnable, and wired
Verify the sahil87 toolkit is correctly installed and wired. For every roster tool, doctor checks that (1) the binary is on PATH, (2) it reports a version (so a half-installed/stale brew link is caught), and (3) — for tools that ship shell integration (wt, tu, hop) — shll's composed shell-init eval block is present in your rc file. Each tool gets one line with an OK / WARN / FAIL marker; non-OK lines carry an actionable suggestion. A missing or non-running binary is FAIL; an installed tool that simply isn't wired into your shell is WARN (it still works when invoked directly). doctor exits non-zero if ANY tool is FAIL, so it is scriptable in CI. doctor is strictly read-only — it never installs, upgrades, or edits your rc file. Use --json to emit a machine-readable array (one object per tool) instead of the aligned text table; the same checks and the same exit contract apply.
shll doctor [flags]
| flag | type | description | copy |
|---|---|---|---|
--json | emit a machine-readable JSON array instead of the aligned text table |
No flags match that filter.
show raw -h output
Verify the sahil87 toolkit is correctly installed and wired. For every roster
tool, doctor checks that (1) the binary is on PATH, (2) it reports a version (so
a half-installed/stale brew link is caught), and (3) — for tools that ship shell
integration (wt, tu, hop) — shll's composed shell-init eval block is present in
your rc file.
Each tool gets one line with an OK / WARN / FAIL marker; non-OK lines carry an
actionable suggestion. A missing or non-running binary is FAIL; an installed tool
that simply isn't wired into your shell is WARN (it still works when invoked
directly). doctor exits non-zero if ANY tool is FAIL, so it is scriptable in CI.
doctor is strictly read-only — it never installs, upgrades, or edits your rc file.
Use --json to emit a machine-readable array (one object per tool) instead of the
aligned text table; the same checks and the same exit contract apply.
Usage:
shll doctor [flags]
Flags:
-h, --help help for doctor
--json emit a machine-readable JSON array instead of the aligned text table
shll installbrew install every sahil87 tool that isn't already installed
Install every roster tool that isn't already installed via Homebrew. shll install iterates the roster (`wt`, `idea`, `tu`, `rk`, `hop`, `fab-kit`) and runs `brew install sahil87/tap/<formula>` for each one that is missing. Tools that are already installed are skipped silently — the command is idempotent and safe to re-run. Brew's progress output streams directly to your terminal. With no arguments, shll install processes the whole roster as above. Pass one or more tool names to install only that subset (valid targets: wt, idea, tu, rk, hop, fab-kit) — e.g. `shll install hop wt`. The subset is processed in roster order regardless of the order given; an unknown name is a hard error. Unlike `shll update`, `shll` itself is NOT a valid install target — you cannot brew-install the running orchestrator. shll install does NOT upgrade already-installed tools. Use `shll update` for that.
shll install [tool...] [flags]
| flag | type | description | copy |
|---|---|---|---|
--dry-run | preview what would run, without making any changes |
No flags match that filter.
show raw -h output
Install every roster tool that isn't already installed via Homebrew.
shll install iterates the roster (`wt`, `idea`, `tu`, `rk`, `hop`, `fab-kit`)
and runs `brew install sahil87/tap/<formula>` for each one that is missing.
Tools that are already installed are skipped silently — the command is
idempotent and safe to re-run. Brew's progress output streams directly to
your terminal.
With no arguments, shll install processes the whole roster as above. Pass one or
more tool names to install only that subset (valid targets: wt, idea, tu, rk, hop,
fab-kit) — e.g. `shll install hop wt`. The subset is processed in roster order
regardless of the order given; an unknown name is a hard error. Unlike
`shll update`, `shll` itself is NOT a valid install target — you cannot
brew-install the running orchestrator.
shll install does NOT upgrade already-installed tools. Use `shll update`
for that.
Usage:
shll install [tool...] [flags]
Flags:
--dry-run preview what would run, without making any changes
-h, --help help for install
shll listlist the sahil87 tools shll manages, with install status and repo links
List the sahil87 toolkit roster shll manages — one row per tool with an install-status indicator, a one-line description, and its GitHub repo URL. Install status reuses the same PATH probe as `shll version` (`<tool> --version`, any error means missing) — install-mechanism agnostic, not a Homebrew check. A missing tool is shown as missing, never an error: `shll list` always exits 0. Default output is a column-aligned table (with color when writing to a terminal). Pass --json for a plain JSON array suitable for scripting (`shll list --json | jq`).
shll list [flags]
| flag | type | description | copy |
|---|---|---|---|
--json | emit the roster as a JSON array (no color, for scripting) |
No flags match that filter.
show raw -h output
List the sahil87 toolkit roster shll manages — one row per tool with an
install-status indicator, a one-line description, and its GitHub repo URL.
Install status reuses the same PATH probe as `shll version` (`<tool> --version`,
any error means missing) — install-mechanism agnostic, not a Homebrew check. A
missing tool is shown as missing, never an error: `shll list` always exits 0.
Default output is a column-aligned table (with color when writing to a terminal).
Pass --json for a plain JSON array suitable for scripting (`shll list --json | jq`).
Usage:
shll list [flags]
Flags:
-h, --help help for list
--json emit the roster as a JSON array (no color, for scripting)
shll shell-initemit composed shell-init for all installed sahil87 tools
Emit a single concatenated shell-init blob for every installed sahil87 tool that exposes shell integration. Today, tu, hop, and wt are the roster tools with shell integration. The output is eval-safe: missing tools produce no output, errors go to stderr, and stdout is shell code only. Use: eval "$(shll shell-init zsh)" # in your ~/.zshrc eval "$(shll shell-init bash)" # in your ~/.bashrc
shll shell-init <shell> [flags]
show raw -h output
Emit a single concatenated shell-init blob for every installed sahil87 tool
that exposes shell integration.
Today, tu, hop, and wt are the roster tools with shell integration. The output
is eval-safe: missing tools produce no output, errors go to stderr, and stdout
is shell code only.
Use: eval "$(shll shell-init zsh)" # in your ~/.zshrc
eval "$(shll shell-init bash)" # in your ~/.bashrc
Usage:
shll shell-init <shell> [flags]
Flags:
-h, --help help for shell-init
shll shell-setupappend the shll shell-init eval line to your rc file
Append a sentinel-wrapped eval block that wires shll shell-init into your shell rc file. Idempotent — re-running is a no-op when the block is already present. Plain O_APPEND so dotfile-manager symlinks are preserved. Also available under the legacy alias `shll shell-install` (unchanged behavior). Modes: shll shell-setup [shell] install the block (default mode) shll shell-setup --print [shell] print the block to stdout, do not modify shll shell-setup --uninstall [shell] remove the block from the rc file The --trust-tap flag records genuine Homebrew trust for the sahil87 tap. It is not a mode — it composes with the default, --print, and --uninstall paths: shll shell-setup --trust-tap run `brew trust --tap sahil87/tap` and add `export HOMEBREW_REQUIRE_TAP_TRUST=1` to the block shll shell-setup --trust-tap --print print the resulting combined block, change nothing If `brew trust` is unavailable (older brew) or brew is missing, the export line is skipped and only the eval line is written — shll never sets the policy line without a backing trust record. When [shell] is omitted, shll infers it from $SHELL. Supported shells: zsh, bash. By default, the rc file path is derived per shell: zsh → ${ZDOTDIR:-$HOME}/.zshrc bash → $HOME/.bash_profile (macOS) or $HOME/.bashrc (Linux) Use --rc-file <path> to override derivation entirely.
shll shell-setup [shell] [flags]
| flag | type | description | copy |
|---|---|---|---|
--print | print the block to stdout, do not modify any file | ||
--rc-file | string | override the rc file path (escape hatch for non-standard layouts) | |
--trust-tap | run 'brew trust --tap sahil87/tap' and add the require-tap-trust policy line to the block | ||
--uninstall | remove the shll-managed block from the rc file |
No flags match that filter.
show raw -h output
Append a sentinel-wrapped eval block that wires shll shell-init into your
shell rc file. Idempotent — re-running is a no-op when the block is already
present. Plain O_APPEND so dotfile-manager symlinks are preserved.
Also available under the legacy alias `shll shell-install` (unchanged behavior).
Modes:
shll shell-setup [shell] install the block (default mode)
shll shell-setup --print [shell] print the block to stdout, do not modify
shll shell-setup --uninstall [shell] remove the block from the rc file
The --trust-tap flag records genuine Homebrew trust for the sahil87 tap. It is
not a mode — it composes with the default, --print, and --uninstall paths:
shll shell-setup --trust-tap run `brew trust --tap sahil87/tap` and add
`export HOMEBREW_REQUIRE_TAP_TRUST=1` to the block
shll shell-setup --trust-tap --print print the resulting combined block, change nothing
If `brew trust` is unavailable (older brew) or brew is missing, the export line
is skipped and only the eval line is written — shll never sets the policy line
without a backing trust record.
When [shell] is omitted, shll infers it from $SHELL. Supported shells: zsh, bash.
By default, the rc file path is derived per shell:
zsh → ${ZDOTDIR:-$HOME}/.zshrc
bash → $HOME/.bash_profile (macOS) or $HOME/.bashrc (Linux)
Use --rc-file <path> to override derivation entirely.
Usage:
shll shell-setup [shell] [flags]
Aliases:
shell-setup, shell-install
Flags:
-h, --help help for shell-setup
--print print the block to stdout, do not modify any file
--rc-file string override the rc file path (escape hatch for non-standard layouts)
--trust-tap run 'brew trust --tap sahil87/tap' and add the require-tap-trust policy line to the block
--uninstall remove the shll-managed block from the rc file
shll updatebrew update + per-tool update for shll and every installed sahil87 tool
Update shll itself and every installed sahil87 tool via Homebrew. shll update runs `brew update --quiet` once, then `brew upgrade sahil87/tap/shll` (when shll itself was installed via brew), then delegates to each installed roster tool's own `update` subcommand (with `--skip-brew-update` when the tool advertises it) so each tool's post-upgrade side effects (e.g. rk's daemon restart) are preserved. A roster tool that exposes no `update` is upgraded via `brew upgrade sahil87/tap/<formula>` instead. Uninstalled tools (including shll itself, e.g. on a `go install` dev build) are skipped silently. Brew and per-tool progress output streams directly to your terminal. With no arguments, shll update processes the whole roster as above. Pass one or more tool names to update only that subset (valid targets: shll, wt, idea, tu, rk, hop, fab-kit) — e.g. `shll update shll` to bump only shll itself, or `shll update hop wt` for a pair. The subset is always processed in roster order regardless of the order given. An unknown name, or a named tool that is not installed, is a hard error (a named tool, unlike the whole-roster sweep, is not silently skipped).
shll update [tool...] [flags]
| flag | type | description | copy |
|---|---|---|---|
--dry-run | preview what would run, without making any changes |
No flags match that filter.
show raw -h output
Update shll itself and every installed sahil87 tool via Homebrew.
shll update runs `brew update --quiet` once, then `brew upgrade sahil87/tap/shll`
(when shll itself was installed via brew), then delegates to each installed roster
tool's own `update` subcommand (with `--skip-brew-update` when the tool
advertises it) so each tool's post-upgrade side effects (e.g. rk's daemon restart)
are preserved. A roster tool that exposes no `update` is upgraded via
`brew upgrade sahil87/tap/<formula>` instead. Uninstalled tools (including shll
itself, e.g. on a `go install` dev build) are skipped silently. Brew and per-tool
progress output streams directly to your terminal.
With no arguments, shll update processes the whole roster as above. Pass one or
more tool names to update only that subset (valid targets: shll, wt, idea, tu, rk,
hop, fab-kit) — e.g. `shll update shll` to bump only shll itself, or
`shll update hop wt` for a pair. The subset is always processed in roster order
regardless of the order given. An unknown name, or a named tool that is not
installed, is a hard error (a named tool, unlike the whole-roster sweep, is not
silently skipped).
Usage:
shll update [tool...] [flags]
Flags:
--dry-run preview what would run, without making any changes
-h, --help help for update
shll versionprint versions of shll and every installed sahil87 tool
Print a column-aligned plain-text table showing the version of shll itself plus every roster tool. Uninstalled tools show "not installed". Output is plain text — no colors, no JSON — so it pastes cleanly into bug reports.
shll version [flags]
show raw -h output
Print a column-aligned plain-text table showing the version of shll itself plus every roster tool. Uninstalled tools show "not installed". Output is plain text — no colors, no JSON — so it pastes cleanly into bug reports. Usage: shll version [flags] Flags: -h, --help help for version