feat: мастер-скрипт setup.sh + перенос скриптов в scripts/

- все скрипты перенесены в scripts/ (ai-setup.sh, ru-bypass.sh, ks-off.sh, ks-on.sh)
- setup.sh — новый мастер-скрипт с меню: шаги 1-2 отделены от опций 3-4
- пояснения к GATEWAY и DEV при выборе пункта 2
- ai-setup.sh: SCRIPT_DIR поднят на уровень выше (/../) чтобы находить home-configs/
- tests/test_fixes.sh, test_isolated.sh: пути обновлены на scripts/ai-setup.sh
- QUICK_START.md, README.md, home-configs/network/README.md: пути обновлены

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-07 10:47:26 +03:00
parent 3d21f6b620
commit 805951d920
10 changed files with 108 additions and 29 deletions

View File

@@ -3,7 +3,7 @@
## 1. Установить AI-инструменты ## 1. Установить AI-инструменты
```bash ```bash
bash ai-setup.sh bash setup.sh
``` ```
Спросит про VLESS-прокси (можно пропустить — `n`), затем установит лаунчеры Спросит про VLESS-прокси (можно пропустить — `n`), затем установит лаунчеры
@@ -26,10 +26,10 @@ ip route show default
# Пример: default via 192.168.1.1 dev wlp1s0 # Пример: default via 192.168.1.1 dev wlp1s0
# Запустить скрипт (дефолты: GATEWAY=192.168.1.1, DEV=wlp1s0) # Запустить скрипт (дефолты: GATEWAY=192.168.1.1, DEV=wlp1s0)
sudo bash home-configs/network/ru-bypass.sh sudo bash scripts/ru-bypass.sh
# Если параметры отличаются: # Если параметры отличаются:
sudo GATEWAY=10.0.0.1 DEV=enp3s0 bash home-configs/network/ru-bypass.sh sudo GATEWAY=10.0.0.1 DEV=enp3s0 bash scripts/ru-bypass.sh
``` ```
После первого запуска systemd-сервисы установлены — при перезагрузке всё поднимается само. После первого запуска systemd-сервисы установлены — при перезагрузке всё поднимается само.
@@ -46,12 +46,12 @@ bash tests/test_network.sh
```bash ```bash
# Выйти из Claude Code, затем: # Выйти из Claude Code, затем:
sudo bash home-configs/network/ks-off.sh sudo bash scripts/ks-off.sh
# Отключить Amnezia в GUI # Отключить Amnezia в GUI
# Вернуться к нормальному режиму: # Вернуться к нормальному режиму:
# Подключить Amnezia в GUI, затем: # Подключить Amnezia в GUI, затем:
sudo bash home-configs/network/ks-on.sh sudo bash scripts/ks-on.sh
``` ```
## Подробнее ## Подробнее

View File

