#!/usr/bin/env bash # SessionStart hook for nexus plugin set -euo pipefail # Set NEXUS_SKILLS_ROOT environment variable export NEXUS_SKILLS_ROOT="${HOME}/.config/nexus/skills" # Run skills initialization script (handles clone/fetch/auto-update) SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]:-$0}")" && pwd)" PLUGIN_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" init_output=$("${PLUGIN_ROOT}/lib/initialize-skills.sh" 2>&1 || echo "") # Extract status flags skills_updated=$(echo "$init_output" | grep "SKILLS_UPDATED=true" || echo "") skills_behind=$(echo "$init_output" | grep "SKILLS_BEHIND=true" || echo "") # Remove status flags from display output init_output=$(echo "$init_output" | grep -v "SKILLS_UPDATED=true" | grep -v "SKILLS_BEHIND=true" || true) # Run find-skill to show all available skills find_skills_output=$("${NEXUS_SKILLS_ROOT}/getting-started/find-skill" 2>&1 || echo "Error running find-skill") # Read getting-started content getting_started_content=$(cat "${NEXUS_SKILLS_ROOT}/getting-started/SKILL.md" 2>&1 || echo "Error reading getting-started") # Escape outputs for JSON init_escaped=$(echo "$init_output" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | awk '{printf "%s\\n", $0}') find_skills_escaped=$(echo "$find_skills_output" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | awk '{printf "%s\\n", $0}') getting_started_escaped=$(echo "$getting_started_content" | sed 's/\\/\\\\/g' | sed 's/"/\\"/g' | awk '{printf "%s\\n", $0}') # Build initialization output message if present init_message="" if [ -n "$init_escaped" ]; then init_message="${init_escaped}\n\n" fi # Build status messages that go at the end status_message="" if [ -n "$skills_behind" ]; then status_message="\n\n⚠️ New skills available from upstream. Manual merge needed." fi # Output context injection as JSON cat <\nYou have specialized skills for domain work.\n\n${init_message}**The content below is from getting-started/SKILL.md - your operating procedures:**\n\n${getting_started_escaped}\n\n**Tool paths:**\n- find-skill: \${NEXUS_SKILLS_ROOT}/getting-started/find-skill\n\n**Skills root:** ${NEXUS_SKILLS_ROOT}\n\n**Available skills (output of find-skill):**\n\n${find_skills_escaped}${status_message}\n" } } EOF exit 0