7.0 KiB
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
# 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
Конфигурация
# 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:
"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)"}
]
}
⚠️ Важно: НЕ ставить "reasoning": true в моделях — OpenClaw парсер не извлекает content из ответа.
Dev-агент: model.primary = "claude-cli-proxy/claude-sonnet-4-6"
NO_PROXY (обязательно!)
В docker-compose.yml контейнера openclaw-gateway обязательно должен быть:
environment:
- HTTP_PROXY=http://xray:10809
- HTTPS_PROXY=http://xray:10809
- NO_PROXY=claude-cli-proxy,localhost,127.0.0.1,172.19.0.0/24
Без NO_PROXY все HTTP-запросы идут через Xray, который не может зарезолвить внутренний docker hostname → "network connection error".
Доступные модели
| Модель | 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.
Управление
# 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
Если токен протух:
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 |
| "network connection error" | Проверить NO_PROXY в docker-compose (HTTP_PROXY перехватывает внутренние запросы) |
| assistantTexts: [] (пустой ответ) | Убрать reasoning: true из моделей в openclaw.json |
| SIGHUP не помогает | Изменения providers требуют полного рестарта gateway (docker compose up -d) |
Файлы проекта
tasks/claude-cli-proxy/BRD.md— бизнес-требованияtasks/claude-cli-proxy/DEV_TASK.md— ТЗ на деплойtasks/claude-cli-proxy/PROJECT.md— этот файл
Создано: 2026-05-14 | Автор: Стрим 🌊