Files
claude-plugins/plugins/learn/scripts/install-hooks.sh
Claude Agent f08704af5e feat: Add /learn:setup command for hook installation
- Add setup.md command to install SessionEnd and PreCompact hooks
- Add install-hooks.sh script for automatic hook installation to ~/.claude/settings.json
- Hooks remind user to run /learn:analyze before session end or auto-compact
- Bump version to 2.1.2

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-06 23:58:42 +00:00

114 lines
3.6 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Claude Learn - Install Hooks
# Adaugă hooks-urile Learn în ~/.claude/settings.json
SETTINGS_FILE="$HOME/.claude/settings.json"
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
RED='\033[0;31m'
NC='\033[0m'
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${CYAN} Claude Learn - Hook Installation${NC}"
echo -e "${CYAN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
# Check if settings file exists
if [ ! -f "$SETTINGS_FILE" ]; then
echo -e "${RED}Error: $SETTINGS_FILE not found${NC}"
exit 1
fi
# Backup
cp "$SETTINGS_FILE" "$SETTINGS_FILE.backup"
echo -e "${GREEN}${NC} Backup created: settings.json.backup"
# Check if hooks already exist
if python3 -c "import json; d=json.load(open('$SETTINGS_FILE')); exit(0 if 'hooks' in d else 1)" 2>/dev/null; then
echo -e "${YELLOW}${NC} Hooks section already exists in settings.json"
echo -e " Checking for Learn hooks..."
# Check if SessionEnd already has our hook
HAS_LEARN=$(python3 -c "
import json
d = json.load(open('$SETTINGS_FILE'))
hooks = d.get('hooks', {})
session_end = hooks.get('SessionEnd', [])
for h in session_end:
cmd = h.get('command', '')
if 'learn:analyze' in cmd:
print('yes')
exit(0)
print('no')
" 2>/dev/null)
if [ "$HAS_LEARN" = "yes" ]; then
echo -e "${GREEN}${NC} Learn hooks already installed!"
exit 0
fi
fi
# Add hooks using Python
python3 << 'PYTHON_SCRIPT'
import json
import os
settings_file = os.path.expanduser("~/.claude/settings.json")
with open(settings_file, 'r') as f:
settings = json.load(f)
# Define Learn hooks
learn_session_end = {
"type": "command",
"command": "echo '\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n💡 Tip: Rulează /learn:analyze pentru a captura lecțiile din sesiune\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━'",
"timeout": 5
}
learn_pre_compact = {
"matcher": "auto",
"hooks": [
{
"type": "command",
"command": "echo '\n⚠ Context plin! Rulează /learn:analyze ACUM pentru a salva lecțiile înainte de compact!\n'",
"timeout": 5
}
]
}
# Initialize hooks if not exists
if 'hooks' not in settings:
settings['hooks'] = {}
# Add SessionEnd hook
if 'SessionEnd' not in settings['hooks']:
settings['hooks']['SessionEnd'] = []
settings['hooks']['SessionEnd'].append(learn_session_end)
# Add PreCompact hook
if 'PreCompact' not in settings['hooks']:
settings['hooks']['PreCompact'] = []
settings['hooks']['PreCompact'].append(learn_pre_compact)
# Write back
with open(settings_file, 'w') as f:
json.dump(settings, f, indent=2)
print("Hooks added successfully!")
PYTHON_SCRIPT
if [ $? -eq 0 ]; then
echo -e "${GREEN}${NC} SessionEnd hook installed"
echo -e "${GREEN}${NC} PreCompact hook installed"
echo ""
echo -e "${CYAN}Hooks-urile vor fi active din următoarea sesiune Claude Code.${NC}"
echo -e "Verifică cu: ${YELLOW}/hooks${NC}"
else
echo -e "${RED}Error installing hooks${NC}"
# Restore backup
mv "$SETTINGS_FILE.backup" "$SETTINGS_FILE"
exit 1
fi