СР
Вайбкодинг · AI · агенты
Гайды • Скиллы
Как это устроено:

Как держать одни скиллы во всех агентах

Claude Code, Codex, opencode и Copilot ищут скиллы в разных папках, и копии быстро расходятся. Гайд о том, как держать один оригинал и раздавать его ссылками, где эта схема спотыкается и нужна ли для неё отдельная программа.

4 октября 2026 · гайд обновляется
Было: у каждого харнеса свои копии скиллов. Стало: один оригинал и ссылкиСлева четыре харнеса, Claude Code, Codex, opencode и Copilot, и в каждом свой набор копий трёх скиллов: письмо, ревью, тесты. Версии разные, розовым отмечены устаревшие, пунктиром скиллы, которых в харнесе нет. Справа одна папка-оригинал с последними версиями трёх скиллов, от неё линии ко всем четырём харнесам, и в каждом пунктиром ссылки на те же версии.БЫЛОСТАЛОClaude Codeписьмо v3ревью v2тесты v1Codexписьмо v1неттесты v2opencodeписьмо v2ревью v2нетCopilotнетревью v1тесты v2Оригиналписьмо v3ревью v2тесты v2Claude CodeписьморевьютестыCodexписьморевьютестыopencodeписьморевьютестыCopilotписьморевьютестыБЫЛОClaude Codeписьмо v3ревью v2тесты v1Codexписьмо v1неттесты v2opencodeписьмо v2ревью v2нетCopilotнетревью v1тесты v2СТАЛООригиналписьмо v3ревью v2тесты v2Claude CodeписьморевьютестыCodexписьморевьютестыopencodeписьморевьютестыCopilotписьморевьютесты
Слева у каждого харнеса свои копии, розовым устаревшие. Справа один оригинал и ссылки на него

В чате вайбкодеров Air перечислил свой зоопарк: два тарифа Copilot, opencode, Codex и Claude Code. Со скиллами в нём мучение. Codex не ищет их в подпапках. Claude Code только что научился читать AGENTS.md, а до этого, по словам Air, у него были багованные симлинки. Я много раз объяснял эту схему на своих программах, а гайда так и не написал. Факты для него собрал агент: прочитал документацию шести харнесов, открытые баги на GitHub и проверил поведение на моём ноутбуке. Я дал задачу и решил, что войдёт в текст.

Гайд для тех, у кого два-четыре агента и скиллы уже разъехались по их папкам. В одном харнесе свежая версия, в другом старая, в третьем скилла нет совсем. Команд здесь мало. Больше про устройство: где каждый харнес ищет скиллы, как держать один оригинал и где схема ломается. В конце ответ на вопрос Air: какие менеджеры скиллов уже есть и нужен ли ещё один.

Если запилить UI-тулзу для менеджмента скиллов, будет спрос?

Air, чат вайбкодеров, 4 октября
01

Почему скиллы разъезжаются

Скилл это папка с файлом SKILL.md: инструкция агенту, как делать одну работу. Формат у всех харнесов почти общий. Папки, где его ищут, у каждого свои. Claude Code смотрит в .claude/skills, Copilot в .github/skills, opencode в .opencode/skills. Поставили скилл в одном харнесе, в другом его нет. Скопировали руками, и через месяц копии уже разные.

Пока агент один, этого не видно. Со вторым начинается ручное копирование. С третьим путаница: какая версия свежая и где её править.

В феврале появился выход. Codex с версии 0.94 начал читать общую папку .agents/skills в проекте, а через два дня, в версии 0.95, и личную ~/.agents/skills. Те же папки читают opencode, Copilot в VS Code, Cursor и Gemini CLI. Общий адрес для скиллов появился у всех, кроме Claude Code.

Слова, которые встретятся дальше:

