Files
ai-setup/README.md
vitaly 805951d920 feat: мастер-скрипт setup.sh + перенос скриптов в scripts/
- все скрипты перенесены в scripts/ (ai-setup.sh, ru-bypass.sh, ks-off.sh, ks-on.sh)
- setup.sh — новый мастер-скрипт с меню: шаги 1-2 отделены от опций 3-4
- пояснения к GATEWAY и DEV при выборе пункта 2
- ai-setup.sh: SCRIPT_DIR поднят на уровень выше (/../) чтобы находить home-configs/
- tests/test_fixes.sh, test_isolated.sh: пути обновлены на scripts/ai-setup.sh
- QUICK_START.md, README.md, home-configs/network/README.md: пути обновлены

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-07 10:47:26 +03:00

238 lines
15 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 из единой точки входа.
Точка входа — `setup.sh` (мастер-скрипт с меню). Он вызывает нужный скрипт из `scripts/`.
`scripts/ai-setup.sh` настраивает пользовательские директории, устанавливает глобальные правила агентов из `GLOBAL_RULES.md`, разворачивает кастомные скиллы и полностью перегенерирует standalone-скрипты в `~/.local/bin`.
## Что реально устанавливается и генерируется
`scripts/ai-setup.sh` работает с такими путями:
- `~/.local/bin` - standalone-лаунчеры и вспомогательные скрипты.
- `~/.config/ai-setup` - сохранённые ключи и глобальные правила.
- `~/.npm-global` - пользовательский npm prefix.
- `~/.claude/skills/` - кастомные скиллы для Claude Code.
- `~/.gemini/config/plugins/local-setup/skills/` - те же скиллы для Gemini/agy.
После запуска генерируются или обновляются:
- `~/.local/bin/ai-claude`
- `~/.local/bin/ai-gpt`
- `~/.local/bin/ai-deepseek`
- `~/.local/bin/ai-kimi`
- `~/.local/bin/ai-openrouter`
- `~/.local/bin/ai-gemini`
- `~/.local/bin/ai-api-helpers.sh`
- `~/.local/bin/claude-gpt-effort-proxy.py`
Все генерируемые standalone-скрипты полностью перезаписываются текущей эталонной версией из `scripts/ai-setup.sh`. Старое содержимое не сливается и не дописывается.
## Структура конфигов
Все конфиги, которые разворачиваются в домашнюю директорию, живут в папке `home-configs/`:
```
home-configs/
├── GLOBAL_RULES.md # глобальные правила для всех агентов
├── claude/
│ └── skills/ # кастомные скиллы для Claude Code (и Gemini)
│ ├── el-review/
│ │ └── SKILL.md
│ └── el-review-heavy/
│ └── SKILL.md
├── network/
│ └── README.md # документация по сетевой настройке
├── vless/
│ └── servers.conf # список VLESS-серверов для прокси
├── proxychains/
│ └── proxychains-xray.conf # конфиг proxychains (SOCKS5 через xray)
└── xray/ # (зарезервировано под будущие xray-конфиги)
```
При запуске `scripts/ai-setup.sh`:
- `GLOBAL_RULES.md` копируется в `~/.config/ai-setup/global_rules.md` и рассылается в нативные 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/`. Для Gemini также генерируется `plugin.json`, чтобы `agy` распознал плагин `local-setup`.
Лаунчеры дополнительно обновляют native rule-файлы через helper `_build_ai_sys_prompt` при своём запуске.
В native rule-файлы попадают только глобальные правила. Полный prompt с проектными `.md` используется в `ai-claude`, `ai-deepseek`, `ai-openrouter` и `ai-gemini`; `ai-gpt` и `ai-kimi` полагаются на native rule-файлы своих CLI.
## VLESS / Xray (опционально)
При запуске `scripts/ai-setup.sh` первым делом спрашивает, нужен ли режим VLESS-прокси:
```
Установить встроенный vless? [Y/n]
```
Если выбрать **Y** (по умолчанию):
- Читает список серверов из `home-configs/vless/servers.conf`.
- Реально проверяет каждый сервер: запускает `xray` с временным конфигом и тестирует curl'ом через SOCKS5. Работающие серверы помечаются зелёным, неработающие — красным.
- Пользователь выбирает сервер.
- Устанавливается Xray (`/usr/local/bin/xray`), генерируется конфиг (`/etc/xray/config.json`), создаётся и запускается systemd-сервис.
- Отключается IPv6 на уровне системы (VLESS с ним конфликтует).
- Устанавливается `proxychains-ng`.
- Firefox настраивается на SOCKS5 (`127.0.0.1:1080`) с remote DNS.
- Системный прокси (GNOME) настраивается для Chrome/Chromium.
- **Все лаунчеры оборачиваются в `proxychains4`** — трафик идёт через xray.
Если выбрать **n** (direct-режим — или если ранее был включён VLESS, а теперь отключается):
- Останавливается и отключается systemd-сервис xray.
- Системный прокси сбрасывается в `none`.
- Firefox переключается на прямой доступ.
- IPv6 восстанавливается.
## Установка
Запускать от обычного пользователя, не через `sudo`:
```bash
bash setup.sh
```
Мастер-скрипт предложит меню с выбором что запустить. Либо напрямую:
```bash
bash scripts/ai-setup.sh
```
Скрипт прямо запрещает запуск от root. При этом, если Node.js не найден, он может попытаться установить Node.js через `apt-get` или `dnf` и тогда попросит `sudo` уже внутри этого шага.
После установки, если shell ещё не видит новые команды:
```bash
exec bash
```
## Требования
- `bash`
- `curl`
- `python3`
- Node.js/npm для npm-глобальных инструментов
- (опционально) `proxychains-ng` — для VLESS-режима
- (опционально) `gsettings` — для автонастройки системного прокси
Если Node.js отсутствует, скрипт пытается поставить его автоматически для систем с `apt-get` или `dnf`. Для остальных систем Node.js нужно поставить вручную.
## Команды
**На базе Claude Code:**
- `ai-claude` - запускает оригинальный Claude Code (Anthropic API).
- `ai-deepseek` - запускает Claude Code через DeepSeek Anthropic-compatible API. Проверяет и сохраняет DeepSeek API key.
- `ai-kimi` - запускает Claude Code через официальный Kimi Code API (`https://api.kimi.com/coding/`). Проверяет и сохраняет Kimi API key.
- `ai-openrouter` - запускает Claude Code через OpenRouter API (модели: GPT-5.5, Claude Opus 4.8, Claude Sonnet 4.6 и любые другие с OpenRouter). Проверяет и сохраняет OpenRouter API key.
**Нативные CLI:**
- `ai-gpt` - запускает нативный OpenAI Codex CLI. При отсутствии пытается поставить через `https://chatgpt.com/codex/install.sh` (fallback: npm).
- `ai-gemini` - запускает нативный Antigravity CLI `agy`. При отсутствии пытается поставить через `https://antigravity.google/cli/install.sh`.
## Ключи и конфиги
- DeepSeek key хранится в `~/.config/ai-setup/deepseek_key` с правами `600`.
- Kimi key хранится в `~/.config/ai-setup/kimi_key` с правами `600`.
- OpenRouter key хранится в `~/.config/ai-setup/openrouter_key` с правами `600`.
- Исходник глобальных правил лежит в `home-configs/GLOBAL_RULES.md`.
- При запуске глобальные правила пишутся в `~/.config/ai-setup/global_rules.md`.
При запуске `scripts/ai-setup.sh` сразу обновляются native rule-файлы:
- `~/.codex/AGENTS.md`
- `~/.kimi-code/AGENTS.md`
- `~/.claude/CLAUDE.md`
- `~/.gemini/GEMINI.md`
Лаунчеры дополнительно обновляют эти файлы через helper `_build_ai_sys_prompt` при своём запуске.
## Права запуска агентов
Лаунчеры запускают CLI в максимально свободном режиме:
- `ai-gpt` использует `--dangerously-bypass-approvals-and-sandbox`.
- `ai-claude`, `ai-deepseek`, `ai-kimi`, `ai-openrouter` и `ai-gemini` используют `--dangerously-skip-permissions`.
Это удобно для локального coding workflow, но это не sandbox для недоверенного кода.
## Правила агентов
Действуют правила Карпати как есть: английский блок из `GLOBAL_RULES.md` устанавливается в `~/.config/ai-setup/global_rules.md` без перевода и смысловых правок.
Кратко правила Карпати:
1. Think Before Coding - не гадать, явно проговаривать допущения, варианты и неясности.
2. Simplicity First - писать минимальный код без speculative features и лишней конфигурируемости.
3. Surgical Changes - трогать только нужное, не рефакторить соседний код, чистить только свои следы.
4. Goal-Driven Execution - формулировать проверяемую цель и доводить работу до верификации.
Пользовательские глобальные правила:
1. Всегда отвечать по-русски, на "ты", дружелюбно и как живой программист.
2. Не выполнять `git commit` без прямой и однозначной просьбы.
3. Не выполнять `git add` без прямой просьбы, чтобы изменения оставались видны через обычный `git diff`.
4. Использовать обычный дефис `-`, не em dash.
5. В начале работы внимательно учитывать все проектные `.md` файлы.
6. При повторяющихся инструкциях предлагать reusable skill, но создавать или менять skill-файлы только после явного согласия.
Правило этого проекта:
1. При каждом запуске `ai-setup.sh` все генерируемые standalone-скрипты в `~/.local/bin` (`ai-gpt`, `ai-deepseek`, `ai-kimi`, `ai-openrouter`, `ai-gemini`, `ai-api-helpers.sh`, `ai-claude`) должны полностью перезаписываться актуальными версиями. Merge и append старого содержимого запрещены.
## Effort Mapping
В репозитории есть `EFFORT_MAPPING.md` — документ с полной таблицей маппинга effort-уровней между провайдерами (Anthropic, GPT-5.5, DeepSeek V4, Kimi K2.6, Gemini 3.x). Описывает, во что превращается `low`/`medium`/`high`/`xhigh`/`max` у каждого провайдера и где именно выполняется маппинг.
Также скрипт генерирует `~/.local/bin/claude-gpt-effort-proxy.py` — легковесный прокси, который маппит `xhigh``high` для `claude-code-proxy` (GPT-бэкенд). Без него Claude Code не смог бы использовать `xhigh` effort с GPT.
## Сетевые скрипты (scripts/)
Скрипты в `scripts/` **не запускаются автоматически** — ни `setup.sh`, ни системой. Это ручные утилиты, которые нужно запускать явно от root (или через `bash setup.sh`).
Предназначены для окружения с Amnezia VPN и UFW kill switch (весь трафик через VPN, без VPN - только локалка).
### ks-off.sh — временно отключить kill switch
```bash
sudo bash scripts/ks-off.sh
```
Отключает UFW. После этого нужно вручную отключить Amnezia через её GUI - трафик пойдёт напрямую через провайдера (российский IP). Используется когда нужен доступ к сайтам, которые блокируют VPN (ozon.ru и т.п.).
**Перед запуском:** выйди из Claude Code - сессия будет идти с другого IP.
### ks-on.sh — восстановить kill switch
```bash
sudo bash scripts/ks-on.sh
```
Включает UFW обратно. Перед запуском нужно подключить Amnezia через GUI - иначе скрипт предупредит, что интерфейс `amn0` не найден, и спросит подтверждение (без VPN весь интернет заблокируется).
### Типичный workflow
```
# Нужен доступ к ru-сайтам напрямую:
1. Выйти из Claude Code
2. sudo bash scripts/ks-off.sh
3. Отключить Amnezia в GUI
# Возврат к нормальному режиму:
4. Подключить Amnezia в GUI (дождаться amn0)
5. sudo bash scripts/ks-on.sh
6. Войти в Claude Code
```
## Тесты
В репозитории есть shell-тесты:
```bash
bash tests/test_fixes.sh
bash test_isolated.sh
```
`tests/test_fixes.sh` проверяет структуру `scripts/ai-setup.sh` и синтаксис bash. `test_isolated.sh` проверяет автоустановочные URL для `ai-gpt` и `ai-kimi` через mock `curl`.