- Установка android CLI из dl.google.com для linux/mac/windows - Запуск android init для деплоя skills в агентов - Кастомный skill android-cli в home-configs/claude/skills/ - Пункт меню 8) Android CLI в setup.sh - Тесты и документация Co-Authored-By: Claude <noreply@anthropic.com>
273 lines
14 KiB
Markdown
273 lines
14 KiB
Markdown
# 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/`
|
||
|
||
## 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`.
|
||
- Android CLI - нативный бинарь, который спавнит дочерние процессы (emulator, gradle, adb), поэтому он не оборачивается в `proxychains4`.
|
||
|
||
## 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
|
||
```
|