Files
ai-setup/README.md

216 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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)
```