Trabalhar com a modernização do GitHub Copilot

Este artigo aborda como se comunicar com o agente de modernização do GitHub Copilot, ensiná-lo suas preferências, corrigir erros, revisar seu trabalho e gerenciar atualizações em várias sessões.

GitHub Copilot é um colaborador interativo de modernização que faz perguntas, propõe estratégias, adapta-se ao seu feedback e aprende com suas preferências ao longo do tempo. Para obter os melhores resultados, forneça contexto ao agente. Quanto mais ele souber sobre suas metas, restrições e preferências, melhor será o desempenho.

❌ Vague — the agent has to guess
"Upgrade my project"

✅ Specific — the agent knows exactly what you need
"Upgrade the WebAPI project to .NET 10. We need to keep backward
compatibility with our existing REST clients, and we can't change the
public API surface."

Dica

Você não precisa dar todo o contexto antecipadamente. O agente faz perguntas de acompanhamento quando precisa de mais informações.

Iniciar uma conversa

  1. Abra Copilot Chat no VS Code, Visual Studio ou Copilot CLI.
  2. Selecione o agente de modernização GitHub Copilot para .NET no seletor de agente ou digite a menção correta do agente para seu ambiente: @modernize-dotnet no VS Code e na CLI Copilot ou @Modernize em Visual Studio.
  3. Descreva o que você deseja realizar em linguagem natural.

O que dizer

A linguagem natural funciona. Experimente estes exemplos:

O que você quer O que dizer
Atualizar uma solução completa "Atualizar minha solução para .NET 10"
Atualizar uma tecnologia específica "Ajude-me a atualizar do EF6 para o EF Core"
Veja o que está disponível "Quais cenários estão disponíveis?"
Atualizar um projeto primeiro "Atualize primeiro o projeto de API e, em seguida, a biblioteca compartilhada"
Entender o estado atual "Qual é o status atual da minha atualização?"

O que acontece a seguir

Quando você inicia uma conversa, o agente verifica se há trabalho de atualização existente em seu workspace:

  • Se não houver nenhum trabalho existente, o agente começará de novo, normalmente começando com uma avaliação da solução.
  • Se houver trabalho existente em andamento, o agente continua de onde você parou e mostra o status atual, como "3 de 8 tarefas concluídas".

Escolher um modo de fluxo

O agente dá suporte a dois modos de fluxo que controlam quanto tempo o agente espera pela sua resposta.

Modo automático

No modo automático, o agente funciona por meio dos estágios (avaliação, planejamento, execução) sem pausar para aprovação em cada limite. O agente ainda para em bloqueios genuínos ou quando precisa de uma decisão que só você pode tomar.

Melhor para usuários experientes, atualizações simples e pequenas soluções.

Modo guiado

No modo guiado, o agente pausa em cada limite de estágio para sua revisão:

  • Após a avaliação, antes de criar o plano.
  • Após o planejamento, antes de executar as tarefas.
  • Antes dos detalhamentos de tarefas complexas.
  • Nos principais pontos de decisão em que existem várias abordagens válidas.

Melhor para usuários iniciantes, soluções complexas e quando você deseja aprender o processo.

Alternar modos no meio da sessão

Alterne livremente entre os modos a qualquer momento:

Para alternar para O que dizer
Modo guiado "Pausar" ou "Alternar para o modo guiado"
Modo automático "Continuar" ou "Ir em frente"

Dica

Comece com o modo guiado para sua primeira atualização. O modo guiado é a melhor maneira de aprender como o agente pensa e quais decisões ele toma. Alterne para o modo automático quando estiver confortável.

Ensinar o agente

O agente aprende com você. O agente salva suas correções, preferências e instruções na pasta de estado de atualização scenario-instructions.md. Essas preferências persistem entre as sessões.

Corrigir erros

Quando o agente tomar uma decisão com a qual você discorda, diga ao agente:

You: "Actually, don't use Newtonsoft.Json — we're standardizing on System.Text.Json."
Agent: "Got it. I'll use System.Text.Json for all serialization going forward.
        I've saved this as a preference."

O agente atualiza scenario-instructions.md e não fará a mesma escolha novamente, mesmo em uma sessão futura.

Definir preferências

Diga proativamente ao agente como você gosta das coisas feitas:

