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

193 lines
5.9 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.
# 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 | Автор: Стрим 🌊*