Skip to content
Apothem
Адаптеры окружений

GitHub Copilot

Адаптер окружения Apothem для GitHub Copilot (GA).

Поставщик: GitHub / Microsoft Имя установки: github-copilot Статус: GA Нативная конфигурация: <project>/.github/copilot-instructions.md

Установка

apothem install --harness github-copilot --project /path/to/project

Адаптер выводит файл инструкций проекта из вашего общего профиля и общей поверхности правил и управления Apothem, записывает помощников Apothem как профили помощников Copilot в проекте (см. Профили помощников) и регистрирует два хука (см. Хуки).

Кроме того, он записывает навыки Apothem, а также правила и шаблоны, на которые они ссылаются, в ваш домашний каталог пользователя, прежде чем затронуть проект (см. Файлы за пределами проекта).

Записываемые файлы:

  • <project>/.github/copilot-instructions.md — файл инструкций.
  • <project>/.github/agents/<name>.agent.md для каждого помощника Apothem, в проекте.
  • <project>/.github/hooks/apothem.json — файл хуков, в проекте. Ваши собственные файлы хуков в этой папке не затрагиваются.
  • <project>/.apothem/support/github-copilot/hooks/ — скрипты хуков, в проекте.
  • ~/.agents/skills/<name>/SKILL.md для каждого навыка и каждой команды Apothem, в вашем домашнем каталоге пользователя.
  • ~/.config/apothem/rules/ и ~/.config/apothem/templates/, в вашем домашнем каталоге пользователя.

Файлы за пределами проекта

Установка также записывает навыки Apothem в ваш домашний каталог пользователя, прежде чем что-либо изменить в проекте:

ПапкаЧто Apothem туда записывает
~/.agents/skills/По одной папке с SKILL.md для каждого навыка Apothem и по одной для каждой команды Apothem (команда становится навыком с тем же именем).
~/.config/apothem/rules/, ~/.config/apothem/templates/Правила и шаблоны, на которые ссылаются навыки и файл инструкций.

Эти папки являются общими. Они не принадлежат исключительно проекту:

  • Каждый проект, в который вы устанавливаете github-copilot, и каждая другая установка Apothem, указывающая эту папку, используют одну и ту же копию и записывают одни и те же файлы, поэтому порядок установки не имеет значения. ~/.agents/skills/ читают и несколько других инструментов; они перечислены в реестре окружений.
  • --project выбирает, какой файл инструкций записать и к какому проекту относится установка. Он не меняет место, куда попадают навыки.
  • Установка не добавляет в ваш репозиторий ни одного файла навыка или правила. Проект получает файл инструкций, файлы профилей помощников в .github/agents/, файл хуков .github/hooks/apothem.json, а также папку .apothem/, которую создаёт каждая установка в проект и в которой также лежат скрипты хуков.
  • Папки в домашнем каталоге записываются первыми. Если это не удаётся, например потому что папка на пути является ссылкой, ведущей за пределы вашего домашнего каталога (ссылка, остающаяся внутри него, разрешается), или в неё нельзя записать, установка останавливается с ошибкой до того, как в проекте что-либо изменится.
  • Папка навыка с именем навыка Apothem, которую Apothem не записывал, остаётся нетронутой, а установка выводит предупреждение с её именем. Переименуйте или переместите её, затем запустите apothem update. apothem verify завершается неудачей, пока это имя занято.
  • В сумме файлы занимают несколько мегабайт.

Установка выводит примечание с названиями папок, которые она записывает за пределами --project, а --dry-run их перечисляет.

Профили помощников

Copilot читает профиль помощника из <project>/.github/agents/<name>.agent.md согласно справочнику GitHub по этим профилям. Установка записывает в эту папку по одному файлу на каждого помощника Apothem. Она выполняет установку только для проекта и не записывает папку ~/.copilot/agents/.

Каждый файл сохраняет инструкции помощника без изменений и содержит следующие ключи фронтматтера:

