В 2026 году у индивидуального разработчика одновременно крутятся Cursor, OpenClaw, собственные скрипты и два-три CLI-агента — у каждого инструмента свой API Key, у каждого вендора свой Base URL. Настоящая боль не в том, «достаточно ли силён модельный стек», а в том, что нет единого AI Gateway: ключи разбросаны, счета не сходятся, а при падении одного провайдера останавливается всё сразу. Ниже — готовый маршрут: облачный Mac VPSSpark как плоскость управления и исполнения, OpenRouter как агрегатор моделей, LiteLLM как self-hosted оболочка Gateway — за полчаса вы получите «персональный enterprise-вход» с виртуальными ключами, бюджетным предохранителем и откатом моделей.
http://127.0.0.1:4000, внутрь маршрутизация в OpenRouter; OpenClaw, Cursor и скрипты смотрят на локальный Gateway, а мастер-ключ никогда не попадает в клиенты.
Рис. 1 · Трёхуровневый стек Cloud Mac + OpenRouter — персональный AI Gateway
Зачем «облачный Mac + OpenRouter», а не только OpenRouter?
OpenRouter — это управляемый Gateway: регистрация, ключ, и вы в деле. Официальная документация подчёркивает высокую совместимость API с OpenAI Chat Completions — идеально для быстрого подключения. Но он закрывает агрегацию upstream, а не вашу границу управления: нельзя выдать Cursor и OpenClaw отдельные ключи с независимым отзывом; сложно наложить командный spend cap поверх счетов провайдеров; и вы не поставите Gateway в одну плоскость исполнения с нативным стеком macOS (Xcode, AppleScript, локальный MCP).
Облачный Mac объединяет плоскость управления и Apple-экосистему. Процесс Gateway живёт в launchd, секреты — только в серверном .env; когда нужны OpenClaw, локальный Git или сборка iOS, контекст не тащите обратно на ноутбук. Если шлюз уже крутится на Linux VPS, оставьте VPS для IM/Webhook, а облачный Mac — для Gateway и сборок; матрицу разделения смотрите в матрице решений: OpenClaw на Linux VPS и CI/CD; отличия launchd на облачном Mac — в FAQ по OpenClaw на облачном Mac и launchd.
Выбор архитектуры: за что отвечает каждый слой
Сначала разведите зоны ответственности — тогда конфигурация не «закрутится».
| Уровень | Компонент | Задачи | Чего не делает |
|---|---|---|---|
| Upstream | OpenRouter | Единый биллинг моделей, откат провайдеров, оплата по токенам | Не заменяет управление ключами и изоляцию внутри сети |
| Gateway | LiteLLM Proxy (облачный Mac) | Virtual Key, таблица маршрутов, логи, бюджет, OpenAI-совместимый выход | Не хранит долгие чат-сессии (это зона OpenClaw) |
| Исполнение | Облачный Mac + OpenClaw | Агент 7×24, MCP, автоматизация macOS, триггеры CI | Не отдаёт мастер API Key на ноутбук |
.env на облачном Mac, клиенты получают Virtual Key.
Чеклист перед стартом (15 минут)
Отмечайте по порядку — так вы отсечёте девяносто процентов ошибок «не подключается».
- Аккаунт OpenRouter создан, API Key выпущен, месячный лимит credit задан.
- Облачный Mac доступен по SSH, архитектура
arm64(Apple Silicon), macOS 14+. - Установлен Homebrew; Python 3.11+ или Docker Desktop (на выбор — в статье путь через pip, самый лёгкий).
- Gateway слушает только
127.0.0.1:4000; для удалённого доступа — Tailscale или SSH-туннель, порт 4000 в интернет не выставляйте. - С ноутбука Cursor / OpenClaw уже ходят на облачный Mac по SSH (вход по ключу, пароль отключён).
Базовые понятия и выбор облачного Mac — в руководстве по Mac VPS и macOS в облаке (2026).
Шаг 1: настройка upstream OpenRouter
В консоли OpenRouter создайте ключ с именем cloud-mac-gateway, включите credit limit (например, $20/мес.) как жёсткий предохранитель. Запомните ключ и сразу перенесите на облачный Mac — не в Git.
Проверьте доступность upstream с облачного Mac через curl (подставьте $OPENROUTER_API_KEY):
export OPENROUTER_API_KEY="sk-or-v1-xxxxxxxx"
curl -s https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o-mini",
"messages": [{"role": "user", "content": "ping"}]
}' | head -c 400
JSON с полем choices означает, что upstream в порядке. ID модели в формате provider/model; полный список — на странице OpenRouter Models; типичные значения: anthropic/claude-sonnet-4, openai/gpt-4o, google/gemini-2.5-pro-preview.
Шаг 2: установка LiteLLM Gateway на облачном Mac
LiteLLM — open-source LLM Gateway, документация на docs.litellm.ai. Он оборачивает OpenRouter в ваш OpenAI-совместимый endpoint и даёт виртуальные ключи с учётом расходов.
# сессия SSH на облачном Mac
brew install python@3.12
python3.12 -m venv ~/ai-gateway/.venv
source ~/ai-gateway/.venv/bin/activate
pip install 'litellm[proxy]'
mkdir -p ~/ai-gateway && cd ~/ai-gateway
Создайте config.yaml — сердце маршрутизации Gateway. В примере ниже модель по умолчанию — Claude Sonnet, при сбое откат на GPT-4o mini (массив models OpenRouter включает fallback):
model_list:
- model_name: smart
litellm_params:
model: openrouter/anthropic/claude-sonnet-4
api_key: os.environ/OPENROUTER_API_KEY
models:
- openrouter/anthropic/claude-sonnet-4
- openrouter/openai/gpt-4o-mini
- model_name: fast
litellm_params:
model: openrouter/openai/gpt-4o-mini
api_key: os.environ/OPENROUTER_API_KEY
litellm_settings:
drop_params: true
set_verbose: false
general_settings:
master_key: os.environ/LITELLM_MASTER_KEY
database_url: "sqlite:///./litellm.db"
В том же каталоге — .env (права chmod 600):
OPENROUTER_API_KEY=sk-or-v1-xxxxxxxx
LITELLM_MASTER_KEY=sk-local-master-xxxxxxxx
Запуск Proxy (сначала в foreground):
cd ~/ai-gateway
source .venv/bin/activate
set -a && source .env && set +a
litellm --config config.yaml --host 127.0.0.1 --port 4000
В другом терминале — loopback-тест с Master Key:
curl -s http://127.0.0.1:4000/v1/chat/completions \
-H "Authorization: Bearer $LITELLM_MASTER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "smart",
"messages": [{"role": "user", "content": "gateway ok?"}]
}'
litellm --config config.yaml --detailed_debug, затем путь /ui из документации) и создайте Virtual Key для Cursor и OpenClaw с бюджетами $5/$10 в месяц. При утечке отзываете только нужный Virtual Key, мастер-ключ OpenRouter не трогаете.
Шаг 3: постоянная работа через launchd (облачный Mac 7×24)
После проверки передайте Gateway launchd — иначе при обрыве SSH процесс умрёт. Создайте ~/Library/LaunchAgents/com.vpsspark.litellm.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key><string>com.vpsspark.litellm</string>
<key>ProgramArguments</key>
<array>
<string>/Users/YOUR_USER/ai-gateway/.venv/bin/litellm</string>
<string>--config</string>
<string>/Users/YOUR_USER/ai-gateway/config.yaml</string>
<string>--host</string><string>127.0.0.1</string>
<string>--port</string><string>4000</string>
</array>
<key>EnvironmentVariables</key>
<dict>
<key>OPENROUTER_API_KEY</key><string>sk-or-v1-xxx</string>
<key>LITELLM_MASTER_KEY</key><string>sk-local-master-xxx</string>
</dict>
<key>RunAtLoad</key><true/>
<key>KeepAlive</key><true/>
<key>StandardOutPath</key>
<string>/Users/YOUR_USER/ai-gateway/litellm.log</string>
<key>StandardErrorPath</key>
<string>/Users/YOUR_USER/ai-gateway/litellm.err</string>
</dict>
</plist>
Загрузка и проверка:
launchctl load ~/Library/LaunchAgents/com.vpsspark.litellm.plist
launchctl list | grep litellm
curl -fsS http://127.0.0.1:4000/health || echo "check logs"
Полный цикл постоянной работы и отладки на облачном Mac — в разделе «сессия входа vs фоновый демон» FAQ по launchd на облачном Mac: Gateway и OpenClaw могут жить в отдельных plist и перезапускаться независимо.
Шаг 4: подключение Cursor, OpenClaw и скриптов
У всех клиентов меняются два параметра: Base URL указывает на ваш Gateway, API Key — Virtual Key (Master Key только для администрирования).
Cursor: Settings → Models → Override OpenAI Base URL → http://127.0.0.1:4000/v1 (если Cursor на ноутбуке, а Gateway на облачном Mac — сначала ssh -L 4000:127.0.0.1:4000 user@cloud-mac или адрес Tailscale). Имя модели — smart / fast, как model_name в config.yaml.
OpenClaw: в переменных окружения или конфиге по документации Gateway задайте OpenAI-совместимый провайдер: OPENAI_API_BASE=http://127.0.0.1:4000/v1, OPENAI_API_KEY=<virtual-key>. OpenClaw на том же облачном Mac — туннель не нужен; на Linux VPS либо перенесите LiteLLM на VPS, либо пробросьте внутреннюю сеть — не кладите Master Key в публичный compose-репозиторий VPS.
Обычные скрипты: любой код на OpenAI SDK меняет только base_url:
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:4000/v1",
api_key="sk-virtual-cursor-xxxxxxxx",
)
resp = client.chat.completions.create(
model="smart",
messages=[{"role": "user", "content": "总结今日 commit"}],
)
print(resp.choices[0].message.content)
Маршрутизация моделей и контроль расходов
Суть enterprise Gateway не в «умеем вызывать модели», а в «знаем, когда нужна дорогая». В персональном стеке зафиксируйте три правила:
- По умолчанию fast: автодополнение, форматирование, простые вопросы — модель уровня
gpt-4o-mini, обычно в десять раз дешевле Sonnet. - Явный переход на smart: архитектура, сложный рефакторинг, рассуждение по многим файлам — клиент или правила OpenClaw переключают на
smart(с цепочкой fallback OpenRouter). - Двухуровневый бюджет: общий credit cap в консоли OpenRouter; per-client cap у Virtual Key в LiteLLM — «отключение» только когда срабатывают оба уровня.
OpenRouter принимает массив models для отката на уровне провайдера; model_list LiteLLM отделяет бизнес-алиасы (smart/fast) от реальных ID — смена модели в YAML, клиенты без правок.
Базовая линия безопасности (обязательно)
Типичные инциденты персонального Gateway — ключ в Git или Gateway в открытом интернете. Минимум — пять правил:
- Секреты из
.envи plist не в репозитории; в.gitignore—.env,*.db,litellm.log. - LiteLLM только на
127.0.0.1; удалённый доступ — SSH -L или Tailscale; для нескольких пользователей — Nginx + mTLS спереди. - При утечке ключа OpenRouter — немедленная ротация в консоли; интеграция с GitHub Secret Scanning есть, но полагайтесь на активную ротацию.
- Периодически
sqlite3 litellm.dbи сверка spend с OpenRouter Dashboard; аномальный трафик — отзыв Virtual Key. - FileVault на облачном Mac, SSH только по ключу; как при доставке шлюза на Linux, разделяйте аудит «изменений» и «секретов».
FAQ
Можно без LiteLLM, напрямую в OpenRouter? Да, для одного человека и минимализма. Но вы теряете виртуальные ключи, единые логи и локальные алиасы маршрутов; с ростом числа клиентов Gateway всё равно понадобится.
Gateway на облачном Mac или на Linux VPS? Только LLM-прокси без macOS-инструментов — VPS дешевле; OpenClaw + MCP + автоматизация Xcode — облачный Mac с исполнением и Gateway на одной машине проще.
Что если OpenRouter недоступен? В model_list LiteLLM добавьте второй upstream (например, прямой Anthropic Key как emergency route) или временно направьте fast на free tier модель в каталоге OpenRouter.
Вырастет ли задержка? Лишний hop Proxy — обычно единицы–десятки миллисекунд; на фоне инференса LLM это несущественно. Узкое место чаще в выборе модели и регионе, а не в самом LiteLLM.
На облачном Mac mini Gateway и Agent удобнее на одной машине
Персональный AI Gateway ломается, когда плоскость управления на ноутбуке, исполнение в облаке, а ключи в переписке — три источника правды. LiteLLM Gateway и OpenClaw на VPSSpark Cloud Mac mini M4: единая память Apple Silicon спокойнее держит параллельных агентов и лёгкий Proxy; нативный Unix macOS даёт Homebrew, Python venv, launchd и локальный MCP без эмуляции macOS на Linux.
Mac mini на M-серии в простое часто укладывается в единицы ватт — Gateway 7×24 без угрызений по электричеству; Gatekeeper, SIP и FileVault снижают риск долгого хранения API-ключей по сравнению с обычной Windows-станцией. Вместо обрыва агента при сне ноутбука сведите «вход моделей + исполнение» к одному стабильному облачному Mac.
Если вы строите персональный AI Gateway на OpenRouter, VPSSpark Cloud Mac mini M4 — единая стартовая точка плоскости управления — узнайте о тарифах, чтобы ключи, маршруты и агенты наконец жили в одной «стойке».