Безопасность и ограничения
Локальная модель
AIM Loadout работает локально. Он не требует облачного аккаунта и не отправляет инвентарь на внешние серверы.
Транспорт между машинами — ваш Git-репозиторий. AIM читает и пишет файлы инвентаря и выполняет Git-операции для публикации и синхронизации.
Что хранится в Git
В Git попадают:
skills/*.md;mcp/*.yaml;loadouts/*.yaml;aim.yaml;.gitignore;- будущие публичные файлы инвентаря, если они будут добавлены в формат.
Что не должно попадать в Git
Локальные данные хранятся в aim.local.yaml и должны быть исключены через .gitignore.
Там могут быть:
- пути к AI-средам на конкретной машине;
published_hash;synced_hash;- значения env-переменных MCP-серверов.
В текущем MVP значения MCP env хранятся в aim.local.yaml открытым текстом. Это безопасно только при одном условии: файл не попадает в Git.
Что AIM пишет в AI-среды
AIM может:
- создавать или обновлять файлы навыков в директориях AI-сред;
- добавлять или обновлять запись MCP-сервера в конфигурационном файле AI-среды;
- создавать нужные директории, если их нет;
- при
apply --loadout— удалять из сред навыки и MCP-записи, которые существуют в инвентаре, но не входят в применяемый loadout. Файлы, которых нет в инвентаре, не удаляются никогда.
Перед первым массовым применением используйте:
aiman apply --dry-run
aiman sync --dry-run
aiman apply --loadout <name> --dry-runDiscovery: aiman import без имени
aiman import без флагов, --dry-run и --yes сканируют только фиксированный набор путей, документированных для каждого адаптера (~/.claude, ~/.cursor, ~/.codex и соответствующие файлы MCP-конфигурации — см. Справочник CLI). Обход не выходит за пределы этих путей и не поддерживает project-scope.
Скан не выполняет ни одного сетевого запроса — первая строка плана явно перечисляет, что именно было просканировано, и подтверждает, что ничего не покидает машину:
Scanned: ~/.claude, ~/.codex, ~/.cursor — no network requests, nothing leaves this machineОбход ресурсов папочного навыка при discovery подчиняется тем же лимитам, что и точечный aiman import skill/aiman add skill <dir>: не более 200 файлов, не более 1 МБ на файл, не более 5 МБ на пакет суммарно, глубина вложенности не более 5. Symlink и спецфайл (device, socket, FIFO) внутри пакета навыка отклоняются с явной причиной и никогда не читаются по цели. Превышение любого лимита делает элемент невалидным (invalid в плане) — остальные элементы это не затрагивает.
Значения env-переменных MCP-сервера, найденные при скане, существуют только в памяти на время выполнения команды. Они никогда не попадают в mcp/*.yaml, в план, в вывод --dry-run или в текст ошибки — ни в одном сценарии, включая source conflict и local-value conflict. При --yes однозначное новое значение записывается только в aim.local.yaml текущей машины, и только после проверки, что .gitignore активного репозитория покрывает aim.local.yaml; если нет — команда выводит предупреждение и не записывает значение (существующие элементы инвентаря при этом всё равно импортируются):
warning: aim.local.yaml is not in .gitignore — local config may be committed accidentallyaiman init добавляет эту запись в .gitignore автоматически; репозиторий, полученный не через aiman init, может её не иметь.
Ограничения текущего MVP
- Поддерживаются Claude Code, Cursor и Codex CLI.
- Для MCP поддерживается
stdio-модель запуска: сервер с HTTP/SSE-транспортом ("type": "http","type": "sse"или голый"url") не импортируется из среды и не устанавливается в неё. - Секреты MCP не хранятся в keychain.
- Основной remote/branch рассчитан на
origin/main. - AIM не выполняет автоматическое разрешение конфликтов Git.
aiman listне считается полноценной публичной командой, пока не реализован полный просмотр инвентаря.
Ограничения declarative-применения loadout
aiman apply --loadout удаляет из сред элементы инвентаря вне применяемого loadout. Два ограничения этой модели приняты осознанно; митигатор для обоих — aiman apply --loadout <name> --dry-run, который показывает строки D до любого удаления.
Name-collision. Навык, созданный в среде вручную, но совпадающий по имени с элементом инвентаря вне loadout, будет удалён при apply --loadout: AIM определяет «своё» по имени в инвентаре и не отличает свой материализованный файл от одноимённого ручного. Проверяйте план через --dry-run, если держите в средах ручные навыки с теми же именами, что в инвентаре.
Orphan. Навык, удалённый из инвентаря целиком, остаётся в средах: AIM перестаёт считать его своим и не удаляет при apply --loadout. Это не регресс — предыдущие версии вообще ничего не удаляли из сред. Уберите такой файл вручную; автоматическая очистка появится вместе с manifest применённого состояния (project-scope).
Что именно удаляется. Навык удаляется вместе со всей своей директорией в AI-среде (skills/<name>/, включая справочные файлы). Из конфигурации MCP убирается только запись нужного сервера — остальные записи и сам файл конфигурации сохраняются.
Если что-то пошло не так
Начните с:
aiman status
aiman doctorПри проблемах с первым запуском см. Устранение проблем.