КлючЧто записывает Apothem
name, descriptionИмя и описание помощника. Copilot требует описание.
toolsИнструменты, которые может использовать помощник, в виде списка псевдонимов инструментов Copilot, например ["read", "search", "execute"].

Ключ tools в Copilot — это список разрешённых псевдонимов, и в Copilot нет ключа, который запрещает инструмент. Поэтому разрешённые и запрещённые инструменты помощника объединяются в этот один список:

Псевдоним CopilotОхватываетЗаписывается для помощника, которому разрешён
readRead, NotebookReadRead
searchGrep, GlobGrep или Glob
editEdit, MultiEdit, Write, NotebookEditWrite, Edit или MultiEdit
executeBash, PowerShellBash или PowerShell
webWebSearch, WebFetchWebSearch или WebFetch
todoTodoWriteTodoWrite

У Copilot есть ещё один псевдоним — тот, который позволяет помощнику запускать других помощников; ни одному помощнику Apothem это не разрешено, поэтому он никогда не записывается. Псевдоним не включается, если помощнику запрещён любой инструмент, который он охватывает, потому что псевдоним позволил бы помощнику использовать этот инструмент. Инструмент без псевдонима (например Monitor) не включается. У инструмента с шаблоном, такого как Bash(git status), нет формы псевдонима: как разрешённый инструмент он не включается, а как запрещённый запрещает весь инструмент. Помощник, который не может редактировать файлы, сохраняет это ограничение: он никогда не получает edit. Если все инструменты в списке помощника отпадают, файл указывает tools: [], что не даёт помощнику никаких инструментов, а не опускает ключ, что дало бы ему все инструменты.

Установка не записывает ключ model, поэтому помощник использует модель по умолчанию, а также не записывает ни других ключей, которые документирует Copilot (target, disable-model-invocation, user-invocable, mcp-servers, metadata), ни ограничения числа ходов, ни ключей Apothem version, updated и portability.

Что нужно знать:

  • .github/agents/ — часть вашего репозитория. Коллеги и облачный сервис написания кода Copilot читают те же файлы, поэтому зафиксируйте их вместе с проектом или укажите .github/agents/ в .gitignore; Apothem не делает этот выбор за вас.
  • Облачный сервис написания кода не учитывает псевдонимы web и todo. Псевдоним web охватывает и веб-поиск, и загрузку страниц, поэтому citation-auditor, fact-checker и research-scout могут там читать и искать файлы, но не могут ни искать в вебе, ни загружать страницы.
  • Copilot CLI также читает .claude/agents/ репозитория, но не ~/.claude/agents/, поэтому установка для Claude Code не доходит до Copilot.
  • Ваш файл с именем помощника Apothem (<name>.agent.md) сохраняется в ~/.apothem/backups/, а затем заменяется. Удаление не возвращает его на место. Файлы с другими именами никогда не затрагиваются. Документация Copilot не сообщает, что происходит, когда в папке есть и <name>.md, и <name>.agent.md.
  • Apothem не подтвердил, предпочитает ли Copilot .github/agents/ или .claude/agents/ для одного имени, и как облачный сервис написания кода и VS Code обрабатывают ключ фронтматтера, которого нет в их списках.

Хуки

Copilot запускает хуки из файлов JSON в <project>/.github/hooks/ согласно справочнику по хукам Copilot. Установка записывает туда один файл, apothem.json (версия 1), с двумя хуками:

СобытиеЧто запускается
sessionStartНачальная загрузка сессии: метаданные сессии, индекс навыков, сводки памяти и планов и постоянная позиция, добавляемые в контекст модели.
postToolUse (каждый инструмент)Трекер упреждающего сжатия. Он подсчитывает активность и не более двух раз за цикл сжатия велит модели сохранить своё состояние или выполнить сжатие. В остальное время он молчит.

Оба добавляют контекст для модели. Ни один не блокирует ни вызов инструмента, ни сессию.

