Files
ai-setup/README.md
vitaly 38b5f2710c docs: sync README/QUICK_START/EFFORT_MAPPING with current code
- 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>
2026-06-14 09:16:37 +03:00

232 lines
12 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-инструменты в выбранный 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
```