@purpleschool/ai-for-code
v0.2.1
Published
Автоматическая настройка AI для кода (Claude через PurpleSchool) в IDE и CLI: Claude Code, VS Code, Cursor, Windsurf, JetBrains (Cline), Neovim
Downloads
505
Readme
@purpleschool/ai-for-code
Мастер настройки «AI для кода» от PurpleSchool: подставляет ANTHROPIC_API_KEY и
ANTHROPIC_BASE_URL в нужные конфиги для Claude Code CLI, VS Code, Cursor, Windsurf,
Cline (JetBrains) и Neovim (avante.nvim) — без ручной правки JSON/dotfiles.
Использование
npx @purpleschool/ai-for-codeПервый вопрос — «Установить» или «Удалить».
Установить
- Спросит API-ключ (личный кабинет → раздел «API») и сразу проверит его живым запросом
к proxy (
GET /v1/models) — при 401/403 попросит ввести ключ заново, при недоступности сети спросит, продолжать ли без проверки. - Сам определит, какие инструменты уже установлены на машине, и предложит их отметить (можно доотметить вручную то, что не нашёл).
- Предупредит, какие файлы будет менять, и попросит подтверждение.
- Внесёт изменения, сохранив бэкап каждого тронутого файла в
~/.purpleschool-ai-backups/.
Удалить
Ключ не спрашивается — не нужен для отката. Мастер сам определяет, что похоже настроено
именно им (по маркеру в shell rc, по нашим записям в settings.json, по файлу
purpleschool-avante.lua), предлагает отметить нужное и точечно снимает только то, что
сам добавлял — чужие настройки, комментарии в JSON и посторонние переменные окружения
не трогает. Каждая правка тоже бэкапится перед изменением.
Claude Code CLI и Neovim используют один и тот же блок переменных окружения в shell rc —
если настроены оба, удаление одного из них снимает переменные для обоих (об этом мастер
явно предупреждает в сообщении). CLI-пакет @anthropic-ai/claude-code и расширение
"Claude Code" в IDE при удалении не трогаются — только конфиг подключения к прокси.
Флаг --dry-run в любом режиме показывает план действий без изменения файлов.
Что именно меняется
| Инструмент | Файл(ы) | Как |
| --- | --- | --- |
| Claude Code (CLI) | ~/.zshrc/~/.bashrc (или setx), ~/.claude/settings.json (env-блок), ~/.claude.json | env-блок в шелле, тот же креды в официальный env-блок настроек (работает сразу, без нового терминала), hasCompletedOnboarding, плюс пред-одобрение ключа (customApiKeyResponses.approved) — без него интерактивный claude пишет «Not logged in», пока не одобришь ключ вручную через /config |
| VS Code / Cursor / Windsurf | settings.json расширения Claude Code | мерджит claudeCode.environmentVariables по имени переменной и claudeCode.disableLoginPrompt, не трогая остальные настройки |
| Cline (JetBrains) | — | автонастройка недоступна (нет стабильного пути к конфигу плагина) — пошаговая инструкция (View → Tool Windows → Cline → шестерёнка) + ключ в буфере обмена |
| Neovim (avante.nvim) | shell rc + lua/plugins/purpleschool-avante.lua | env-переменные + файл-спека для lazy.nvim в актуальной схеме providers.claude |
Все правки — аддитивные и идемпотентные: повторный запуск не плодит дублирующиеся блоки и не трогает несвязанные настройки пользователя.
Доктор конфликтующих настроек
Перед записью в ~/.claude/settings.json мастер проверяет файл на настройки, которые, по
документации Anthropic (или по отсутствию в ней), могут молча перебивать наш ключ:
apiKeyHelper— если задан, его вывод имеет приоритет надenv.ANTHROPIC_API_KEYи полностью его перебивает (документированное поведение).env.CLAUDE_CODE_DISABLE_GATEWAY— не встречается ни в одном официальном источнике Anthropic; судя по названию, может отключать трактовкуANTHROPIC_BASE_URLкак шлюза.
Если что-то из этого найдено — мастер явно показывает находку и спрашивает разрешения убрать (с бэкапом, как обычно), не удаляет молча. Проверка сознательно не пытается угадывать «все подозрительные ключи» — Claude Code имеет много легитимных env-переменных (Bedrock/Vertex/ Foundry, кастомные заголовки и т.д.), и общая эвристика по имени ключа дала бы ложные срабатывания.
Кросс-платформенность
Работает под macOS, Windows и любой дистрибутив Linux (детект платформы, command -v
вместо which, $XDG_CONFIG_HOME — всё уважает конкретный дистрибутив, а не только
Ubuntu/Debian).
Отдельно на Linux для VS Code учитываются три способа установки: нативная (.deb/.rpm/
tarball), официальный Flatpak (com.visualstudio.code) и официальный Snap (code) —
CLI сам находит, какой из них реально используется. Для Cursor и Windsurf это не сделано:
у них нет подтверждённых официальных Flatpak/Snap-сборок, а гадать чужой app id не хотелось.
На Linux у Windsurf папка настроек — строчными буквами (~/.config/windsurf), в отличие от
macOS/Windows (Windsurf) и в отличие от Cursor, у которого регистр везде одинаковый
(Cursor) — учтено отдельно, файловая система на Linux регистрозависима.
Сверено с официальной документацией
Каждая настройка проверена по первоисточникам (Anthropic docs, GitHub-репозитории avante.nvim и Cline, а не только по инструкциям с сайта PurpleSchool). По итогам сверки:
claudeCode.environmentVariables,claudeCode.disableLoginPrompt— подтверждены дословно официальной страницей Connect Claude Code to an LLM gateway и Use Claude Code in VS Code: формат массива{name, value}и сами имена ключей совпадают один в один.CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY— подтверждена, требует Claude Code ≥2.1.129, дёргаетGET /v1/modelsу прокси — тем же эндпоинтом мы проверяем валидность ключа при вводе.~/.claude.json+hasCompletedOnboarding— оказался недокументированным файлом (это файл OAuth-сессии/MCP/кеша, не settings.json); официально задокументированный способ решить ту же проблему («просит войти, хотя прокси отвечает») —env-блок в~/.claude/settings.json. Мы теперь пишем оба: официальныйenv-блок (работает мгновенно) иhasCompletedOnboarding(сохранили как доп. подстраховку для более старых версий CLI, где встречался этот баг).- avante.nvim: схема конфига провайдера сменилась. Актуальный формат — вложенный
providers.claude = {...}, а не плоскийclaude = {...}рядом сprovider. Старая схема, которую мы генерировали раньше, устарела — обновили генератор снипета под текущую. - Cline (JetBrains) существует и общедоступен (GA с сентября 2025), но наша инструкция по доступу к настройкам была неточной («File → Settings → Tools → Cline» — такой страницы нет). Верно: View → Tool Windows → Cline открывает панель плагина, дальше — значок настроек внутри неё, поле «Use custom base URL».
Известные ограничения (сознательно не покрыты в v1):
- WSL + VS Code на Windows-хосте. Если запустить мастер внутри WSL, а VS Code
использует Remote-WSL с хостовым
settings.jsonна Windows-стороне, правки попадут не в тот файл. Запускай мастер там же, где физически лежит нужныйsettings.json. - Корпоративные HTTP(S)-прокси. Проверка ключа не читает
HTTP_PROXY/HTTPS_PROXY— за прокси она просто скажет «не смог проверить» и предложит продолжить без неё (не блокирует настройку, только сам шаг верификации). sudo. Запуск черезsudoзаблокирован явным сообщением —$HOMEв этом случае указывает на/root, а не на реальный профиль пользователя.
FAQ
«Запускаю claude, а он не видит API-ключ / пишет "Not logged in · Please run /login", хотя настройка вроде прошла».
С версии 0.2.0 мастер сам решает эту проблему при установке (см. customApiKeyResponses в
таблице выше). Если всё равно видишь это сообщение — например, ключ был прописан вручную или
машина настраивалась старой версией мастера:
- Запусти
claudeинтерактивно. - Введи
/config. - Найди пункт «Use custom API key» и включи его.
- Задай вопрос заново — статус login должен пропасть.
Причина: Claude Code требует одноразового интерактивного подтверждения кастомного API-ключа.
Без него headless-запросы (claude --print "...") работают нормально, а интерактивная сессия
держит баннер «не залогинен», даже если сам ключ рабочий. Официально задокументировано в
troubleshooting-таблице Connect Claude Code to an LLM gateway.
«В ~/.claude/settings.json появились apiKeyHelper или CLAUDE_CODE_DISABLE_GATEWAY, и всё сломалось».
См. «Доктор конфликтующих настроек» выше — при следующем запуске «Установить» мастер сам
это найдёт и предложит убрать. Вручную: удали apiKeyHelper и env.CLAUDE_CODE_DISABLE_GATEWAY
из файла, оставь только env.ANTHROPIC_API_KEY и env.ANTHROPIC_BASE_URL.
Разработка
npm install
npm run dev # запуск через tsx без сборки
npm run typecheck
npm run build # сборка в dist/cli.js (ESM, с shebang)Публикация
npm run build
npm publish --access publicТребуется npm-аккаунт с доступом к организации @purpleschool.
