SSD Nodes Learn Hosting plans →
Руководства Matt ConnorАвтор: Matt Connor

Как использовать навыки агента в разных репозиториях

Копирование навыков агента приводит к рассинхронизации кода. Используйте подход с зависимостями: вынесите навыки в отдельный репозиторий и фиксируйте версии в каждом проекте.

Как использовать навыки агента в разных репозиториях

Чтобы использовать навыки агента в разных репозиториях, прекратите копировать файлы и начните использовать их как зависимости. Создайте один репозиторий для навыков, присваивайте ему теги и позвольте каждому проекту фиксировать нужную версию через тег. Затем добавьте smoke-тест для каждого навыка и проводите ревью каждого обновления версии так же, как вы делаете это при обновлении зависимостей.

Процесс состоит из четырех частей: единый источник истины, зафиксированная версия для каждого репозитория, smoke-тест для каждого навыка и процесс ревью. Ниже объясняется, зачем нужна каждая часть, что предлагают инструменты, выпускаемые в 2026 году, и как построить всю систему на собственном git-сервере без использования внешних хостингов или реестров пакетов. Исключение составляют только smoke-тесты. Они запускают Claude Code, который отправляет каждый запрос к API модели, поэтому на этом этапе данные покидают ваш сервер.

Навык агента — это папка, содержащая файл SKILL.md, а также все необходимые скрипты и справочные файлы. Если этот модуль для вас в новинку, сначала прочитайте что такое навык агента и как работает SKILL.md. Эта страница посвящена организации цепочки поставок для таких модулей.

Где хранятся навыки и почему их сложно распространять

Claude Code загружает навыки из указанных ниже расположений, а документация по навыкам содержит описание каждого пути.

  • .claude/skills/<skill-name>/SKILL.md внутри каталога управляемых настроек — это корпоративное расположение. Навыки загружаются для каждого пользователя на машинах, где организация развертывает это решение.
  • ~/.claude/skills/<skill-name>/SKILL.md — это персональное расположение. Навыки загружаются во всех ваших проектах, но не в проектах других пользователей.
  • .claude/skills/<skill-name>/SKILL.md — это уровень проекта. Навыки загружаются для любого пользователя, который выгружает (check out) этот репозиторий.
  • <plugin>/skills/<skill-name>/SKILL.md поставляется внутри плагина. Навыки загружаются везде, где включен этот плагин.

Claude Code также загружает навыки из вложенных каталогов проекта, каталогов, указанных с помощью --add-dir, и навыки, включенные для вашей учетной записи claude.ai.

Уровень проекта наиболее полезен для команды, так как он фиксируется в системе контроля версий, и каждый, кто клонирует репозиторий, получает эти навыки. Именно здесь возникают сложности. Навык в .claude/skills/ принадлежит одному репозиторию. У вас восемь репозиториев. Следовательно, навык копируется восемь раз.

Frontmatter не предлагает решения. Спецификация Agent Skills допускает шесть ключей, а пути распространения, которые обеспечивают соблюдение этой спецификации, выводят список при использовании другого ключа:

Unexpected key(s) in SKILL.md frontmatter: argument-hint. Allowed properties are: allowed-tools, compatibility, description, license, metadata, name

Обратите внимание на то, чего здесь нет: отсутствует ключ version. Внутри файла ничто не фиксирует, какая копия является более новой. Это логично, так как навык — это документ, а не пакет. Однако это означает, что версионирование должно обеспечиваться уровнем, окружающим файл, и этот уровень — ваша зона ответственности.

Проблема первая: восемь копий, которые незаметно расходятся

Копирование и вставка работают в первый день. Они перестают работать на шестидесятый. Кто-то исправляет неверную инструкцию в репозитории payments и не вносит изменения в остальные семь. Кто-то другой добавляет правило о пагинации в orders. Теперь одно и то же имя навыка выдает два разных результата в зависимости от того, из какой директории был запущен агент, и ни один из разработчиков об этом не знает.

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

Проблема вторая: отсутствие фиксации версий

Даже если команда хранит навыки в одном месте, стандартным методом обмена является копирование: скрипт настройки, строка curl в документации для новых сотрудников или shell-алиас, синхронизирующий папку. Все эти способы устанавливают то, что находится в текущей версии ветки на данный момент.

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

Проблема третья: никто не знает, работает ли навык до сих пор

