Кратко: Cursor умеет подключать любой endpoint в формате OpenAI API (/v1/chat/completions). Локально это обычно Ollama, LM Studio или llama.cpp server — все они поднимают HTTP-сервер, а Cursor думает, что общается с OpenAI.
LLVM — это компиляторная инфраструктура (Clang, оптимизации), к LLM не относится. Скорее всего имелось в виду Ollama (или опечатка «Llama»).
flowchart TB
subgraph Cursor["Cursor IDE"]
UI["Chat / Cmd+K / Agent"]
Picker["Model Picker"]
Settings["Settings → Models"]
end
subgraph Cloud["Облако Cursor (частично)"]
Index["Индексация кодовой базы"]
Tab["Tab autocomplete (часто только cloud)"]
end
subgraph Local["Ваш компьютер"]
subgraph Runtime["LLM Runtime"]
Ollama["Ollama :11434"]
LMStudio["LM Studio :1234"]
LlamaCPP["llama.cpp --server :8080"]
end
Engine["llama.cpp engine"]
Model["GGUF модель на диске"]
end
UI -->|"OpenAI-compatible HTTP"| Runtime
Picker --> UI
Settings -->|"Base URL + model name"| UI
Index --> Cloud
Tab --> Cloud
Ollama --> Engine
LMStudio --> Engine
LlamaCPP --> Engine
Engine --> Model
Как это работает:
- Вы добавляете модель в Cursor Settings → Models.
- Включаете Override OpenAI Base URL → указываете
http://localhost:11434/v1(или туннель). - В поле API Key — любая непустая строка (
ollama,local) — локальный сервер её не проверяет. - Имя модели должно точно совпадать с тем, что видит runtime (
ollama list).
sequenceDiagram
participant U as Вы
participant C as Cursor Client
participant S as LLM Server (Ollama/llama.cpp)
participant M as GGUF Model
U->>C: Промпт в Chat / Cmd+K
C->>C: Собирает контекст (файлы, правила, история)
C->>S: POST /v1/chat/completions<br/>{model, messages, ...}
S->>M: Inference (llama.cpp)
M-->>S: Токены ответа
S-->>C: JSON stream / completion
C-->>U: Ответ в редакторе
flowchart LR
subgraph A["Ollama (рекомендуется)"]
A1["ollama pull qwen2.5-coder:7b"]
A2["ollama serve → :11434"]
A3["OpenAI API /v1"]
end
subgraph B["LM Studio"]
B1["Скачать GGUF в GUI"]
B2["Start Server → :1234"]
B3["OpenAI API /v1"]
end
subgraph C["llama.cpp напрямую"]
C1["Скачать .gguf"]
C2["llama-server -m model.gguf"]
C3[":8080 /completion или /v1"]
end
Cursor["Cursor"] --> A3
Cursor --> B3
Cursor --> C3
| Runtime | Плюсы | Base URL для Cursor |
|---|---|---|
| Ollama | Просто, pull, daemon, Modelfile |
http://localhost:11434/v1 |
| LM Studio | GUI, удобный выбор квантизации | http://localhost:1234/v1 |
| llama.cpp | Максимальный контроль, без обёртки | http://localhost:8080/v1 (если server с OpenAI-совместимостью) |
Ollama и LM Studio внутри используют llama.cpp — разница в обёртке (daemon, GUI, registry моделей).
# 1. Установка и модель
curl -fsSL https://ollama.com/install.sh | sh
ollama pull qwen2.5-coder:7b
# 2. CORS (чтобы Cursor не ругался)
export OLLAMA_ORIGINS="*"
ollama serve
# 3. Проверка
curl http://localhost:11434/v1/modelsCursor Settings → Models:
| Поле | Значение |
|---|---|
| Override OpenAI Base URL | http://localhost:11434/v1 |
| API Key | ollama (любая строка) |
| Add Model | qwen2.5-coder:7b — как в ollama list |
# Сборка (пример)
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp && cmake -B build && cmake --build build --config Release
# Скачать GGUF (например с Hugging Face)
./build/bin/llama-server \
-m ~/models/Qwen2.5-Coder-7B-Q4_K_M.gguf \
--host 0.0.0.0 \
--port 8080 \
-c 32768В Cursor: Base URL → http://localhost:8080/v1, model name — как объявлено в server (часто имя файла или --alias).
Иногда Cursor/Agent не достаёт localhost напрямую:
ngrok http 11434 --host-header="localhost:11434"В Cursor: https://<id>.ngrok-free.app/v1
flowchart LR
Cursor["Cursor"] -->|"HTTPS"| Tunnel["ngrok / Cloudflare Tunnel"]
Tunnel -->|"localhost:11434"| Ollama["Ollama"]
flowchart TB
subgraph Works["Обычно работает с local"]
Chat["Chat"]
CmdK["Cmd+K"]
end
subgraph Limited["Ограничено / баги"]
Agent["Agent mode — известные баги с BYOK"]
Override["Override Base URL — глобальный для всех OpenAI-моделей"]
Tab["Tab completion — часто только облако"]
end
subgraph Always["Всегда через Cursor cloud"]
Index["Semantic index / codebase search"]
end
- Override Base URL — один на всех. Нельзя одновременно GLM на
z.aiи Ollama наlocalhostбез переключения в настройках. - Agent + local Ollama — бывают ошибки
model is required. - Контекст: Ollama по умолчанию 4k–8k токенов — для кода мало. Поднимите через Modelfile:
# Modelfile
FROM qwen2.5-coder:7b
PARAMETER num_ctx 32768ollama create cursor-coder -f Modelfile- Полностью air-gapped Cursor не даёт — индексация и Tab частично идут в облако. Для 100% локального кода смотрят Continue.dev или Cline.
flowchart TD
Start([Хочу локальную Llama в Cursor]) --> Choose{Какой runtime?}
Choose -->|Проще всего| Ollama
Choose -->|GUI| LMStudio[LM Studio]
Choose -->|Максимум контроля| LlamaCPP[llama.cpp server]
Ollama --> Pull["ollama pull <model>"]
LMStudio --> Load[Загрузить GGUF + Start Server]
LlamaCPP --> Build[llama-server -m model.gguf]
Pull --> Serve["Сервер на :11434/v1"]
Load --> Serve2["Сервер на :1234/v1"]
Build --> Serve3["Сервер на :8080/v1"]
Serve --> CursorCfg
Serve2 --> CursorCfg
Serve3 --> CursorCfg
CursorCfg["Cursor Settings → Models<br/>Override URL + Add Model"] --> Test{Работает?}
Test -->|CORS error| CORS["OLLAMA_ORIGINS=*"]
Test -->|network error| Tunnel["ngrok / HTTP/1.1 mode"]
Test -->|плохие ответы| Ctx["num_ctx 32768+"]
Test -->|OK| Done([Chat / Cmd+K с локальной моделью])
CORS --> Test
Tunnel --> Test
Ctx --> Test
export OLLAMA_ORIGINS="*"
ollama pull qwen2.5-coder:7b
# Cursor: http://localhost:11434/v1, model: qwen2.5-coder:7b