@@ -2,11 +2,12 @@
Набор shell-лаунчеров для локальной установки и запуска нескольких AI coding CLI из единой точки входа. Набор shell-лаунчеров для локальной установки и запуска нескольких AI coding CLI из единой точки входа.
Главный скрипт - `ai-setup.sh`. Он настраивает пользовательские директории, устанавливает глобальные правила агентов из `GLOBAL_RULES.md`, разворачивает кастомные скиллы и полностью перегенерирует standalone-скрипты в `~/.local/bin`. Точка входа — `setup.sh` (мастер-скрипт с меню). Он вызывает нужный скрипт из `scripts/`.
`scripts/ai-setup.sh` настраивает пользовательские директории, устанавливает глобальные правила агентов из `GLOBAL_RULES.md`, разворачивает кастомные скиллы и полностью перегенерирует standalone-скрипты в `~/.local/bin`.
## Что реально устанавливается и генерируется ## Что реально устанавливается и генерируется
`ai-setup.sh` работает с такими путями: `scripts/ai-setup.sh` работает с такими путями:
- `~/.local/bin` - standalone-лаунчеры и вспомогательные скрипты. - `~/.local/bin` - standalone-лаунчеры и вспомогательные скрипты.
- `~/.config/ai-setup` - сохранённые ключи и глобальные правила. - `~/.config/ai-setup` - сохранённые ключи и глобальные правила.
@@ -25,7 +26,7 @@
- `~/.local/bin/ai-api-helpers.sh` - `~/.local/bin/ai-api-helpers.sh`
- `~/.local/bin/claude-gpt-effort-proxy.py` - `~/.local/bin/claude-gpt-effort-proxy.py`
Все генерируемые standalone-скрипты полностью перезаписываются текущей эталонной версией из `ai-setup.sh`. Старое содержимое не сливается и не дописывается. Все генерируемые standalone-скрипты полностью перезаписываются текущей эталонной версией из `scripts/ai-setup.sh`. Старое содержимое не сливается и не дописывается.
## Структура конфигов ## Структура конфигов
@@ -41,9 +42,7 @@ home-configs/
│ └── el-review-heavy/ │ └── el-review-heavy/
│ └── SKILL.md │ └── SKILL.md
├── network/ ├── network/
── ks-off.sh # временно отключить UFW kill switch ── README.md # документация по сетевой настройке
│ ├── ks-on.sh # восстановить UFW kill switch
│ └── ru-bypass.sh # .ru трафик напрямую (bypass Amnezia), всё остальное через VPN
├── vless/ ├── vless/
│ └── servers.conf # список VLESS-серверов для прокси │ └── servers.conf # список VLESS-серверов для прокси
├── proxychains/ ├── proxychains/
@@ -51,7 +50,7 @@ home-configs/
└── xray/ # (зарезервировано под будущие xray-конфиги) └── xray/ # (зарезервировано под будущие xray-конфиги)
``` ```
При запуске `ai-setup.sh`: При запуске `scripts/ai-setup.sh`:
- `GLOBAL_RULES.md` копируется в `~/.config/ai-setup/global_rules.md` и рассылается в нативные rule-файлы (`~/.claude/CLAUDE.md`, `~/.codex/AGENTS.md`, `~/.kimi-code/AGENTS.md`, `~/.gemini/GEMINI.md`). - `GLOBAL_RULES.md` копируется в `~/.config/ai-setup/global_rules.md` и рассылается в нативные rule-файлы (`~/.claude/CLAUDE.md`, `~/.codex/AGENTS.md`, `~/.kimi-code/AGENTS.md`, `~/.gemini/GEMINI.md`).
- Скиллы из `home-configs/claude/skills/` копируются и в `~/.claude/skills/`, и в `~/.gemini/config/plugins/local-setup/skills/`. Для Gemini также генерируется `plugin.json`, чтобы `agy` распознал плагин `local-setup`. - Скиллы из `home-configs/claude/skills/` копируются и в `~/.claude/skills/`, и в `~/.gemini/config/plugins/local-setup/skills/`. Для Gemini также генерируется `plugin.json`, чтобы `agy` распознал плагин `local-setup`.
@@ -61,7 +60,7 @@ home-configs/
## VLESS / Xray (опционально) ## VLESS / Xray (опционально)
При запуске `ai-setup.sh` первым делом спрашивает, нужен ли режим VLESS-прокси: При запуске `scripts/ai-setup.sh` первым делом спрашивает, нужен ли режим VLESS-прокси:
``` ```
Установить встроенный vless? [Y/n] Установить встроенный vless? [Y/n]
@@ -89,7 +88,13 @@ home-configs/
Запускать от обычного пользователя, не через `sudo`: Запускать от обычного пользователя, не через `sudo`:
```bash ```bash
bash ai-setup.sh bash setup.sh
```
Мастер-скрипт предложит меню с выбором что запустить. Либо напрямую:
```bash
bash scripts/ai-setup.sh
``` ```
Скрипт прямо запрещает запуск от root. При этом, если Node.js не найден, он может попытаться установить Node.js через `apt-get` или `dnf` и тогда попросит `sudo` уже внутри этого шага. Скрипт прямо запрещает запуск от root. При этом, если Node.js не найден, он может попытаться установить Node.js через `apt-get` или `dnf` и тогда попросит `sudo` уже внутри этого шага.
@@ -134,7 +139,7 @@ exec bash
- Исходник глобальных правил лежит в `home-configs/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-файлы: При запуске `scripts/ai-setup.sh` сразу обновляются native rule-файлы:
- `~/.codex/AGENTS.md` - `~/.codex/AGENTS.md`
- `~/.kimi-code/AGENTS.md` - `~/.kimi-code/AGENTS.md`
@@ -182,16 +187,16 @@ exec bash
Также скрипт генерирует `~/.local/bin/claude-gpt-effort-proxy.py` — легковесный прокси, который маппит `xhigh``high` для `claude-code-proxy` (GPT-бэкенд). Без него Claude Code не смог бы использовать `xhigh` effort с GPT. Также скрипт генерирует `~/.local/bin/claude-gpt-effort-proxy.py` — легковесный прокси, который маппит `xhigh``high` для `claude-code-proxy` (GPT-бэкенд). Без него Claude Code не смог бы использовать `xhigh` effort с GPT.
## Сетевые скрипты (network/) ## Сетевые скрипты (scripts/)
Скрипты в `home-configs/network/` **не запускаются автоматически** — ни `ai-setup.sh`, ни системой. Это ручные утилиты, которые нужно запускать явно от root. Скрипты в `scripts/` **не запускаются автоматически** — ни `setup.sh`, ни системой. Это ручные утилиты, которые нужно запускать явно от root (или через `bash setup.sh`).
Предназначены для окружения с Amnezia VPN и UFW kill switch (весь трафик через VPN, без VPN - только локалка). Предназначены для окружения с Amnezia VPN и UFW kill switch (весь трафик через VPN, без VPN - только локалка).
### ks-off.sh — временно отключить kill switch ### ks-off.sh — временно отключить kill switch
```bash ```bash
sudo bash ~/path/to/home-configs/network/ks-off.sh sudo bash scripts/ks-off.sh
``` ```
Отключает UFW. После этого нужно вручную отключить Amnezia через её GUI - трафик пойдёт напрямую через провайдера (российский IP). Используется когда нужен доступ к сайтам, которые блокируют VPN (ozon.ru и т.п.). Отключает UFW. После этого нужно вручную отключить Amnezia через её GUI - трафик пойдёт напрямую через провайдера (российский IP). Используется когда нужен доступ к сайтам, которые блокируют VPN (ozon.ru и т.п.).
@@ -201,7 +206,7 @@ sudo bash ~/path/to/home-configs/network/ks-off.sh
### ks-on.sh — восстановить kill switch ### ks-on.sh — восстановить kill switch
```bash ```bash
sudo bash ~/path/to/home-configs/network/ks-on.sh sudo bash scripts/ks-on.sh
``` ```
Включает UFW обратно. Перед запуском нужно подключить Amnezia через GUI - иначе скрипт предупредит, что интерфейс `amn0` не найден, и спросит подтверждение (без VPN весь интернет заблокируется). Включает UFW обратно. Перед запуском нужно подключить Amnezia через GUI - иначе скрипт предупредит, что интерфейс `amn0` не найден, и спросит подтверждение (без VPN весь интернет заблокируется).
@@ -211,12 +216,12 @@ sudo bash ~/path/to/home-configs/network/ks-on.sh
``` ```
# Нужен доступ к ru-сайтам напрямую: # Нужен доступ к ru-сайтам напрямую:
1. Выйти из Claude Code 1. Выйти из Claude Code
2. sudo bash ks-off.sh 2. sudo bash scripts/ks-off.sh
3. Отключить Amnezia в GUI 3. Отключить Amnezia в GUI
# Возврат к нормальному режиму: # Возврат к нормальному режиму:
4. Подключить Amnezia в GUI (дождаться amn0) 4. Подключить Amnezia в GUI (дождаться amn0)
5. sudo bash ks-on.sh 5. sudo bash scripts/ks-on.sh
6. Войти в Claude Code 6. Войти в Claude Code
``` ```
@@ -229,4 +234,4 @@ bash tests/test_fixes.sh
bash test_isolated.sh bash test_isolated.sh
``` ```
`tests/test_fixes.sh` проверяет структуру `ai-setup.sh` и синтаксис bash. `test_isolated.sh` проверяет автоустановочные URL для `ai-gpt` и `ai-kimi` через mock `curl`. `tests/test_fixes.sh` проверяет структуру `scripts/ai-setup.sh` и синтаксис bash. `test_isolated.sh` проверяет автоустановочные URL для `ai-gpt` и `ai-kimi` через mock `curl`.

View File

@@ -70,7 +70,7 @@ before.rules: 10/8, 172.16/12,
### Первый запуск / обновление ### Первый запуск / обновление
```bash ```bash
sudo bash home-configs/network/ru-bypass.sh sudo bash scripts/ru-bypass.sh
``` ```
Скрипт сам установит сервисы, добавит правило UFW и настроит NM dispatcher. Скрипт сам установит сервисы, добавит правило UFW и настроит NM dispatcher.
@@ -112,7 +112,7 @@ IP, например для оплаты или личного кабинета)
### ks-off.sh - отключить kill switch ### ks-off.sh - отключить kill switch
```bash ```bash
sudo bash home-configs/network/ks-off.sh sudo bash scripts/ks-off.sh
``` ```
Отключает UFW. После этого - отключить Amnezia через GUI. Трафик пойдёт напрямую через Отключает UFW. После этого - отключить Amnezia через GUI. Трафик пойдёт напрямую через
@@ -123,7 +123,7 @@ sudo bash home-configs/network/ks-off.sh
### ks-on.sh - восстановить kill switch ### ks-on.sh - восстановить kill switch
```bash ```bash
sudo bash home-configs/network/ks-on.sh sudo bash scripts/ks-on.sh
``` ```
Сначала подключи Amnezia через GUI (дождись появления amn0), потом запускай. Иначе Сначала подключи Amnezia через GUI (дождись появления amn0), потом запускай. Иначе

View File

@@ -8,7 +8,7 @@ CONFIG_DIR="$HOME/.config/ai-setup"
BIN_DIR="$HOME/.local/bin" 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/home-configs/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'

74
setup.sh Executable file
View File

@@ -0,0 +1,74 @@
#!/bin/bash
# Мастер-скрипт. Запускай от обычного пользователя (sudo попросит сам где нужно).
cd "$(dirname "$0")"
BLD='\033[1m'
GRN='\033[0;32m'
YEL='\033[0;33m'
GRY='\033[0;37m'
CLR='\033[0m'
echo ""
echo -e "${BLD}=== AI Setup ===${CLR}"
echo ""
echo -e "${YEL}Шаги для новой машины (выполнить по порядку):${CLR}"
echo ""
echo -e " ${BLD}1) AI-инструменты${CLR}"
echo -e " ${GRY}Устанавливает ai-claude, ai-gpt, ai-deepseek, ai-gemini и др.${CLR}"
echo -e " ${GRY}Запрашивает API-ключи. Запускать один раз.${CLR}"
echo ""
echo -e " ${BLD}2) Сеть: ru-bypass + kill switch${CLR}"
echo -e " ${GRY}.ru сайты (ozon, госуслуги) — напрямую с российским IP.${CLR}"
echo -e " ${GRY}*.loc офисные адреса — тоже напрямую.${CLR}"
echo -e " ${GRY}Всё остальное — только через Amnezia (kill switch).${CLR}"
echo -e " ${GRY}Запускать один раз на каждой машине.${CLR}"
echo ""
echo -e "${YEL}Дополнительно (по необходимости):${CLR}"
echo ""
echo -e " ${BLD}3) Отключить kill switch${CLR}"
echo -e " ${GRY}Временно — когда нужен прямой доступ без VPN (российский IP).${CLR}"
echo ""
echo -e " ${BLD}4) Включить kill switch${CLR}"
echo -e " ${GRY}Вернуть защиту обратно после отключения.${CLR}"
echo ""
echo -n "Выбери [1-4] или Enter для выхода: "
read -r choice
echo ""
case "$choice" in
1)
bash scripts/ai-setup.sh
;;
2)
echo -e "${GRY}Нужно указать два параметра твоей локальной сети:${CLR}"
echo -e "${GRY} GATEWAY — IP домашнего/офисного роутера (через него пойдёт .ru трафик напрямую)${CLR}"
echo -e "${GRY} DEV — сетевой интерфейс (wifi или провод), через который ты подключён к роутеру${CLR}"
echo ""
echo "Текущие маршруты (подсказка):"
ip route show default
echo ""
read -rp "GATEWAY (IP роутера) [192.168.1.1]: " gw
read -rp "DEV (интерфейс) [wlp1s0]: " dev
gw="${gw:-192.168.1.1}"
dev="${dev:-wlp1s0}"
echo ""
sudo GATEWAY="$gw" DEV="$dev" bash scripts/ru-bypass.sh
;;
3)
echo -e "${YEL}Перед этим выйди из Claude Code — сессия сменит IP.${CLR}"
echo -n "Продолжить? [y/N] "
read -r confirm
[ "$confirm" = "y" ] || [ "$confirm" = "Y" ] || exit 0
sudo bash scripts/ks-off.sh
;;
4)
sudo bash scripts/ks-on.sh
;;
"")
exit 0
;;
*)
echo "Неверный выбор."
exit 1
;;
esac

View File

@@ -12,12 +12,12 @@ BIN_DIR="$TMPDIR/bin"
mkdir -p "$BIN_DIR" mkdir -p "$BIN_DIR"
# Извлекаем ai-gpt # Извлекаем ai-gpt
awk '/^cat > "\$BIN_DIR\/ai-gpt"/,/^GPTEOF/' ai-setup.sh | \ awk '/^cat > "\$BIN_DIR\/ai-gpt"/,/^GPTEOF/' scripts/ai-setup.sh | \
sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash
chmod +x "$BIN_DIR/ai-gpt" chmod +x "$BIN_DIR/ai-gpt"
# Извлекаем ai-kimi # Извлекаем ai-kimi
awk '/^cat > "\$BIN_DIR\/ai-kimi"/,/^KIMIEOF/' ai-setup.sh | \ awk '/^cat > "\$BIN_DIR\/ai-kimi"/,/^KIMIEOF/' scripts/ai-setup.sh | \
sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash
chmod +x "$BIN_DIR/ai-kimi" chmod +x "$BIN_DIR/ai-kimi"

View File

@@ -4,7 +4,7 @@
set -euo pipefail set -euo pipefail
SCRIPT="$(cd "$(dirname "$0")/.." && pwd)/ai-setup.sh" SCRIPT="$(cd "$(dirname "$0")/.." && pwd)/scripts/ai-setup.sh"
GLOBAL_RULES_SOURCE="$(cd "$(dirname "$0")/.." && pwd)/home-configs/GLOBAL_RULES.md" GLOBAL_RULES_SOURCE="$(cd "$(dirname "$0")/.." && pwd)/home-configs/GLOBAL_RULES.md"
PASS=0; FAIL=0 PASS=0; FAIL=0