Skip to content
Apothem
Harnesses

GitHub Copilot

Adaptador de harness do Apothem para o GitHub Copilot (GA).

Fornecedor: GitHub / Microsoft Nome de instalação: github-copilot Status: GA Configuração nativa: <project>/.github/copilot-instructions.md

Instalação

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

O adaptador deriva o arquivo de instruções do projeto a partir do seu perfil compartilhado e da superfície compartilhada de regras e governança do Apothem, grava os auxiliares do Apothem como perfis de auxiliar do Copilot no projeto (consulte Perfis de auxiliar) e registra dois hooks (consulte Hooks).

Ele também grava as skills do Apothem, e as regras e templates que elas citam, no seu diretório pessoal, antes de tocar no projeto (consulte Arquivos fora do projeto).

Arquivos gravados:

  • <project>/.github/copilot-instructions.md, o arquivo de instruções.
  • <project>/.github/agents/<name>.agent.md para cada auxiliar do Apothem, no projeto.
  • <project>/.github/hooks/apothem.json, o arquivo de hook, no projeto. Seus próprios arquivos de hook nessa pasta não são tocados.
  • <project>/.apothem/support/github-copilot/hooks/, os scripts de hook, no projeto.
  • ~/.agents/skills/<name>/SKILL.md para cada skill e comando do Apothem, no seu diretório pessoal.
  • ~/.config/apothem/rules/ e ~/.config/apothem/templates/, no seu diretório pessoal.

Arquivos fora do projeto

A instalação também grava as skills do Apothem no seu diretório pessoal, antes de alterar qualquer coisa no projeto:

PastaO que o Apothem grava ali
~/.agents/skills/Uma pasta com um SKILL.md para cada skill do Apothem, e uma para cada comando do Apothem (um comando se torna uma skill de mesmo nome).
~/.config/apothem/rules/, ~/.config/apothem/templates/As regras e os templates aos quais as skills e o arquivo de instruções se referem.

Essas pastas são compartilhadas. Elas não são privadas do projeto:

  • Todo projeto em que você instala github-copilot, e toda outra instalação do Apothem que nomeia a pasta, usa a mesma cópia e grava os mesmos arquivos, então a ordem em que você instala não importa. Várias outras ferramentas também leem ~/.agents/skills/; o registro de harnesses as lista.
  • --project escolhe o arquivo de instruções a gravar e a qual projeto a instalação pertence. Ele não muda para onde vão as skills.
  • A instalação não adiciona nenhum arquivo de skill ou de regra ao seu repositório. O projeto recebe o arquivo de instruções, os arquivos de perfil de auxiliar em .github/agents/, o arquivo de hook .github/hooks/apothem.json, além da pasta .apothem/ que toda instalação de projeto cria, que também guarda os scripts de hook.
  • As pastas do diretório pessoal são gravadas primeiro. Se isso falhar, por exemplo porque uma pasta no caminho é um link que sai do seu diretório pessoal (um link que permanece dentro dele é seguido) ou não pode ser gravada, a instalação para com o erro antes que qualquer coisa no projeto mude.
  • Uma pasta de skill com o nome de uma skill do Apothem que o Apothem não gravou é deixada intacta, e a instalação exibe um aviso que a nomeia. Renomeie-a ou mova-a e depois execute apothem update. apothem verify falha enquanto esse nome estiver ocupado.
  • Os arquivos somam alguns megabytes.

A instalação exibe uma nota que nomeia as pastas que ela grava fora de --project, e --dry-run as lista.

Perfis de auxiliar

O Copilot lê um perfil de auxiliar de <project>/.github/agents/<name>.agent.md, conforme a referência do GitHub para esses perfis. A instalação grava um arquivo por auxiliar do Apothem nessa pasta. Ela instala apenas para o projeto e não grava nenhuma pasta ~/.copilot/agents/.

Cada arquivo mantém as instruções do auxiliar inalteradas e traz estas chaves de frontmatter:

