API ВЕГА

Carrick

Анализ TypeScript-кода для AI-агентов и IDE.

При работе с крупными кодовыми базами, включающими frontend, backend и несколько сервисов, агенты для программирования нередко повторно создают уже существующие вспомогательные функции, полагаются на устаревшие определения типов и меняют контракты API, не зная, кто от них зависит.

Carrick решает эту проблему, индексируя всю экосистему TypeScript: от frontend-приложений до backend-сервисов, независимо от того, находятся ли они в монорепозитории или в нескольких репозиториях. Благодаря глубокой интеграции с компилятором TypeScript Carrick отслеживает маршруты, типы и вызовы между сервисами, а также фиксирует поведение функций. Это позволяет агентам искать код по его назначению, а не по имени, и опираться на реальную архитектуру проекта.

Carrick доступен AI-агентам через MCP, а IDE — через LSP. Он помогает моделям находить существующие конечные точки и утилиты до того, как они начнут генерировать новый код. Сканер с доступным исходным кодом можно запускать из CLI или конвейера CI. В Carrick также есть бесплатный план, поэтому безопасные рабочие процессы с агентами можно внедрить сразу.

Начало работы

npm install -g carrick
carrick init

Команда carrick init выполняет вход, предлагает выбрать репозитории для индексации и подключает агента. Затем агент создаёт файл carrick.json в каждом репозитории и запускает первое сканирование. Подробности приведены в кратком руководстве. Требуется Node 24 или новее.

Один индекс — три способа работы

Ищите существующий код с помощью агента, изучайте актуальные контракты в редакторе и выявляйте несовместимые изменения в pull request.

В агенте

Предоставьте AI-ассистентам полный контекст: что уже существует, как устроены конечные точки и на кого повлияют изменения. Carrick описывает каждую функцию по тому, что она делает на самом деле. Благодаря этому агенты находят существующие реализации и развивают их, в том числе в репозиториях, которые не скопированы на локальный компьютер. Типы конечных точек Carrick получает напрямую от компилятора TypeScript сервиса, который их предоставляет.

Работает с любым агентом, совместимым с MCP, включая Claude Code, Cursor, Windsurf и Codex.

В редакторе

Изучайте контракты между сервисами и переходите между связанными файлами, не покидая IDE. Если код доступен на диске, команда "Go to Definition" открывает обработчик непосредственно из вызова сервиса, а Code Lens показывает в редакторе всех вызывающих его функций из локального индекса. Если вызов из frontend и обработчик backend расходятся, Carrick отображает несовпадения типов как стандартные диагностические сообщения редактора.

Доступен в Visual Studio Marketplace и Open VSX, а также для запуска в качестве стандартного LSP-сервера.

В pull request

Подключите тот же индекс в CI, чтобы выявлять риски для контрактов, дублирование работы и незаметное расхождение версий. Если производитель и потребитель перестают соответствовать друг другу, независимо от протокола, Carrick указывает точное несовпадение прямо в PR до его слияния. Кроме того, Carrick проверяет версии зависимостей между сервисами и помогает заранее обнаружить конфликтующие обновления пакетов.

Навыки

В Carrick входят четыре навыка, помогающие справляться с наиболее распространёнными ошибками агентов: изменениями, которые ломают вызывающий код в другом сервисе; повторным созданием уже существующего кода; использованием устаревшей копии типов другого сервиса; пропуском участков кодовой базы при масштабных изменениях. Каждый навык получает ответ из индекса Carrick. Команда carrick init устанавливает навыки в .claude/skills/ и .agents/skills/.