Харнес
Программа, в которой работает агент: Claude Code, Codex, opencode, Copilot, Cursor, Gemini CLI. В заголовке я назвал их агентами, в разговоре так проще.
Скилл
Папка с инструкцией для агента, как делать одну работу. По описанию в SKILL.md агент сам решает, подходит ли скилл к задаче, или вы зовёте его командой через косую черту.
Симлинк
Ярлык на папку. Харнес открывает ярлык и читает оригинал. Для меня это способ держать скилл в одном месте и показывать его всем харнесам сразу.
Личные и проектные скиллы
Личные лежат в домашней папке и видны из любого проекта. Проектные лежат в репозитории и видны, только когда агент запущен в нём.
AGENTS.md
Файл с правилами для агента в корне проекта. Родной формат Codex. У Claude Code для этого свой файл, CLAUDE.md.

Теперь по жалобам Air. Агент сверил каждую с документацией и проверил у меня:

  1. ПравдаCodex не ищет в подпапках. Он идёт от папки запуска вверх до корня репозитория, пишет OpenAI. На тестовом проекте Codex из корня не увидел скилл во вложенной папке, а из этой папки увидел и её, и корень. opencode ведёт себя так же, Gemini CLI не идёт даже вверх. Вниз умеют Claude Code, с января, когда агент начинает работать с файлами в подпапке, и Cursor, по документации.
  2. ПравдаClaude Code только что научился AGENTS.md. Поддержка вышла 18 сентября, запрос висел с августа прошлого года. Работает она запасным вариантом: если в проекте есть CLAUDE.md, AGENTS.md Claude Code не читает, пишет Anthropic.
  3. Частично устарелоБагованные симлинки. Ссылку на папку скилла Anthropic теперь описывает в документации, у меня она работает. Открыт один баг: меню /skills пишет «No skills found», хотя агент скилл видит и вызывает.
  4. Правда для плагиновopencode поддерживает не всё. Скиллы из папок Claude Code он читает. Плагины Claude Code нет: у opencode своя система плагинов, а запрос на них закрыли без планов.
02

Где каждый харнес ищет скиллы

Сводка на 4 октября 2026 года. Codex, opencode и Gemini CLI агент проверил на тестовом проекте, Claude Code в живой сессии. Copilot и Cursor я знаю только по документации.

ХарнесОбщая папка .agentsСвоя папкаПодпапки проектаСимлинкиКак выключить скиллAGENTS.md
Claude Codeне читает.claude/skillsнаходит, когда агент работает с файлами тамработают, меню /skills их не показываетнастройка skillOverrides или пометка «только по команде» в скиллес 18 сентября, если нет CLAUDE.md
Codexчитает с февраля~/.codex/skills, устареваеттолько вверх от папки запускаработают, но бывает чужой префиксзапись в config.toml и перезапускродной формат
opencodeчитает.opencode/skills и папки Claude Codeтолько вверхработают, одна папка под двумя именами даёт дублиразрешения allow, deny, ask в настройкахда, CLAUDE.md про запас
Copilot в VS Codeчитает.github/skills и папки Claude Codeв документации не описаноесть открытые багитолько пометка в скилле; в Copilot CLI тумблеры /skillsвключается в настройках
Cursorчитает.cursor/skills, а ещё папки Claude Code и Codexищет по всему репозиториюв документации не сказанотолько пометка в скилледа, в корне и подпапках
Gemini CLIчитает как второе имя своей.gemini/skillsтолько папка запускаработают, одна папка под двумя именами даёт дубликоманда /skills disableтолько если добавить в настройки
Источники: документация Claude Code, Codex, opencode, Copilot, Cursor, Gemini CLI. Розовым то, что ломает общую схему

Главное в таблице: личная папка ~/.agents/skills стала общим местом для пяти харнесов из шести. Шестой, Claude Code, читает только свою. На этом и построена схема.

03

Как это устроено у меня

У меня сотни скиллов в десятках репозиториев. Держится всё на трёх правилах.

Оригинал скилла лежит в репозитории отдела. Отдел у меня это репозиторий, где агенты ведут одну область работы: обучение, исследования, контент. Скилл письма лежит в отделе обучения, скилл исследований в отделе исследований, внутри папки .agents/skills. Так у каждого скилла есть хозяин и история правок в git.