У навыка нет компилятора. Это набор инструкций для модели, поэтому он может перестать работать, даже если файл остался побайтово идентичным. Обновление модели меняет степень точности выполнения длинных инструкций. Инструмент командной строки, который вызывает навык, может переименовать флаг. URL в справочном файле начинает возвращать 404, и агент начинает работать на основе страницы ошибки.

Ни в одном из этих случаев не происходит явного сбоя. Агент продолжает отвечать. Просто ответ стал хуже, чем был в прошлом месяце, а это сложно заметить, если проверять изменения по одному pull request за раз.

Что решают инструменты, выходящие в 2026 году

Сейчас появляется несколько решений, и их разработчики расходятся во мнениях относительно того, где должна храниться версия.

Файлы блокировки (Lockfiles). Инструмент командной строки skills от Vercel Labs (vercel-labs/skills, лицензия MIT, версия 1.7.2 на 9 октября 2026 года) устанавливает навыки (skills) из git-репозитория в каталог, который ожидает ваш агент; инструмент поддерживает структуру более семидесяти агентов. npx skills add <repo> выполняет установку, npx skills update — обновление, а npx skills list показывает текущий список. Он использует два файла блокировки. Глобальный файл в ~/.agents/.skill-lock.json фиксирует то, что установлено у конкретного пользователя. Начиная с версии 1.4.1 (20 февраля 2026 года), при установке в рамках проекта также создается файл skills-lock.json в корне проекта; согласно исходному коду инструмента, этот файл предназначен для добавления в систему контроля версий. npx skills experimental_install восстанавливает навыки проекта из этого файла. Запрос 283, в котором требовалась команда skills install для восстановления глобального файла блокировки на другой машине, был закрыт как «не планируется» 5 ноября 2026 года; сопровождающий проекта указал, что это дубликат запроса 549. Ознакомьтесь с обоими запросами как с отчетом о состоянии. Файл блокировки для проекта существует. Команда для восстановления из него в выпущенной версии 1.7.6 всё ещё помечена как экспериментальная; основная ветка проекта теперь также поддерживает npx skills install без указания источника для восстановления файла блокировки проекта.

Спецификации и тесты. SkillSpec использует другой подход. Он рассматривает SKILL.md как контракт для проверки, а не как текст, которому нужно доверять, с заявленной целью сделать навыки «отслеживаемыми, тестируемыми и доказуемыми». skillspec doctor <path> сообщает, в каком месте агент, скорее всего, прервет выполнение. skillspec boundary map <path> показывает содержимое навыка, а skillspec boundary assess <path> сообщает о доступных ресурсах, ранжируя их по уровню риска. Это Rust-библиотека (crate) с двойной лицензией MIT или Apache 2.0. Версия 0.2.2 была опубликована 29 июля 2026 года и по состоянию на 10 октября 2026 года остается последней на crates.io. Устанавливайте зафиксированную версию, а не самую новую:

cargo install skillspec --version 0.2.2 --locked
skillspec --version

--locked выполняет сборку с теми версиями зависимостей, с которыми была опубликована библиотека, поэтому сборка не будет меняться без вашего ведома. skillspec --version должна выводить 0.2.2. Другое число означает, что в вашем PATH приоритет имеет более старый бинарный файл.

Практика вендоров. Google описала процесс сборки навыков в google/skills в публикации о том, как компания собирает, тестирует и масштабирует навыки агентов. Если отбросить масштаб, то механизм представляет собой обычную непрерывную интеграцию (CI). Каждый навык перед слиянием проходит проверку линтерами на соответствие метаданным frontmatter, количеству строк, структуре каталогов и правилам именования. Проверка ссылок прерывает сборку, если какой-либо URL возвращает 404, что позволяет выявить вымышленные агентом ссылки. Авторы обязаны предоставлять набор оценочных промптов и критерии оценки вместе с навыком. Запланированные задачи по оценке еженедельно проверяют всю библиотеку на наличие регрессий, и у каждого навыка есть ответственный владелец, который должен исправлять ошибки при снижении качества.

Общая закономерность для всех трех ответов

