- README: добавлены ai-openrouter, VLESS/Xray, effort mapping, Gemini skills - README: команды сгруппированы (Claude Code → нативные) - README: убрано предупреждение про отдельный Google-аккаунт - AGENTS.md: ai-openrouter добавлен в список генерируемых скриптов - ai-setup.sh: финальный вывод перегруппирован, предупреждение Gemini удалено Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
191 lines
12 KiB
Markdown
191 lines
12 KiB
Markdown
# AI Setup
|
||
|
||
Набор shell-лаунчеров для локальной установки и запуска нескольких AI coding CLI из единой точки входа.
|
||
|
||
Главный скрипт - `ai-setup.sh`. Он настраивает пользовательские директории, устанавливает глобальные правила агентов из `GLOBAL_RULES.md`, разворачивает кастомные скиллы и полностью перегенерирует standalone-скрипты в `~/.local/bin`.
|
||
|
||
## Что реально устанавливается и генерируется
|
||
|
||
`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-скрипты полностью перезаписываются текущей эталонной версией из `ai-setup.sh`. Старое содержимое не сливается и не дописывается.
|
||
|
||
## Структура конфигов
|
||
|
||
Все конфиги, которые разворачиваются в домашнюю директорию, живут в папке `home-configs/`:
|
||
|
||
```
|
||
home-configs/
|
||
├── GLOBAL_RULES.md # глобальные правила для всех агентов
|
||
├── claude/
|
||
│ └── skills/ # кастомные скиллы для Claude Code (и Gemini)
|
||
│ ├── el-review/
|
||
│ │ └── SKILL.md
|
||
│ └── el-review-heavy/
|
||
│ └── SKILL.md
|
||
├── vless/
|
||
│ └── servers.conf # список VLESS-серверов для прокси
|
||
├── proxychains/
|
||
│ └── proxychains-xray.conf # конфиг proxychains (SOCKS5 через xray)
|
||
└── xray/ # (зарезервировано под будущие xray-конфиги)
|
||
```
|
||
|
||
При запуске `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 (опционально)
|
||
|
||
При запуске `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 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`.
|
||
|
||
При запуске `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.
|
||
|
||
## Тесты
|
||
|
||
В репозитории есть shell-тесты:
|
||
|
||
```bash
|
||
bash tests/test_fixes.sh
|
||
bash test_isolated.sh
|
||
```
|
||
|
||
`tests/test_fixes.sh` проверяет структуру `ai-setup.sh` и синтаксис bash. `test_isolated.sh` проверяет автоустановочные URL для `ai-gpt` и `ai-kimi` через mock `curl`.
|