sleight-of-hand
A multicall CLI wrapper that transparently extends existing command-line tools with custom subcommands.
How it works
sleight-of-hand is a single Go binary that impersonates other CLI tools via
symlinks. When invoked, it checks os.Args[0] to determine which tool it's
acting as:
- If it recognizes a custom subcommand, it handles it directly
- Otherwise, it forwards all arguments to the real binary transparently (preserving stdin/stdout/stderr, signals, and exit codes)
Build
cd sleight-of-hand
go build -o sleight-of-hand .
Install
# Install symlinks for all registered tools
./sleight-of-hand install
# Install a specific tool
./sleight-of-hand install gh
# Custom bin directory
./sleight-of-hand install --bin-dir /usr/local/bin
Uninstall
# Remove all symlinks (only removes symlinks pointing to sleight-of-hand)
./sleight-of-hand uninstall
# Remove a specific tool
./sleight-of-hand uninstall gh
Wrapped tools
gh (GitHub CLI)
Custom subcommands:
gh pr retry <PR#>- Retry all failed CI jobs for a pull request--repo,-R- Specify repository in OWNER/REPO format
All other gh commands are forwarded to the real GitHub CLI.
Adding a new tool
- Create a package under
tools/<name>/ - Implement
func Run(args []string) int - Register in
internal/dispatch/dispatch.go - Run
sleight-of-hand install <name>
Metadata
Release files for sleight-of-hand 0.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| sleight_of_hand-0.0.4-py3-none-win_arm64.whl | Python 3 | none | Windows ARM64 | Details |
| sleight_of_hand-0.0.4-py3-none-win_amd64.whl | Python 3 | none | Windows x86-64 | Details |
| sleight_of_hand-0.0.4-py3-none-manylinux_2_17_x86_64.whl | Python 3 | none | Linux glibc 2.17+ x86-64 | Details |
| sleight_of_hand-0.0.4-py3-none-manylinux_2_17_aarch64.whl | Python 3 | none | Linux glibc 2.17+ ARM64 | Details |
| sleight_of_hand-0.0.4-py3-none-macosx_11_0_arm64.whl | Python 3 | none | macOS 11.0+ ARM64 | Details |
| sleight_of_hand-0.0.4-py3-none-macosx_10_12_x86_64.whl | Python 3 | none | macOS 10.12+ x86-64 | Details |
Total release size: 8.3 MB
Release files / sleight_of_hand-0.0.4-py3-none-win_arm64.whl
| Download URL | sleight_of_hand-0.0.4-py3-none-win_arm64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | Python 3 Windows ARM64 |
|
SHA-256 checksum How to use checksums |
0c8fd524ff5507188b17dfbc548c0f655edd91ace7e86ac5c8b33884f699db60
|
|
BLAKE2b-256 checksum How to use checksums |
661111a2a1e07dcd91a88a18f6cca43f8b1e2f3e015e4d4cbda55acfa4742548
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / sleight_of_hand-0.0.4-py3-none-win_amd64.whl
| Download URL | sleight_of_hand-0.0.4-py3-none-win_amd64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | Python 3 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
39cb7fe336a8be3de0cc5dd625531203b17108c03773c2b89ba327a5edc447cd
|
|
BLAKE2b-256 checksum How to use checksums |
6830d4fd26f14cea5fc3ae478b75befc405c5461debd7ece796d55272f37844b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / sleight_of_hand-0.0.4-py3-none-manylinux_2_17_x86_64.whl
| Download URL | sleight_of_hand-0.0.4-py3-none-manylinux_2_17_x86_64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | Linux glibc 2.17+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
153cac89fbcbf121635ca6536111b81a4a542378b3002882fdf2d6a3bd11b756
|
|
BLAKE2b-256 checksum How to use checksums |
804926f82a609c7555f678d3b6595768d135c942457dff3ac349c78cd67a9565
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / sleight_of_hand-0.0.4-py3-none-manylinux_2_17_aarch64.whl
| Download URL | sleight_of_hand-0.0.4-py3-none-manylinux_2_17_aarch64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | Linux glibc 2.17+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
770b91ca013ffc2afcc02c039ce4001fafeea1290e7b063c11af9519d6ed7bb3
|
|
BLAKE2b-256 checksum How to use checksums |
753a775c05de4b1b3742d1598dc45a3ac0d430c6fa0c926fce18493fca117305
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / sleight_of_hand-0.0.4-py3-none-macosx_11_0_arm64.whl
| Download URL | sleight_of_hand-0.0.4-py3-none-macosx_11_0_arm64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | Python 3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
195106a7ff9eb6ce185701bea8307caf4ccd282fe3c7bb1f6dca4d453a7fe3a3
|
|
BLAKE2b-256 checksum How to use checksums |
def586502ad4cd041304bacaaa02bbd2c4c05225f9c071d26ac6eb7570c9ec4f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / sleight_of_hand-0.0.4-py3-none-macosx_10_12_x86_64.whl
| Download URL | sleight_of_hand-0.0.4-py3-none-macosx_10_12_x86_64.whl |
|---|---|
| Size | 1.4 MB |
| Tags | Python 3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
96657460da4937af4856a6cbf0f1b031d27d105afc9728343687eea747b52328
|
|
BLAKE2b-256 checksum How to use checksums |
6588d4fd0e8fd8686662a07d01ade97c34622cb6ac84c6ee9d1f405e497afc06
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|