216 lines
10 KiB
Markdown
216 lines
10 KiB
Markdown
# AI Setup
|
||
|
||
Набор shell-скриптов для установки AI coding CLI и настройки сети с Amnezia VPN.
|
||
|
||
Точка входа - `setup.sh` (мастер-скрипт с меню). Он вызывает нужный скрипт из `scripts/`.
|
||
|
||
## Структура репозитория
|
||
|
||
```
|
||
setup.sh # мастер-скрипт с меню
|
||
scripts/
|
||
├── ai-setup.sh # устанавливает AI-инструменты в ~/.local/bin
|
||
├── ru-bypass.sh # .ru трафик напрямую, kill switch для остального
|
||
├── ks-off.sh # временно отключить kill switch
|
||
└── ks-on.sh # восстановить kill switch
|
||
home-configs/
|
||
├── GLOBAL_RULES.md # глобальные правила для всех агентов
|
||
├── claude/
|
||
│ └── skills/ # кастомные скиллы для Claude Code (и Gemini)
|
||
├── 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
|
||
```
|
||
|
||
## Установка
|
||
|
||
Запускать от обычного пользователя, не через `sudo`:
|
||
|
||
```bash
|
||
bash setup.sh
|
||
```
|
||
|
||
Мастер-скрипт показывает меню:
|
||
|
||
```
|
||
Шаги для новой машины:
|
||
1) AI-инструменты
|
||
2) Сеть: ru-bypass + kill switch
|
||
|
||
Дополнительно (по необходимости):
|
||
3) Отключить kill switch
|
||
4) Включить kill switch
|
||
5) Статус
|
||
6) Проверить сеть
|
||
```
|
||
|
||
После установки, если 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_$(hostname).conf`.
|
||
|
||
Или напрямую:
|
||
|
||
```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
|
||
- NM dispatcher `/etc/NetworkManager/dispatcher.d/99-ru-bypass` - перезапускает скрипт при поднятии amn0
|
||
|
||
При каждом запуске:
|
||
|
||
- Скачивает список .ru IP-блоков из RIPE (кэш 24ч, `/var/cache/ru-delegations.txt`)
|
||
- Обновляет ipset `ru-direct` (~11000 записей)
|
||
- Сохраняет ipset в `/etc/ipset.conf` для восстановления после ребута
|
||
- Добавляет маршруты через GATEWAY для всех .ru блоков и RFC1918
|
||
|
||
### 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 wlp1s0 (ya.ru напрямую)
|
||
ip route get 10.10.0.1 # -> dev wlp1s0 (*.loc напрямую)
|
||
bash tests/test_network.sh # полные тесты
|
||
```
|
||
|
||
## AI инструменты
|
||
|
||
`scripts/ai-setup.sh` устанавливает и настраивает все AI CLI.
|
||
|
||
После запуска генерируются или обновляются в `~/.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, Claude и др.)
|
||
- `ai-gemini` - нативный Antigravity CLI `agy`
|
||
- `ai-api-helpers.sh` - вспомогательные функции для лаунчеров
|
||
- `claude-gpt-effort-proxy.py` - прокси для маппинга effort-уровней (GPT 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 отключается, прокси и IPv6 сбрасываются в дефолт.
|
||
|
||
## Ключи и конфиги
|
||
|
||
- `~/.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_$(hostname).conf` - сохранённые GATEWAY/DEV для текущей машины
|
||
|
||
## Права запуска агентов
|
||
|
||
- `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`)
|
||
между провайдерами (Anthropic, GPT-5.5, DeepSeek V4, Kimi K2.6, Gemini 3.x).
|
||
|
||
`claude-gpt-effort-proxy.py` маппит `xhigh` → `high` для GPT-бэкенда (нет нативного `xhigh` у GPT).
|
||
|
||
## Требования
|
||
|
||
- `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)
|
||
```
|