Files
wiki/tasks/claude-cli-proxy/BRD.md
2026-05-14 10:10:01 +03:00

168 lines
7.5 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.
# BRD: Claude CLI Proxy — подписка Max вместо токенов
**Версия:** 1.0
**Дата:** 2026-05-14
**Автор:** Стрим 🌊
**Статус:** Согласовано ✅
---
## 1. Контекст и цели
### Что есть сейчас
- OpenClaw использует LLM через API-провайдеров (OpenRouter, Anthropic API, vibecode и др.)
- Каждый запрос = токены = деньги
- Dev-агент на Claude Opus 4.7 — самый дорогой потребитель (длинные сессии, большой контекст)
### Проблема
Dev-агент сжирает токены как не в себя. Одна сессия разработки может стоить $5-15. При активной работе — $200-500/мес только на Dev.
### Решение
У Славы есть подписка Claude Max ($100-200/мес) с щедрыми лимитами. Claude Code CLI умеет работать в non-interactive режиме (`claude -p`) с JSON/streaming выводом. Существует готовый open-source проект **CLIProxyAPI**, который оборачивает Claude Code CLI в OpenAI-compatible API.
### Цель
Поднять CLIProxyAPI на mva154, авторизовать через Max подписку, подключить к OpenClaw как LLM provider для Dev-агента. Результат: Dev-агент работает по подписке, а не за токены.
---
## 2. Архитектура
```
OpenClaw (контейнер)
↓ HTTP POST /v1/chat/completions
CLIProxyAPI (контейнер на mva154, порт XXXX)
↓ spawn claude -p --output-format stream-json
Claude Code CLI (внутри того же контейнера)
↓ OAuth token (Max подписка)
Anthropic API (бесплатно в рамках подписки)
```
### Компоненты
| Компонент | Что делает |
|-----------|-----------|
| CLIProxyAPI | Go-сервер, слушает HTTP, транслирует в вызовы Claude CLI |
| Claude Code CLI | Установлен в контейнере, авторизован через OAuth |
| OpenClaw config | Новый provider с baseUrl на CLIProxyAPI |
---
## 3. Готовое решение: CLIProxyAPI
**Репо:** https://github.com/router-for-me/CLIProxyAPI
**Язык:** Go
**Лицензия:** MIT
**Активность:** обновляется ежедневно, зрелый проект
### Что умеет (релевантное для нас):
- Claude Code OAuth авторизация
- OpenAI-compatible `/v1/chat/completions`
- Streaming (SSE) и non-streaming режимы
- Очередь запросов (один CLI инстанс за раз)
- Function calling / tools support
- Multimodal input (text + images)
### Что НЕ нужно:
- Multi-account load balancing (у нас один аккаунт)
- Gemini/Codex support (только Claude)
- Management UI (overkill)
---
## 4. Лимиты и ограничения
### Rate limits Max подписки
- **5-часовое скользящее окно** — бюджет обновляется каждые 5 часов от первого промпта
- **Недельный cap** — считается только активное compute-время
- **Пиковые часы** (5am-11am Pacific / 15:00-21:00 MSK) — расход x1.3-1.5
- **Max 5x** ≈ 50-200 промптов/5ч, **Max 20x** ≈ до 800 промптов/5ч
### ⚠️ Изменение с 15 июня 2026
Anthropic анонсировали: `claude -p` (Agent SDK mode) будет тратить **отдельный** месячный "Agent SDK credit", не из интерактивного лимита. Детали пока неизвестны — нужно следить.
### Риски
| Риск | Вероятность | Митигация |
|------|-------------|-----------|
| Anthropic закрутит гайки / ToS | Средняя | CLIProxyAPI — массовый проект, тысячи пользователей. Если закроют — закроют всем |
| Rate limit hit | Высокая при активной работе | Fallback на обычный API provider в OpenClaw |
| OAuth token протухнет | Низкая | Мониторинг + ре-авторизация |
| Agent SDK credit окажется маленьким | Неизвестно (после 15.06) | Оценить после запуска, возможно вернуться на API |
---
## 5. Фичи
### F-01: Контейнер CLIProxyAPI на mva154
**Описание:** Docker-контейнер с CLIProxyAPI + Claude Code CLI, авторизованный через OAuth.
**Acceptance criteria:**
- Контейнер запускается и слушает порт
- `curl http://localhost:PORT/v1/models` возвращает список моделей
- Health check проходит
---
### F-02: OAuth авторизация Claude Max
**Описание:** Claude Code CLI внутри контейнера авторизован под Max подпиской Славы.
**Acceptance criteria:**
- `claude auth status` показывает активную сессию
- `claude -p "hello"` возвращает ответ
- Не тратит API credits (использует подписку)
---
### F-03: Интеграция с OpenClaw
**Описание:** OpenClaw видит CLIProxyAPI как LLM provider и может отправлять запросы.
**Acceptance criteria:**
- В `openclaw.json` добавлен provider
- Dev-агент может использовать модель через этот provider
- Streaming работает (ответы приходят по частям)
---
### F-04: Fallback на API
**Описание:** Если CLIProxyAPI недоступен или rate-limited — автоматический fallback на обычный API provider.
**Acceptance criteria:**
- При 429/503 от прокси OpenClaw переключается на fallback модель
- Логируется факт fallback
---
## 6. Этапы
| # | Этап | Что делаем | Результат |
|---|------|-----------|-----------|
| 1 | Setup | Контейнер + CLIProxyAPI + Claude CLI | Работающий прокси |
| 2 | Auth | OAuth авторизация Max подписки | CLI отвечает на запросы |
| 3 | Integration | Подключение к OpenClaw как provider | Dev-агент работает через прокси |
| 4 | Hardening | Fallback, мониторинг, auto-restart | Продакшн-ready |
---
## 7. Решения
1. **Порт:** любой свободный (выберем при деплое)
2. **Подписка:** Max 5x ($100/мес) — ~50-200 промптов/5ч окно
3. **Доступ:** только из docker network mva154 (OpenClaw контейнер там же)
4. **Модель по умолчанию:** Sonnet (переключение на Opus через OpenClaw config при необходимости)
---
## 8. Не в скоупе (пока)
- Multi-account / ротация аккаунтов
- Использование для других агентов кроме Dev
- Кеширование ответов
- Web UI для мониторинга
---
*Создано: 2026-05-14 | Автор: Стрим 🌊*