# OpenClaw + LM Studio (Qwen3 35B-A3B) — рабочая конфигурация

**Стек:** шлюз (gateway) OpenClaw + LM Studio, локально обслуживающий модель Qwen3.x-35B-A3B (GGUF).

### 1. Запустить сервер LM Studio
Загрузите модель, затем запустите OpenAI-совместимый сервер на `:1234` (LM Studio → вкладка Developer → Start, либо `lms server start --port 1234`).
- ⚠️ *Нюанс Flatpak:* отдельный CLI `lms` падает с ошибкой «invalid passkey». Используйте копию, встроенную в приложение: `flatpak run --command=/app/extra/lmstudio/resources/app/.webpack/lms ai.lmstudio.lm-studio server start --port 1234`. (У нативных установок такой проблемы нет.)
- Узнайте **точный id модели** — не угадывайте его: `curl http://127.0.0.1:1234/v1/models`. У меня был `qwen/qwen3.6-35b-a3b` (обратите внимание: он отличался от имени папки на диске).

### 2. Указать OpenClaw на сервер
Добавьте провайдер `lmstudio` в `~/.openclaw/openclaw.json` и сделайте его моделью по умолчанию. Примените через `openclaw config patch --file x.json5`, затем `openclaw gateway restart`.

```json5
{
  agents: { defaults: {
    model: { primary: "lmstudio/qwen/qwen3.6-35b-a3b" },
    models: { "lmstudio/qwen/qwen3.6-35b-a3b": { alias: "Local" } },
  } },
  models: { mode: "merge", providers: { lmstudio: {
    baseUrl: "http://127.0.0.1:1234/v1",
    apiKey: "lmstudio",          // заглушка, игнорируется
    api: "openai-completions",    // chat-completions (см. шаг 4)
    models: [{
      id: "qwen/qwen3.6-35b-a3b", // должен ТОЧНО совпадать с /v1/models
      name: "Qwen3 35B A3B (Local)",
      reasoning: true, input: ["text","image"],
      cost: { input:0, output:0, cacheRead:0, cacheWrite:0 },
      contextWindow: 65536, maxTokens: 8192,
    }],
  } } },
}
```
Проверка: `openclaw models list` и `openclaw infer model run --gateway --prompt "hi"`.

### 3. Размер контекста
По умолчанию LM Studio загружал модель всего с 4096 токенами контекста — слишком мало для кодинг-агента. Перезагрузите с бо́льшим значением (`lms load <id> -c 65536 --gpu max -y`) и **держите `contextWindow` равным этому значению**. Если они различаются (OpenClaw запрашивает больше, чем загружено), LM Studio молча поднимет второй экземпляр модели. 64k — хороший баланс; максимум 256k, но он медленнее и редко нужен.

### 4. Главное — это *рассуждающая* (reasoning) модель, поэтому она медленная
«Из коробки» на каждый ответ генерируется ~700 токенов «размышлений» перед самим ответом → 25–40 с на ход. Железо при этом в порядке (полная выгрузка на GPU, ~38 ток/с). **`thinkingDefault: off` / `fastMode` / `/no_think` в инструкциях OpenClaw НЕ останавливают это** (они идут через Responses API / попадают не в ту позицию). Единственный надёжный «выключатель» — буквальный текст `/no_think`, размещённый в **начале системного сообщения и последнего сообщения пользователя**.

Решение = прокси (~50 строк), который вставляет `/no_think` в каждый запрос и пересылает его в LM Studio:
```
openclaw → :1235 (no-think прокси) → :1234 (LM Studio)
```
- Установите у провайдера `baseUrl` в `http://127.0.0.1:1235/v1` и `api: "openai-completions"` (обязательно chat-completions, а не `openai-responses`, чтобы директива попала в обычное сообщение).
- Результат: **23–40 с → 4–7 с на ход.** (Размышления ~700 → ~150 токенов; полностью эта модель «думать» не перестаёт.)

> Если у вашего друга сборка Qwen лучше реагирует на `/no_think`, прокси может не понадобиться — стоит сначала попробовать `enable_thinking:false`. Но у меня сработал только `/no_think` внутри сообщения, отсюда и прокси.

### 5. Автозапуск (опционально)
Три пользовательских сервиса systemd (`--user`) по цепочке: приложение LM Studio (автозапуск через GNOME) → запуск сервера + загрузка модели → no-think прокси. Шлюз OpenClaw уже является сервисом.

**Короче:** подтвердите id модели через `/v1/models`, сделайте `contextWindow` равным загруженному контексту, и если всё мучительно медленно — принудительно включите `/no_think` (надёжный способ — небольшой прокси-инжектор). Именно это снизило время с 30 с до 5 с.
