Dora CLI и SCIP: настройка AI-агента без амнезии | Гайд 2026 | AiManual
AiManual Logo Ai / Manual.
12 Фев 2026 Гайд

Dora CLI: как настроить AI-агента для навигации по кодовой базе с помощью SCIP-индексации

Полный гайд по настройке Dora CLI и SCIP-индексации для AI-агентов. Решаем проблему потери контекста у Claude Code и других ассистентов. Пошаговые инструкции на

Ваш AI-агент забывает код через пять минут? Это лечится

Вы даете Claude Code задачу: "перепиши этот модуль на async/await". Агент соглашается, начинает работать, и через три минуты спрашивает: "а где у вас конфигурация базы данных?".

Знакомый сценарий? Это не лень агента. Это фундаментальная проблема контекстного окна. Современные модели, даже Claude 3.7 Sonnet (актуальная версия на начало 2026 года), видят только то, что вы им скормили в последние N токенов. Весь остальной проект для них — черный ящик.

Ручные промпты с @упоминаниями файлов помогают, но это костыль. Нужен системный подход. И он есть.

Dora CLI и SCIP: анатомия памяти для кода

Представьте глобальный поиск по коду, как в Sourcegraph или вашей IDE, но доступный вашему AI-агенту в реальном времени. Это и есть SCIP (Source Code Intelligence Protocol) — открытый протокол для индексирования и запросов к кодовой базе.

Dora CLI — это инструмент, который берет SCIP-индекс и делает его доступным для AI-агентов через простой интерфейс командной строки и API. По сути, это переводчик между семантическим индексом вашего кода и промптом агента.

SCIP-индекс — это не просто полнотекстовый поиск. Он понимает структуру: определения функций, их вызовы, наследование, импорты. Когда агент спрашивает "где используется эта функция?", индекс отвечает точным списком мест, а не вероятными совпадениями по тексту.

Почему это лучше, чем просто скармливать весь код в контекст? Потому что экономит токены и повышает точность. Вместо тысячи строк кода в промпте агент получает только релевантные фрагменты, найденные по семантическому запросу. Это прямой путь к снижению латентности, о котором мы уже писали.

Собираем пазл: пошаговая настройка

Теория — это прекрасно, но код пишется в терминале. Вот как заставить это работать в вашем проекте.

1 Ставим Dora CLI и SCIP-индексатор

Начнем с основ. Dora CLI написан на Rust, поэтому установка через cargo — самый надежный путь (убедитесь, что у вас установлен Rust 1.78+).

cargo install dora-cli

Теперь нужен сам индексатор. Официальный scip-indexer от sourcegraph поддерживает множество языков. Для Node.js/TypeScript проектов (самый частый случай в 2026) установка выглядит так:

npm install -g @sourcegraph/scip-typescript
# Или через yarn
yarn global add @sourcegraph/scip-typescript
💡
Для других языков (Go, Python, Java) проверяйте актуальные пакеты на официальном GitHub Sourcegraph. На 2026 год поддержка Rust и Kotlin значительно улучшилась.

2 Генерируем SCIP-индекс для вашего проекта

Перейдите в корень вашей кодовой базы. Для TypeScript проекта команда будет такой:

scip-typescript index --output index.scip

Процесс может занять время в зависимости от размера проекта. На выходе вы получите файл index.scip — это и есть ваш семантический индекс в бинарном формате.

Не пугайтесь, если индексатор ругнется на какие-то файлы. Он может пропустить нестандартный синтаксис или конфигурации. Главное — чтобы проиндексировалась основная часть кода. Проверьте логи.

3 Запускаем Dora сервер с индексом

Теперь нужно сделать индекс доступным для запросов. Dora CLI умеет запускать локальный сервер.

dora serve --index index.scip --port 8081

Сервер запустится на localhost:8081. Он предоставляет REST API для семантического поиска. Проверить работу можно простым запросом:

