From fleet
Install thin wrappers in ~/.local/bin/ so the fleet plugin's public CLIs (claude-sessions, claude-sessions-web, spawn-claude-feature) are callable from the user's interactive zsh / bash, not just from the Claude Code tool host. The wrappers resolve to the latest installed plugin version at exec time, so they survive `/plugin update`. Idempotent — re-running it overwrites stale wrappers but refuses to clobber foreign files at the same path. Use when the user says "setup cli", "/fleet:setup-cli", "claude-sessions: command not found", "put fleet on my PATH", "wire up the fleet wrappers", or any phrasing about getting the fleet CLI onto an interactive shell PATH.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fleet:setup-cliThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Creates three wrapper scripts in `~/.local/bin/` that `exec` into the latest installed `fleet` plugin's `bin/` dir. After running this once, the user can invoke `claude-sessions`, `claude-sessions-web`, and `spawn-claude-feature` directly from their terminal — and a future `/plugin update fleet@bytedesk` won't break them.
Creates three wrapper scripts in ~/.local/bin/ that exec into the latest installed fleet plugin's bin/ dir. After running this once, the user can invoke claude-sessions, claude-sessions-web, and spawn-claude-feature directly from their terminal — and a future /plugin update fleet@bytedesk won't break them.
Claude Code injects ${CLAUDE_PLUGIN_ROOT}/bin/ into the tool host's PATH, so skills that shell out to claude-sessions work. It does not inject that path into the user's interactive zsh / bash, so claude-sessions attach <TICKET> from a terminal returns command not found. v1.0.0 (BDM-3) intentionally removed the old ~/.local/bin/ symlinks — this skill fills the gap that left without re-introducing version-pinned symlinks.
A symlink would point at one specific installed version (e.g. 1.7.0/bin/claude-sessions) and break the moment /plugin update installed 1.8.0 and removed the older copy. The wrapper resolves the latest version path each call:
exec "$(ls -dv ~/.claude/plugins/cache/bytedesk/fleet/*/bin/<NAME> 2>/dev/null | tail -1)" "$@"
ls -dv … | tail -1 gives the highest version-sorted directory, so updates are transparent.
Run the bash block below verbatim. It is idempotent and reports per-wrapper status. Read the output back to the user.
set -u
target_dir="$HOME/.local/bin"
sentinel='# fleet-setup-cli-wrapper'
binaries=(claude-sessions claude-sessions-web spawn-claude-feature)
mkdir -p "$target_dir"
created=()
refreshed=()
foreign=()
for name in "${binaries[@]}"; do
dest="$target_dir/$name"
template=$(cat <<EOF
#!/usr/bin/env bash
$sentinel
# Auto-generated by /fleet:setup-cli — resolves to the latest installed
# bytedesk fleet plugin version, so /plugin update does not break the
# user-facing CLI. Safe to overwrite by re-running /fleet:setup-cli.
exec "\$(ls -dv ~/.claude/plugins/cache/bytedesk/fleet/*/bin/$name 2>/dev/null | tail -1)" "\$@"
EOF
)
if [ -e "$dest" ] || [ -L "$dest" ]; then
if [ -f "$dest" ] && grep -qF "$sentinel" "$dest" 2>/dev/null; then
printf '%s\n' "$template" > "$dest"
chmod +x "$dest"
refreshed+=("$dest")
else
foreign+=("$dest")
fi
else
printf '%s\n' "$template" > "$dest"
chmod +x "$dest"
created+=("$dest")
fi
done
echo "fleet:setup-cli summary"
echo " target dir : $target_dir"
echo " created : ${#created[@]}${created:+ — ${created[*]}}"
echo " refreshed : ${#refreshed[@]}${refreshed:+ — ${refreshed[*]}}"
echo " skipped : ${#foreign[@]}${foreign:+ — ${foreign[*]} (foreign file at path; not overwritten)}"
echo
echo "PATH check:"
which claude-sessions || echo " (claude-sessions not on PATH — is $target_dir on \$PATH?)"
~/.local/bin does not exist. Created via mkdir -p. No error.# fleet-setup-cli-wrapper sentinel, it is overwritten with the current template (idempotent refresh). If the sentinel is absent, the path is reported under skipped and left alone — never silently clobber a user's own script.exec "". That is the documented "fail loudly when uninstalled" behaviour from the ticket.~/.local/bin not on the user's PATH. The which claude-sessions line at the end will fail and print a hint. The user fixes their shell rc; this skill does not edit shell rc files.Always end with the which claude-sessions output so the user can see whether the wrapper is actually being picked up by their shell. If which returns the wrapper path, success. If it falls back to a different location or "not found", report that explicitly so the user knows to check their $PATH.
If any wrappers were skipped because of foreign files at the target path, list each one and tell the user to inspect / move / delete them manually before re-running the skill.
~/.local/bin/. Never edits shell rc files (.zshrc, .bashrc, .profile)./fleet:setup-cli
Provides CDSS development patterns for drug interaction checking, dose validation, clinical scoring (NEWS2, qSOFA), and alert classification integrated into EMR workflows.
npx claudepluginhub bytedeskai/bytedesk-marketplace --plugin fleet