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