ChaveO que o Apothem grava
name, descriptionO nome e a descrição do auxiliar. O Copilot exige a descrição.
toolsAs ferramentas que o auxiliar pode usar, como uma lista de aliases de ferramentas do Copilot, por exemplo ["read", "search", "execute"].

A chave tools do Copilot é uma lista de permissões de aliases, e ele não tem nenhuma chave que negue uma ferramenta. Assim, as ferramentas permitidas e as ferramentas negadas do auxiliar são combinadas em uma única lista:

Alias do CopilotCobreGravado para um auxiliar que tem permissão para
readRead, NotebookReadRead
searchGrep, GlobGrep ou Glob
editEdit, MultiEdit, Write, NotebookEditWrite, Edit ou MultiEdit
executeBash, PowerShellBash ou PowerShell
webWebSearch, WebFetchWebSearch ou WebFetch
todoTodoWriteTodoWrite

O Copilot tem mais um alias, aquele que permite a um auxiliar iniciar outros auxiliares; nenhum auxiliar do Apothem tem permissão para fazer isso, então ele nunca é gravado. Um alias é deixado de fora quando o auxiliar nega qualquer ferramenta que ele cobre, porque o alias permitiria ao auxiliar usar essa ferramenta. Uma ferramenta sem alias (por exemplo Monitor) é deixada de fora. Uma ferramenta com um padrão, como Bash(git status), não tem forma de alias: como ferramenta permitida ela é deixada de fora, e como ferramenta negada ela nega a ferramenta inteira. Um auxiliar que não pode editar arquivos mantém esse limite: ele nunca recebe edit. Se toda ferramenta da lista de um auxiliar for deixada de fora, o arquivo diz tools: [], o que não dá nenhuma ferramenta ao auxiliar, em vez de omitir a chave, o que lhe daria todas as ferramentas.

A instalação não grava nenhuma chave model, então um auxiliar usa o modelo padrão, nem nenhuma das outras chaves que o Copilot documenta (target, disable-model-invocation, user-invocable, mcp-servers, metadata), um limite de turnos ou as chaves version, updated e portability do Apothem.

Pontos a saber:

  • .github/agents/ faz parte do seu repositório. Os colegas de equipe e o serviço de codificação na nuvem do Copilot leem os mesmos arquivos, então faça commit deles com o projeto ou liste .github/agents/ no .gitignore; o Apothem não escolhe por você.
  • O serviço de codificação na nuvem não respeita os aliases web e todo. O alias web cobre tanto a busca na web quanto a busca de páginas, então citation-auditor, fact-checker e research-scout podem ler e pesquisar arquivos ali, mas não podem pesquisar na web nem buscar páginas.
  • A Copilot CLI também lê o .claude/agents/ do repositório, mas não ~/.claude/agents/, então a instalação do Claude Code não chega ao Copilot.
  • Um arquivo seu nomeado como um auxiliar do Apothem (<name>.agent.md) é salvo em ~/.apothem/backups/ e depois substituído. A desinstalação não o restaura. Arquivos com outros nomes nunca são tocados. A documentação do Copilot não diz o que acontece quando a pasta contém tanto <name>.md quanto <name>.agent.md.
  • O Apothem não confirmou se o Copilot prefere .github/agents/ ou .claude/agents/ para um mesmo nome, nem como o serviço de codificação na nuvem e o VS Code tratam uma chave de frontmatter que eles não listam.

Hooks

O Copilot executa hooks a partir de arquivos JSON em <project>/.github/hooks/, conforme a referência de hooks do Copilot. A instalação grava um arquivo ali, apothem.json (versão 1), com dois hooks:

EventoO que é executado
sessionStartO bootstrap da sessão: metadados da sessão, o índice de skills, os resumos de memória e de plano e a postura permanente, adicionados ao contexto do modelo.
postToolUse (todas as ferramentas)O rastreador de compactação proativa. Ele conta a atividade e, no máximo duas vezes por ciclo de compactação, diz ao modelo para salvar seu estado ou compactar. Caso contrário, fica em silêncio.

Ambos adicionam contexto para o modelo. Nenhum deles bloqueia uma chamada de ferramenta ou uma sessão.

O Apothem não registra nenhuma proteção preToolUse no Copilot. Para preToolUse o Copilot lê apenas campos de permissão e uma entrada de ferramenta reescrita, nunca additionalContext (o campo pelo qual as proteções do Apothem se comunicam). Uma proteção registrada ali custaria o início de um processo a cada chamada de ferramenta e não entregaria nada, então as proteções de gravação, edição e shell, a verificação de AskUserQuestion e o protocolo de fim de sessão permanecem nas ferramentas que os entregam. Os hooks usam os nomes de evento em camelCase do Copilot, porque a referência lista os campos de saída para esses; se o Copilot lê additionalContext de um evento em PascalCase não está documentado.

Para onde vão os arquivos

ArquivoO que ele contém
<project>/.github/hooks/apothem.jsonOs dois registros de hook. O Apothem é dono deste único arquivo.
<project>/.apothem/support/github-copilot/hooks/O script despachante, seus auxiliares e seus arquivos de mensagem.

Cada hook tem um comando bash e um comando powershell. Eles executam o mesmo despachante; o powershell tem um operador de chamada (&) na frente, do qual o PowerShell precisa antes de um caminho de programa entre aspas. Um comando bash tem esta aparência, com o seu interpretador e o caminho do seu projeto no lugar dos dois caminhos:

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

--contract copilot faz o despachante ler a entrada em camelCase do Copilot e imprimir {"additionalContext": ...}, que é o que o Copilot lê para esses dois eventos.

Faça commit com cuidado, e o agente na nuvem. .github/hooks/ faz parte do seu repositório, e o serviço de codificação na nuvem do Copilot o lê. Os comandos nomeiam o interpretador que o Apothem encontrou quando foi executado e o caminho absoluto do projeto, e os scripts estão em .apothem/, que o snippet de .gitignore de um projeto ignora. Em qualquer outra máquina, e no serviço na nuvem (que executa apenas o comando bash), o comando não encontra nada para executar. O Copilot registra a falha e a execução continua, porque um hook sessionStart ou postToolUse com falha não bloqueia. Adicione .github/hooks/apothem.json ao .gitignore, ou faça commit dele somente para uma equipe que compartilha o mesmo layout. A instalação não edita o .gitignore e exibe isso como uma nota.

Seus próprios hooks. Arquivos de hook seus em .github/hooks/ nunca são lidos nem alterados. Um hook que você adiciona ao próprio apothem.json permanece: uma atualização e uma desinstalação substituem ou removem apenas as entradas cujo comando executa o despachante do Apothem (.apothem/support/github-copilot/hooks/dispatch.py com --contract copilot, seja qual for o caminho de projeto sob o qual foi gravada). Um hook seu que apenas compartilha o nome, ou que executa python -m apothem.conformity.gate, nunca é tomado pelo do Apothem. Um arquivo que não é JSON válido é salvo em ~/.apothem/backups/ e substituído.

Caminhos que o shell leria errado. Um caminho de projeto ou de interpretador que contém $, um acento grave, aspas duplas ou uma barra invertida é recusado antes que qualquer coisa seja gravada: dentro do comando entre aspas ele executaria um arquivo diferente, ou quebraria o JSON no qual o comando é gravado. O erro nomeia o caminho; mova ou renomeie o projeto e execute a instalação novamente. Um espaço ou um apóstrofo em um caminho não causa problema.

Desativando os hooks. Defina APOTHEM_HOOKS_DISABLE=1 no ambiente em que o Copilot é executado para silenciar os hooks do Apothem, ou defina "disableAllHooks": true em apothem.json, o que ignora esse único arquivo.

O contrato de hook Local mais antigo do VS Code (eventos com os campos command, windows, linux e osx) é um formato diferente que um arquivo da versão 1 não tem como alvo.

Mapeamento do perfil para a configuração nativa

O adaptador lê o perfil compartilhado do Apothem e renderiza o arquivo de instruções do Copilot para todo o repositório a cada execução de apothem install ou apothem update. O perfil compartilhado é a fonte da verdade; as edições locais do projeto no arquivo gerado recebem backup antes que a próxima sincronização substitua o conteúdo gerenciado pelo Apothem.

Dentro do bloco do Apothem, a seção renderizada a partir do seu perfil (operador, preferências, regras personalizadas, comportamentos ativados por opção, nomes de servidores MCP) vem primeiro, antes do texto de governança compartilhado. O GitHub observa que arquivos de instruções mais curtos têm mais probabilidade de ser processados por inteiro pela revisão de código (Personalização da revisão de código), então a parte específica para você abre o arquivo.

Notas de compatibilidade

O GitHub Copilot não expõe um caminho de instruções globais do usuário baseado em arquivos para que este adaptador gerencie. O Apothem mira o arquivo de instruções com escopo de projeto documentado e deixa as configurações de usuário no nível da IDE sob a propriedade do operador. Ele grava um arquivo de hook, .github/hooks/apothem.json, e nenhum outro arquivo em .github/hooks/.

Dentro do repositório do Apothem, .github/copilot-instructions.md é uma voz entre as superfícies de instruções de assistente desse repositório. Em um checkout desse repositório, a verificação de coerência multissuperfície do conformity gate compara as afirmações compartilhadas em AGENTS.md, CLAUDE.md e .github/copilot-instructions.md. Ela relata uma afirmação compartilhada que um dos três arquivos omite e um arquivo que contradiz uma afirmação feita por AGENTS.md. A verificação não lê o arquivo de instruções que o Apothem grava no seu projeto. O gate é consultivo por padrão: ele relata os achados e encerra com 0.

O GitHub Copilot lista ~/.agents/skills/ entre seus locais de skills pessoais, então as skills que a instalação grava estão na sua máquina para o Copilot carregar. As superfícies que rodam no GitHub, o serviço de codificação na nuvem e a revisão de código, rodam em outro lugar e não veem o seu diretório pessoal, e é por isso que o arquivo de instruções traz as próprias disciplinas. O Apothem não confirmou como o Copilot trata uma chave de cabeçalho de SKILL.md que ele não lista; as skills trazem user-invocable, disable-model-invocation, allowed-tools, argument-hint e um mapa metadata.

Verificação

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

O comando verify confirma que:

  1. A configuração nativa existe no caminho esperado.
  2. Cada destino gerenciado existe, incluindo a pasta .github/agents/; os arquivos gerenciados não estão vazios, e as configurações JSON ou YAML podem ser analisadas. Adicione --profile PATH para também confirmar que os arquivos instalados correspondem a esse perfil. Para .github/agents/ a verificação é que a pasta existe, não que cada arquivo de auxiliar esteja nela; o comando apothem diff --harness github-copilot --project /path/to/project lista os arquivos de auxiliar que estão ausentes ou desatualizados. O arquivo de hook .github/hooks/apothem.json deve existir, não estar vazio, ser analisado como JSON e conter uma entrada que executa o despachante do Apothem, e os scripts de hook devem estar em .apothem/support/github-copilot/hooks/. A verificação não executa os hooks.
  3. Toda pasta de skill do Apothem está no lugar com um SKILL.md, seja qual for a instalação que a gravou, e nenhuma pasta de skill com um nome do Apothem pertence a algo que o Apothem não gravou. Uma verificação com falha nomeia as pastas ausentes ou alheias.
  4. A rotina de verificação específica do adaptador informa sucesso.

Atualização

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

Deriva novamente o arquivo de instruções do projeto a partir do estado atual do perfil compartilhado.

A atualização também regrava qualquer pasta de skill cujos arquivos difiram dos atuais. Se você instalou com uma versão anterior que não gravava skills, a atualização as adiciona. Ela regrava os arquivos de perfil de auxiliar que diferem dos atuais e adiciona os que estiverem ausentes. Ela também atualiza os scripts de hook e os hooks do Apothem em .github/hooks/apothem.json, mantendo qualquer hook seu nesse arquivo.

Desinstalação

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