Вам не обязательно выбирать что-то одно. В основе всех этих подходов лежит единая структура, и стандартный git предоставляет все необходимые инструменты для её реализации.

  1. Единый источник истины. У навыка есть только одно место хранения, и каждый репозиторий ссылается на него, вместо того чтобы хранить собственную копию.
  2. Фиксированная версия для каждого репозитория. Каждый проект записывает точную ревизию, которую он использует, поэтому обновление представляет собой коммит в этом проекте с указанием автора и даты.
  3. Дымовое тестирование для каждого навыка. Одна запускаемая проверка, подтверждающая, что навык по-прежнему выдает ожидаемый результат.
  4. Путь прохождения проверки. Изменения в общем навыке проходят через процедуру ревью, и каждый потребитель видит diff перед тем, как принять обновление.

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

Структура репозитория для небольшой команды на self-hosted git-сервере

В одном репозитории хранятся навыки и инструкции. В нем нет ничего другого, поэтому его история выглядит как журнал изменений с описанием действий.

agent-skills/
  skills/
    api-review/
      SKILL.md
    release-notes/
      SKILL.md
  tests/
    api-review.sh
    release-notes.sh
  CHANGELOG.md

Релизы оформляются через теги. Используйте аннотированные теги, так как они содержат сообщение и дату. В сообщении указывайте причину, по которой потребителю стоит обновить версию:

git tag -a v1.4.0 -m "api-review: require pagination on list endpoints"
git push origin v1.4.0

Если ваш удаленный сервер — это Gitea, Forgejo, GitLab или просто bare-репозиторий по SSH на вашем VPS, ничего из описанного ниже не меняется. Все здесь — это git плюс символическая ссылка.

Фиксация версии через git submodule

Подмодуль (submodule) сохраняет конкретный коммит другого репозитория внутри вашего репозитория. Эта запись и является фиксацией (pin). В каждом использующем проекте:

git submodule add https://git.example.com/team/agent-skills.git vendor/agent-skills
git -C vendor/agent-skills fetch --tags
git -C vendor/agent-skills checkout v1.4.0
mkdir -p .claude/skills
ln -s ../../vendor/agent-skills/skills/api-review .claude/skills/api-review
git add .gitmodules vendor/agent-skills .claude/skills/api-review
git commit -m "Pin shared agent skills to v1.4.0"

Символическая ссылка — это механизм, который обеспечивает работу данной схемы. Запись о навыке (skill) на уровне проекта может быть ссылкой на директорию в другом месте диска, и Claude Code переходит по ней, считывая SKILL.md из целевой папки. Таким образом, навык загружается как обычный проектный навык, в то время как сами данные находятся в подмодуле на выбранном вами коммите.

Проверьте фиксацию:

git submodule status

Корректная строка начинается с пробела, затем следует коммит, путь и ближайший тег:

 4d1a7c2f0b93e5a1c8d6f2b40e7a95c3d1f8b602 vendor/agent-skills (v1.4.0)

Наличие - в начале строки означает, что подмодуль не был инициализирован, поэтому .claude/skills/api-review указывает в никуда, и навык молча не загружается. Исправьте это с помощью git submodule update --init. Наличие + означает, что текущий проверенный (checked-out) коммит отличается от зафиксированного, а значит, разработчик использует инструкции, которых нет у остальных. Новым клонам требуется git clone --recurse-submodules, и эту строку следует добавить в README, так как обычный клон оставляет vendor/agent-skills пустым и не выводит ошибок.

Обновление выполняется осознанно, в этом и заключается основной смысл:

git -C vendor/agent-skills fetch --tags
git -C vendor/agent-skills diff v1.4.0 v1.5.0 -- skills/
git -C vendor/agent-skills checkout v1.5.0
git add vendor/agent-skills
git commit -m "Bump shared agent skills to v1.5.0"

Строка diff — это путь для проверки изменений. Она показывает те же изменения, которые увидят все остальные использующие репозитории, и её удобно включать в pull request.

Закрепление версий через маркетплейс плагинов

Если вы не хотите заставлять каждого разработчика изучать работу с подмодулями, система плагинов Claude Code возьмет распространение на себя, работая с самохостируемым удаленным репозиторием. Разместите каталог по адресу .claude-plugin/marketplace.json в репозитории навыков:

{
  "name": "acme-agents",
  "owner": { "name": "Platform team", "email": "platform@example.com" },
  "plugins": [
    {
      "name": "team-skills",
      "description": "Shared review and release skills",
      "version": "1.4.0",
      "source": {
        "source": "url",
        "url": "https://git.example.com/team/agent-skills.git",
        "ref": "v1.4.0",
        "sha": "4d1a7c2f0b93e5a1c8d6f2b40e7a95c3d1f8b602"
      }
    }
  ]
}

