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:
21
README.md
21
README.md
@@ -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-файлы:
|
||||||
|
|||||||
19
ai-setup.sh
19
ai-setup.sh
@@ -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"
|
||||||
|
|||||||
48
home-configs/claude/skills/el-review-heavy/SKILL.md
Normal file
48
home-configs/claude/skills/el-review-heavy/SKILL.md
Normal 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
|
||||||
|
- старая строка
|
||||||
|
+ новая строка
|
||||||
|
```
|
||||||
|
```
|
||||||
48
home-configs/claude/skills/el-review/SKILL.md
Normal file
48
home-configs/claude/skills/el-review/SKILL.md
Normal 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
|
||||||
|
- старая строка
|
||||||
|
+ новая строка
|
||||||
|
```
|
||||||
|
```
|
||||||
@@ -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)); }
|
||||||
|
|||||||
Reference in New Issue
Block a user