Apothem не регистрирует в Copilot защиту preToolUse. Для preToolUse Copilot читает только поля разрешений и переписанный ввод инструмента, но никогда не читает additionalContext (поле, через которое говорят защиты Apothem). Защита, зарегистрированная там, стоила бы запуска процесса при каждом вызове инструмента и ничего бы не доставляла, поэтому защиты записи, редактирования и оболочки, проверка AskUserQuestion и протокол завершения сессии остаются в инструментах, которые их доставляют. Хуки используют имена событий Copilot в camelCase, потому что справочник перечисляет поля вывода для них; читает ли Copilot additionalContext из события в PascalCase, не документировано.

Куда попадают файлы

ФайлЧто он содержит
<project>/.github/hooks/apothem.jsonРегистрации двух хуков. Apothem владеет этим единственным файлом.
<project>/.apothem/support/github-copilot/hooks/Скрипт-диспетчер, его вспомогательные модули и файлы сообщений.

У каждого хука есть команда bash и команда powershell. Они запускают один и тот же диспетчер; у команды powershell впереди стоит оператор вызова (&), который нужен PowerShell перед путём программы в кавычках. Команда bash выглядит так, с вашим интерпретатором и путём проекта на месте двух путей:

"/path/to/python" "/path/to/project/.apothem/support/github-copilot/hooks/dispatch.py" --contract copilot sessionStart

--contract copilot заставляет диспетчер читать ввод Copilot в camelCase и выводить {"additionalContext": ...} — именно это Copilot читает для этих двух событий.

Фиксируйте с осторожностью; облачный агент. .github/hooks/ — часть вашего репозитория, и облачный сервис написания кода Copilot читает её. Команды называют интерпретатор, который Apothem нашёл при запуске, и абсолютный путь проекта, а скрипты находятся в .apothem/, которую игнорирует фрагмент .gitignore проекта. На любой другой машине и в облачном сервисе (который запускает только команду bash) команда не находит, что запускать. Copilot записывает сбой в журнал, и работа продолжается, потому что неудавшийся хук sessionStart или postToolUse не блокирует. Добавьте .github/hooks/apothem.json в .gitignore или фиксируйте его только для команды с такой же структурой. Установка не редактирует .gitignore и выводит это как примечание.

Ваши собственные хуки. Ваши файлы хуков в .github/hooks/ никогда не читаются и не изменяются. Хук, который вы добавили в сам apothem.json, остаётся: обновление и удаление заменяют или удаляют только записи, команда которых запускает диспетчер Apothem (.apothem/support/github-copilot/hooks/dispatch.py с --contract copilot, под каким бы путём проекта он ни был записан). Ваш хук, который лишь совпадает по имени или запускает python -m apothem.conformity.gate, никогда не принимается за хук Apothem. Файл, который не является допустимым JSON, сохраняется в ~/.apothem/backups/ и заменяется.

Пути, которые оболочка прочитала бы неверно. Путь проекта или интерпретатора, содержащий $, обратную кавычку, двойную кавычку или обратную косую черту, отклоняется до того, как что-либо записано: внутри команды в кавычках он запустил бы другой файл или сломал бы JSON, в который записана команда. Ошибка называет путь; переместите или переименуйте проект и запустите установку снова. Пробел или апостроф в пути допустимы.

Отключение хуков. Задайте APOTHEM_HOOKS_DISABLE=1 в окружении, в котором работает Copilot, чтобы заглушить хуки Apothem, или задайте "disableAllHooks": true в apothem.json, что пропускает этот один файл.

Более старый контракт локальных хуков VS Code (события с полями command, windows, linux и osx) — это другой формат, на который файл версии 1 не нацелен.

Сопоставление профиля с нативной конфигурацией

Адаптер читает общий профиль Apothem и рендерит файл инструкций Copilot для всего репозитория при каждом запуске apothem install или apothem update. Общий профиль является источником истины; для локальных правок сгенерированного файла в проекте создаётся резервная копия, прежде чем следующая синхронизация заменит содержимое, управляемое Apothem.