В личной папке лежат только ссылки. В ~/.agents/skills симлинки на оригиналы в отделах. Сама эта папка тоже ссылка: она ведёт в ~/.claude/skills, и для системы это одна папка под двумя именами. Claude Code читает её под своим именем, остальные под общим. Чтобы Claude Code видел и проектные скиллы, в репозитории стоит ещё одна ссылка: .claude/skills ведёт в .agents/skills.

Реестр показывает, что где видно. Реестр живёт в моём штабе: это папка с правилами и знаниями для моих агентов. По последней описи там 86 личных скиллов, 27 скиллов Codex и 422 проектных скилла в 70 репозиториях. Проектные видны, только когда агент запущен в своём репозитории. Скилл другого отдела агент находит по реестру и читает по пути.

Как у меня устроены скиллы: оригиналы в репо отделов, ссылки в личной папке, харнесы читают каждый своёСлева четыре оригинала: скилл ris-writing в репо отдела обучения, corp-research в отделе исследований, capabilities-audit в штабе и 53 скилла pstack в клоне cursor/plugins. Пунктирные стрелки ведут в личную папку: ~/.agents/skills и ~/.claude/skills, это одна папка под двумя именами, внутри ссылки на оригиналы. Справа шесть харнесов и что каждый читает сам. Claude Code: ~/.claude/skills и .claude/skills в проекте, общую папку не видит, нужен свой симлинк. Codex: ~/.agents/skills и .agents/skills вверх до корня, ставит префикс pstack:tdd, если рядом манифест плагина. opencode: обе папки и свою, одна папка под двумя именами даёт дубли. Copilot по документации: ~/.copilot, ~/.claude и ~/.agents, с симлинками открытые баги. Cursor по документации: четыре папки, про симлинки молчит. Gemini CLI: ~/.gemini/skills и ~/.agents/skills, у меня одна ссылается на другую, отсюда дубли.ОРИГИНАЛЫ В РЕПО ОТДЕЛОВЛИЧНАЯ ПАПКАЧТО ХАРНЕС ЧИТАЕТ САМОТДЕЛ ОБУЧЕНИЯris-writingteach-vibecoding/.agents/skillsОТДЕЛ ИССЛЕДОВАНИЙcorp-researchcorp-research/.agents/skillsШТАБcapabilities-audithq/.agents/skillsКЛОН CURSOR/PLUGINSpstack, 53 скиллаобновляется одним git pull~/.agents/skills=~/.claude/skillsодна папкапод двумя именами;внутри ссылкина оригиналыClaude CodeНУЖЕН СИМЛИНК~/.claude/skills и .claude/skills в проектеобщую папку .agents не видитCodexЧУЖОЙ ПРЕФИКС~/.agents/skills и .agents/skills вверх до корняpstack:tdd, если рядом манифест плагинаopencodeДУБЛИ~/.claude/skills, ~/.agents/skills и своюодна папка под двумя именамиCopilotПО ДОКУМЕНТАЦИИ~/.copilot, ~/.claude и ~/.agentsс симлинками есть открытые багиCursorПО ДОКУМЕНТАЦИИ~/.cursor, ~/.agents, ~/.claude, ~/.codexпро симлинки документация молчитGemini CLIДУБЛИ~/.gemini/skills и ~/.agents/skillsу меня одна ссылается на другуюОРИГИНАЛЫ В РЕПО ОТДЕЛОВОТДЕЛ ОБУЧЕНИЯris-writingteach-vibecodingОТДЕЛ ИССЛЕДОВАНИЙcorp-researchcorp-researchШТАБcapabilities-audithqКЛОН CURSOR/PLUGINSpstack, 53 скиллаgit pull обновляетЛИЧНАЯ ПАПКА~/.agents/skills = ~/.claude/skillsодна папка под двумя именами; внутри ссылкиЧТО ХАРНЕС ЧИТАЕТ САМClaude CodeНУЖЕН СИМЛИНК~/.claude/skills и .claude/skills в проектеобщую папку .agents не видитCodexЧУЖОЙ ПРЕФИКС~/.agents/skills и .agents/skills вверх до корняpstack:tdd, если рядом манифест плагинаopencodeДУБЛИ~/.claude/skills, ~/.agents/skills и своюодна папка под двумя именамиCopilotПО ДОКУМЕНТАЦИИ~/.copilot, ~/.claude и ~/.agentsс симлинками есть открытые багиCursorПО ДОКУМЕНТАЦИИ~/.cursor, ~/.agents, ~/.claude, ~/.codexпро симлинки документация молчитGemini CLIДУБЛИ~/.gemini/skills и ~/.agents/skillsу меня одна ссылается на другую
Оригиналы лежат в отделах, личная папка держит ссылки, каждый харнес читает своё. Пунктир это симлинк
Терминал: скиллы в папке Claude Code это ссылки на репозитории отделов hq, corp-research, teach-vibecoding и corp-content; папка ~/.agents/skills ведёт в ~/.claude/skills, папка Gemini ведёт в ~/.agents/skills
Личная папка скиллов: каждый скилл ведёт в репозиторий своего отдела. Скриншот моего терминала

