From claudery
This skill should be used when the user wants to create an install script for a repo, install a CLI tool, make a script globally available, make a command available on PATH, add to PATH, create a symlink wrapper for an executable, or update an existing install script. Generates install.sh that symlinks the repo's main executable into ~/.local/bin/ and any zsh completion files into ~/.local/share/zsh/site-functions/.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claudery:generate-install-appThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create or update an install script that symlinks a repo's main executable to `~/.local/bin/` so it's available on the user's PATH, and any zsh completion files to `~/.local/share/zsh/site-functions/`.
Create or update an install script that symlinks a repo's main executable to ~/.local/bin/ so it's available on the user's PATH, and any zsh completion files to ~/.local/share/zsh/site-functions/.
Identify the main executable by examining the repo:
bin/, cli.*, main.*, app.*, index.*, shebang lines, package.json bin field, Python entry_points, etc.~/.local/bin/). Default suggestion: the repo directory name.Check for existing install scripts:
install.sh in the repo root.install-bin.sh instead.install.sh exists, create install.sh.Generate the install script with this structure:
#!/bin/bash
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BIN_DIR="$HOME/.local/bin"
COMPLETIONS_DIR="$HOME/.local/share/zsh/site-functions"
COMMAND_NAME="<command-name>"
TARGET="$SCRIPT_DIR/<path-to-executable>"
echo "Installing $COMMAND_NAME..."
# Create ~/.local/bin if needed
if [ ! -d "$BIN_DIR" ]; then
mkdir -p "$BIN_DIR"
echo "Created $BIN_DIR"
fi
# Make executable
chmod +x "$TARGET"
# Symlink helper: creates or updates a symlink
link_file() {
local target="$1" link="$2" label="$3"
if [ -L "$link" ]; then
local current
current="$(readlink "$link")"
if [ "$current" = "$target" ]; then
echo "$label already installed."
return 0
fi
echo "Updating existing symlink for $label..."
rm "$link"
elif [ -e "$link" ]; then
echo "Warning: $link exists and is not a symlink. Skipping $label."
return 1
fi
ln -s "$target" "$link"
echo "Installed: $label -> $target"
}
# Install executable
link_file "$TARGET" "$BIN_DIR/$COMMAND_NAME" "$COMMAND_NAME"
# Install zsh completions if present
COMPLETION_FILE="$SCRIPT_DIR/_$COMMAND_NAME"
if [ -f "$COMPLETION_FILE" ]; then
mkdir -p "$COMPLETIONS_DIR"
link_file "$COMPLETION_FILE" "$COMPLETIONS_DIR/_$COMMAND_NAME" "_$COMMAND_NAME (zsh completion)"
fi
Adapt for the language/runtime if needed:
package.json with a bin field, symlink that entry. If it needs node to run and has no shebang, create a small wrapper script in the repo (e.g., bin/<name>) with #!/usr/bin/env node and symlink that.#!/usr/bin/env python3 and symlink that.Make the install script executable:
chmod +x install.sh # or install-bin.sh
Look for zsh completion files:
_<command-name> (the underscore-prefixed completion file).completions/, zsh/, contrib/.~/.local/share/zsh/site-functions/.Report what was created and how to use it:
Created: install.sh
Run: ./install.sh
Command will be available as: <command-name>
~/.local/share/zsh/site-functions must be on $fpath. Suggest adding this to .zshrc if needed:
fpath=(~/.local/share/zsh/site-functions $fpath)
autoload -Uz compinit && compinit
npx claudepluginhub darrenbuse/claudery --plugin clauderyClones GitHub repo and installs Python library via bash script. Verifies Python package presence post-setup. Invoke explicitly or via yoink orchestrator.
Installs Python (pip), JavaScript (bun), and system (apt/brew/dnf) dependencies with monorepo awareness, prompting for shared or local installation in git repos.
Installs plugin runner scripts into .claude/scripts/ for persistent use, with support for core scripts, skill scripts, conflict handling, and manifest updates.