- Update ai-openrouter models in ai-setup.sh output and header - Fix effort persistence wording (statusbar -> launcher) - Unify KS_EXCEPTIONS -> KILL_SWITCH_EXCEPTIONS in docs and setup.sh prompt - Clarify menu item 7 only updates AI launchers - Add IPv6 note after ks-off.sh - Scope UFW before.rules insertion to *filter section Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
232 lines
12 KiB
Markdown
232 lines
12 KiB
Markdown
# AI Setup
|
||
|
||
Набор shell-скриптов для установки AI coding CLI и настройки сети с Amnezia VPN.
|
||
|
||
Точка входа - `setup.sh` (мастер-скрипт с меню). Он вызывает нужный скрипт из `scripts/`.
|
||
|
||
## Структура репозитория
|
||
|
||
```
|
||
setup.sh # мастер-скрипт с меню
|
||
scripts/
|
||
├── ai-setup.sh # устанавливает AI-инструменты в выбранный BIN_DIR
|
||
├── fuck-rkn.sh # серверный установщик nginx + telemt + xray
|
||
├── ru-bypass.sh # .ru трафик напрямую, kill switch для остального
|
||
├── ks-off.sh # временно отключить kill switch
|
||
└── ks-on.sh # восстановить kill switch
|
||
home-configs/
|
||
├── GLOBAL_RULES.md # глобальные правила для всех агентов
|
||
├── claude/
|
||
│ ├── hooks/ # хуки аккаунтов Claude Code
|
||
│ ├── skills/ # кастомные скиллы для Claude Code (и Gemini)
|
||
│ └── statusline-command.sh # статусная строка Claude Code
|
||
├── network/
|
||
│ └── README.md # подробная документация по сетевой настройке
|
||
├── vless/
|
||
│ └── servers.conf # список VLESS-серверов для прокси
|
||
└── proxychains/
|
||
└── proxychains-xray.conf # конфиг proxychains (SOCKS5 через xray)
|
||
tests/
|
||
├── test_fixes.sh # юнит-тесты структуры ai-setup.sh
|
||
└── test_network.sh # тесты маршрутизации
|
||
test_isolated.sh # проверка автоустановки ai-gpt и ai-kimi
|
||
test_sigint.sh # ручной тест поведения SIGINT
|
||
```
|
||
|
||
## Установка
|
||
|
||
Запускать от обычного пользователя, не через `sudo`:
|
||
|
||
```bash
|
||
bash setup.sh
|
||
```
|
||
|
||
Мастер-скрипт показывает меню:
|
||
|
||
```
|
||
Шаги для новой машины:
|
||
1) AI-инструменты
|
||
2) Сеть: ru-bypass + kill switch
|
||
|
||
Дополнительно (по необходимости):
|
||
3) Отключить kill switch
|
||
4) Включить kill switch
|
||
5) Статус
|
||
6) Проверить сеть
|
||
7) Обновить # git pull + перегенерация AI-лаунчеров
|
||
```
|
||
|
||
После установки, если shell ещё не видит новые команды:
|
||
|
||
```bash
|
||
exec bash
|
||
```
|
||
|
||
## Сеть: ru-bypass + kill switch
|
||
|
||
Полная документация: [`home-configs/network/README.md`](home-configs/network/README.md)
|
||
|
||
### Что это
|
||
|
||
- **.ru сайты** (ozon.ru, госуслуги и др.) - идут **напрямую** через провайдера с российским IP
|
||
- **\*.loc офисные адреса** - тоже напрямую через локальный роутер
|
||
- **Всё остальное** - только через Amnezia VPN
|
||
- **Если Amnezia упала** - не-.ru трафик блокируется UFW (kill switch), .ru и *.loc продолжают работать
|
||
|
||
### Как работает
|
||
|
||
Amnezia захватывает весь трафик двумя широкими маршрутами (`0.0.0.0/1` и `128.0.0.0/1` через `amn0`).
|
||
`ru-bypass.sh` добавляет тысячи более специфичных маршрутов для .ru IP-блоков через локальный роутер.
|
||
Ядро Linux выбирает самый специфичный маршрут - .ru идёт напрямую, остальное в amn0.
|
||
|
||
UFW настроен так:
|
||
```
|
||
default deny outgoing — запрещено всё по умолчанию
|
||
allow out on amn0 — через Amnezia можно всё
|
||
before.rules: ipset ru-direct — для .ru IP разрешён прямой выход
|
||
before.rules: RFC1918 — 10/8, 172.16/12, 192.168/16 тоже напрямую (*.loc)
|
||
```
|
||
|
||
### Первый запуск
|
||
|
||
Через меню (`bash setup.sh` → пункт 2) - он автоматически определит GATEWAY и DEV
|
||
из `ip route show default`, предложит профиль и сохранит настройки в
|
||
`~/.config/ai-setup/network_<profile>.conf` (по умолчанию профиль равен `$(hostname)`).
|
||
|
||
Или напрямую:
|
||
|
||
```bash
|
||
sudo bash scripts/ru-bypass.sh
|
||
# для другой сети:
|
||
sudo GATEWAY=10.0.0.1 DEV=eth0 bash scripts/ru-bypass.sh
|
||
```
|
||
|
||
### Что устанавливается при первом запуске
|
||
|
||
- `ipset` (если не установлен)
|
||
- Скрипт копируется в `/usr/local/bin/ru-bypass.sh`
|
||
- `ru-ipset-restore.service` - восстанавливает ipset из файла **до старта UFW** при загрузке
|
||
- `ru-bypass.service` - обновляет RIPE-список и маршруты после network-online
|
||
- `ru-bypass.timer` - ежедневно запускает обновление RIPE-списка и маршрутов
|
||
- NM dispatcher `/etc/NetworkManager/dispatcher.d/99-ru-bypass` - перезапускает скрипт при поднятии amn0
|
||
- `/etc/ru-bypass.conf` - root-конфиг для запусков из systemd/NM dispatcher
|
||
- `/etc/hosts` блок для локальных Eltex-доменов
|
||
|
||
При каждом запуске:
|
||
|
||
- Скачивает список .ru IP-блоков из RIPE (кэш 24ч, `/var/cache/ru-delegations.txt`)
|
||
- Обновляет ipset `ru-direct` (~11000 записей)
|
||
- Добавляет в ipset встроенные и пользовательские kill switch исключения
|
||
- Сохраняет ipset в `/etc/ipset.conf` для восстановления после ребута
|
||
- Добавляет маршруты через GATEWAY для всех .ru блоков и RFC1918
|
||
- Обновляет UFW `before.rules`, добавляет прямые iptables-правила и отключает IPv6 при активном kill switch
|
||
|
||
### ks-off / ks-on
|
||
|
||
Для ситуаций когда нужен временный доступ без VPN (сайты, блокирующие нероссийский IP):
|
||
|
||
```bash
|
||
# 1. Выйти из Claude Code
|
||
# 2. Отключить kill switch
|
||
sudo bash scripts/ks-off.sh
|
||
# 3. Отключить Amnezia в GUI
|
||
|
||
# Возврат:
|
||
# 4. Подключить Amnezia в GUI (дождаться amn0)
|
||
sudo bash scripts/ks-on.sh
|
||
# 5. Войти в Claude Code
|
||
```
|
||
|
||
### Проверка
|
||
|
||
```bash
|
||
ip route get 8.8.8.8 # -> dev amn0 (Google через VPN)
|
||
ip route get 77.88.8.8 # -> dev <DEV> (ya.ru напрямую)
|
||
ip route get 10.10.0.1 # -> dev <DEV> (*.loc напрямую)
|
||
bash tests/test_network.sh # полные тесты
|
||
```
|
||
|
||
## AI инструменты
|
||
|
||
`scripts/ai-setup.sh` устанавливает и настраивает все AI CLI.
|
||
|
||
После запуска генерируются или обновляются в выбранном `BIN_DIR`: `~/bin`, если он уже есть
|
||
в `PATH`, иначе `~/.local/bin`.
|
||
|
||
- `ai-claude` - Claude Code (Anthropic API)
|
||
- `ai-gpt` - нативный OpenAI Codex CLI
|
||
- `ai-deepseek` - Claude Code через DeepSeek API
|
||
- `ai-kimi` - Claude Code через официальный Kimi Code API (`api.kimi.com/coding`)
|
||
- `ai-openrouter` - Claude Code через OpenRouter (GPT-5.5, Grok, Qwen, MiniMax, Llama и др.)
|
||
- `ai-gemini` - нативный Antigravity CLI `agy`
|
||
- `ai-api-helpers.sh` - вспомогательные функции для лаунчеров
|
||
- `claude-gpt-effort-proxy.py` - совместимый helper для старого GPT/claude-code-proxy backend
|
||
|
||
Все генерируемые скрипты полностью перезаписываются при каждом запуске `scripts/ai-setup.sh`.
|
||
|
||
Также устанавливается:
|
||
- `~/.config/ai-setup/global_rules.md` и native 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/`
|
||
|
||
## VLESS / Xray (опционально)
|
||
|
||
При запуске `scripts/ai-setup.sh` спрашивает, нужен ли VLESS-прокси для AI API запросов.
|
||
|
||
Если выбрать **Y**:
|
||
- Читает список серверов из `home-configs/vless/servers.conf`
|
||
- Проверяет каждый сервер реальным curl'ом через SOCKS5
|
||
- Устанавливает Xray, генерирует конфиг, создаёт systemd сервис
|
||
- Все лаунчеры оборачиваются в `proxychains4`
|
||
|
||
Если выбрать **n** - VLESS отключается, xray останавливается, системный/Firefox прокси
|
||
сбрасываются в direct. IPv6 включается обратно только если UFW kill switch не активен.
|
||
|
||
## Ключи и конфиги
|
||
|
||
- `~/.config/ai-setup/deepseek_key` - DeepSeek API key (права 600)
|
||
- `~/.config/ai-setup/kimi_key` - Kimi API key (права 600)
|
||
- `~/.config/ai-setup/openrouter_key` - OpenRouter API key (права 600)
|
||
- `~/.config/ai-setup/global_rules.md` - глобальные правила агентов
|
||
- `~/.config/ai-setup/network_<profile>.conf` - сохранённые сетевые профили (`GATEWAY`, `DEV`, `LOCAL_DNS`, `AMNEZIA_SERVER`, `KILL_SWITCH_EXCEPTIONS`)
|
||
|
||
## Права запуска агентов
|
||
|
||
- `ai-gpt` использует `--dangerously-bypass-approvals-and-sandbox`
|
||
- `ai-claude`, `ai-deepseek`, `ai-kimi`, `ai-openrouter`, `ai-gemini` используют `--dangerously-skip-permissions`
|
||
|
||
Удобно для локального coding workflow, но это не sandbox для недоверенного кода.
|
||
|
||
## Правила агентов
|
||
|
||
В `home-configs/GLOBAL_RULES.md` - правила Карпати (Think Before Coding, Simplicity First,
|
||
Surgical Changes, Goal-Driven Execution) плюс пользовательские правила (отвечать по-русски,
|
||
не коммитить без команды, не делать git add без команды и др.).
|
||
|
||
`scripts/ai-setup.sh` копирует их в native rule-файлы всех CLI. Лаунчеры обновляют их при каждом запуске.
|
||
|
||
## Effort Mapping
|
||
|
||
`EFFORT_MAPPING.md` - таблица effort-уровней (`low`/`medium`/`high`/`xhigh`/`max`)
|
||
для Claude Code лаунчеров (`ai-claude`, `ai-deepseek`, `ai-kimi`, `ai-openrouter`).
|
||
Нативные `ai-gpt` и `ai-gemini` живут отдельно.
|
||
|
||
`claude-gpt-effort-proxy.py` маппит `xhigh` -> `high` для совместимости со старым
|
||
GPT/claude-code-proxy backend; текущие лаунчеры его напрямую не вызывают.
|
||
|
||
## Требования
|
||
|
||
- `bash`, `curl`, `python3`
|
||
- Node.js/npm (для ai-gpt через Codex CLI и ai-gemini через agy)
|
||
- `ipset` (устанавливается автоматически при запуске ru-bypass.sh)
|
||
- (опционально) `proxychains-ng` - для VLESS-режима
|
||
- (опционально) `gsettings` - для автонастройки системного прокси GNOME
|
||
|
||
## Тесты
|
||
|
||
```bash
|
||
bash tests/test_fixes.sh # структура ai-setup.sh и синтаксис bash
|
||
bash test_isolated.sh # автоустановка ai-gpt и ai-kimi через mock curl
|
||
bash tests/test_network.sh # маршрутизация (нужен активный ru-bypass)
|
||
# test_sigint.sh # ручной диагностический тест SIGINT
|
||
```
|