#!/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 < 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 = \"\";" 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"