#!/bin/bash # vfx-skills installer # Symlinks VFX skills to your AI agent's skills directory set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SKILLS_DIR="$SCRIPT_DIR/skills" # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color print_header() { echo "" echo "vfx-skills installer" echo "====================" echo "" } detect_agents() { local agents=() if [ -d "$HOME/.claude" ]; then agents+=("claude-code:$HOME/.claude/skills") fi if [ -d "$HOME/.config/opencode" ]; then agents+=("opencode:$HOME/.config/opencode/skills") fi if [ -d "$HOME/.cursor" ]; then agents+=("cursor:$HOME/.cursor/skills") fi if [ -d "$HOME/.gemini" ]; then agents+=("gemini:$HOME/.gemini/skills") fi echo "${agents[@]}" } install_skills() { local target_dir="$1" local agent_name="$2" echo -e "installing to ${GREEN}$agent_name${NC} ($target_dir)..." # Create target directory if it doesn't exist mkdir -p "$target_dir" local installed=0 local skipped=0 for skill_dir in "$SKILLS_DIR"/*/; do if [ -f "$skill_dir/SKILL.md" ]; then skill_name=$(basename "$skill_dir") target="$target_dir/$skill_name" if [ -L "$target" ]; then # Remove existing symlink rm "$target" elif [ -e "$target" ]; then echo -e " ${YELLOW}skip${NC}: $skill_name (already exists, not a symlink)" ((skipped++)) continue fi ln -s "$skill_dir" "$target" ((installed++)) fi done echo -e " done: ${GREEN}$installed installed${NC}, $skipped skipped" echo "" } # Parse arguments TARGET_AGENT="" LOCAL_INSTALL=false while [[ $# -gt 0 ]]; do case $1 in --agent=*) TARGET_AGENT="${1#*=}" shift ;; --local) LOCAL_INSTALL=true shift ;; --help|-h) echo "usage: ./install.sh [options]" echo "" echo "options:" echo " --agent=NAME Install for specific agent (claude-code, opencode, cursor, gemini)" echo " --local Install to current directory instead of global" echo " --help Show this help" exit 0 ;; *) echo "unknown option: $1" exit 1 ;; esac done print_header # Check skills directory exists if [ ! -d "$SKILLS_DIR" ]; then echo -e "${RED}error${NC}: skills directory not found at $SKILLS_DIR" exit 1 fi # Count available skills skill_count=$(find "$SKILLS_DIR" -maxdepth 2 -name "SKILL.md" | wc -l) echo "found $skill_count skills" if $LOCAL_INSTALL; then # Install to current directory echo "installing to current project..." install_skills ".claude/skills" "local project" else # Detect and install to agents if [ -n "$TARGET_AGENT" ]; then case $TARGET_AGENT in claude-code) install_skills "$HOME/.claude/skills" "Claude Code" ;; opencode) install_skills "$HOME/.config/opencode/skills" "OpenCode" ;; cursor) install_skills "$HOME/.cursor/skills" "Cursor" ;; gemini) install_skills "$HOME/.gemini/skills" "Gemini CLI" ;; *) echo -e "${RED}error${NC}: unknown agent '$TARGET_AGENT'" echo "available agents: claude-code, opencode, cursor, gemini" exit 1 ;; esac else # Auto-detect agents agents=$(detect_agents) if [ -z "$agents" ]; then # Default to claude-code if nothing detected echo "no agents detected, defaulting to Claude Code..." install_skills "$HOME/.claude/skills" "Claude Code" else for agent in $agents; do name="${agent%%:*}" path="${agent#*:}" install_skills "$path" "$name" done fi fi fi echo -e "${GREEN}installation complete!${NC}" echo "restart your agent to load the new skills." echo ""