Как llama-runner подружили с Claude Code для локальных LLM
Автор доработал свой Go-лаунчер llama-runner, чтобы он не только запускал llama-server, но и сразу открывал Claude Code с нужными настройками. Это упрощает работу с локальными моделями: меньше ручных команд, меньше ошибок с адресами, портами и флагами.
Что изменили в llama-runner
Изначально лаунчер на Go помогал запускать llama-server почти без ручной настройки: подставлял пути к моделям, проверял наличие бинарника, собирал аргументы и аккуратно завершал процессы по Ctrl+C. Но теперь ему добавили второй сценарий — запуск связки сервера и Claude Code одной командой.
В новой версии llama-runner по умолчанию ждёт, когда llama-server станет готов через проверку /health, а затем стартует Claude Code с переменными окружения для подключения к локальному серверу. При этом старый режим сохранили: если нужен только сервер, например для работы через WebUI, можно включить флаг -server и не запускать клиента.
Почему пришлось отдельно настраивать Claude Code
Проблема в том, что Claude Code изначально ждёт модели Anthropic, а локальный сервер llama.cpp таких имён не знает. Из-за этого без дополнительной настройки клиент может получать ошибку вида model not found.
Чтобы убрать ручные действия, в лаунчере сделали флаг -alias и автоподстановку значения local, если алиас не задан и не включён режим -server. Этот алиас одновременно передаётся серверу и записывается в переменные ANTHROPIC_DEFAULT_SONNET_MODEL, ANTHROPIC_DEFAULT_HAIKU_MODEL и ANTHROPIC_DEFAULT_OPUS_MODEL. В итоге Claude Code и llama-server начинают «понимать» друг друга без участия пользователя.
Как решили две неприятные ошибки
Вторая проблема оказалась визуальной: когда llama-server писал логи в тот же терминал, где работает Claude Code, интерфейс агента начинал ломаться. Решение простое и практичное — перенаправлять вывод сервера в файл. Для этого в llama-runner добавили параметры -log-file и -quiet-server, а в обычном режиме -server логи по-прежнему остаются в терминале.
Третья сложность связана с шаблоном чата Qwen 3.8. Он требует, чтобы системное сообщение шло первым, а Claude Code при повторных попытках иногда нарушает это правило. Из-за этого сервер выдаёт 500 с ошибкой Jinja. Автор предлагает заменить шаблон на исправленную версию из репозитория froggeric/Qwen-Fixed-Chat-Templates на Hugging Face и проверить файл через head, чтобы убедиться, что скачался именно Jinja-шаблон, а не HTML-заглушка.