skills/bin/deploy-skill.sh
dan b6b47f8b38 feat(deploy): rewrite deploy-skill.sh for ai-skills module workflow
- Script now shows what to add to skill lists (no file copying)
- Supports --pi-only flag for extension-dependent skills
- Checks skills.nix registry
- Update work doc with completed phases

Also filed issue for direnv cleanup (skills-vpdp)
2026-01-25 12:31:17 -08:00

130 lines
3.2 KiB
Bash
Executable file

#!/usr/bin/env bash
# Deploy a skill from this repo to the ai-skills module skill lists
set -euo pipefail
SKILLS_REPO="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
DOTFILES_REPO="$HOME/proj/dotfiles"
SKILL_NAME=""
PI_ONLY=false
usage() {
cat <<EOF
Usage: $0 [--pi-only] <skill-name>
Add a skill to the ai-skills module deployment lists.
Arguments:
skill-name Name of skill directory in skills/
--pi-only Deploy only to pi (for extension-dependent skills)
Examples:
$0 web-search # Deploy to all agents
$0 --pi-only ralph-work-loop # Deploy to pi only
This script:
1. Validates the skill exists in skills/
2. Checks if skill is in skills.nix registry
3. Shows which agent lists to update in dotfiles/home/claude.nix
Skills are sourced from this repo via Nix flake.
The ai-skills module deploys them to agent locations.
Available skills:
EOF
ls -1 "$SKILLS_REPO/skills" | grep -v template | sed 's/^/ /'
exit 1
}
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--pi-only)
PI_ONLY=true
shift
;;
--help|-h)
usage
;;
*)
SKILL_NAME="$1"
shift
;;
esac
done
if [[ -z "$SKILL_NAME" ]]; then
usage
fi
SKILL_SOURCE="$SKILLS_REPO/skills/$SKILL_NAME"
# Validate skill exists
if [[ ! -d "$SKILL_SOURCE" ]]; then
echo "Error: Skill not found: $SKILL_SOURCE" >&2
echo "" >&2
usage
fi
# Check if skill has SKILL.md
if [[ ! -f "$SKILL_SOURCE/SKILL.md" ]]; then
echo "Error: $SKILL_NAME missing SKILL.md" >&2
exit 1
fi
# Check if in skills.nix registry
if ! grep -q "\"$SKILL_NAME\"" "$SKILLS_REPO/skills.nix" 2>/dev/null && \
! grep -q "^ $SKILL_NAME = " "$SKILLS_REPO/skills.nix" 2>/dev/null; then
echo "⚠️ Skill '$SKILL_NAME' not in skills.nix registry"
echo ""
echo "Add to skills.nix:"
echo " $SKILL_NAME = \"<description>\";"
echo ""
fi
# Check current deployment status
CLAUDE_NIX="$DOTFILES_REPO/home/claude.nix"
if [[ ! -f "$CLAUDE_NIX" ]]; then
echo "Error: $CLAUDE_NIX not found" >&2
exit 1
fi
echo "Skill: $SKILL_NAME"
echo "Source: $SKILL_SOURCE"
echo ""
# Check if already deployed
in_claude=$(grep -c "\"$SKILL_NAME\"" "$CLAUDE_NIX" 2>/dev/null | grep -v "^0$" || true)
if [[ -n "$in_claude" ]]; then
echo "✓ Already in deployment lists"
echo ""
echo "Current deployment:"
grep -B2 -A2 "\"$SKILL_NAME\"" "$CLAUDE_NIX" | head -20
else
echo "Not yet deployed."
echo ""
if [[ "$PI_ONLY" == "true" ]]; then
echo "Add to piSkills in $CLAUDE_NIX:"
echo ""
echo ' piSkills = ['
echo " \"$SKILL_NAME\""
echo ' ...'
echo ' ];'
else
echo "Add to skill lists in $CLAUDE_NIX:"
echo ""
echo " claudeCodeSkills = [ ... \"$SKILL_NAME\" ];"
echo " openCodeSkills = [ ... \"$SKILL_NAME\" ];"
echo " codexSkills = [ ... \"$SKILL_NAME\" ];"
echo ""
echo "Or for pi-only (extension-dependent):"
echo " piSkills = [ ... \"$SKILL_NAME\" ];"
fi
fi
echo ""
echo "After updating, run:"
echo " cd $DOTFILES_REPO && sudo nixos-rebuild switch --flake .#delpad"