- decisions: полный разбор трёх ошибок и их исправлений - notes: лог сессии Claude Code (cliproxy fix + видеоархив ЧОП) - snippets: шаблон конфига clawdbot для CLIProxy Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
5.1 KiB
Исправление clawdbot на LXC 129 — cliproxy провайдер
Дата: 2026-02-26 Статус: решено
Проблема
Бот @maxim_dttb_bot (LXC 129, 10.0.0.206) не отвечал на сообщения в Telegram.
Симптомы и ошибки (по порядку)
1. FailoverError: No available auth profile for anthropic
- Модель была
anthropic/claude-opus-4-6, но прямого Anthropic API нет — всё через CLIProxy - Решение: сменить на
cliproxy/claude-opus-4-6
2. Unhandled API in mapOptionsForApi: undefined
- Краш при попытке ответить —
model.apiприходит какundefined - Причина: в
models.jsonбыл сломанныйopenrouterпровайдер без поляapi - pi-coding-agent валидирует ВСЕ провайдеры вместе, и если хоть один сломан — отбрасываются ВСЕ кастомные модели
- Fallback код (
buildInlineProviderModels) не копируетapiс уровня провайдера на модель - Решение: добавить
api: "anthropic-messages"к каждой модели вclawdbot.json+ удалить openrouter изmodels.json
3. HTTP 401 authentication_error: invalid x-api-key
- Запрос уходил в Anthropic API напрямую, минуя CLIProxy
- Причина:
model.baseUrlбылоundefined→ Anthropic SDK использовал дефолтныйhttps://api.anthropic.com - Корень: всё тот же сломанный
models.json— ModelRegistry отбрасывала кастомные провайдеры, иbaseUrlиз конфига cliproxy не попадал в model объект - Решение: удалить сломанные провайдеры из
models.json, оставить толькоcliproxy
4. Дополнительные проблемы
- Старый
ANTHROPIC_API_KEYвenvсекцииclawdbot.jsonперехватывал запросы - Старый
config.yamlс прямым API ключом конфликтовал ANTHROPIC_API_KEYиCLAWDBOT_CONFIGв systemd env создавали implicit провайдеры
Что было сделано
Файлы на LXC 129 (10.0.0.206)
/root/.clawdbot/clawdbot.json:
- Модель:
cliproxy/claude-opus-4-6(fallback:cliproxy/claude-sonnet-4-6) - Добавлен
models.providers.cliproxyс baseUrl, apiKey, api, models - Добавлен
auth.profiles.cliproxy:default - Удалены:
anthropicиopenrouterпровайдеры,anthropic:defaultauth profile - Удалён
env.ANTHROPIC_API_KEY(старый прямой ключ)
/root/.clawdbot/agents/main/agent/models.json:
- Удалены сломанные провайдеры
openrouter(без api) иanthropic - Оставлен только
cliproxy
/etc/systemd/system/clawdbot.service:
- Удалены
Environment=ANTHROPIC_API_KEYиEnvironment=CLAWDBOT_CONFIG - Оставлены:
CLIPROXY_API_KEY=sk-clawdbot-proxy,CLAWDBOT_GATEWAY_TOKEN
/opt/clawdbot/config.yaml:
- Переименован в
config.yaml.bak(старый конфиг с прямым API ключом)
Архитектура провайдера cliproxy
Telegram → clawdbot → cliproxy provider → http://localhost:8317 → CLIProxy → Anthropic API
(apiKey: sk-clawdbot-proxy) (OAuth token)
Конфиг cliproxy в clawdbot.json:
"models": {
"providers": {
"cliproxy": {
"baseUrl": "http://localhost:8317",
"apiKey": "sk-clawdbot-proxy",
"api": "anthropic-messages",
"models": [
{"id": "claude-sonnet-4-6", "name": "Claude Sonnet 4.6", "api": "anthropic-messages", "contextWindow": 200000, "maxTokens": 8192},
{"id": "claude-opus-4-6", "name": "Claude Opus 4.6", "api": "anthropic-messages", "contextWindow": 200000, "maxTokens": 8192},
{"id": "claude-haiku-4-5-20251001", "name": "Claude Haiku 4.5", "api": "anthropic-messages", "contextWindow": 200000, "maxTokens": 8192}
]
}
}
}
Важные выводы (баги clawdbot 2026.1.24-3)
-
models.json— all-or-nothing валидация. Если один провайдер невалиден, ВСЕ кастомные провайдеры отбрасываются. Загружаются только 632 встроенные модели. -
buildInlineProviderModels()не копируетbaseUrlиapiс уровня провайдера. Они должны быть явно на каждой модели. -
resolveModel()fallback не включаетbaseUrl. Модель создаётся без baseUrl → Anthropic SDK идёт на api.anthropic.com. -
env.ANTHROPIC_API_KEYв clawdbot.json перехватывает запросы даже если провайдер cliproxy. Удалять если используется CLIProxy.