- 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)
130 lines
3.2 KiB
Bash
Executable file
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"
|