Multicall CLI wrapper that extends existing tools with custom subcommands
Project description
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>
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sleight_of_hand-0.0.4-py3-none-win_arm64.whl.
File metadata
- Download URL: sleight_of_hand-0.0.4-py3-none-win_arm64.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3, Windows ARM64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c8fd524ff5507188b17dfbc548c0f655edd91ace7e86ac5c8b33884f699db60
|
|
| MD5 |
3071ff6acc02c87ae77d3dade7bf1c89
|
|
| BLAKE2b-256 |
661111a2a1e07dcd91a88a18f6cca43f8b1e2f3e015e4d4cbda55acfa4742548
|
File details
Details for the file sleight_of_hand-0.0.4-py3-none-win_amd64.whl.
File metadata
- Download URL: sleight_of_hand-0.0.4-py3-none-win_amd64.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3, Windows x86-64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
39cb7fe336a8be3de0cc5dd625531203b17108c03773c2b89ba327a5edc447cd
|
|
| MD5 |
272757a1bdf15fb4dc4497eb08ef7400
|
|
| BLAKE2b-256 |
6830d4fd26f14cea5fc3ae478b75befc405c5461debd7ece796d55272f37844b
|
File details
Details for the file sleight_of_hand-0.0.4-py3-none-manylinux_2_17_x86_64.whl.
File metadata
- Download URL: sleight_of_hand-0.0.4-py3-none-manylinux_2_17_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3, manylinux: glibc 2.17+ x86-64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
153cac89fbcbf121635ca6536111b81a4a542378b3002882fdf2d6a3bd11b756
|
|
| MD5 |
19fe9e6de0241c986418743a3efae293
|
|
| BLAKE2b-256 |
804926f82a609c7555f678d3b6595768d135c942457dff3ac349c78cd67a9565
|
File details
Details for the file sleight_of_hand-0.0.4-py3-none-manylinux_2_17_aarch64.whl.
File metadata
- Download URL: sleight_of_hand-0.0.4-py3-none-manylinux_2_17_aarch64.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3, manylinux: glibc 2.17+ ARM64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
770b91ca013ffc2afcc02c039ce4001fafeea1290e7b063c11af9519d6ed7bb3
|
|
| MD5 |
816375d244d2044be7ad0733febc4990
|
|
| BLAKE2b-256 |
753a775c05de4b1b3742d1598dc45a3ac0d430c6fa0c926fce18493fca117305
|
File details
Details for the file sleight_of_hand-0.0.4-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: sleight_of_hand-0.0.4-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
195106a7ff9eb6ce185701bea8307caf4ccd282fe3c7bb1f6dca4d453a7fe3a3
|
|
| MD5 |
5f2340481ab9d3ed850370a951004029
|
|
| BLAKE2b-256 |
def586502ad4cd041304bacaaa02bbd2c4c05225f9c071d26ac6eb7570c9ec4f
|
File details
Details for the file sleight_of_hand-0.0.4-py3-none-macosx_10_12_x86_64.whl.
File metadata
- Download URL: sleight_of_hand-0.0.4-py3-none-macosx_10_12_x86_64.whl
- Upload date:
- Size: 1.4 MB
- Tags: Python 3, macOS 10.12+ x86-64
- Uploaded using 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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96657460da4937af4856a6cbf0f1b031d27d105afc9728343687eea747b52328
|
|
| MD5 |
bca1042084d93c3b12fe581843a5cc07
|
|
| BLAKE2b-256 |
6588d4fd0e8fd8686662a07d01ade97c34622cb6ac84c6ee9d1f405e497afc06
|