Skip to content

Как устроен AIM Loadout. Часть 2: почему инвентарь пуст

В первой части я рассказал, как пришёл к общему инвентарю навыков в Git. Он позволяет хранить свой набор в одном месте и применять его в разных AI-средах и на разных машинах. Но закончил я на вопросе, который возникает ещё до первой синхронизации: почему после aiman init нового пустого репозитория в инвентаре ничего нет, хотя в Claude Code и Cursor навыки уже установлены?

У команды init вполне определённая работа: подключить репозиторий и подготовить его для AIM. Содержимое установленных AI-сред она в него не переносит. Если подключить готовый инвентарь, навыки в нём будут. Если начать с пустого репозитория, появится структура, которую ещё предстоит наполнить.

Сначала я считал автоматический импорт при инициализации хорошей идеей для развития после MVP. Пользователь уже настроил свои инструменты — можно собрать всё найденное и избавить его от ручного переноса. Позднее я пересмотрел эту идею: полная автоматика оказалась бы слишком непредсказуемой, а сам сбор может быть человеку вообще не нужен.

Что означает «собрать всё»

Представим, что в Claude Code и Cursor есть навык review-code. Имя одно, но инструкции отличаются: в одной среде навык проверяет общие ошибки, в другой — соглашения конкретного проекта. Какой вариант должен попасть в общий инвентарь?

По самому факту наличия файла этого не определить. Если выбрать первый найденный, результат будет зависеть от порядка обхода сред. Если сохранить оба, придётся решить, как их назвать и где потом применять. Здесь уже нужен выбор пользователя.

Даже полное совпадение файлов не означает, что навык стоит включать в инвентарь. Он мог остаться после эксперимента или быть полезен только в отдельной среде. Пользователь может хотеть собрать небольшой рабочий набор, оставив остальные навыки там, где они есть. Автоматический сбор при init навязал бы ему другое решение: начать со всего установленного.

В первой части я писал, что инвентарь принадлежит разработчику. Из этого следует и право решать, что в него входит. Поэтому я решил оставить сбор отдельной операцией, которую человек запускает сам.

От одного навыка к целому набору

Точечный import уже реализован: можно указать конкретный навык или MCP-сервер и среду, из которой его нужно забрать. Выбор источника здесь явный — AIM не приходится угадывать, какую из найденных версий пользователь имел в виду.

Но при большом количестве навыков такой перенос становится утомительным. Нужно вспомнить названия, разобраться, что лежит в каждой среде, и повторять команды для отдельных элементов. Отказ от автоматического сбора при init эту работу никуда не убирает.

Поэтому сейчас в разработке массовый, контролируемый импорт. Я ожидаю его в ближайшие дни в релизе v0.9.0. Ниже — поведение, предусмотренное для этого релиза.

Сначала увидеть, затем перенести

Массовый импорт начнётся с команды:

bash
aiman import

Она просканирует поддерживаемые локальные AI-среды и покажет план: что найдено, что уже есть в инвентаре, что можно добавить и где возникли конфликты. На этом шаге ничего не будет записано. Пользователь сможет посмотреть на свой набор до того, как решит его переносить.

Навык с одинаковым именем и содержимым в нескольких средах станет одним кандидатом на импорт. Если под одним именем окажутся разные версии, команда покажет конфликт. В примере с review-code она оставит выбор источника пользователю.

Для переноса всех однозначных кандидатов потребуется явная команда:

bash
aiman import --yes

Она добавит новые элементы, для которых нет конфликтов. Уже существующие элементы инвентаря сохранятся; отличающиеся версии и невалидные элементы будут пропущены с объяснением. Массового флага перезаписи в этой версии не предусмотрено: спорный элемент можно будет разобрать отдельно через точечный импорт.

Область поиска тоже можно будет ограничить. Например, если нужен набор только из Codex:

bash
aiman import --from codex

Эта команда покажет план для выбранного источника. Если из найденного нужны лишь отдельные элементы, их можно будет перенести точечно. Интерактивного списка с галочками в первой версии массового импорта не будет.

Что произойдёт после импорта

Перенесённые элементы окажутся в локальном инвентаре. Импорт не будет сразу раскладывать их по другим AI-средам или публиковать в Git: применение останется отдельной командой apply, публикация — командой push. Так между сбором набора и его распространением останется возможность проверить содержимое.

Для MCP-серверов есть ещё одна граница. Значения переменных окружения будут сохраняться отдельно от переносимого описания сервера — в локальном aim.local.yaml, исключённом из Git. Если в разных средах для одного сервера обнаружатся разные значения, массовый импорт не выберет одно из них автоматически.

Пустой инвентарь после init сам по себе ещё не делает первый запуск удобным. Пользователю нужен понятный следующий шаг. Для AIM таким шагом станет возможность увидеть уже установленный набор и решить, что из него взять с собой. А начать с чистого инвентаря по-прежнему будет можно.

Released under the Apache 2.0 License.