Remove o bloco do Apothem de <project>/.github/copilot-instructions.md e mantém qualquer texto fora dele. O arquivo só é excluído quando nada mais resta nele. Antes da alteração, uma cópia do arquivo com carimbo de data e hora é salva sob ~/.apothem/backups/. O YAML do perfil compartilhado e o motor do Apothem não são afetados.

A desinstalação também remove os arquivos de perfil de auxiliar que gravou em <project>/.github/agents/ e mantém qualquer outro arquivo ali; a pasta é removida quando fica vazia. Ela remove os hooks do Apothem de <project>/.github/hooks/apothem.json, reconhecendo-os pelo caminho do despachante no seu comando, então funciona sem um registro de instalação, e mantém qualquer hook seu nesse arquivo. O arquivo é excluído quando nada mais resta nele, e seus outros arquivos de hook não são tocados. Se o arquivo tiver comentários que a desinstalação não consegue ler, ela deixa o arquivo como está e informa os hooks como ignorados, com o motivo; remova as entradas do Apothem manualmente. Os scripts de hook em <project>/.apothem/support/github-copilot/hooks/ também são removidos. Ela remove as pastas de skill que gravou em ~/.agents/skills/ e as regras e templates em ~/.config/apothem/, mas somente quando nenhuma outra instalação do Apothem ainda as usa. Outro projeto, ou outra ferramenta que compartilha a pasta, pode usá-las. Nesse caso a desinstalação mantém as pastas, exibe qual instalação as usa, e a última desinstalação as remove. Os arquivos que você adicionou a essas pastas permanecem, e uma pasta que fica vazia é removida. Cada pasta recebe backup em ~/.apothem/backups/ antes de ser removida.

Conformity gate

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

A execução com --all cobre os validadores independentes. Ela não executa a verificação de coerência multissuperfície descrita em Notas de compatibilidade. Para executar essa verificação pelo nome em um checkout:

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

Solução de problemas

SintomaCorreção
Arquivo de configuração não encontradoExecute novamente apothem install --harness github-copilot --project /path/to/project
Falha na verificaçãoExecute apothem update --harness github-copilot --project /path/to/project e depois verifique novamente
O Copilot não lista nenhum dos auxiliares do ApothemVerifique se .github/agents/ contém os arquivos .agent.md e se eles estão no branch que você está usando. Execute apothem diff --harness github-copilot --project /path/to/project: uma linha pendente para a pasta .github/agents significa que há arquivos de auxiliar ausentes ou desatualizados, então execute apothem update --harness github-copilot --project /path/to/project. apothem verify não é um teste disso: ele passa quando .github/agents/ existe, mesmo sem nenhum arquivo de auxiliar nela
Os hooks do Apothem não são executadosVerifique se .github/hooks/apothem.json está no branch que você está usando e se .apothem/support/github-copilot/hooks/ existe nesta máquina; os comandos nomeiam o interpretador e o caminho de projeto da máquina que executou a instalação, então execute apothem install --harness github-copilot --project /path/to/project em cada máquina. O serviço de codificação na nuvem do Copilot executa apenas o comando bash, sem nenhum interpretador nesse caminho
apothem verify nomeia uma pasta de skill ausenteExecute apothem install --harness github-copilot --project /path/to/project; ele restaura a pasta
Uma instalação ou atualização avisa que ignorou uma pasta de skillUma pasta com o nome de uma skill do Apothem já existe na pasta de skills e o Apothem não a gravou. Renomeie-a ou mova-a e depois execute apothem update
Uma instalação para antes de alterar o projetoUma gravação no seu diretório pessoal falhou. Leia o erro, corrija a pasta que ele nomeia (um link que sai do seu diretório pessoal, um arquivo onde deveria haver uma pasta ou uma pasta somente leitura) e instale novamente
Conteúdo de configuração inesperadoVerifique ~/.config/apothem/profile.yaml ou --profile PATH e depois execute novamente apothem update --harness github-copilot --project /path/to/project

Ajustes de configuração

SinalizadorPadrãoDescrição
--dry-runfalsePré-visualiza a instalação sem gravar arquivos.

Veja também

On this page