# 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 │ └── 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 ``` ### Обновление одной командой ```bash ./setup.sh update # или: ./setup.sh --update ``` То же, что пункт меню `7) Обновить`: `git pull --ff-only` + перегенерация всех `ai-*` лаунчеров через `scripts/ai-setup.sh`. Без аргументов открывается меню. ## Сеть: 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_.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-bypass: local hosts` и `# ru-bypass: end`; ручные записи вне блока скрипт не трогает) При каждом запуске: - Скачивает список .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 (ya.ru напрямую) ip route get 10.10.0.1 # -> 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.3 API (`api.z.ai/api/anthropic`) - `ai-eltex` - Claude Code через корпоративный LLM-прокси Eltex (`http://llm.eltex.loc:4000`, LiteLLM, team-подписка GLM). Ключ выдают админы ([дока](https://intdocs.eltex.loc/pages/viewpage.action?pageId=262329878)), Claude Code ходит в сырой путь прокси `/anthropic`, который пересылает запросы на Anthropic-эндпоинт Z.ai как есть; модель `glm-5.3` во всех слотах `/model` (картинки через серверный `analyze_image`, как в `ai-glm`, effort, окно 1M); если ключу недоступна `glm-5.3`, лаунчер выходит с понятной ошибкой; переопределение: `ELTEX_MODEL`, `ELTEX_BASE_URL` - `ai-eltex-qwen` - то же через корпоративный LLM-прокси Eltex, но на моделях Qwen со своим ключом от админов: по умолчанию `Eltex-Coder-Senior` (Qwen3.8-27B), если она есть у ключа, иначе `Eltex-Qwen3_8-Flash-Next`; ключ можно задать в `AI_ELTEX_LLM_API_KEY`, как в онбординге Eltex AI; переопределение: `ELTEX_QWEN_MODEL`, `ELTEX_BASE_URL` - `ai-mimo` - Claude Code через Xiaomi MiMo V2.6 (Anthropic-совместимый API, Token Plan или pay-as-you-go): всегда самая умная модель `mimo-v2.6-pro` (во всех слотах и сабагентах, `--model opus` на каждом запуске), effort `max`, вывод до 128000 токенов, окно 1M. Эндпоинт региона подписки (`token-plan-sgp`/`-ams`, для `sk-` ключа `api.xiaomimimo.com`) находится перебором при вводе ключа; переопределение: `MIMO_BASE_URL` (нужно для `token-plan-cn`: он в перебор не входит, с наших машин не отвечает) - `ai-qwen` - Claude Code через Alibaba Cloud Model Studio (Token Plan, Anthropic-совместимый API `token-plan.ap-southeast-1.maas.aliyuncs.com/apps/anthropic`): общий ключ вшит в скрипт, запускается сразу без ввода ключа. `qwen3.8-max` в opus/sonnet и сабагентах (`--model opus` на каждом запуске), `qwen3.8-flash` в haiku, effort `max`, окно 1M, картинки видят обе модели - `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`) ## 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/eltex_key` - ключ корпоративного LLM-прокси Eltex от админов (права 600) - `~/.config/ai-setup/eltex_qwen_key` - ключ для моделей Qwen на том же прокси (права 600) - `~/.config/ai-setup/mimo_key` - Xiaomi MiMo API key (права 600), `mimo_base_url` - найденный для него эндпоинт - `~/.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_.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-eltex`, `ai-eltex-qwen`, `ai-mimo`, `ai-qwen`, `ai-openrouter`, `ai-opencode`, `ai-gemini` используют `--dangerously-skip-permissions` - `ai-cursor` использует `--force` (алиас `--yolo`) Удобно для локального coding workflow, но это не sandbox для недоверенного кода. ## Правила агентов В `home-configs/GLOBAL_RULES.md` - компактные правила о границах автономности, минимальных изменениях, пропорциональной проверке, работе с Git и контекстом проекта, а также пользовательские настройки: русский язык, доступ к Redmine и запрет на commit/staging без явной команды. `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).