#!/bin/sh # Instalador do repositório de skills — https://skills.bassi.engineer # # Uso: curl -fsSL https://skills.bassi.engineer/install.sh | sh -s [...] # curl -fsSL https://skills.bassi.engineer/install.sh | sh -s -- --list # # O `--` antes de `--list` não é enfeite: sem ele o próprio `sh` tenta # interpretar a flag e responde `invalid option`, sem nunca chegar a este # script. Nome de skill não precisa dele porque não começa com hífen. # # Grava em ~/.claude/skills//. Não sobrescreve sem avisar: se o diretório # já existir, o script diz e pula — skill editada à mão é trabalho de alguém. set -eu BASE="https://skills.bassi.engineer" DEST="${SKILLS_DIR:-$HOME/.claude/skills}" fetch() { curl -fsSL "$1"; } if [ "$#" -eq 0 ] || [ "$1" = "--list" ] || [ "$1" = "list" ]; then echo "skills disponíveis em $BASE:" fetch "$BASE/manifest.json" | sed -n 's/.*"name": "\([^"]*\)".*/ \1/p' echo echo "instale com: curl -fsSL $BASE/install.sh | sh -s " exit 0 fi for NAME in "$@"; do TARGET="$DEST/$NAME" if [ -d "$TARGET" ]; then echo "· $NAME já existe em $TARGET — pulando (apague para reinstalar)" continue fi echo "▸ $NAME" # `files.txt` existe para este laço: uma skill com scripts traz os scripts, # e ler a lista de lá evita exigir `jq` ou um parser de JSON em `sh`. FILES=$(fetch "$BASE/s/$NAME/files.txt") for FILE in $FILES; do mkdir -p "$TARGET/$(dirname "$FILE")" fetch "$BASE/s/$NAME/$FILE" > "$TARGET/$FILE" case "$FILE" in *.sh|*.py) chmod +x "$TARGET/$FILE" ;; esac echo " $FILE" done done echo echo "✅ instalado em $DEST" echo " reinicie a sessão do agente para a skill aparecer no catálogo"