НавыкКогда использоватьЧто он возвращает
carrick-impactПеред изменением или удалением маршрута, обработчика, структуры ответа, события или общей функции, а также если нужно узнать, «кто это вызывает?»Все зависимости от изменяемого кода с указанием файла и строки для каждой из них, а также вердикт о типах для каждого потребителя
carrick-reuseВ конце задачи, в которой добавлены или изменены функции, либо если нужно узнать, «существует ли это уже?»Сравнение новых функций со всем индексом функций и список мест, где в проекте одна и та же задача решена повторно
carrick-driftПеред изменением типа запроса или ответа либо если вердикт о совместимости указывает на проблему, которую не удаётся локализоватьТип производителя, ожидаемый тип в каждом месте вызова потребителя и сохранённый вердикт — рядом друг с другом, по одной операции за раз
carrick-censusДля запросов вроде «найди все места, где выполняется X»Все результаты поиска по двум формулировкам одного понятия: они разбиты на страницы, объединены в единый список и снабжены подтверждением результатов

Спросите агента

  • «Какие функции отвечают за подпись webhook в наших сервисах?»

  • «Где мы удаляем дубликаты пользователей по адресу электронной почты?»

  • «Какие компоненты вызывают /api/users и какую структуру ответа ожидает каждый из них?»

  • «Покажи все функции, которые повторяют запросы при ошибках ограничения частоты запросов».

Инструменты MCP

Конечная точка MCP предоставляет индекс в виде структурированных инструментов, которые агент может вызывать напрямую. В справочнике инструментов MCP перечислены параметры и ответы каждого инструмента.

ИнструментНазначение
search_by_intentПоиск функций по их назначению: сопоставляет запрос на обычном языке с описанием задач функций
find_similarПоиск похожих функций для кода, который вы собираетесь написать, или дубликатов, уже имеющихся в проекте
list_function_intentsПросмотр функций и их назначений из индекса постранично, с фильтрацией по сервису или файлу
get_project_mapОтображение карты проекта — краткой сводки по сервисам, контрактам и несопоставленным вызовам
list_projectsСписок проектов в рабочей области и подключённых к каждому из них репозиториев
list_servicesСписок сервисов проекта с количеством конечных точек, вызовов и функций
get_service_graphОтображение графа вызовов между сервисами с несопоставленными вызовами и конечными точками, на которые никто не ссылается
get_operationПоиск сервисов, которые обрабатывают и вызывают операцию, по её методу и пути
get_callersПоиск функций, вызывающих указанную функцию в любом месте проекта
get_api_endpointsСписок операций сервиса для HTTP, GraphQL, WebSockets и pub/sub
get_endpoint_typesПросмотр типов запроса и ответа конечной точки в том виде, в каком их определил компилятор TypeScript
get_type_definitionРазрешение определения типа по имени с выводом полной версии на TypeScript
check_compatibilityПроверка потребителя относительно производителя с вердиктом о типах для каждого вызова
get_service_dependenciesПросмотр npm-зависимостей и конфликтов версий для одного сервиса или всего проекта
list_external_callsСписок исходящих вызовов к внешним адресатам, например вызовов SDK, внешних доменов и URL из переменных окружения
get_contract_pairСравнение типов потребителя и производителя по отдельным операциям
scaffoldСоздание файлов настройки Carrick: workflow, навыка Carrick, carrick.json и хуков Claude Code

Поддерживайте индекс в актуальном состоянии

GitHub Action обновляет часть индекса для каждого репозитория при каждом push в main. Action работает в CI только на чтение, и для него не нужно хранить ключ API.

name: Carrick
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
permissions:
  id-token: write
  contents: read
jobs:
  carrick:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - uses: carrick-tools/carrick@v1

Полное описание процесса, включая сканирование по запросу, установку зависимостей и настройку монорепозитория, приведено в руководстве «Создание индекса».

Документация

Лицензия

В Carrick есть бесплатный план, а платные тарифы представлены на странице с ценами. Сканер в этом репозитории распространяется с доступным исходным кодом на условиях Elastic License 2.0. Copyright (c) 2026 Far Harbour B.V.

Разработка

Соглашения по сборке, тестированию и внесению изменений описаны в файле AGENTS.md.

cargo test
cargo fmt
cargo clippy

Установите необязательный pre-commit hook, чтобы запускать форматирование и тесты перед каждым коммитом:

./scripts/install-hooks.sh