Skip to main content

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

  1. Create a package under tools/<name>/
  2. Implement func Run(args []string) int
  3. Register in internal/dispatch/dispatch.go
  4. Run sleight-of-hand install <name>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

sleight_of_hand-0.0.3-py3-none-win_arm64.whl (1.4 MB view details)

Uploaded Python 3Windows ARM64

sleight_of_hand-0.0.3-py3-none-win_amd64.whl (1.4 MB view details)

Uploaded Python 3Windows x86-64

sleight_of_hand-0.0.3-py3-none-manylinux_2_17_x86_64.whl (1.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

sleight_of_hand-0.0.3-py3-none-manylinux_2_17_aarch64.whl (1.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

sleight_of_hand-0.0.3-py3-none-macosx_11_0_arm64.whl (1.4 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

sleight_of_hand-0.0.3-py3-none-macosx_10_12_x86_64.whl (1.4 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file sleight_of_hand-0.0.3-py3-none-win_arm64.whl.

File metadata

  • Download URL: sleight_of_hand-0.0.3-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

Hashes for sleight_of_hand-0.0.3-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 3d736ca7b0f54f5e96609bf1bb1e5fc3ad4c4e5c43f9a01dfe2c24e8986324fb
MD5 a23369a97727b2adc54bddbb1cfc90e0
BLAKE2b-256 f0387c3d343ad7600fe6882b204fb4a08d148414102fc0485bc5a028ff8167fe

See more details on using hashes here.

File details

Details for the file sleight_of_hand-0.0.3-py3-none-win_amd64.whl.

File metadata

  • Download URL: sleight_of_hand-0.0.3-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

Hashes for sleight_of_hand-0.0.3-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 7fdc5e98dca572289938a7adf9a51a108918fcf304eca266961f903a555b2196
MD5 0c1875193b5736258e910740d15b79f3
BLAKE2b-256 2225a06c396a6ac5ee4154a9432d71308c9a780f64a674ed4a83ff9bfe0abcfb

See more details on using hashes here.

File details

Details for the file sleight_of_hand-0.0.3-py3-none-manylinux_2_17_x86_64.whl.

File metadata

  • Download URL: sleight_of_hand-0.0.3-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

Hashes for sleight_of_hand-0.0.3-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 fd665a9207597b0bb2a20f25c097d705691a8ee73d1300df9fa4831d5cca07ce
MD5 06a8ea2239e77375c738878359f5270c
BLAKE2b-256 f1955d8d5a3e82eae393f306e2011959bd81bb15a6c8b60b5e96fe5e7eacdfae

See more details on using hashes here.

File details

Details for the file sleight_of_hand-0.0.3-py3-none-manylinux_2_17_aarch64.whl.

File metadata

  • Download URL: sleight_of_hand-0.0.3-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

Hashes for sleight_of_hand-0.0.3-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 20ee31fd3d0f52a2d115fd0b9a9806106c84aa23057a48ec9f9cf2e16e996c08
MD5 6a3ba7205a4fb03bc4fe032fc4b847de
BLAKE2b-256 af130e74ed860de56bcf9a9c1c1dea349fdfcb6d825557038d7b24b3d57dc12e

See more details on using hashes here.

File details

Details for the file sleight_of_hand-0.0.3-py3-none-macosx_11_0_arm64.whl.

File metadata

  • Download URL: sleight_of_hand-0.0.3-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

Hashes for sleight_of_hand-0.0.3-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4ddd2ae44e698feb618a4a2f0047a2031b2f918bfefe67f7f217b11163a143c9
MD5 30fe61fea239344301d749a0d6b9c3a4
BLAKE2b-256 f95ceb0fc7cfbe967d7745d8b8270eb590e379f02203ea1933ffb47c9203e7a0

See more details on using hashes here.

File details

Details for the file sleight_of_hand-0.0.3-py3-none-macosx_10_12_x86_64.whl.

File metadata

  • Download URL: sleight_of_hand-0.0.3-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

Hashes for sleight_of_hand-0.0.3-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 ba262aef1821a81f7a11eb6c9704d34373581d24b288898692bde290c3471e89
MD5 d9dd7321b02b2096bf8a9abb559e5e93
BLAKE2b-256 f67eade8452c5df46d44704768ac108ebed1f9782ed19649fc016f2d48079de3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page