Внутри блока Apothem раздел, отрендеренный из вашего профиля (оператор, предпочтения, пользовательские правила, включённые по выбору варианты поведения, имена серверов MCP), идёт первым, перед общим текстом управления. GitHub отмечает, что более короткие файлы инструкций с большей вероятностью обрабатываются ревью кода целиком (Настройка ревью кода), поэтому часть, относящаяся именно к вам, открывает файл.

Заметки о совместимости

GitHub Copilot не предоставляет файлового пути для глобальных пользовательских инструкций, которым мог бы управлять этот адаптер. Apothem нацеливается на документированный файл инструкций в области проекта и оставляет пользовательские настройки уровня IDE во владении оператора. Он записывает один файл хуков, .github/hooks/apothem.json, и никаких других файлов в .github/hooks/.

В репозитории Apothem .github/copilot-instructions.md — один из голосов среди поверхностей инструкций для ассистентов этого репозитория. В чекауте этого репозитория проверка многоповерхностной согласованности шлюза соответствия сравнивает общие утверждения в AGENTS.md, CLAUDE.md и .github/copilot-instructions.md. Она сообщает об общем утверждении, которое пропускает один из этих трёх файлов, и о файле, который противоречит утверждению, сделанному в AGENTS.md. Проверка не читает файл инструкций, который Apothem записывает в ваш проект. По умолчанию шлюз рекомендательный: он сообщает о находках и завершается с кодом 0.

GitHub Copilot указывает ~/.agents/skills/ среди своих мест для личных навыков, поэтому навыки, которые записывает установка, находятся на вашей машине, и Copilot может их загрузить. Поверхности, работающие на GitHub, — облачный сервис написания кода и ревью кода — работают в другом месте и не видят вашу домашнюю папку, поэтому файл инструкций сам несёт эти дисциплины. Apothem не подтвердил, как Copilot обрабатывает ключ заголовка SKILL.md, которого нет в его списке; навыки содержат user-invocable, disable-model-invocation, allowed-tools, argument-hint и словарь metadata.

Проверка

apothem verify --harness github-copilot --project /path/to/project

Команда verify подтверждает, что:

  1. Нативная конфигурация существует по ожидаемому пути.
  2. Каждая управляемая цель существует, включая папку .github/agents/; управляемые файлы не пусты, а конфигурации JSON или YAML разбираются. Добавьте --profile PATH, чтобы дополнительно подтвердить, что установленные файлы соответствуют этому профилю. Для .github/agents/ проверяется, что папка существует, а не что в ней есть файл каждого помощника; команда apothem diff --harness github-copilot --project /path/to/project перечисляет файлы помощников, которые отсутствуют или устарели. Файл хуков .github/hooks/apothem.json должен существовать, быть непустым, разбираться как JSON и содержать запись, запускающую диспетчер Apothem, а скрипты хуков должны находиться в .apothem/support/github-copilot/hooks/. Проверка не запускает хуки.
  3. Каждая папка навыка Apothem на месте и содержит SKILL.md, какая бы установка её ни записала, и ни одна папка навыка с именем Apothem не принадлежит тому, что Apothem не записывал. Неудачная проверка называет отсутствующие или чужие папки.
  4. Процедура проверки, специфичная для адаптера, сообщает об успехе.

Обновление

apothem update --harness github-copilot --project /path/to/project

Повторно выводит файл инструкций проекта из текущего состояния общего профиля.

Обновление также перезаписывает каждую папку навыка, файлы которой отличаются от текущих. Если вы устанавливали более ранним выпуском, который не записывал навыки, обновление их добавляет. Оно перезаписывает файлы профилей помощников, которые отличаются от текущих, и добавляет отсутствующие. Оно также обновляет скрипты хуков и хуки Apothem в .github/hooks/apothem.json, сохраняя любой ваш хук в этом файле.

Удаление

apothem uninstall --harness github-copilot --project /path/to/project

Удаляет блок Apothem из <project>/.github/copilot-instructions.md и сохраняет любой текст за его пределами. Файл удаляется, только если в нём больше ничего не остаётся. Перед изменением копия файла с отметкой времени сохраняется в ~/.apothem/backups/. YAML общего профиля и движок Apothem не затрагиваются.

