Files
ai-setup/README.md
vitaly 9e64088e46 chore: убрать VLESS-прокси, proxychains и fuck-rkn.sh
Пользователь перешёл на Amnezia VPN — встроенный VLESS-прокси (xray + proxychains4)
и отдельный server-installer fuck-rkn.sh (telemt + xray) больше не нужны. Убран
весь код в ai-setup.sh/setup.sh, конфиги с VPN-кредами, неактуальный тест и
упоминания в документации.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-06-30 21:50:50 +03:00

263 lines
13 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
├── 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 # подробная документация по сетевой настройке
tests/
├── test_fixes.sh # юнит-тесты структуры ai-setup.sh
└── test_network.sh # тесты маршрутизации
test_isolated.sh # проверка автоустановки ai-gpt, ai-kimi и ai-glm
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-glm` - Claude Code через Zhipu AI GLM 5.2 API (`api.z.ai/api/anthropic`)
- `ai-openrouter` - Claude Code через OpenRouter (GPT-5.5, Grok, Qwen, GLM 5.2 и др.)
- `ai-opencode` - Claude Code через OpenCode Go + routatic-proxy (DeepSeek, Kimi, Qwen, GLM, MiniMax, MiMo)
- `ai-gemini` - нативный Antigravity CLI `agy`
- `ai-cursor` - нативный Cursor CLI `agent`
- `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/`
## Android CLI
`scripts/ai-setup.sh` также устанавливает [Google Android CLI](https://d.android.com/tools/agents) (preview) - официальный терминальный инструмент для Android-разработки, заточенный под AI-агентов.
Что устанавливается:
- `android` - бинарь CLI в `~/.local/bin/` (или `~/bin` через symlink)
- `android-cli` skill в `~/.claude/skills/` для Claude Code
Поддерживаемые платформы:
- Linux: `x86_64`, `arm64`
- macOS: `x86_64`, `arm64`
- Windows: `x86_64` (ограниченная поддержка, `android emulator` отключён в v0.7)
Ключевые команды:
```bash
android --version # версия CLI
android info # информация об SDK и путях
android sdk list # список доступных SDK-пакетов
android sdk install ... # установить пакеты SDK
android create ... # создать новый Android-проект
android emulator start # запустить эмулятор
android run --apks ... # установить и запустить APK
android update # обновить сам Android CLI
```
Интеграция с Claude Code:
```bash
# После установки ai-setup.sh выполняется автоматически:
android init
```
Это разворачивает `android-cli` skill в `~/.claude/skills/`, после чего Claude Code понимает Android CLI и может использовать его для SDK, эмулятора и сборок.
Ограничения:
- Android CLI находится в preview, API/команды могут меняться.
- На Windows в v0.7 отключена команда `android emulator`.
- Если уже установлен Android Studio, Android CLI может использовать тот же SDK или создать новый в `~/.android/sdk`. Проверяй активный путь через `android info`.
## Ключи и конфиги
- `~/.config/ai-setup/deepseek_key` - DeepSeek API key (права 600)
- `~/.config/ai-setup/kimi_key` - Kimi API key (права 600)
- `~/.config/ai-setup/glm_key` - Zhipu AI (GLM) API key (права 600)
- `~/.config/ai-setup/openrouter_key` - OpenRouter API key (права 600)
- `~/.config/ai-setup/opencode_key` - OpenCode Go 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-glm`, `ai-openrouter`, `ai-opencode`, `ai-gemini` используют `--dangerously-skip-permissions`
- `ai-cursor` использует `--force` (алиас `--yolo`)
Удобно для локального 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-glm`, `ai-openrouter`, `ai-opencode`).
Нативные `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)
- (опционально) `gsettings` - для автонастройки системного прокси GNOME
## Тесты
```bash
bash tests/test_fixes.sh # структура ai-setup.sh и синтаксис bash
bash test_isolated.sh # автоустановка ai-gpt, ai-kimi и ai-glm через mock curl
bash tests/test_network.sh # маршрутизация (нужен активный ru-bypass)
# test_sigint.sh # ручной диагностический тест SIGINT
```
## Лицензия
MIT License. Copyright (c) 2026 Виталий Никитенко. См. [LICENSE](LICENSE).