Вы только что присоединились к проекту с 400 000 строк кода в 12 000 файлов. Кто-то просит вас починить поток аутентификации. Вы делаете grep -r "auth" и получаете 847 результатов. Половина — комментарии. Треть — тестовые файлы. Ни один не говорит вам, как на самом деле работает аутентификация.
Это была проблема, в которую мы постоянно упирались. И именно поэтому мы построили Octocode.
Octocode — это инструмент продуктивности для разработчиков, написанный на Rust: семантический поиск по коду, MCP-сервер и AI-инструментарий в одном бинарнике. Вы спрашиваете его «как работает аутентификация пользователей?» простым английским, и он возвращает 3-5 файлов, которые действительно имеют значение, с контекстом о том, как они связаны. Работает локально, функционирует как MCP-инструмент для Claude и Cursor, и превращает вашу кодовую базу в граф знаний с возможностью запросов.
Мы используем его каждый день. Это инструмент, благодаря которому Octomind — наш рантайм AI-агентов — создаётся и выпускается на скорости командой из двух человек. Это наше секретное оружие. И он с открытым исходным кодом.
Мы только что выпустили v0.13.0 с поиском по коммитам, AI-дифами, автоматическими релизами, объяснением кода и векторной компрессией RaBitQ. Вот полная картина.
Боль, с которой всё началось
Мы создаём много программного обеспечения. Множество репозиториев, множество языков, проекты, которые тянутся годами. Проблема была не в написании кода, а в его поиске. Понять, что уже существует, прежде чем писать что-то новое.
grep быстрый, но тупой. Он находит строки, а не смысл. Поиск GitHub медленный и ограничен публичными репозиториями. ChatGPT теряет контекст после 128К токенов. Каждый раз, когда мы заходили в старый проект, мы тратили часы на повторное чтение файлов, которые читали полгода назад.
Вопрос был прост: что, если поиск по коду работал бы так, как работает ваш мозг? Вы не думаете «найди мне строку authenticate» — вы думаете «как работает логин?». Инструмент должен понимать эту разницу.
Так что мы построили такой.
Что делает Octocode
В своей основе Octocode делает четыре вещи:
1. Семантический поиск — Задавайте вопросы на естественном английском. Он преобразует ваш запрос в векторный эмбеддинг, сравнивает его с эмбеддингами каждого фрагмента кода в вашем проекте и возвращает наиболее семантически релевантные результаты. Не совпадения ключевых слов — совпадения смысла.
2. Анализ структуры кода — Извлечение сигнатур функций, определений классов и интерфейсов модулей из любого файла или glob-шаблона. Понять, что делает файл, не читая каждую строку.
3. Графы знаний (GraphRAG) — Картирование связей между файлами: кто что импортирует, какие модули являются соседними, как данные текут через систему. Спросите «как файл A связан с файлом B?» и получите реальный ответ.
4. AI-инструменты для разработчиков — Семантические дифы, автоматизированный код-ревью, умные commit-сообщения, объяснение кодовой базы и многоязычное управление релизами. Не отдельные инструменты, прикрученные сбоку — они построены на том же движке индексации и поиска.
Всё это выставлено как MCP-сервер — это означает, что Claude, Cursor, Windsurf или любой совместимый с MCP AI-ассистент может использовать его напрямую. Ваш AI перестаёт гадать о вашей кодовой базе и начинает её знать.
Как мы реально его используем
Прежде чем углубляться в функции — это не инструмент, который мы построили и забыли. Мы используем Octocode ежедневно для создания Octomind, нашей рантайма AI-агентов.
Вот как выглядит наш типичный день:
- Утро:
octocode diff --stagedдля просмотра того, что Ava (наша AI-коллаборатор) выпустила за ночь. Не 200 строк дифа — краткая сводка типа «Добавлена логика повторных попыток в транспортный слой MCP, отрефакторена обработка ошибок в 3 файлах». - Перед PR:
octocode review --staged --focus securityловит вещи, которые мы бы пропустили. Случайно удалённые рейт-лимитеры. Векторы SQL-инъекций. Небезопасные unwrap в Rust. - Время коммита:
octocode commitгенерирует сообщения из реального дифа. Никаких больше коммитов «fix stuff». - Релизы:
octocode releaseчитает каждый коммит с последнего тега, решает по бампу версии, генерирует чейнджлог и обновляет файлы версий в Cargo.toml, package.json или что бы ваш проект ни использовал. - Весь день: Claude Code использует Octocode как свой MCP-сервер. Когда мы спрашиваем «как работает пайплайн эмбеддингов?», Claude ищет в реальном коде, читает его и отвечает. Никаких галлюцинаций.
Это рабочий процесс, который позволяет двум людям и одному AI выпускать продукт как намного более крупная команда.
CLI: AI-инструменты для продуктивности разработчиков
Octocode начался как MCP-инструмент. Но чем больше мы его использовали, тем больше понимали: этой штуке нужно работать и автономно. Не всё происходит внутри AI-чата.
octocode search — семантический поиск из вашего терминала
# Одиночный запрос
octocode search "how is user authentication implemented"
# Мульти-запрос для тщательных результатов
octocode search "auth middleware" "JWT token validation" "session management"
# Поиск по конкретным типам контента
octocode search "database migration" --mode code
octocode search "why did we change the API" --mode commits
# Контроль детализации вывода
octocode search "auth" --detail-level full
Мульти-запрос — это убойная функция здесь. Вместо одного поиска в надежде поймать всё, вы запускаете 3-4 связанных запроса и получаете результаты, охватывающие полную картину. Движок дедуплицирует и переранжирует по всем запросам.
Уровни детализации позволяют вам контролировать, сколько кода возвращается: signatures для быстрого сканирования, partial (по умолчанию) для умного усечения или full для всего.
octocode view — сигнатуры без шума
# Просмотреть все сигнатуры функций Rust
octocode view "src/**/*.rs"
# Проверить интерфейс конкретного модуля
octocode view "src/api/*.ts" --md
# Несколько языков сразу
octocode view "**/*.{rs,ts,py}"
Это одна из тех функций, которая звучит просто, но экономит реальное время. Вы ревьюите PR, который касается 8 файлов. Вместо открытия каждого и прокрутки, вы запускаете octocode view с глобом и получаете каждую сигнатуру функции, определение структуры и экспорт типа в одном выводе. Markdown-режим (--md) делает его удобным для вставки.
Мы активно используем это и в MCP-сервере — когда Claude нужно понять интерфейс модуля перед его редактированием, view_signatures даёт ему структуру без сброса 2000 строк реализации.
octocode diff — сводка, а не патч
Это новое в v0.13. И это изменило то, как мы ревьюим код, сгенерированный AI.
# Что изменилось в моей области staging?
octocode diff --staged
# Что произошло между ветками?
octocode diff main..feature-branch
# Фокус на конкретных аспектах
octocode diff --staged --focus security
octocode diff --staged --focus performance
Вот почему это важно сейчас как никогда. AI-инструменты для кодинга генерируют большие дифы. Одна сессия Claude может затронуть 15 файлов на 400 строк. Чтение этого сырого дифа занимает 20 минут. octocode diff читает его за секунды и даёт вам сводку: что изменилось, почему это важно, на что обратить внимание.
Флаг --focus острый. Передайте security, и он отметит удалённые валидации, открытые эндпоинты, захардкоженные секреты. Передайте performance, и он подсветит новые аллокации, блокирующие вызовы, отсутствующие индексы. Мы запускаем оба перед каждым мерджем.
octocode explain — понять что угодно
# Объяснить конкретный файл
octocode explain src/auth/middleware.rs
# Объяснить концепцию по всей кодовой базе
octocode explain "how does the embedding pipeline work"
Наведите его на файл и получите структурированный разбор: что он делает, от чего зависит, что зависит от него. Наведите на концепцию, и он ищет семантически, затем синтезирует результаты в объяснение. Отлично для онбординга в незнакомые части кодовой базы.
octocode review — ловит то, что люди упускают
octocode review --staged
octocode review --focus security --severity high
Не замена человеческому ревью. Но он стабильно ловит вещи, которые мы бы пропустили: неиспользуемые импорты, непоследовательная обработка ошибок, потенциальные гонки данных, проблемы безопасности. Мы теперь запускаем его перед каждым PR. Фильтр серьёзности не даёт ему быть шумным.
octocode commit — commit-сообщения, которые что-то значат
git add .
octocode commit
octocode commit --yes # пропустить подтверждение
Анализирует staged-изменения, генерирует commit-сообщение, которое реально описывает то, что произошло. Не «update files», а что-то вроде «refactor: extract embedding batch processing into standalone pipeline with retry logic». Мелочь, но она набирается, когда вы делаете 20 коммитов в день.
octocode release — автоматизированные многоязычные релизы
octocode release
octocode release --dry-run
octocode release --force-version "2.0.0"
Этот скрытый чемпион. Он читает каждый коммит с последнего git-тега, использует LLM для определения правильного бампа версии (patch, minor или major), генерирует структурированный чейнджлог и обновляет файлы версий.
Многоязычная часть имеет значение: он обрабатывает Cargo.toml (Rust), package.json (Node), composer.json (PHP), pyproject.toml (Python) и go.mod (Go). Если ваш проект использует несколько языков, он обновляет их все.
Мы используем это для каждого релиза самого Octocode. Чейнджлог v0.13 — с его категоризированными функциями, улучшениями и исправлениями багов — был сгенерирован octocode release.
octocode stats — быстрая проверка пульса
octocode stats
octocode stats --format json
Количество файлов по языкам, количество строк, статус индексации. Полезно для CI-дашбордов или просто чтобы ответить «насколько большой этот проект?»
Как работает индексация
Когда вы запускаете octocode index, вот что происходит под капотом:
- Обнаружение файлов — обходит репозиторий, уважает
.gitignoreи.noindex, обрабатывает симлинки - AST-парсинг — Tree-sitter парсит каждый файл в абстрактное синтаксическое дерево. Так Octocode понимает структуру кода — функции, классы, импорты, экспорты — а не просто текст
- Чанкинг — код разбивается на семантические чанки (настраиваемо, по умолчанию 2000 байт с перекрытием)
- Эмбеддинг — каждый чанк преобразуется в векторный эмбеддинг через выбранного вами провайдера
- Хранение — векторы идут в LanceDB с опциональной квантизацией RaBitQ (~32x компрессия)
- GraphRAG — связи между файлами извлекаются и хранятся как граф знаний
Весь пайплайн инкрементален. Измените один файл, и только этот файл переиндексируется. Переключите ветки, и Octocode отслеживает, что нужно обновить. Это новая дельта-индексация с учётом веток в v0.13.
Провайдеры эмбеддингов
Вы выбираете свой:
Облако (требуется API-ключ):
- Voyage AI — лучшее качество для кода, 200М бесплатных токенов/месяц (наш дефолт)
- Jina AI — сильные эмбеддинги кода
- Google AI — gemini-embedding-001
- OpenAI — text-embedding-3-small/large
- Together AI — распределённый
Локально (без API, без сети):
- FastEmbed — самый быстрый, 384-мерный (macOS)
- HuggingFace — CodeBERT, sentence-transformers (macOS)
Одна деталь, которая имеет значение: Octocode использует асимметричный поиск. Эмбеддинги кода и эмбеддинги запросов генерируются по-разному, потому что «как работает аутентификация?» и fn authenticate(token: &str) семантически связаны, но структурно различны. Это значимое улучшение точности по сравнению с инструментами, которые эмбеддят всё одинаково.
Квантизация RaBitQ (новое в v0.13)
Векторы большие. Эмбеддинг float32 на 1024 измерения — это 4КБ на чанк. Умножьте на тысячи чанков, и хранилище набирается.
RaBitQ сжимает векторы примерно в 32 раза с минимальной потерей качества. Для большинства кодовых баз вы не заметите разницы в качестве поиска. Но ваш индекс уменьшается со 100МБ до 3МБ. Это важно, когда вы индексируете монорепозиторий.
octocode config --quantization true
octocode index --force # переиндексировать с компрессией
Контекстный поиск: улучшение на 49%
Это основано на исследовании Anthropic по контекстному поиску — техника, которая снижает неудачи поиска на 49%, а в сочетании с переранжированием — на 67%. Мы реализовали оба в Octocode.
Проблема с сырыми эмбеддингами кода: функция с именем process() ничего не значит в векторном пространстве. Она обрабатывает платежи? Парсит HTML? Сжимает изображения? Модель эмбеддингов не может сказать только по имени функции.
Octocode решает это на двух уровнях.
Уровень 1: Структурный контекст (всегда включён). Каждый чанк получает префикс из пути файла, языка и имён символов перед эмбеддингом. Так модель эмбеддингов видит # File: src/api/auth.rs / # Language: Rust / # Defines: validate_token, refresh_session перед собственно кодом. Уже одно это — большое улучшение: эмбеддинг теперь знает, где живёт код и что он определяет.
Уровень 2: Описания, сгенерированные LLM (опционально). Когда включено, LLM читает каждый чанк и пишет описание в 1-2 предложения того, что он делает. Промпт специфичен: «напиши, что делает этот код в терминах, которые разработчик стал бы искать». Так process() становится «валидирует входящие webhook-payload'ы от Stripe и диспетчеризует их к правильному обработчику платежей».
Это описание добавляется к чанку перед эмбеддингом. Модель эмбеддингов теперь имеет и код, И мост на естественном языке к нему. Этот мост — именно то, что закрывает разрыв между тем, как разработчики ищут («как работают вебхуки?») и тем, как написан код (fn process(payload: &[u8])).
octocode config --contextual-descriptions true
octocode config --contextual-model "openrouter:openai/gpt-4o-mini"
octocode index --force
Стоит несколько центов на тысячу чанков с gpt-4o-mini. За скачок в качестве поиска — это не задача.
Переранжирование: точность после полноты
Векторный поиск хорош в полноте — находит правильные документы в стоге сена. Но точно ранжировать эти результаты? Тут становится размыто. Два результата с похожестью 0.82 и 0.79 могут быть в неправильном порядке.
Octocode использует двухэтапный поисковый пайплайн. Сначала векторный поиск вытаскивает топ-кандидатов (широкая сеть, высокая полнота). Затем cross-encoder переранжировщик переоценивает каждый результат, глядя на полную пару запрос-документ вместе. Не отдельные эмбеддинги — реальная связь между вашим вопросом и каждым чанком кода.
Исследования показывают, что переранжирование cross-encoder улучшает точность RAG до 40%. В наших тестах оно стабильно толкает самый релевантный результат на позицию #1 вместо позиции #3 или #4. Разница между «полезно» и «именно то, что вам было нужно».
Переранжировщик работает через octolib и поддерживает несколько провайдеров. Он добавляет несколько миллисекунд к латентности поиска. Невидимо для людей. Невидимо для MCP-клиентов.
# Переранжирование включено по умолчанию, когда настроен провайдер
octocode config --show # проверить настройки переранжировщика
В сочетании с контекстными описаниями это даёт Octocode поисковый пайплайн, ближе к state-of-the-art RAG-системам, чем к традиционным инструментам поиска кода.
GraphRAG: граф знаний
Это функция, отделяющая Octocode от «семантического grep».
Когда вы включаете GraphRAG, Octocode строит граф, где каждый файл — это узел, а каждая связь — это ребро. Связи включают:
- imports — файл A импортирует из файла B
- sibling_module — файлы в одной директории
- parent/child_module — иерархия директорий
Каждый узел хранит: путь файла, описание, сгенерированное AI, извлечённые символы, списки импортов/экспортов и векторные эмбеддинги.
Что вы можете с этим делать?
# Найти все файлы, связанные с аутентификацией
octocode graphrag search --query "authentication system"
# Проследить, как связаны два файла
octocode graphrag find-path --source-id src/api/auth.rs --target-id src/db/users.rs
# Получить полную детализацию роли файла
octocode graphrag get-node --node-id src/api/auth.rs
# Увидеть все зависимости для файла
octocode graphrag get-relationships --node-id src/api/auth.rs
# Высокоуровневый обзор кодовой базы
octocode graphrag overview
Команда find-path недооценена. «Как модуль аутентификации связан с базой данных?» В большом проекте этот путь может проходить через 4-5 промежуточных модулей, о существовании которых вы не знали. GraphRAG его находит.
Разрешение импортов работает и между языками — Rust use, Python import, TypeScript import/require, Go package, PHP use — всё сопоставлено с реальными путями файлов.
MCP-инструменты: давая AI глаза в ваш код
Здесь Octocode меняет то, как вы работаете с AI-ассистентами.
Claude, Cursor и Windsurf — все поддерживают MCP. Когда вы подключаете Octocode как MCP-сервер, ваш AI-ассистент получает три инструмента:
| Инструмент | Что он делает |
|---|---|
semantic_search |
Поиск кода, документации, текста или коммитов по смыслу |
view_signatures |
Извлечение структуры из файлов, соответствующих glob-шаблону |
graphrag |
Запрос графа знаний для связей и зависимостей |
Настройка
Добавьте в ваш конфиг Claude Desktop или Cursor:
{
"mcpServers": {
"octocode": {
"command": "octocode",
"args": ["mcp", "--path", "/your/project"]
}
}
}
Вот и всё. Теперь, когда вы спрашиваете Claude «как работает поток оплаты?» — он не галлюцинирует. Он вызывает semantic_search, читает реальный код и даёт вам ответ, основанный на вашей кодовой базе.
С интеграцией LSP
octocode mcp --with-lsp "rust-analyzer"
Это добавляет ещё 6 инструментов: goto_definition, hover, find_references, completion, document_symbols, workspace_symbols. Ваш AI теперь может двигаться через код так, как это делает ваша IDE — но программно.
Multi-repo прокси
Работаете с несколькими репозиториями? MCP-прокси автоматически обнаруживает git-репозитории в директории и обслуживает их через единую HTTP-точку:
octocode mcp-proxy --bind 127.0.0.1:8080 --path /workspace
Производительность
Цифры важнее утверждений. Вот что мы видим на реальных проектах:
| Метрика | Малый (<1К файлов) | Средний (1-10К) | Большой (10К+) |
|---|---|---|---|
| Скорость индексации | 500+ файлов/сек | 200-400/сек | 100-200/сек |
| Латентность поиска | <50мс | <100мс | <200мс |
| Память | 50-100МБ | 100-500МБ | 500МБ-2ГБ |
| Хранение (с RaBitQ) | ~300КБ | ~3МБ | ~30МБ |
Латентность поиска — это то, что важно для MCP. Когда Claude вызывает semantic_search, вы не хотите ждать 5 секунд. Менее 100мс означает, что AI ощущается мгновенным.
Индексация одноразовая (плюс инкрементные обновления). Даже проект на 10К файлов индексируется менее чем за минуту.
14 языков, один инструмент
Octocode использует Tree-sitter для парсинга, что означает реальный AST-анализ — а не regex-хаки. В настоящее время поддерживается:
Rust, Python, TypeScript, JavaScript, Go, PHP, C++, Ruby, Java, Bash, CSS/SCSS, Lua, Svelte, JSON, Markdown.
Каждый язык получает правильное разрешение импортов, извлечение символов и картирование связей. Парсер Go понимает импорты пакетов. Парсер Rust знает про use и mod. Парсер TypeScript обрабатывает import и require. Это не «один размер для всех» — каждый парсер языка настроен.
Что изменилось в v0.13
Это наш самый большой релиз. 35 коммитов. Вот что нового:
- Поиск по коммитам — поиск по git-истории по смыслу, с ленивой загрузкой индексации
- AI CLI команды —
diff,explain,stats,review,commit,release - Контекстное обогащение чанков — техника Contextual Retrieval от Anthropic
- Квантизация RaBitQ — ~32x векторная компрессия
- Провайдеры эмбеддингов OctoHub и Together AI
- Дельта-индексация с учётом веток — более умные инкрементальные обновления
- Миграция на SDK rmcp — официальная Rust-реализация MCP для стабильности
- Улучшенный GraphRAG — лучшее разрешение узлов и поиск путей
- 7 исправлений багов — корневые коммиты git, типы эмбеддингов, переранжирование, подсчёт связей
Мы используем Octocode для создания Octocode, поэтому каждая шероховатость ловится быстро.
Начало работы
macOS (Homebrew)
brew install muvon/tap/octocode
Универсальный установочный скрипт
curl -fsSL https://raw.githubusercontent.com/Muvon/octocode/master/install.sh | sh
Работает на macOS (Intel + Apple Silicon), Linux (x86_64 + ARM64) и Windows.
Из исходников
cargo install octocode
Первый запуск
Настройте провайдер эмбеддингов (Voyage AI даёт 200М бесплатных токенов/месяц):
export VOYAGE_API_KEY="your-key"
Индексируйте и ищите:
cd your-project
octocode index
octocode search "how does authentication work"
Включите GraphRAG:
octocode config --graphrag-enabled true
octocode index --force
Подключите его к вашему AI-ассистенту как MCP-сервер — см. руководство по интеграции MCP для конфигов Claude, Cursor и Windsurf.
Настоящая суть
Мы создали Octocode, потому что grep не понимает код. Не потому, что с grep что-то не так — он делает именно то, что говорит. Но «найди строку auth» и «покажи мне, как работает аутентификация» — это фундаментально разные вопросы.
Переход от поиска по ключевым словам к семантическому поиску — это не функция. Это смена категории. И с MCP это уже не только для людей — это то, как AI-ассистенты понимают ваш код.
Мы используем его для создания всего в Muvon. Это инструмент, который делает возможной команду из двух человек. И он бесплатный, с открытым исходным кодом, Apache 2.0.
260+ звёзд на GitHub. 14 языков. Один Rust-бинарник. Попробуйте его.