Здесь задействованы два разных источника, и их путаница — распространенная ошибка. Источник маркетплейса, то есть место, откуда загружается сам каталог, принимает ref для ветки или тега и не принимает sha. Источник плагина внутри каталога принимает оба варианта, и если заданы оба, то sha является приоритетным для закрепления. Таким образом, закрепление конкретного коммита должно находиться в записи каталога. Типы также различаются. Внутри каталога url означает git-репозиторий для клонирования. В источнике маркетплейса url означает прямую ссылку на файл marketplace.json, а git-репозиторий обозначается как git.

Каждый использующий репозиторий затем объявляет маркетплейс в своем закоммиченном файле .claude/settings.json:

{
  "extraKnownMarketplaces": {
    "acme-agents": {
      "source": {
        "source": "git",
        "url": "https://git.example.com/team/agent-skills.git",
        "ref": "v1.4.0"
      }
    }
  },
  "enabledPlugins": {
    "team-skills@acme-agents": true
  }
}

Claude Code регистрирует маркетплейс для участника команды, как только тот подтверждает диалог доверия к рабочей области для папки проекта, без необходимости изучать вики-страницу с инструкциями. Запись в каталоге указывает на git URL, а не на относительный путь, поэтому плагин не устанавливается только лишь на основе настроек репозитория. Каждый участник команды один раз выполняет claude plugin install team-skills@acme-agents --scope project, и до этого момента Claude Code сообщает, что плагин включен в настройках проекта, но не установлен. Навыки затем отвечают на /team-skills:api-review, поскольку навыки плагинов имеют пространство имен, соответствующее названию плагина, и не могут конфликтовать с навыком проекта с тем же именем. После того как вы отправите новый тег, потребители обновляют данные с помощью /plugin marketplace update acme-agents, а затем выполняют /reload-plugins, если этого требует сводка установки.

Написание smoke-теста для одного навыка

Smoke-тест — это скриптовый запуск агента против фикстуры с известной ошибкой и одним утверждением (assertion). Claude Code работает в неинтерактивном режиме с -p, и вызываемый пользователем навык работает там: поместите /skill-name в строку промпта, и она будет развернута перед началом запуска.

#!/usr/bin/env bash
set -euo pipefail

claude -p "/api-review Read fixtures/orders-api.md and list the rule ids it breaks." \
  --allowedTools "Read" \
  --output-format json \
  --json-schema '{"type":"object","properties":{"rule_ids":{"type":"array","items":{"type":"string"}}},"required":["rule_ids"]}' \
  | jq -e '.structured_output.rule_ids | index("pagination-required")' > /dev/null

fixtures/orders-api.md — это короткий файл с одной намеренной ошибкой. Утверждение заключается в том, что навык должен его назвать. jq -e завершается с ненулевым кодом, когда его фильтр выдает null, поэтому навык, который перестает обнаруживать внедренную ошибку, приводит к сбою скрипта. claude сам по себе завершается с ненулевым кодом при сбое запуска, а set -euo pipefail превращает любой из этих сбоев в проваленный тест.

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

В CI добавьте --bare. Без него claude -p загружает тот же контекст, что и интерактивная сессия, включая хуки, плагины и CLAUDE.md с машины, на которой он запущен, поэтому личная конфигурация коллеги может изменить результат. Bare mode пропускает автоматическое обнаружение, за исключением навыков в .claude/skills/ в директории, явно указанной с помощью --add-dir; он пропускает навык проекта, который вы тестируете здесь, поэтому загрузите его явно. Bare mode также не считывает ваш логин подписки, поэтому сначала установите ANTHROPIC_API_KEY в окружении:

claude --bare -p "/team-skills:api-review Read fixtures/orders-api.md and list the rule ids it breaks." \
  --plugin-dir vendor/agent-skills \
  --allowedTools "Read" \
  --output-format json

Плагин, загруженный с помощью --plugin-dir, берет свое имя из .claude-plugin/plugin.json, а без этого манифеста он называется по имени своей директории. Закоммитьте plugin.json с "name": "team-skills" рядом с каталогом в репозитории навыков, иначе приведенная выше команда должна будет вызывать /agent-skills:api-review.

