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
This commit is contained in:
Виталий Никитенко
2026-06-04 19:02:37 +07:00
parent de7373210c
commit 81a7b024ee
6 changed files with 135 additions and 3 deletions

View File

@@ -24,6 +24,25 @@
Все генерируемые standalone-скрипты полностью перезаписываются текущей эталонной версией из `ai-setup.sh`. Старое содержимое не сливается и не дописывается. Все генерируемые 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`. Также скрипт при отсутствии скачивает `~/.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`. - DeepSeek key хранится в `~/.config/ai-setup/deepseek_key` с правами `600`.
- Kimi key хранится в `~/.config/ai-setup/kimi_key` с правами `600`. - Kimi key хранится в `~/.config/ai-setup/kimi_key` с правами `600`.
- Исходник глобальных правил лежит в `GLOBAL_RULES.md`. - Исходник глобальных правил лежит в `home-configs/GLOBAL_RULES.md`.
- При запуске глобальные правила пишутся в `~/.config/ai-setup/global_rules.md`. - При запуске глобальные правила пишутся в `~/.config/ai-setup/global_rules.md`.
При запуске `ai-setup.sh` сразу обновляются native rule-файлы: При запуске `ai-setup.sh` сразу обновляются native rule-файлы:

View File

@@ -9,7 +9,7 @@ BIN_DIR="$HOME/.local/bin"
NPM_GLOBAL="$HOME/.npm-global" NPM_GLOBAL="$HOME/.npm-global"
PROXY_BIN="$BIN_DIR/claude-code-proxy" PROXY_BIN="$BIN_DIR/claude-code-proxy"
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 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' 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} $*"; } 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" cp "$CONFIG_DIR/global_rules.md" "$HOME/.gemini/GEMINI.md"
success "Native rule-файлы обновлены" 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 ─────────── # ── 7. Очистка старых функций из .bashrc / .zshrc ───────────
clean_rc() { clean_rc() {
local rc_file="$1" local rc_file="$1"

View File

@@ -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
- старая строка
+ новая строка
```
```

View File

@@ -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
- старая строка
+ новая строка
```
```

View File

@@ -5,7 +5,7 @@
set -euo pipefail set -euo pipefail
SCRIPT="$(cd "$(dirname "$0")/.." && pwd)/ai-setup.sh" 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 PASS=0; FAIL=0
ok() { echo "[PASS] $1"; PASS=$((PASS+1)); } ok() { echo "[PASS] $1"; PASS=$((PASS+1)); }