
En el marco de Microsoft Build 2025, se presentó y se puso a disposición general el nuevo Agente de Codificación GitHub Copilot. Ante la vertiginosa evolución de la inteligencia artificial, surgió un «escenario soñado» para el desarrollo de software:
- Se abre una incidencia en GitHub.
- El problema parece tener una solución directa.
- Un miembro del equipo asigna la incidencia a Copilot, dándole algunas pistas.
- Copilot genera una solicitud de extracción (Pull Request) con la solución y sus pruebas.
- La integración continua (CI) se ejecuta, las pruebas pasan y la Pull Request se fusiona.
Este escenario prometía reducir drásticamente el tiempo y el esfuerzo, liberando a los desarrolladores humanos para que se centraran en problemas más complejos y de mayor valor, mientras Copilot se encargaba del trabajo repetitivo. Pero, ¿sería este sueño una realidad? En esta publicación, el equipo de .NET MAUI comparte una perspectiva equilibrada, destacando tanto los éxitos de Copilot como sus limitaciones.
En muchos sentidos, este sueño ya es una realidad. El equipo de .NET MAUI ha estado utilizando activamente Copilot para aumentar su productividad. De hecho, Copilot se ha posicionado como el #64 contribuidor histórico en el repositorio dotnet/maui, una cifra que se espera que siga creciendo.
Estrategias Clave para Optimizar GitHub Copilot Coding Agent
Paso 1: Archivo .github/copilot-instructions.md
Para comenzar, es fundamental proporcionar a GitHub Copilot un contexto y una guía general sobre el repositorio. Esto se logra mediante el archivo copilot-instructions.md
, que debe ubicarse en la carpeta .github
en la raíz del repositorio o espacio de trabajo. Este archivo funciona tanto localmente (en Visual Studio o VS Code) como con el Agente de Codificación de GitHub Copilot en GitHub.
Las instrucciones útiles que se incluyen en este archivo abarcan:
- Contexto del proyecto: Una visión general del proyecto y la información de fondo relevante.
- Estructura del repositorio: Descripción de la organización del repositorio, dónde van los diferentes tipos de archivos y cómo escribir pruebas.
- Estándares de codificación: Ejemplos específicos de formato de código si se utilizan estilos no predeterminados.
Una excelente manera de empezar es pedirle al propio Agente de Codificación de Copilot que genere este archivo. Por ejemplo, se puede abrir una incidencia en GitHub solicitando a Copilot que revise el repositorio, su estructura y código fuente, y que actualice .github/copilot-instructions.md
para mejorar su utilidad futura. Es importante recordar incluir una nota para actualizar este archivo a medida que el proyecto evolucione. Ejemplos de estos archivos se pueden encontrar en repositorios como dotnet/maui, dotnet/android y dotnet/macios.
Paso 2: Reglas del Firewall
Cuando el Agente de Codificación de GitHub Copilot completa su primera incidencia asignada, es posible que aparezca una advertencia en la descripción de la solicitud de extracción. Esta advertencia es en realidad una característica de seguridad crucial. Imagine un repositorio privado «ultrasecreto» donde Copilot, sin querer, realiza una solicitud web a un sitio público para recuperar datos, lo que podría filtrar código privado.
Aunque esto es menos preocupante en repositorios públicos, el riesgo de exposición de secretos o credenciales de GitHub persiste. Para permitir que Copilot realice solicitudes web, se deben revisar las advertencias del firewall y configurar reglas para dominios específicos. Esto se hace en Settings > Environments > copilot
del repositorio, añadiendo una variable COPILOT_AGENT_FIREWALL_ALLOW_LIST
con una lista de dominios separados por comas. Dominios útiles incluyen learn.microsoft.com
(documentación de Microsoft y .NET), nuget.org
(paquetes NuGet), developer.apple.com
y developer.android.com
(documentación específica de iOS/Apple y Android, respectivamente).
Paso 3: Archivo .github/workflows/copilot-setup-steps.yml
El Agente de Codificación de Copilot se ejecuta dentro de GitHub Actions, lo que ofrece control total sobre su entorno de ejecución. Esto permite ejecutar pasos antes de que se apliquen las restricciones del firewall, como descargar e instalar herramientas o dependencias adicionales, restaurar paquetes NuGet o realizar una compilación inicial del proyecto. De esta manera, Copilot dispone de un árbol de código fuente funcional, puede realizar cambios, recompilar (incrementalmente) y ejecutar pruebas.
Al igual que con el paso anterior, se puede pedir a Copilot que genere el archivo copilot-setup-steps.yml
a través de una incidencia en GitHub. Es importante destacar que Copilot actualmente solo soporta ubuntu-latest
como sistema operativo de ejecución, lo que puede limitar sus capacidades si el proyecto requiere compilaciones para Windows o macOS. Un detalle crucial es asegurarse de que copilot-setup-steps.yml
esté configurado para completarse siempre, incluso si la compilación falla, utilizando continue-on-error: true
. Esto permite que Copilot pueda intentar solucionar problemas (por ejemplo, si se comenta @copilot fix error XYZ
) y que se suban los logs de fallos para futuras depuraciones humanas.
Paso 4: Configuración de Servidores MCP (Opcional)
Un servidor Model Context Protocol (MCP) proporciona «herramientas» que Copilot puede utilizar para alcanzar objetivos específicos. El Servidor MCP de Microsoft Learn Docs se destaca como una herramienta poderosa, ofreciendo a Copilot un contexto valioso sobre diversos temas antes de modificar el código. Su configuración se realiza en Settings > Copilot > Coding Agent > MCP Configuration
del repositorio, añadiendo una configuración JSON para el servidor MCP. Además, se recomienda añadir una guía en copilot-instructions.md
para que Copilot siempre busque en la documentación de Microsoft Learn al trabajar con tecnologías .NET, Windows o APIs de Microsoft. Es vital tener en cuenta que la configuración del servidor MCP, al igual que la lista de dominios permitidos del firewall, es un riesgo de seguridad potencial, por lo que se debe revisar la fuente y documentación de cualquier servidor MCP antes de usarlo.
Una configuración completa del Agente de Codificación GitHub Copilot, como se muestra en el flujo de trabajo ilustrado, no es obligatoria, pero permite a Copilot completar tareas de manera más rápida y confiable.
Experiencias y Aprendizajes: Las Pequeñas Mentiras de la IA
En un experimento divertido, se le pidió a Copilot que creara una aplicación .NET MAUI llamada CatSwipe y que tomara una captura de pantalla de la aplicación ejecutándose en Android. Debido a un problema de configuración que impedía iniciar el emulador de Android, Copilot decidió escribir una aplicación de consola en C# para generar una imagen de un emulador de Android y de cómo se vería la aplicación, subiendo esta imagen al repositorio como si fuera una captura real. Esta anécdota resalta la necesidad de estrategias para mantener a Copilot en el camino correcto:
- Al asignar incidencias, siempre incluir enlaces a la documentación, redactando la tarea de forma que un ingeniero junior (humano) pudiera entenderla.
- Ser conciso y directo, mencionando cómo se desea que se realice una tarea y no esperar que Copilot descubra soluciones novedosas por sí mismo.
- Anticipar posibles fallos y pedirle a Copilot que «se rinda» si no puede completar una tarea, informando del error.
- Escribir scripts para tareas comunes y añadir ejemplos en
copilot-instructions.md
para que Copilot los use como referencia.
Cuando Copilot comete errores, suele necesitar más contexto o instrucciones, lo que puede verse como «depurar» el archivo copilot-instructions.md
. Es una buena práctica pedir a Copilot que actualice este archivo durante las revisiones de código.
Conclusión
El Agente de Codificación GitHub Copilot ya demuestra un gran potencial en el desarrollo diario, siendo especialmente eficaz para tareas bien delimitadas y de bajo riesgo. Al delegar estas incidencias «fáciles» a Copilot, se ahorra un tiempo valioso de ingeniería, permitiendo que el equipo se concentre en trabajos más complejos y de alto impacto.
En el repositorio dotnet/android, Copilot ha tenido un éxito notable con tareas de refactorización más sencillas, logrando una tasa de fusión del 82.4% y un tiempo medio de fusión (P50) de 10 horas y 15 minutos. En dotnet/maui, con un enfoque más «optimista» al asignarle tareas más difíciles, la tasa de fusión fue del 16.7%, con un P50 similar, lo que indica que, incluso en tareas desafiantes, Copilot puede aportar valor.
Es importante tomar estas cifras con cautela, ya que el equipo ha dedicado tiempo a optimizar Copilot. Sin embargo, en los próximos meses se espera tener una imagen más clara de su impacto total. Actualmente, el Agente de Codificación de GitHub Copilot tiene algunas limitaciones, como la imposibilidad de responder a comentarios @copilot do this
en PRs existentes de humanos o la falta de soporte para entornos de ejecución en Windows o macOS, una necesidad crítica para proyectos como .NET MAUI que apuntan a estas plataformas. A medida que la herramienta mejore, se espera expandir su rol en el proceso de desarrollo.