У Codex осталась своя старая папка ~/.codex/skills. Часть скиллов в ней тоже ссылки на те же отделы, часть живёт только в Codex. Codex её пока читает, но в issue её называют устаревающей.

Новые скиллы встают в схему одной фразой агенту. 4 октября я попросил поставить pstack, набор скиллов Лорен Тан из репозитория Cursor. Агент скачал репозиторий в папку с остальными проектами и подготовил команду, которая разложила ссылки на 53 скилла. Запустил её я: менять папку скиллов автоматический режим агенту не дал. Обновление теперь одна команда git pull в этой папке. Подробно эта история в гайде «Как доверить агентам код».

Как выглядят ссылки внутри
# оригинал в репозитории отдела
~/Documents/GitHub/<отдел>/.agents/skills/<скилл>/SKILL.md

# личная папка: одна на Claude Code и остальных
ln -s ../.claude/skills ~/.agents/skills

# ссылка на оригинал
ln -s ~/Documents/GitHub/<отдел>/.agents/skills/<скилл> ~/.claude/skills/<скилл>

# в репозитории: чтобы Claude Code видел проектные скиллы
ln -s ../.agents/skills <репозиторий>/.claude/skills
04

На чём схема спотыкается

Claude Code не читает общую папку. В документации папка .agents прямо стоит в списке того, что Claude Code не читает. Запрос на неё открыт с января. В нём 29 комментариев, последний от 3 октября, со скриптом-обходом через те же симлинки. Поэтому Claude Code нужна своя ссылка: личная папка на личную, проектная на проектную. Хорошая новость: ссылку он читает один раз, даже если на скилл ведут несколько путей.

Одна папка под двумя именами даёт дубли. opencode читает и ~/.claude/skills, и ~/.agents/skills. Что это одна папка, он не замечает и на каждый скилл пишет предупреждение о дубле. Баг открыт. Gemini CLI делает так же со своей папкой и общей: у меня 146 строк «Skill conflict detected» за запуск. Это предупреждения, но в таком логе легко пропустить настоящую ошибку.

Терминал: opencode выводит предупреждения duplicate skill name, один и тот же скилл найден в ~/.agents/skills и в ~/.claude/skills
opencode находит каждый скилл дважды. Скриншот моего терминала, 4 октября

Codex приписывает чужое имя. Если выше оригинала по дереву папок лежит манифест плагина, Codex считает скилл частью плагина и добавляет к имени префикс. pstack пришёл из репозитория плагинов Cursor, и у меня скилл tdd в списке Codex стал pstack:tdd. Баг открыт с августа.

Терминал: Codex перечисляет скиллы с двоеточием в имени: cursor-team-kit:deslop, pstack:blast-radius, pstack:correct, pstack:interrogate, pstack:swarm, pstack:tdd
Скиллы pstack в Codex получили имя плагина. Скриншот моего терминала, 4 октября

Выключать каждый харнес умеет по-своему. В Claude Code есть настройка skillOverrides и пометка в самом скилле «только по команде». В Codex запись в config.toml и перезапуск. opencode берёт разрешения allow, deny и ask, Gemini CLI команду /skills disable. У меня в Codex так выключено пять с лишним скиллов, в Claude Code несколько работают только по команде. Скилл лежит в одном месте, а выключатели у него в пяти разных.

05

Нужна ли программа с тумблерами

Короткий ответ Air: такие программы уже есть. Начну с установщиков.

Теперь программы с тумблерами, о которых спрашивал Air:

Нужна ли такая программа вообще, я не уверен. Тумблер решает последний шаг. Главная боль раньше: харнесы читают разные папки, и правила то и дело меняются. Codex переехал на общую папку в феврале, Claude Code научился AGENTS.md в сентябре. У Claude Code, Codex, opencode и Copilot открыты баги с симлинками. Программа с тумблерами должна успевать за всеми шестью, и любое её отставание вы заметите первым.

Агент успевает сам. Он прочитает свежую документацию, спросит каждый харнес, что тот видит, и поправит ссылки. Мне хватает папки-оригинала, симлинков и реестра. Остальное делает одна фраза агенту.

В одном Air точно прав: редкие скиллы стоит убирать с глаз модели. В Claude Code для этого есть пометка «только по команде». Такой скилл агент сам не вызывает, он срабатывает, когда сообщение начинается с его имени через косую черту.

06

Какие принципы здесь работают

Скиллы тут скорее повод. Эти правила подходят для любых файлов, которые читают ваши агенты: правил, промптов, шаблонов.

  1. Один оригинал, остальное ссылки

    Копия устаревает с первой правки оригинала. Ссылка всегда показывает то, что лежит в оригинале сейчас. Как с договором: коллегам дают ссылку на документ в облаке, и правки видят все.

  2. У оригинала есть хозяин

    Скилл лежит там, где им пользуются чаще всего. Там его история правок и там его чинят. Как с регламентом: он хранится в отделе, который его ведёт, остальные знают, где его взять.

  3. Проверяйте глазами харнеса

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

  4. Записывайте, что где видно

    Через месяц никто не помнит, какой скилл в каком харнесе включён. Таблица отвечает за секунду. Как с кладовкой: опись на двери экономит час поисков.

  5. Расставлять ссылки поручите агенту

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

07

Как повторить

  1. Выберите оригинал. Для личных скиллов это ~/.agents/skills, для проектных .agents/skills в репозитории.
  2. Попросите агента собрать скиллы. Например: «найди мои скиллы во всех харнесах, перенеси в одну папку, в остальные поставь симлинки, дубли и разные версии покажи мне».
  3. Свяжите Claude Code с общей папкой. Если он у вас есть, ему нужна ссылка между ~/.claude/skills и ~/.agents/skills, в проектах между .claude/skills и .agents/skills. Направление ссылки неважно.
  4. Сверьте имена. Имя в SKILL.md должно совпадать с именем папки. Этого требуют opencode и Copilot, а Copilot скилл с другим именем ещё и молча пропускает.
  5. Спросите каждый харнес, что он видит. Одна фраза «какие скиллы ты видишь» в каждом. Меню /skills в Claude Code для проверки не годится: ссылки оно пока не показывает.
  6. Запишите, что где видно. Одна таблица: скилл, где оригинал, в каких харнесах виден, где выключен.

Новые скиллы ставьте через npx skills с флагом -a, он соберёт ту же схему сам. Или одной фразой агенту, как я поставил pstack.

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

Air, если всё-таки соберёшь свою тулзу, приходи показать в чат вайбкодеров. Остальных там тоже ждём со своими схемами. Разборы таких штук выходят в канале «рис. AI».

Повод: сообщение Air в чате вайбкодеров. Документация: Claude Code, скиллы и память, changelog; Codex, скиллы и AGENTS.md; opencode; Copilot, VS Code и CLI; Cursor; Gemini CLI. Баги: Claude Code #16345, #14836, #6235; Codex #40070, #10493; opencode #46327, #8158; VS Code #315979. Установщики и менеджеры: vercel-labs/skills, skills.sh, gh skill, xingkongliang/skills-manager, yibie/skills-manager, skillshare. Звёзды и версии на 4 октября 2026. Реплика Air слегка сокращена.