Skip to content

Instantly share code, notes, and snippets.

@eSlider
Created July 3, 2026 17:19
Show Gist options
  • Select an option

  • Save eSlider/d78202e662a138d2db49071aabcfecf9 to your computer and use it in GitHub Desktop.

Select an option

Save eSlider/d78202e662a138d2db49071aabcfecf9 to your computer and use it in GitHub Desktop.
Cursor custom models: Ollama, llama.cpp, Mermaid diagrams

Кастомные модели в Cursor

Кратко: Cursor умеет подключать любой endpoint в формате OpenAI API (/v1/chat/completions). Локально это обычно Ollama, LM Studio или llama.cpp server — все они поднимают HTTP-сервер, а Cursor думает, что общается с OpenAI.

LLVM — это компиляторная инфраструктура (Clang, оптимизации), к LLM не относится. Скорее всего имелось в виду Ollama (или опечатка «Llama»).


1. Общая схема

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
Loading

Как это работает:

  1. Вы добавляете модель в Cursor Settings → Models.
  2. Включаете Override OpenAI Base URL → указываете http://localhost:11434/v1 (или туннель).
  3. В поле API Key — любая непустая строка (ollama, local) — локальный сервер её не проверяет.
  4. Имя модели должно точно совпадать с тем, что видит runtime (ollama list).

2. Поток одного запроса

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: Ответ в редакторе
Loading

3. Три способа запустить Llama локально

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
Loading
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 моделей).


4. Подключение к Cursor (пошагово)

Ollama

# 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/models

Cursor Settings → Models:

Поле Значение
Override OpenAI Base URL http://localhost:11434/v1
API Key ollama (любая строка)
Add Model qwen2.5-coder:7b — как в ollama list

llama.cpp (без Ollama)

# Сборка (пример)
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).

Если localhost не работает — туннель

Иногда 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"]
Loading

5. Важные ограничения Cursor

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
Loading
  1. Override Base URL — один на всех. Нельзя одновременно GLM на z.ai и Ollama на localhost без переключения в настройках.
  2. Agent + local Ollama — бывают ошибки model is required.
  3. Контекст: Ollama по умолчанию 4k–8k токенов — для кода мало. Поднимите через Modelfile:
# Modelfile
FROM qwen2.5-coder:7b
PARAMETER num_ctx 32768
ollama create cursor-coder -f Modelfile
  1. Полностью air-gapped Cursor не даёт — индексация и Tab частично идут в облако. Для 100% локального кода смотрят Continue.dev или Cline.

6. Сводная схема «от нуля до ответа в Cursor»

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
Loading

Быстрый старт

export OLLAMA_ORIGINS="*"
ollama pull qwen2.5-coder:7b
# Cursor: http://localhost:11434/v1, model: qwen2.5-coder:7b
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment