Guía práctica para configurar GitHub Copilot en VSCode: custom instructions, prompt files, generación automática de conventional commits y uso de modos Ask/Edit/Agent para maximizar productividad en proyectos Azure/DevOps.
GitHub Copilot es un asistente de código basado en IA que sugiere código, genera tests, documenta funciones y responde preguntas técnicas directamente en tu editor. En VSCode, Copilot ofrece:
- Completado de código inline: Sugerencias mientras escribes
- Chat interactivo: Conversaciones sobre tu código
- Generación de commits: Mensajes siguiendo conventional commits
- Modos de trabajo: Ask, Edit y Agent para diferentes escenarios
Requisitos previos:
- VSCode 1.99 o superior
- Cuenta GitHub con acceso a Copilot (Copilot Free disponible)
Pasos de instalación:
- Abrir VSCode
- Ir a Extensions (
Ctrl+Shift+X)
- Buscar "GitHub Copilot"
- Instalar dos extensiones:
- GitHub Copilot (autocompletado)
- GitHub Copilot Chat (chat interactivo)
Autenticación:
# VSCode solicitará autenticación con GitHub
# Alternativamente desde Command Palette (Ctrl+Shift+P):
GitHub Copilot: Sign In
Las instrucciones personalizadas permiten definir reglas y contexto que Copilot aplicará automáticamente, eliminando la necesidad de repetir el mismo contexto en cada prompt.
VSCode soporta tres tipos de archivos Markdown para instrucciones:
1. .github/copilot-instructions.md (instrucciones globales del workspace)
- Se aplica automáticamente a todas las conversaciones
- Un único archivo en la raíz del repositorio
- Compartido con todo el equipo vía Git
2. .instructions.md (instrucciones específicas por archivo/tarea)
- Múltiples archivos para diferentes contextos
- Usa frontmatter
applyTo con glob patterns
- Puede ser workspace o user-level (sincronizable)
3. AGENTS.md (experimental, para múltiples agentes IA)
- En la raíz o subfolders del workspace
- Útil si trabajas con varios agentes IA
- Requiere habilitar
chat.useAgentsMdFile
Estructura del proyecto:
your-repo/
├── .github/
│ ├── copilot-instructions.md ← Global workspace
│ ├── instructions/ ← Instrucciones específicas
│ │ ├── python.instructions.md
│ │ └── terraform.instructions.md
│ └── prompts/ ← Prompts reutilizables
├── AGENTS.md ← Para múltiples agentes (experimental)
├── src/
└── README.md
Ejemplo de instrucciones para proyectos Azure/DevOps:
# Instrucciones para GitHub Copilot
## Contexto del proyecto
Este repositorio contiene infraestructura Azure gestionada con Terraform y CI/CD con GitHub Actions.
## Convenciones de código
### Terraform
- Usar módulos para componentes reutilizables
- Variables en `variables.tf`, outputs en `outputs.tf`
- Naming: `<recurso>-<entorno>-<región>` (ejemplo: `st-prod-weu`)
- Tags obligatorios: Environment, Owner, CostCenter
### Python
- PEP 8 para estilo de código
- Type hints obligatorios en funciones públicas
- Docstrings en formato Google
- Tests con pytest, coverage mínimo 80%
### Commits
- Seguir conventional commits: `type(scope): description`
- Tipos permitidos: feat, fix, docs, chore, refactor, test
- Scope debe indicar área afectada: terraform, github-actions, scripts
## Seguridad
- NUNCA incluir credenciales hardcoded
- Usar Azure Key Vault para secretos
- Managed Identities sobre service principals
- Mínimo privilegio en roles RBAC
## Referencias
- Validar recursos Azure contra docs oficiales
- Seguir Azure Well-Architected Framework
- Bicep/Terraform: sintaxis actualizada
Opción 1: Habilitar en Settings
{
"github.copilot.chat.codeGeneration.useInstructionFiles": true
}
Opción 2: Generar automáticamente desde tu workspace
VSCode puede analizar tu código y generar instrucciones que coincidan con tus prácticas:
- Chat view → Configure Chat → Generate Instructions
- Revisar y editar el archivo generado
- Guardar en
.github/copilot-instructions.md
Validación: Cuando Copilot use las instrucciones, aparecerá el archivo en la lista de "References" de la respuesta.
Además del archivo global, puedes crear instrucciones específicas para lenguajes, frameworks o tareas.
Estructura:
---
description: "Descripción mostrada al hacer hover"
applyTo: "**/*.py" # Glob pattern (relativo al workspace root)
---
# Instrucciones específicas para Python
- Seguir PEP 8
- Type hints obligatorios
- Docstrings en formato Google
Ejemplo: Instrucciones para Terraform
Archivo: .github/instructions/terraform.instructions.md
---
description: "Terraform coding standards"
applyTo: "**/*.tf,**/*.tfvars"
---
# Terraform Best Practices
- Usar módulos para componentes reutilizables
- Variables en variables.tf, outputs en outputs.tf
- Naming convention: `<resource>-<environment>-<region>`
- Tags obligatorios: Environment, Owner, CostCenter
- Encryption habilitado por defecto
- Validar con `terraform validate` y `tflint`
Comando: Chat: New Instructions File (Ctrl+Shift+P)
- Elegir ubicación:
- Workspace:
.github/instructions/ (compartido vía Git)
- User: Perfil de usuario (sincronizable entre dispositivos)
- Nombrar archivo (ej:
python.instructions.md)
- Definir
applyTo pattern en frontmatter
- Escribir instrucciones en Markdown
Adjuntar manualmente: En Chat view → botón + → Instructions → seleccionar archivo
Las instrucciones user-level pueden sincronizarse entre dispositivos:
- Habilitar Settings Sync
Ctrl+Shift+P → Settings Sync: Configure
- Seleccionar Prompts and Instructions
Los prompt files permiten crear plantillas de prompts reutilizables compartibles con el equipo.
Ejemplo: Prompt para generar Terraform modules
Archivo: .github/prompts/terraform-module.prompt.md
Crea un módulo Terraform para #selection siguiendo estas reglas:
1. Estructura estándar:
- `main.tf`: recursos principales
- `variables.tf`: inputs con validation
- `outputs.tf`: valores exportados
- `versions.tf`: provider constraints
- `README.md`: documentación
2. Convenciones:
- Variables: descripción, tipo, validación con condition
- Outputs: descripción clara del valor exportado
- Tags: usar merge() con var.tags
3. Seguridad:
- Encryption habilitado por defecto
- HTTPS obligatorio para endpoints
- Logging habilitado
4. Documentación:
- README con ejemplos de uso
- Terraform-docs compatible
Archivo: .github/prompts/fix-security.prompt.md
Analiza #file en busca de problemas de seguridad:
- Credenciales hardcoded
- Endpoints HTTP (deben ser HTTPS)
- Secretos en logs
- Permisos excesivos en RBAC
- Resources sin encryption
- Network security groups demasiado permisivos
Proporciona fix aplicando principio de mínimo privilegio y Zero Trust.
En Copilot Chat:
# Referenciar prompt file
#prompt:terraform-module
# Combinar con referencias
#prompt:fix-security #file:main.tf
# Agregar contexto adicional
#prompt:terraform-module para Azure Storage con lifecycle policies
Desde UI:
- Abrir Copilot Chat (
Ctrl+Alt+I)
- Click en botón
+
- Seleccionar "Prompt Files"
- Elegir prompt deseado
GitHub Copilot puede generar mensajes de commit siguiendo conventional commits automáticamente.
Opción 1: Settings específico para commits (recomendado)
Desde VS Code 1.102+, usar setting dedicado:
{
"github.copilot.chat.commitMessageGeneration.instructions": [
{
"text": "Seguir Conventional Commits 1.0.0: <type>(<scope>): <description>"
},
{
"file": ".github/instructions/commit-standards.md"
}
]
}
Opción 2: Agregar a .github/copilot-instructions.md
## Git Commits
Todos los commits deben seguir Conventional Commits 1.0.0:
**Formato**: `<type>(<scope>): <description>`
**Types permitidos**:
- `feat`: Nueva funcionalidad
- `fix`: Corrección de bug
- `docs`: Cambios en documentación
- `chore`: Tareas de mantenimiento (deps, config)
- `refactor`: Refactorización sin cambio funcional
- `test`: Añadir o modificar tests
- `ci`: Cambios en CI/CD
- `perf`: Mejoras de performance
**Scope**: Área del proyecto afectada (terraform, github-actions, scripts, docs)
**Ejemplos**:
```text
feat(terraform): add Azure Front Door module
fix(github-actions): correct OIDC authentication
docs(readme): update deployment instructions
chore(deps): bump terraform-azurerm to 4.0
Breaking changes: Usar ! o footer BREAKING CHANGE:
feat(terraform)!: migrate to azurerm 4.0
BREAKING CHANGE: provider azurerm 3.x no longer supported
En Source Control panel de VSCode:
- Hacer cambios en archivos
- Stage changes
- Click en icono ✨ (Sparkle) en message box
- Copilot genera mensaje siguiendo conventional commits
Desde terminal con Git:
# Copilot CLI (requiere instalación adicional)
gh copilot suggest "git commit message for staged changes"
Ejemplo de mensaje generado:
feat(terraform): add network security group for AKS
- Create NSG with default deny rules
- Allow only required ports (443, 80)
- Associate to AKS subnet
- Add diagnostic settings for logging
Copilot ofrece tres modos de trabajo según el tipo de tarea.
Cuándo usar: Consultas, explicaciones, búsqueda de información.
Características:
- Responde en el panel de chat
- No modifica archivos
- Proporciona ejemplos de código copiables
Ejemplos:
# Explicar código
Explica qué hace #selection
# Mejores prácticas
¿Cuáles son las mejores prácticas para Azure Storage lifecycle policies?
# Comparar opciones
Diferencia entre Azure Container Apps y AKS
# Troubleshooting
¿Por qué falla este módulo de Terraform? #file:main.tf
Cuándo usar: Modificar código existente, refactorizar.
Características:
- Propone cambios con preview diff
- Puedes aceptar/rechazar modificaciones
- Trabaja en archivos abiertos
Activar Edit Mode:
- Seleccionar código
Ctrl+I (inline chat)
- Escribir instrucción
Ejemplos:
# Refactor
Refactoriza #selection para usar módulos reutilizables
# Optimizar
Optimiza este loop para mejor performance
# Agregar tests
Genera unit tests para #selection usando pytest
# Documentar
Agrega docstrings a todas las funciones en #file
Cuándo usar: Tareas complejas multi-archivo, workflows completos.
Características:
- Ejecuta acciones en todo el workspace
- Crea/edita múltiples archivos
- Ejecuta comandos en terminal
- Requiere confirmación en pasos críticos
Activar Agent Mode:
- Abrir Copilot Chat
- Selector de modo → Agent
- Confirmar modo activo
Habilitar Agent Mode:
VSCode Settings (Ctrl+,):
{
"chat.agent.enabled": true,
"chat.agent.maxRequests": 128
}
Ejemplos de tareas con Agent Mode:
# Crear proyecto completo
Crea un proyecto Terraform para desplegar Azure Container Apps con:
- Virtual Network con subnets
- Azure Container Registry
- Log Analytics Workspace
- Application Insights
- GitHub Actions workflow para CI/CD
# Migrar código
Migra todos los recursos en #folder de azurerm 3.x a 4.x
# Generar documentación
Genera README.md completo para este repositorio incluyendo:
- Descripción
- Arquitectura (diagrama Mermaid)
- Prerequisites
- Deployment steps
- Troubleshooting
# Implementar tests
Crea suite completa de tests para todos los módulos Terraform
Best Practices para Agent Mode:
- Prompts granulares: Dividir tareas grandes en pasos pequeños
- Permitir que Copilot trabaje: Dejar que ejecute tareas en vez de hacerlas manualmente
- Revisar cambios: Validar modificaciones antes de commit
- Configurar auto-approve (opcional):
{
"chat.tools.autoApprove": true
}
Comandos rápidos para tareas comunes sin escribir prompts largos.
| Command |
Descripción |
Ejemplo |
/doc |
Generar documentación |
Seleccionar función → /doc |
/explain |
Explicar código |
Seleccionar bloque → /explain |
/fix |
Proponer correcciones |
Seleccionar error → /fix |
/tests |
Generar unit tests |
Seleccionar función → /tests using pytest |
/optimize |
Optimizar performance |
Seleccionar loop → /optimize |
/generate |
Generar código nuevo |
/generate Azure Bicep for Storage Account |
Uso combinado con contexto:
# Con archivos
/explain #file:main.tf
# Con selección
/tests #selection using XUnit
# Con scope
/fix the authentication logic in #file:auth.py
Cuando trabajas con recursos Azure, Agent Mode tiene herramientas específicas.
Verificar herramientas disponibles:
Herramientas Azure:
- Azure CLI tools: Generar comandos
az
- Terraform tools: Crear/validar configuraciones
- GitHub Actions tools: Generar workflows
Ejemplo práctico:
# Generar comando Azure CLI
¿Cuál es el comando az para listar todas mis storage accounts ordenadas por región?
Copilot genera:
az storage account list --query "sort_by([], &location)[].{Name:name, Location:location}" --output table
Proporcionar referencias específicas:
❌ MALO:
"Explica este código"
✅ BUENO:
"Explica #selection enfocándote en el flujo de autenticación OIDC"
Usar scope adecuado:
# Archivo completo
#file:main.tf
# Función específica
#selection
# Múltiples archivos
#file:variables.tf #file:outputs.tf
# Workspace
#codebase (usa con precaución, puede ser lento)
Por archivo de instrucciones:
- Global (
.github/copilot-instructions.md): Principios generales del proyecto
- Por lenguaje (
.github/instructions/python.instructions.md): Standards específicos
- Por framework (
.github/instructions/terraform.instructions.md): Convenciones del stack
- Por tarea (
.github/instructions/security-review.instructions.md): Workflows específicos
Usar applyTo patterns efectivos:
---
applyTo: "**/*.{ts,tsx}" # TypeScript y React
---
---
applyTo: "src/backend/**" # Backend folder
---
---
applyTo: "terraform/**/*.tf" # Solo Terraform files
---
Validar código generado:
- No confiar ciegamente en sugerencias
- Revisar permisos y roles RBAC
- Verificar que no expone credenciales
- Comprobar configuraciones de red
Ejemplo de validación:
Analiza #file:main.tf y verifica:
1. ¿Hay credenciales hardcoded?
2. ¿Todos los recursos tienen encryption habilitado?
3. ¿Network security groups siguen principio de mínimo privilegio?
4. ¿Están definidos todos los tags obligatorios?
Trabajar por pasos:
# ❌ Prompt demasiado amplio:
"Crea infraestructura completa para microservicios en Azure"
# ✅ Iteración incremental:
# Paso 1:
"Crea networking base: VNET con 3 subnets (app, data, management)"
# Paso 2:
"Agrega Azure Container Apps environment con internal VNET"
# Paso 3:
"Configura Application Gateway con WAF"
Copilot puede estar desactualizado. Validar contra documentación oficial:
# Verificar sintaxis actualizada
Muestra la sintaxis actual de azurerm_storage_account en Terraform 1.9
# Contrastar con docs
¿Esta configuración sigue las mejores prácticas de Azure Well-Architected Framework para seguridad?
Según documentación oficial:
- Instrucciones cortas y autocontenidas: Una declaración por instrucción
- Múltiples archivos por tema: Usar
.instructions.md con applyTo selectivo
- Workspace sobre user: Compartir con equipo vía Git
- Referenciar en prompts: Evitar duplicación con Markdown links
- Markdown links para contexto:
[archivo](../path/file.ts) o URLs externas
VSCode permite configurar instrucciones específicas para escenarios concretos:
| Setting |
Uso |
github.copilot.chat.commitMessageGeneration.instructions |
Generación de commit messages |
github.copilot.chat.pullRequestDescriptionGeneration.instructions |
Descripción de PRs |
github.copilot.chat.reviewSelection.instructions |
Code review |
github.copilot.chat.codeGeneration.instructions |
Generación de código (deprecated)* |
github.copilot.chat.testGeneration.instructions |
Generación de tests (deprecated)* |
*Desde VS Code 1.102, usar .instructions.md files en su lugar.
Ejemplo completo en settings.json:
{
// Commits con Conventional Commits
"github.copilot.chat.commitMessageGeneration.instructions": [
{ "text": "Usar formato: <type>(<scope>): <description>" },
{ "text": "Types: feat, fix, docs, chore, refactor, test, ci, perf" }
],
// PRs con checklist
"github.copilot.chat.pullRequestDescriptionGeneration.instructions": [
{ "text": "Incluir siempre lista de cambios principales" },
{ "text": "Agregar sección Testing con casos probados" },
{ "file": ".github/instructions/pr-template.md" }
],
// Code review enfocado en seguridad
"github.copilot.chat.reviewSelection.instructions": [
{ "file": ".github/instructions/security-review.md" }
]
}
Settings recomendados para Copilot (settings.json):
{
// GitHub Copilot
"github.copilot.enable": {
"*": true,
"yaml": true,
"markdown": true,
"terraform": true
},
// Instructions files
"github.copilot.chat.codeGeneration.useInstructionFiles": true,
"chat.instructionsFilesLocations": [
".github/instructions" // Carpeta adicional para .instructions.md
],
// AGENTS.md (experimental)
"chat.useAgentsMdFile": false, // true para habilitar
"chat.useNestedAgentsMdFiles": false, // subfolder support
// Agent mode
"chat.agent.enabled": true,
"chat.agent.maxRequests": 128,
// Editor
"editor.inlineSuggest.enabled": true,
"editor.suggestSelection": "first",
// Opcional: Auto-approve (usar con precaución)
"chat.tools.autoApprove": false
}
Keybindings personalizados (.vscode/keybindings.json):
[
{
"key": "ctrl+shift+i",
"command": "workbench.action.chat.open"
},
{
"key": "ctrl+i",
"command": "inlineChat.start",
"when": "editorFocus"
}
]
Flujo de trabajo típico con Copilot:
- Planificación:
# Agent Mode
Analiza los requisitos y propón arquitectura para [proyecto]
Genera diagrama Mermaid de la solución
- Implementación:
# Edit Mode
Usando #prompt:terraform-module, crea módulo para Azure Front Door
- Testing:
# Ask Mode
/tests #file:main.tf usando Terratest
- Documentación:
# Agent Mode
Genera documentación completa para #folder incluyendo:
- README con ejemplos
- Diagramas de arquitectura
- Runbooks de operaciones
- Commit:
# Source Control panel
Click en ✨ → genera conventional commit
- Validación:
# Ask Mode
Revisa #file:main.tf contra Azure security baseline
Verificar:
# Estado de extensión
Ctrl+Shift+P → "GitHub Copilot: Check Status"
# Logs
Ctrl+Shift+P → "GitHub Copilot: Open Logs"
Soluciones comunes:
- Verificar autenticación GitHub
- Reiniciar VSCode
- Comprobar firewall/proxy (requiere acceso a
*.github.com)
Mejorar contexto:
- Usar custom instructions más específicas
- Proporcionar ejemplos en instructions
- Referenciar archivos relacionados en prompt
Ejemplo:
❌ "Crea módulo Terraform"
✅ "Usando #file:examples/storage.tf como referencia, crea módulo
para #selection siguiendo #prompt:terraform-module"
Configurar auto-approve:
{
"chat.tools.autoApprove": true
}
Alternativa: Click en "Always Allow" en diálogo de confirmación.
El repositorio Awesome Copilot incluye un MCP Server que permite buscar e instalar instrucciones, prompts y chat modes directamente desde VSCode.
Requiere Docker instalado y ejecutándose.
Instalar en VSCode:
- Install in VS Code
- Docker descargará la imagen automáticamente
- Usar comando en Chat:
/awesome-copilot <query>
Ejemplo de uso:
/awesome-copilot create-readme
/awesome-copilot terraform best practices
/awesome-copilot security review
El repositorio contiene cientos de contribuciones de la comunidad:
- Agents: Agentes especializados (Terraform, Security, Database, etc.)
- Instructions: Standards de código por lenguaje/framework
- Prompts: Tareas específicas (documentación, refactoring, testing)
- Chat Modes: Personas IA (arquitecto, DBA, security expert)
- Collections: Conjuntos curados por tema/workflow
Explorar: