Вы только что присоединились к проекту с 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» — вы думаете «как работает логин?». Инструмент должен понимать эту разницу.

Так что мы построили такой.

grep vs поиск octocode

Что делает 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

Когда вы запускаете octocode index, вот что происходит под капотом:

  1. Обнаружение файлов — обходит репозиторий, уважает .gitignore и .noindex, обрабатывает симлинки
  2. AST-парсинг — Tree-sitter парсит каждый файл в абстрактное синтаксическое дерево. Так Octocode понимает структуру кода — функции, классы, импорты, экспорты — а не просто текст
  3. Чанкинг — код разбивается на семантические чанки (настраиваемо, по умолчанию 2000 байт с перекрытием)
  4. Эмбеддинг — каждый чанк преобразуется в векторный эмбеддинг через выбранного вами провайдера
  5. Хранение — векторы идут в LanceDB с опциональной квантизацией RaBitQ (~32x компрессия)
  6. 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-бинарник. Попробуйте его.