You: "Always use bottom-up strategy for this solution — upgrade leaf projects first."
Agent: "Noted. I'll use a bottom-up upgrade strategy, starting with projects that
        have no internal dependencies and working up to the top-level projects."

Fornecer instruções específicas à tarefa

Às vezes, uma preferência só se aplica a uma tarefa específica:

You: "For this task, skip the test validation — the tests are broken for a known
      reason and we'll fix them separately."
Agent: "Understood. I'll skip test validation for this task only."

O que o agente salva

O scenario-instructions.md arquivo é organizado em seções claras:

Seção O que contém Exemplo
Preferências do Usuário (Técnico) Opções de pacote, decisões de estrutura, padrões de codificação "Use System.Text.Json, não Newtonsoft"
Preferências do usuário (estilo de execução) Como o agente funciona "Sempre use a estratégia de baixo para cima"
Log de decisões de chave Decisões importantes e sua lógica "Escolha o EF Core em vez do Dapper porque..."
Instruções personalizadas por tarefa Sobrecargas específicas de tarefas "Ignorar testes para a tarefa 3.1"

Dica

Edite também diretamente scenario-instructions.md. É um arquivo markdown em .github/upgrades/{scenarioId}/. O agente lê o arquivo no início de cada interação.

Fazer correções no meio da sessão

O agente lida com interrupções normalmente e não perde o controle de onde está ou do que estava fazendo.

Pausar e revisar

You: "Wait, stop — let me review that change first."
Agent: "Here's what I was about to do: [describes planned changes].
        Would you like me to proceed, or adjust the approach?"

Redirecionar

You: "Actually, let's do Project B before Project A — it has fewer dependencies."
Agent: "Good call. I'll reorder the tasks and start with Project B."

Desfazer

You: "That last change broke the build. Can we revert it?"
Agent: "I'll revert the last commit (abc1234: 'Migrate auth middleware').
        Reverting now."

Reverta também commits usando comandos Git padrão. O agente grava mensagens de confirmação claras e descritivas para que você saiba exatamente o que cada confirmação mudou.

Fazer perguntas no meio do fluxo

Fazer perguntas não inviabiliza o fluxo de trabalho:

You: "Why did you choose to migrate the data layer before the API controllers?"
Agent: "The API controllers depend on the data layer interfaces. By migrating
        the data layer first, we avoid temporary compilation errors in the
        controllers and can validate each layer independently."

Examinar o trabalho do agente

O agente fornece várias maneiras de revisar seu trabalho.

Controle do código-fonte

O agente sugere trabalhar em uma ramificação separada e confirma as alterações à medida que trabalha. Examine as alterações do agente com comandos Git padrão:

git log --oneline -10
git diff main..<agent-branch>

Arquivos de fluxo de trabalho

O agente mantém vários arquivos em .github/upgrades/{scenarioId}/ que oferecem visibilidade total.

Arquivo O que ele mostra
tasks.md Visão geral do progresso visual com todas as tarefas, indicadores de status (✅ concluídos, 🔄 em andamento, ⬜ pendentes) e uma barra de progresso
execution-log.md Trilha de auditoria completa e cronológica de cada ação realizada pelo agente, quando ocorreu e o que aconteceu.
assessment.md A análise inicial da sua solução, incluindo dependências, alterações que quebram a compatibilidade e complexidade da atualização.
scenario-instructions.md Suas preferências e as decisões aprendidas pelo agente
tasks/{taskId}/progress-details.md Detalhes por tarefa: erros de build encontrados, como foram resolvidos, resultados de teste e decisões tomadas

Retomar o trabalho interrompido

Feche o chat ou desligue o IDE. O agente lida com essa situação perfeitamente.

O agente armazena todo o estado no .github/upgrades/ dentro do seu repositório. Quando você inicia uma nova conversa, o agente verifica o estado atual e imediatamente sabe:

  • Qual cenário está ativo.
  • Quais tarefas são concluídas, em andamento ou pendentes.
  • Quais artefatos existem (avaliação, plano, arquivos de tarefa).
  • Se alguma tarefa aparece obsoleta (paralisada no 🔄 status de uma sessão anterior).

Detecção de tarefas obsoletas

Se uma tarefa estiver em andamento desde uma sessão anterior, o agente reconhecerá que a tarefa pode estar desatualizada e oferecerá opções para continuar, reiniciar ou pular.