С помощью --output-format stream-json событие system/init сообщает, какие плагины были загружены, и содержит массив plugin_errors для тех, которые не загрузились. Оно открывает поток, если события запуска не приходят первыми. Завершайте CI-задачу с ошибкой при непустом plugin_errors. Это позволяет отловить привязку к ревизии, которая больше не существует, что в противном случае выглядело бы как агент, молча игнорирующий ваши внутренние правила.

Общий навык — это исполняемая инструкция

Две функции делают это утверждение буквальным, и обе важны, когда файл поступает от другой команды.

Во-первых, SKILL.md позволяет выполнять команды оболочки до того, как модель прочитает что-либо. Строка такого вида в теле файла является предварительной обработкой:

- Current branch: !`git rev-parse --abbrev-ref HEAD`

Команда выполняется на машине, загружающей навык, а её вывод заменяет заполнитель в тексте, который получает модель. Блок, открытый тремя обратными кавычками с последующим !, выполняет несколько команд аналогичным образом. Во время выполнения никто не запрашивает подтверждение для этих действий. Claude Code проверяет каждую команду на соответствие вашим правилам разрешений. Вне автоматического режима команда, не разрешенная этими правилами, прерывает выполнение навыка, если только навык не одобряет её заранее с помощью второй функции, описанной ниже. Правила запрета и запроса подтверждения по-прежнему имеют приоритет над таким предварительным одобрением. Чтение общего навыка подразумевает чтение его подстановок команд.

Во-вторых, метаданные (frontmatter) могут заранее одобрять инструменты. allowed-tools предоставляет перечисленные инструменты без запроса разрешения на этапе, который вызвал навык. Доверие к рабочей области не ограничивает это предоставление: Claude Code применяет allowed-tools навыка проекта даже при запуске -p в папке, которой никто не доверял. Документация Claude Code прямо указывает на последствия: навык может предоставить себе широкий доступ к инструментам, поэтому проверяйте allowed-tools навыков, добавленных в репозиторий, прежде чем запускать там Claude Code. Организация может запретить использование этого поля в навыках проекта и личных навыках, установив allowManagedPermissionRulesOnly в управляемых настройках, что требует Claude Code версии 2.1.282 или новее.

Поэтому относитесь к обновлению навыка точно так же, как к обновлению зависимостей. Фиксируйте версию по конкретному коммиту везде, где это позволяет механизм, поскольку тег можно переместить, а ветка меняется по определению. На защищенной машине параметр "disableSkillShellExecution": true в настройках заменяет любую подстановку команды на буквальный текст [shell command execution disabled by policy] вместо её выполнения, и если этот параметр применен через управляемые настройки, пользователь не может его переопределить. Встроенные и управляемые навыки освобождены от этого ограничения.

Такая же осторожность требуется в отношении того, что навык считывает. Навык, который запускает env или открывает файл конфигурации, извлекает всё найденное в контекст модели, что является ошибкой, описанной в защите секретов от запускаемых агентов. Навык, который извлекает страницу или выполняет запрос, представляет собой ту же угрозу, направленную вовне, поскольку полученный текст попадает в контекст, выглядя точно так же, как написанные вами инструкции. Это граница, о которой стоит прочитать, прежде чем направлять агента на собственный экземпляр SearXNG для веб-поиска.

Что изучить при обновлении версии

  • Diff каждого тела SKILL.md, так как этот текст содержит инструкции, которым будет следовать ваш агент.
  • Любую подстановку команд, поскольку они выполняются на вашей машине при загрузке навыка.
  • Любые изменения в allowed-tools, так как эта строка предоставляет инструменты без дополнительного запроса.
  • Результаты тестового запуска, стоящего за тегом. Если в общем репозитории выполняются собственные smoke-тесты в CI, то тег, на который вы ссылаетесь, должен иметь статус успешного прохождения.

Если рецензент не может изучить весь diff за десять минут, значит, навык стал слишком объёмным. Разделите его. Тот же аргумент применим к документации репозитория, которую читают ваши агенты: храните постоянные правила в файлах, описанных в разделении AGENTS.md и HUMAN.md, а архитектурные обоснования — в DESIGN.md, написанном для агентов, и пусть навыки остаются узкоспециализированными процедурами.

Когда изменение модели или инструмента нарушает работу навыка

