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.4-py3-none-win_arm64.whl (1.4 MB view details)

Uploaded Python 3Windows ARM64

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

Uploaded Python 3Windows x86-64

sleight_of_hand-0.0.4-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.4-py3-none-manylinux_2_17_aarch64.whl (1.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

sleight_of_hand-0.0.4-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.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

Hashes for sleight_of_hand-0.0.4-py3-none-win_arm64.whl
Algorithm Hash digest
SHA256 0c8fd524ff5507188b17dfbc548c0f655edd91ace7e86ac5c8b33884f699db60
MD5 3071ff6acc02c87ae77d3dade7bf1c89
BLAKE2b-256 661111a2a1e07dcd91a88a18f6cca43f8b1e2f3e015e4d4cbda55acfa4742548

See more details on using hashes here.

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

Hashes for sleight_of_hand-0.0.4-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 39cb7fe336a8be3de0cc5dd625531203b17108c03773c2b89ba327a5edc447cd
MD5 272757a1bdf15fb4dc4497eb08ef7400
BLAKE2b-256 6830d4fd26f14cea5fc3ae478b75befc405c5461debd7ece796d55272f37844b

See more details on using hashes here.

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

Hashes for sleight_of_hand-0.0.4-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 153cac89fbcbf121635ca6536111b81a4a542378b3002882fdf2d6a3bd11b756
MD5 19fe9e6de0241c986418743a3efae293
BLAKE2b-256 804926f82a609c7555f678d3b6595768d135c942457dff3ac349c78cd67a9565

See more details on using hashes here.

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

Hashes for sleight_of_hand-0.0.4-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 770b91ca013ffc2afcc02c039ce4001fafeea1290e7b063c11af9519d6ed7bb3
MD5 816375d244d2044be7ad0733febc4990
BLAKE2b-256 753a775c05de4b1b3742d1598dc45a3ac0d430c6fa0c926fce18493fca117305

See more details on using hashes here.

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

Hashes for sleight_of_hand-0.0.4-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 195106a7ff9eb6ce185701bea8307caf4ccd282fe3c7bb1f6dca4d453a7fe3a3
MD5 5f2340481ab9d3ed850370a951004029
BLAKE2b-256 def586502ad4cd041304bacaaa02bbd2c4c05225f9c071d26ac6eb7570c9ec4f

See more details on using hashes here.

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

Hashes for sleight_of_hand-0.0.4-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 96657460da4937af4856a6cbf0f1b031d27d105afc9728343687eea747b52328
MD5 bca1042084d93c3b12fe581843a5cc07
BLAKE2b-256 6588d4fd0e8fd8686662a07d01ade97c34622cb6ac84c6ee9d1f405e497afc06

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