193 lines
5.9 KiB
Markdown
193 lines
5.9 KiB
Markdown
# Claude CLI Proxy — PROJECT.md
|
||
|
||
**Статус:** ✅ Работает
|
||
**Дата запуска:** 2026-05-14
|
||
**Хост:** mva154 (82.22.50.71)
|
||
|
||
---
|
||
|
||
## Что это
|
||
|
||
OpenAI-compatible прокси, который оборачивает Claude Code CLI (авторизованный через Max подписку) в HTTP API. Позволяет OpenClaw использовать Claude по подписке вместо оплаты за токены.
|
||
|
||
## Архитектура
|
||
|
||
```
|
||
OpenClaw (openclaw-gateway контейнер)
|
||
↓ HTTP POST /v1/chat/completions
|
||
CLIProxyAPI (контейнер claude-cli-proxy, порт 8317)
|
||
↓ Claude Code CLI (OAuth)
|
||
Anthropic (Max 5x подписка, $100/мес)
|
||
```
|
||
|
||
## Компоненты
|
||
|
||
| Компонент | Описание |
|
||
|-----------|----------|
|
||
| CLIProxyAPI v7.0.6 | Go-сервер, Docker image `eceasy/cli-proxy-api:latest` |
|
||
| Claude Code CLI | Встроен в image, авторизован через OAuth |
|
||
| OAuth токен | `/home/slin/claude-cli-proxy/auth/claude-homenet542@gmail.com.json` |
|
||
|
||
## Расположение на сервере
|
||
|
||
```
|
||
/home/slin/claude-cli-proxy/
|
||
├── config.yaml # Конфигурация CLIProxyAPI
|
||
├── docker-compose.yml # Docker Compose файл
|
||
└── auth/ # OAuth токены (volume mount)
|
||
└── claude-homenet542@gmail.com.json
|
||
```
|
||
|
||
## Docker
|
||
|
||
```yaml
|
||
# docker-compose.yml
|
||
services:
|
||
cli-proxy-api:
|
||
image: eceasy/cli-proxy-api:latest
|
||
container_name: claude-cli-proxy
|
||
restart: unless-stopped
|
||
ports:
|
||
- "127.0.0.1:8317:8317"
|
||
volumes:
|
||
- ./config.yaml:/CLIProxyAPI/config.yaml
|
||
- ./auth:/root/.cli-proxy-api
|
||
networks:
|
||
- openclaw_openclaw-network
|
||
|
||
networks:
|
||
openclaw_openclaw-network:
|
||
external: true
|
||
```
|
||
|
||
## Конфигурация
|
||
|
||
```yaml
|
||
# config.yaml
|
||
port: 8317
|
||
remote-management:
|
||
allow-remote: false
|
||
secret-key: ""
|
||
auth-dir: "/root/.cli-proxy-api"
|
||
auth:
|
||
providers: [] # Отключает проверку API key, используется OAuth
|
||
debug: false
|
||
```
|
||
|
||
## OpenClaw интеграция
|
||
|
||
Provider в `~/.openclaw/openclaw.json`:
|
||
```json
|
||
"claude-cli-proxy": {
|
||
"baseUrl": "http://claude-cli-proxy:8317/v1",
|
||
"apiKey": "dummy",
|
||
"api": "openai-completions",
|
||
"models": [
|
||
{"id": "claude-sonnet-4-20250514", "name": "Claude Sonnet 4 (cli-proxy)"},
|
||
{"id": "claude-sonnet-4-6", "name": "Claude Sonnet 4.6 (cli-proxy)"},
|
||
{"id": "claude-opus-4-20250514", "name": "Claude Opus 4 (cli-proxy)"},
|
||
{"id": "claude-opus-4-7", "name": "Claude Opus 4.7 (cli-proxy)"}
|
||
]
|
||
}
|
||
```
|
||
|
||
Dev-агент: `model.primary = "claude-cli-proxy/claude-sonnet-4-20250514"`
|
||
|
||
## Доступные модели
|
||
|
||
| Модель | ID |
|
||
|--------|-----|
|
||
| Claude Sonnet 4 | claude-sonnet-4-20250514 |
|
||
| Claude Sonnet 4.6 | claude-sonnet-4-6 |
|
||
| Claude Opus 4 | claude-opus-4-20250514 |
|
||
| Claude Opus 4.7 | claude-opus-4-7 |
|
||
| Claude Opus 4.6 | claude-opus-4-6 |
|
||
| Claude Opus 4.1 | claude-opus-4-1-20250805 |
|
||
| Claude Haiku 4.5 | claude-haiku-4-5-20251001 |
|
||
|
||
## Лимиты (Max 5x, $100/мес)
|
||
|
||
- **5-часовое скользящее окно** — бюджет обновляется каждые 5 часов
|
||
- **Недельный cap** — считается только активное compute-время
|
||
- **Пиковые часы** (15:00-21:00 MSK) — расход x1.3-1.5
|
||
- ~50-200 промптов на 5-часовое окно (зависит от модели и длины)
|
||
|
||
### ⚠️ С 15 июня 2026
|
||
Agent SDK / `claude -p` будет тратить отдельный "Agent SDK credit". Детали TBD.
|
||
|
||
## Управление
|
||
|
||
```bash
|
||
# SSH на сервер
|
||
ssh slin@82.22.50.71
|
||
|
||
# Статус
|
||
cd /home/slin/claude-cli-proxy
|
||
docker compose ps
|
||
docker logs claude-cli-proxy --tail 20
|
||
|
||
# Перезапуск
|
||
docker compose restart
|
||
|
||
# Обновление image
|
||
docker compose pull && docker compose up -d
|
||
|
||
# Тест API
|
||
curl -s http://127.0.0.1:8317/v1/models | python3 -m json.tool
|
||
curl -s -X POST http://127.0.0.1:8317/v1/chat/completions \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer dummy" \
|
||
-d '{"model":"claude-sonnet-4-20250514","messages":[{"role":"user","content":"hello"}]}'
|
||
```
|
||
|
||
## Переавторизация OAuth
|
||
|
||
Если токен протух:
|
||
|
||
```bash
|
||
cd /home/slin/claude-cli-proxy
|
||
|
||
# Остановить сервис
|
||
docker compose down
|
||
|
||
# Запустить login
|
||
docker run --rm -it \
|
||
-p 54545:54545 \
|
||
-v $(pwd)/auth:/root/.cli-proxy-api \
|
||
eceasy/cli-proxy-api:latest \
|
||
/CLIProxyAPI/CLIProxyAPI --claude-login --no-browser
|
||
|
||
# На локальной машине — SSH туннель:
|
||
# ssh -L 54545:127.0.0.1:54545 slin@82.22.50.71
|
||
# Открыть URL из вывода в браузере, залогиниться
|
||
|
||
# После логина — запустить сервис
|
||
docker compose up -d
|
||
```
|
||
|
||
## Безопасность
|
||
|
||
- Порт 8317 слушает **только на 127.0.0.1** (не наружу)
|
||
- Доступен только из docker network `openclaw_openclaw-network`
|
||
- `remote-management.allow-remote: false`
|
||
- Один аккаунт, без multi-account
|
||
|
||
## Troubleshooting
|
||
|
||
| Проблема | Решение |
|
||
|----------|---------|
|
||
| `{"data":[],"object":"list"}` (пустые модели) | OAuth токен отсутствует или протух → переавторизация |
|
||
| 429 от прокси | Rate limit Max подписки → подождать 5ч окно |
|
||
| Контейнер не стартует | `docker logs claude-cli-proxy` → проверить ошибки |
|
||
| OpenClaw не видит прокси | Проверить что оба в одной docker network |
|
||
|
||
## Файлы проекта
|
||
|
||
- `tasks/claude-cli-proxy/BRD.md` — бизнес-требования
|
||
- `tasks/claude-cli-proxy/DEV_TASK.md` — ТЗ на деплой
|
||
- `tasks/claude-cli-proxy/PROJECT.md` — этот файл
|
||
|
||
---
|
||
|
||
*Создано: 2026-05-14 | Автор: Стрим 🌊*
|