Dica

Como o estado reside dentro .github/upgrades/ do seu repositório, ele viaja com seu código. Transmita sua ramificação para um controle remoto e puxe-a em outro computador para que o agente continue exatamente de onde você parou.

Trabalhar em várias sessões

Atualizações grandes, como uma solução de 20 projetos, uma atualização de estrutura complexa ou uma modernização de várias etapas, geralmente abrangem várias sessões ao longo de dias ou semanas. O agente gerencia o trabalho de várias sessões naturalmente:

  • Estado persistente: Tudo está dentro .github/upgrades/. Nenhum estado em memória para perder.
  • Independência da sessão: Cada sessão de chat é independente. O agente reconstrói seu contexto a partir dos arquivos de estado todas as vezes.
  • Cross-IDE support: Comece no VS Code, continue no Visual Studio ou no Copilot CLI. A pasta de estado é o contrato compartilhado.

Dicas para trabalho de várias sessões

  • Confirme a pasta de estado. Realize o push .github/upgrades/ para seu branch para fazer o backup da pasta e deixá-la visível para sua equipe.
  • Revisão entre sessões. Leia tasks.md e execution-log.md para relembrar o que aconteceu na última sessão.
  • Atualize as preferências conforme você aprende. Se você descobrir algo no teste que deve alterar a abordagem do agente, informe o agente no início da próxima sessão.

Pedir ajuda

Não tem certeza do que o agente pode fazer ou onde as coisas estão? Pergunte:

O que você quer saber O que dizer
Cenários de atualização disponíveis "O que você pode fazer?" ou "Quais cenários estão disponíveis?"
Progresso atual "Qual é o status atual?" ou "Mostre-me o progresso"
O plano de atualização "Explicar o plano" ou "Me orientar pelas tarefas"
Detalhes da avaliação "Mostre-me a avaliação" ou "O que a avaliação encontrou?"
Habilidades disponíveis "Que habilidades você tem?" ou "Listar suas habilidades"
Uma decisão específica "Por que você escolheu X em vez de Y?"
Riscos ou preocupações "Quais são os riscos com essa atualização?"

Comunicar-se com eficiência

A qualidade da interação afeta diretamente a qualidade dos resultados.

Seja específico sobre o escopo

"Atualizar apenas os projetos Data.Access e Data.Models para .NET 10" dá ao agente um foco claro. "Atualizar tudo" funciona, mas o agente toma mais decisões por conta própria sobre ordenação e prioridades.

Compartilhar contexto

O agente não conhece suas restrições comerciais, a menos que você as compartilhe:

  • "Estamos atualizando porque o Serviço de Aplicativo do Azure está descontinuando o suporte ao .NET 8 em novembro."
  • "Esse é um serviço de produção de alto tráfego, sem alterações comportamentais nas respostas da API."

Restrições expressas

Diga ao agente o que ele não deve fazer, não apenas o que ele deve:

  • "Não altere a superfície da API pública— temos consumidores externos."
  • "Ainda não podemos atualizar o Newtonsoft.Json — a equipe que possui contratos compartilhados não foi atualizada."
  • "Não toque no módulo de relatório herdado, que está sendo reescrito separadamente."

Fornecer comentários

Os comentários positivos ajudam tanto quanto as correções e confirmam que o agente está no caminho certo:

  • "Essa atualização parece ótima, faça a mesma abordagem para o outro projeto de repositório."
  • "Isso funciona, mas preferimos injeção de construtor em vez de injeção de propriedade nessa base de código."

Referência rápida

Situação O que dizer
Iniciar uma nova atualização "Atualizar minha solução para .NET 10"
Retomar o trabalho anterior "Continuar" ou "Qual é o status?"
Alternar para o modo guiado "Pausar" ou "Alternar para o modo guiado"
Alternar para o modo automático "Vá em frente" ou "Continue sem perguntar"
Corrigir uma decisão "Na verdade, use X em vez de Y"
Definir uma preferência "Sempre fazer X para a solução"
Revisar alterações "Mostre-me o que você alterou" ou verifique o log do Git
Desfazer uma alteração "Reverter a última alteração"
Pergunte por que "Por que você escolheu essa abordagem?"
Ignorar uma tarefa "Ignore esta tarefa por enquanto"
Obter ajuda "O que você pode fazer?"