From 81a7b024eea2e4d18c3c04c4d246fdd2dc94621c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9=20=D0=9D=D0=B8?= =?UTF-8?q?=D0=BA=D0=B8=D1=82=D0=B5=D0=BD=D0=BA=D0=BE?= Date: Thu, 4 Jun 2026 19:02:37 +0700 Subject: [PATCH] feat: add home-configs with auto-deployed Claude skills - Move GLOBAL_RULES.md to home-configs/ as single source of truth - Add el-review and el-review-heavy skills for GitLab-style branch diff review - Update ai-setup.sh to deploy skills to ~/.claude/skills/ - Update README and tests for new paths --- README.md | 21 +++++++- ai-setup.sh | 19 +++++++- .../GLOBAL_RULES.md | 0 .../claude/skills/el-review-heavy/SKILL.md | 48 +++++++++++++++++++ home-configs/claude/skills/el-review/SKILL.md | 48 +++++++++++++++++++ tests/test_fixes.sh | 2 +- 6 files changed, 135 insertions(+), 3 deletions(-) rename GLOBAL_RULES.md => home-configs/GLOBAL_RULES.md (100%) create mode 100644 home-configs/claude/skills/el-review-heavy/SKILL.md create mode 100644 home-configs/claude/skills/el-review/SKILL.md diff --git a/README.md b/README.md index 49baa88..ff315db 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,25 @@ Все генерируемые standalone-скрипты полностью перезаписываются текущей эталонной версией из `ai-setup.sh`. Старое содержимое не сливается и не дописывается. +## Структура конфигов + +Все конфиги, которые разворачиваются в домашнюю директорию, живут в папке `home-configs/`: + +``` +home-configs/ +├── GLOBAL_RULES.md # глобальные правила для всех агентов +└── claude/ + └── skills/ # кастомные скиллы для Claude Code + ├── el-review/ + │ └── SKILL.md + └── el-review-heavy/ + └── SKILL.md +``` + +При запуске `ai-setup.sh`: +- `GLOBAL_RULES.md` копируется в `~/.config/ai-setup/global_rules.md` и рассылается в нативные rule-файлы (`~/.claude/CLAUDE.md`, `~/.codex/AGENTS.md` и т.д.) +- Скиллы из `home-configs/claude/skills/` копируются в `~/.claude/skills/` + Также скрипт при отсутствии скачивает `~/.local/bin/claude-code-proxy`, но текущий `ai-gpt` запускает нативный Codex CLI и не использует старую proxy-логику через `ANTHROPIC_BASE_URL`. ## Установка @@ -65,7 +84,7 @@ exec bash - DeepSeek key хранится в `~/.config/ai-setup/deepseek_key` с правами `600`. - Kimi key хранится в `~/.config/ai-setup/kimi_key` с правами `600`. -- Исходник глобальных правил лежит в `GLOBAL_RULES.md`. +- Исходник глобальных правил лежит в `home-configs/GLOBAL_RULES.md`. - При запуске глобальные правила пишутся в `~/.config/ai-setup/global_rules.md`. При запуске `ai-setup.sh` сразу обновляются native rule-файлы: diff --git a/ai-setup.sh b/ai-setup.sh index 863c55f..6f4d5ea 100755 --- a/ai-setup.sh +++ b/ai-setup.sh @@ -9,7 +9,7 @@ BIN_DIR="$HOME/.local/bin" NPM_GLOBAL="$HOME/.npm-global" PROXY_BIN="$BIN_DIR/claude-code-proxy" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -GLOBAL_RULES_SOURCE="$SCRIPT_DIR/GLOBAL_RULES.md" +GLOBAL_RULES_SOURCE="$SCRIPT_DIR/home-configs/GLOBAL_RULES.md" RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; CYAN='\033[0;36m'; NC='\033[0m' info() { echo -e "${CYAN}[INFO]${NC} $*"; } @@ -207,6 +207,23 @@ cp "$CONFIG_DIR/global_rules.md" "$HOME/.claude/CLAUDE.md" cp "$CONFIG_DIR/global_rules.md" "$HOME/.gemini/GEMINI.md" success "Native rule-файлы обновлены" +# ── 6.6. Деплой Claude skills ──────────────────────────────── +info "Обновляю Claude skills..." +SKILLS_SRC="$SCRIPT_DIR/home-configs/claude/skills" +SKILLS_DST="$HOME/.claude/skills" +if [ -d "$SKILLS_SRC" ]; then + mkdir -p "$SKILLS_DST" + for skill_dir in "$SKILLS_SRC"/*; do + [ -d "$skill_dir" ] || continue + skill_name=$(basename "$skill_dir") + mkdir -p "$SKILLS_DST/$skill_name" + cp -r "$skill_dir/"* "$SKILLS_DST/$skill_name/" + done + success "Claude skills обновлены" +else + info "Папка со skills не найдена, пропускаю" +fi + # ── 7. Очистка старых функций из .bashrc / .zshrc ─────────── clean_rc() { local rc_file="$1" diff --git a/GLOBAL_RULES.md b/home-configs/GLOBAL_RULES.md similarity index 100% rename from GLOBAL_RULES.md rename to home-configs/GLOBAL_RULES.md diff --git a/home-configs/claude/skills/el-review-heavy/SKILL.md b/home-configs/claude/skills/el-review-heavy/SKILL.md new file mode 100644 index 0000000..8bb8c87 --- /dev/null +++ b/home-configs/claude/skills/el-review-heavy/SKILL.md @@ -0,0 +1,48 @@ +--- +name: el-review-heavy +description: Use when пользователь запрашивает тяжелое code-review между двумя Git-ветками с диффом в стиле GitLab (от merge-base) +--- + +# Eltex Review Heavy + +## Overview + +Тяжелое ревью диффа между двумя Git-ветками в стиле GitLab Merge Request (от merge-base). Запускает полный `/code-review` с кучей агентов. + +## When to Use + +- Пользователь просит "поревьюй ветку feature относительно master" тщательно +- Нужен дифф как на GitLab (без лишних изменений из целевой ветки) +- Формат вызова: `/el-review-heavy <наша-ветка-с-изменениями> <целевая-ветка>` + +## Workflow + +1. Определи аргументы: + - `source` — первая ветка (наша, с изменениями, которую ревьюим) + - `target` — вторая ветка (целевая, в которую мерж-реквест) +2. Выполни `git fetch origin` — обнови remote refs +3. Если текущая checkout-ветка == `source`, выполни `git pull --ff-only origin source` — обнови локальную ветку +4. Построй дифф от merge-base: `git diff origin/target...origin/source > /tmp/el-review-heavy.diff` (три точки!) +5. Прочитай файл `/tmp/el-review-heavy.diff` +6. Запусти скилл `code-review` с этим файлом как аргумент +7. Полученные findings переформатируй: + - Пронумеруй проблемы + - Оставь только критические замечания + - Для каждой предложи готовый дифф с исправлением + - Объясни простым языком + +## Формат вывода + +``` +## Проблема N: [краткое название] + +**Где:** `file.kt:123` + +**Что не так:** простым языком, зачем это плохо + +**Исправление:** +```diff +- старая строка ++ новая строка +``` +``` diff --git a/home-configs/claude/skills/el-review/SKILL.md b/home-configs/claude/skills/el-review/SKILL.md new file mode 100644 index 0000000..4a76f7a --- /dev/null +++ b/home-configs/claude/skills/el-review/SKILL.md @@ -0,0 +1,48 @@ +--- +name: el-review +description: Use when пользователь запрашивает легкое code-review между двумя Git-ветками с диффом в стиле GitLab (от merge-base) +--- + +# Eltex Review + +## Overview + +Легкое ревью диффа между двумя Git-ветками в стиле GitLab Merge Request (от merge-base). Запускает быстрый `/review` вместо тяжелого `/code-review`. + +## When to Use + +- Пользователь просит "поревьюй ветку feature относительно master" быстро +- Нужен дифф как на GitLab (без лишних изменений из целевой ветки) +- Формат вызова: `/el-review <наша-ветка-с-изменениями> <целевая-ветка>` + +## Workflow + +1. Определи аргументы: + - `source` — первая ветка (наша, с изменениями, которую ревьюим) + - `target` — вторая ветка (целевая, в которую мерж-реквест) +2. Выполни `git fetch origin` — обнови remote refs +3. Если текущая checkout-ветка == `source`, выполни `git pull --ff-only origin source` — обнови локальную ветку +4. Построй дифф от merge-base: `git diff origin/target...origin/source > /tmp/el-review.diff` (три точки!) +5. Прочитай файл `/tmp/el-review.diff` +6. Запусти скилл `review` с этим файлом как аргумент +7. Полученные findings переформатируй: + - Пронумеруй проблемы + - Оставь только критические замечания + - Для каждой предложи готовый дифф с исправлением + - Объясни простым языком + +## Формат вывода + +``` +## Проблема N: [краткое название] + +**Где:** `file.kt:123` + +**Что не так:** простым языком, зачем это плохо + +**Исправление:** +```diff +- старая строка ++ новая строка +``` +``` diff --git a/tests/test_fixes.sh b/tests/test_fixes.sh index f3dabcf..58f4615 100755 --- a/tests/test_fixes.sh +++ b/tests/test_fixes.sh @@ -5,7 +5,7 @@ set -euo pipefail SCRIPT="$(cd "$(dirname "$0")/.." && pwd)/ai-setup.sh" -GLOBAL_RULES_SOURCE="$(cd "$(dirname "$0")/.." && pwd)/GLOBAL_RULES.md" +GLOBAL_RULES_SOURCE="$(cd "$(dirname "$0")/.." && pwd)/home-configs/GLOBAL_RULES.md" PASS=0; FAIL=0 ok() { echo "[PASS] $1"; PASS=$((PASS+1)); }