curl -X POST http://localhost:8081/search -H "Content-Type: application/json" -d '{"query": "function getUser"}'

В ответе должны быть JSON-объекты с найденными символами (функциями, классами) и их местоположением в коде.

4 Интегрируем с Claude Code (или другим агентом)

А вот здесь — магия. Нужно научить агента пользоваться этим API. Самый чистый способ — через MCP (Model Context Protocol), если ваш агент его поддерживает. Но для начала можно обойтись системным промптом.

В настройках Claude Code (или в начале сессии с агентом в Cursor, о сравнении которых мы писали) добавьте инструкцию:

Ты имеешь доступ к семантическому индексу кодовой базы через локальный API.
Когда тебе нужно найти определение функции, класса или понять, где используется определенный символ, используй этот инструмент.

API endpoint: http://localhost:8081/search
Метод: POST
Тело запроса JSON: {"query": "твой запрос"}

Пример запроса: "function calculateTotal" или "class UserRepository".
Всегда сначала ищи через индекс, прежде чем спрашивать у пользователя расположение файлов.

Более продвинутый вариант — написать простой скрипт-обертку, который будет обрабатывать запросы агента и делать вызовы к Dora API. Это особенно актуально для агентов, работающих в терминале.

Где спрятаны грабли: ошибки, которые все совершают

В теории все гладко. На практике вы обязательно наткнетесь на эти проблемы.

  • Индекс устарел. Вы добавили новую функцию, но агент ее не видит. SCIP-индекс — это снепшот кода на момент генерации. Решение: добавьте переиндексацию в pre-commit hook или CI/CD пайплайн. Для больших проектов можно использовать инкрементальную индексацию.
  • Сервер Dora не отвечает. Вы перезагрузили компьютер или закрыли терминал. Решение: запускайте dora serve как демона (через systemd, pm2 или просто screen/tmux). Или, что лучше, интегрируйте запуск в процесс старта вашей IDE.
  • Агент игнорирует инструкцию. Он продолжает спрашивать "где лежит файл?", вместо того чтобы использовать API. Решение: нужно жестче контролировать промпт. Напомните агенту о доступном инструменте в самом запросе: "Используя семантический индекс, найди, где объявлен хук useAuth".
  • Низкая точность поиска. Запрос "user" возвращает 500 результатов. Уточняйте запросы. Вместо "user" — "interface UserProps" или "function createUser". SCIP лучше всего работает с точными именами символов.

Помните, что Dora и SCIP — не серебряная пуля, а инструмент. Как и другие MCP-серверы, они требуют настройки под конкретный проект.

Вопросы, которые придут вам в голову

Вопрос Короткий ответ
Это заменяет RAG (Retrieval-Augmented Generation) для кода? Частично. SCIP — это структурированный RAG, заточенный именно под код. Он точнее, но требует отдельной индексации.
Какой размер индекса для проекта на 100к строк? Где-то 50-100 МБ в бинарном формате. В памяти сервер Dora съест около 200-300 МБ.
Можно ли использовать с GitHub Copilot? Прямой интеграции нет. Copilot использует свою облачную индексацию. Но вы можете настроить подобный поток для локальных агентов вроде Claude Code или других ассистентов.
Индекс нужно коммитить в репозиторий? Нет, это бинарный артефакт. Генерируйте его в CI и передавайте артефактом, или генерируйте локально при необходимости.

Главный нюанс, о котором молчат все туториалы: этот подход не сделает вашего агента умнее. Он сделает его информированнее. Агент по-прежнему может неверно интерпретировать найденный код или предложить кривое решение. Но теперь у него, по крайней мере, есть карта местности. И это уже половина дела.

Следующий шаг — соединить семантический поиск с детекторами архитектурных паттернов, как в Drift Cortex, чтобы агент понимал не только "где что лежит", но и "как это связано". Но это уже тема для отдельного разговора.