Под навыком могут происходить изменения, даже если никто не вносил в него правок. Обновление модели меняет надежность выполнения длинных инструкций: навык, который раньше доходил до девятого шага, может перестать это делать. Инструмент командной строки переименовывает флаг, агент запускает старый флаг, получает ошибку и начинает импровизировать. Ссылаемый URL начинает возвращать 404. Механизм выбора навыков в агенте меняется, и description, который раньше выигрывал, больше не выбирается. Когда процедура начинает завершаться раньше времени, обновление версии не помогает — сами инструкции требуют структуры, принудительно выполняющей последние шаги. Именно на этом подходе основан неленивый навык и его метод Depth Tree.

Поэтому в данной архитектуре критически важны smoke-тесты. Запускайте тест каждого навыка по расписанию и при каждом push. Google по этой причине еженедельно прогоняет оценочные задания по всей библиотеке, а для команды с десятью навыками достаточно еженедельного cron-задания на небольшом VPS. Это единственный способ узнать о поломке раньше разработчика.

Портативность также помогает. Спецификация Agent Skills ограничивает frontmatter шестью ключами. Навык, написанный по этой спецификации, загружается в инструментах, отличных от тех, для которых он создавался, в то время как каждый специфичный для конкретного механизма ключ — это ставка на одного вендора. Написание навыков, которые переживают смену модели, — это отдельная дисциплина, описанная в обеспечении работы навыка на любой модели.

FAQ

Как использовать один навык агента в нескольких репозиториях?

Разместите навык в отдельном git-репозитории, создавайте в нем теги релизов и настройте каждый проект-потребитель на использование конкретного тега вместо копирования файла. Есть два способа. Git-подмодуль (submodule) фиксирует конкретный коммит, а символическая ссылка из .claude/skills/<name> в подмодуль позволяет загрузить его как обычный навык проекта. Маркетплейс плагинов выполняет ту же задачу через /plugin, где фиксация версии указывается в .claude/settings.json проекта-потребителя. Оба метода сохраняют версию в истории git, что позволяет отследить, какие именно инструкции использовались при конкретном запуске агента.

Можно ли зафиксировать навык агента на определенной версии?

Это нельзя сделать внутри SKILL.md, так как в этом заголовке нет ключа version. Фиксация должна происходить на уровне выше самого файла. Git-подмодуль по своей сути фиксирует конкретный коммит. В маркетплейсе плагинов Claude Code источник плагина принимает ref для ветки или тега и sha для точного коммита, при этом sha имеет приоритет, если указаны оба параметра. Сам источник маркетплейса принимает только ref. Рекомендуется фиксировать коммит, так как тег может быть изменен после того, как вы его проверили.

Что должен проверять smoke-тест навыка?

Проверяйте стабильные показатели. Запустите навык в неинтерактивном режиме на фикстуре с известной ошибкой, затем убедитесь, что в выводе появился конкретный идентификатор, например, ID правила, которое навык должен обнаружить. Запрос структурированного вывода с помощью --output-format json и --json-schema делает проверку точной, а jq -e завершает скрипт с ошибкой, если значение отсутствует. Никогда не проверяйте полное предложение, так как модель может перефразировать ответы при разных запусках.

Безопасно ли устанавливать общий навык из репозитория другой команды?

Относитесь к этому как к зависимости кода, так как это исполняемые инструкции. SKILL.md может выполнять shell-команды во время загрузки через подстановку команд !, а поле allowed-tools в заголовке может предварительно разрешать использование инструментов без запроса подтверждения. Проверяйте diff при каждом обновлении, фиксируйте версию на конкретном коммите, а не на ветке, и отдавайте предпочтение источникам, которые контролирует ваша команда. На управляемых машинах параметр "disableSkillShellExecution": true в настройках запрещает выполнение подстановок команд в навыках пользователя, проекта, плагинов и дополнительных директорий; встроенные и управляемые навыки при этом остаются доступными.

Будет ли общий навык работать в других агентах, кроме Claude Code?

Это зависит от того, какие поля заголовка вы используете. Спецификация Agent Skills определяет шесть ключей: name, description, license, compatibility, metadata и allowed-tools. Навык, ограниченный этими ключами, будет загружаться во всех инструментах, поддерживающих спецификацию, и без изменений будет работать в Claude Code. Специфичные для конкретной среды ключи и функции тела навыка, выходящие за рамки спецификации, будут проигнорированы или отклонены другими инструментами, поэтому не используйте их в навыках, которые планируете широко распространять.

Была ли эта статья полезной?