Удаление также удаляет файлы профилей помощников, которые оно записало в <project>/.github/agents/, и сохраняет любой другой файл там; папка удаляется, если остаётся пустой. Оно удаляет хуки Apothem из <project>/.github/hooks/apothem.json, распознавая их по пути диспетчера в их команде, поэтому работает без записи об установке, и сохраняет любой ваш хук в этом файле. Файл удаляется, когда в нём не остаётся ничего другого, а ваши другие файлы хуков не затрагиваются. Если в файле есть комментарии, которые удаление не может прочитать, оно оставляет файл как есть и сообщает о хуках как о пропущенных, с причиной; удалите записи Apothem вручную. Скрипты хуков в <project>/.apothem/support/github-copilot/hooks/ тоже удаляются. Оно удаляет папки навыков, которые записало в ~/.agents/skills/, а также правила и шаблоны в ~/.config/apothem/, но только когда никакая другая установка Apothem их больше не использует. Их может использовать другой проект или другой инструмент, разделяющий эту папку. В таком случае удаление сохраняет папки, выводит, какая установка их использует, и их удаляет последнее удаление. Файлы, которые вы добавили в эти папки, остаются, а папка, оставшаяся пустой, удаляется. Перед удалением каждая папка сохраняется в резервную копию в ~/.apothem/backups/.

Шлюз соответствия

python -m apothem.conformity.gate --all .

Прогон --all охватывает автономные валидаторы. Он не запускает проверку согласованности нескольких поверхностей, описанную в разделе «Заметки о совместимости». Чтобы запустить эту проверку по имени в чекауте:

python -m apothem.conformity.gate --check multi-surface-coherence-grep AGENTS.md

Устранение неполадок

СимптомИсправление
Файл конфигурации не найденПовторно запустите apothem install --harness github-copilot --project /path/to/project
Проверка не пройденаЗапустите apothem update --harness github-copilot --project /path/to/project, затем проверьте снова
Copilot не показывает ни одного помощника ApothemПроверьте, что в .github/agents/ есть файлы .agent.md и что они находятся в ветке, которую вы используете. Запустите apothem diff --harness github-copilot --project /path/to/project: ожидающая строка для папки .github/agents означает, что файлы помощников отсутствуют или устарели, поэтому запустите apothem update --harness github-copilot --project /path/to/project. apothem verify этого не проверяет: проверка проходит, когда .github/agents/ существует, даже если в ней нет ни одного файла помощника
Хуки Apothem не запускаютсяПроверьте, что .github/hooks/apothem.json находится в ветке, которую вы используете, и что .apothem/support/github-copilot/hooks/ существует на этой машине; команды называют интерпретатор и путь проекта той машины, на которой выполнялась установка, поэтому запустите apothem install --harness github-copilot --project /path/to/project на каждой машине. Облачный сервис написания кода Copilot запускает только команду bash, а интерпретатора по этому пути там нет
apothem verify называет отсутствующую папку навыкаЗапустите apothem install --harness github-copilot --project /path/to/project; это восстановит папку
Установка или обновление предупреждает, что пропустило папку навыкаПапка с именем навыка Apothem уже существует в папке навыков, и Apothem её не записывал. Переименуйте или переместите её, затем запустите apothem update
Установка останавливается, не изменив проектЗапись в вашем домашнем каталоге не удалась. Прочитайте ошибку, исправьте названную в ней папку (ссылку, ведущую за пределы вашего домашнего каталога, файл на месте папки или папку только для чтения) и установите снова
Неожиданное содержимое конфигурацииПроверьте ~/.config/apothem/profile.yaml или --profile PATH, затем повторно запустите apothem update --harness github-copilot --project /path/to/project

Параметры конфигурации

ФлагПо умолчаниюОписание
--dry-runfalseПредпросмотр установки без записи файлов.

См. также

On this page