Documento para circulación interna en GlobalMVM. Versión: 3.0 | Fecha: 2026-04-07
Repos públicos:
- Agent + Skill + Terraform: github.com/lotsofcontext/fixi
- Demo cloneable (.NET): github.com/lotsofcontext/fixi-demo-dotnet
Fixi es un agente CLI autónomo que automatiza el ciclo completo de resolución de tickets — desde que un desarrollador reporta un bug o solicita una mejora, hasta que un Pull Request verificado está listo para revisión humana.
Se instala como una herramienta de línea de comandos (fixi resolve --work-item <url>) y se integra directamente en GitHub Actions y Azure DevOps Pipelines. No requiere intervención humana durante la ejecución.
Debajo, Fixi ejecuta un workflow de 10 pasos (documentado en skill/SKILL.md) que define la lógica operacional del agente: cómo parsear tickets, clasificarlos, buscar la causa raíz, implementar el fix, correr validaciones, y crear el PR. Este workflow es inspeccionable y modificable — es texto plano, no código compilado.
El stack del agente: Python + Claude Agent SDK (de Anthropic) + las herramientas de desarrollo que ya usan (git, dotnet/npm/maven, gh/az CLI). El agente NO requiere infraestructura adicional — corre en el runner de su pipeline existente.
Ticket → Clasificación → Análisis → Branch → Fix → Tests → PR → Tracking
- Recibe un ticket de cualquier fuente: Azure DevOps Work Items, GitHub Issues, Jira, Linear, o texto libre
- Clasifica automáticamente el tipo: bug, feature, refactor, seguridad, performance, documentación, o mantenimiento
- Analiza el código fuente para encontrar la causa raíz — no adivina, busca evidencia en el codebase
- Crea una rama aislada siguiendo las convenciones de nomenclatura del equipo
- Implementa el cambio mínimo necesario respetando el estilo del proyecto
- Ejecuta tests y documenta resultados
- Crea un Pull Request con descripción técnica completa: causa raíz, cambios realizados, impacto potencial
- Actualiza el tracking en los sistemas del equipo
El resultado: un PR listo para revisión humana, no código desplegado sin supervisión.
- NO despliega código en producción — solo crea PRs para revisión
- NO inventa información — si faltan datos, se detiene y pregunta
- NO modifica código fuera del alcance del ticket — cambio mínimo, siempre
- NO trabaja sobre main/master/develop — siempre en rama aislada
- NO toca archivos sensibles (.env, credenciales, keys) — si el fix los requiere, documenta instrucciones manuales
- NO reemplaza desarrolladores — multiplica su capacidad
| Actividad | Sin Fixi | Con Fixi | Ahorro |
|---|---|---|---|
| Leer y entender el ticket | 10-15 min | 0 min (automático) | 100% |
| Buscar causa raíz en el codebase | 15-60 min | 0 min (automático) | 100% |
| Implementar fix + tests | 15-120 min | 0 min (automático) | 100% |
| Crear branch, commits, PR | 5-15 min | 0 min (automático) | 100% |
| Revisar PR (humano) | — | 5-15 min | Nuevo paso |
| Total tiempo humano | 45-210 min | 5-15 min | 80-93% |
- Promedio de 3 tickets/semana por desarrollador = 30 tickets/semana
- Ahorro promedio de 60 min por ticket = 30 horas/semana recuperadas
- Equivalente a 3.75 desarrolladores adicionales de capacidad
- El equipo de 10 produce como equipo de 13-14
| Métrica | Valor |
|---|---|
| Tiempo del agente | 4.3 minutos |
| Costo por ticket | $0.61 USD |
| Líneas de código del agente | ~925 LOC Python |
| Tests del agente | 136 unit tests |
| PR creado | lotsofcontext/fixi-demo-dotnet#2 |
# Instalar (una sola vez)
cd fixi/agent
pip install -e .
# Resolver un issue
fixi resolve \
--work-item https://dev.azure.com/globalmvm/EnergySuite/_workitems/edit/4521 \
--repo https://dev.azure.com/globalmvm/EnergySuite/_git/energy-trackerCopiar agent/.github/workflows/example-fixi-resolve.yml al repositorio target. Configurar el secret ANTHROPIC_API_KEY. Ejecutar manualmente desde la pestaña Actions:
# Trigger manual con inputs
on:
workflow_dispatch:
inputs:
work_item_url:
description: "URL del work item"
required: trueCopiar agent/azure-pipelines/example-fixi-resolve.yml al proyecto. Crear Variable Group fixi-secrets con ANTHROPIC_API_KEY y AZURE_DEVOPS_PAT:
# Trigger manual con parámetros
parameters:
- name: workItemUrl
type: string
- name: repoUrl
type: string| Principio | Implementación |
|---|---|
| Rama aislada siempre | Nunca toca main/master/develop. Todo cambio va a una rama dedicada |
| PR para revisión humana | Ningún cambio se fusiona sin aprobación de un desarrollador |
| Nunca inventa datos | Si falta información, se detiene y reporta qué necesita |
| Rollback automático | Si algo falla durante la ejecución, deshace todos los cambios |
| Archivos sensibles protegidos | .env, credenciales, API keys — nunca los modifica |
| Auditable | Cada acción queda registrada: qué hizo, por qué, cuándo, en qué archivos |
| Escalamiento automático | Issues de seguridad, migraciones de BD, o cambios grandes (>15 archivos) fuerzan revisión paso a paso |
El equipo decide cuánto control quiere mantener:
- GUIDED (por defecto) — Aprobación humana en cada paso
- CONFIRM_PLAN — Presenta el plan completo, un "OK" ejecuta todo
- FULL_AUTO — Ejecuta sin interrupciones (excepto seguridad y migraciones, que siempre piden aprobación)
Fixi es agnóstico a la tecnología. Funciona con cualquier proyecto que tenga código fuente y un sistema de control de versiones.
- C# / .NET
- Java / Spring Boot
- Python / Django / FastAPI
- JavaScript / TypeScript / Node.js
- Angular / React
- Go, Rust, y cualquier otro lenguaje con archivos de texto
- Azure Repos — PRs via
az repos pr create - GitHub — PRs via
gh pr create - Jira, Linear (lectura de tickets)
- Azure Pipelines
- GitHub Actions
- Jenkins, GitLab CI (detección automática)
- Azure DevOps Work Items
- GitHub Issues
- Jira
- Linear
- Texto libre (email, chat, cualquier descripción)
Para que GlobalMVM pueda probar Fixi sin pre-requisitos, construimos un repo de demo cloneable:
lotsofcontext/fixi-demo-dotnet— un Web API ASP.NET Core 9 para lectura de medidores de energía. Contiene 3 defectos sembrados a propósito, uno por cada clasificación crítica de Fixi:
| # | Tipo | Work Item | Donde vive el bug | Test que falla |
|---|---|---|---|---|
| 1 | bug |
WI-101 | Domain/Services/CalculadoraConsumo.cs (DivideByZeroException cuando dos lecturas son del mismo día) |
CalculadoraConsumoTests.Calcular_DosLecturasMismoDia_NoDebeLanzarExcepcion |
| 2 | performance |
WI-102 | Infrastructure/Services/MedidorService.cs (N+1 query, 51 SQL calls para 50 medidores) |
MedidoresEndpointTests.Listar_LatenciaP95_DebeSerMenorA500ms |
| 3 | security |
WI-103 | Api/Controllers/AdminController.cs (sin [Authorize], OWASP A01 Broken Access Control) |
AdminEndpointSecurityTests.ResetearLecturas_* |
El dominio (lectura de medidores) matchea el sector real de GlobalMVM: clientes como EPM, ISAGEN, XM y Veolia aparecen en los work items con casos de uso plausibles (técnico de campo registrando lectura post-tormenta, profiling de Joaris en QA, security review de Jefferson con OWASP ZAP).
# 1. Clonar el demo
git clone https://github.com/lotsofcontext/fixi-demo-dotnet
cd fixi-demo-dotnet
# 2. Verificar que arranca y los tests fallan como esperamos
dotnet restore
dotnet build
dotnet test
# Expected: Failed: 5, Passed: 3, Total: 8 (los 5 rojos son los bugs sembrados)
# 3. En una sesión de Claude Code, invocar Fixi contra cada work item
# /fix-issue docs/issues/WI-101-bug-lectura-negativa.md
# /fix-issue docs/issues/WI-102-perf-listado-medidores.md
# /fix-issue docs/issues/WI-103-security-endpoint-admin.mdCONTEXTO VERIFICADO
Repo: github.com/lotsofcontext/fixi-demo-dotnet
Branch: master
Working tree: limpio
Cliente: GlobalMVM (sandbox demo)
CLASIFICACIÓN:
Tipo: bug
Branch prefix: fix/
Commit prefix: fix:
Confianza: ALTA
Razón: Keywords "DivideByZero", "exception", "500" + stack trace en issue body
ROOT CAUSE ANALYSIS:
Causa raíz: CalculadoraConsumo.Calcular usa (delta).Days que es 0
cuando dos lecturas son del mismo día → división por cero.
Archivos a modificar:
1. src/GMVM.EnergyTracker.Domain/Services/CalculadoraConsumo.cs:17-23
— agregar guard clause para casos sub-diarios
Riesgo: LOW
Tests existentes: 2 fallan (capturan el bug, pasan después del fix)
BRANCH CREADO: fix/WI-101-consumo-negativo-mismo-dia
TESTS: PASS (5 passed, 3 failed → 7 passed, 1 failed)
— bug fix dejó solo los 3 fails de WI-102 y WI-103
PR CREADO: https://github.com/lotsofcontext/fixi-demo-dotnet/pull/1
Título: fix: handle same-day readings in CalculadoraConsumo
Base: master ← fix/WI-101-consumo-negativo-mismo-dia
Archivos: 1 modificado, +5/-2 líneas
FIX COMPLETE
Tiempo total medido: 3m 51s (ejecución automática de Fixi) + ~5-10 minutos (revisión humana del PR).
✅ Rehearsal real ejecutado 2026-04-07:
- Transcript completo:
fixi-demo-dotnet/docs/demos/run-01-github.md- PR resultante: fixi-demo-dotnet#1
- Métricas reales: +9 líneas modificadas, 1 archivo, tests pasaron de 2 rojos → 4 verdes, 0 hallucinations
⏳ El rehearsal por el path Azure DevOps (
docs/demos/run-02-ado.md) está pendiente — requiere setup de un sandbox ADO con PAT.
Cuando Fixi clasifica un issue como security, automáticamente fuerza modo GUIDED, sin importar el nivel de autonomía elegido. Esto significa que pide aprobación humana en cada paso. Es uno de los 13 guardrails que protege contra cambios automáticos en código de seguridad sin supervisión.
Esto responde directamente a la preocupación sobre adopción y resistencia de devs: Fixi sabe cuándo parar y pedir permiso, no es un agente autónomo ciego.
┌─────────────────────────────────────────────────────────┐
│ FUENTES DE TICKETS │
│ Azure DevOps │ GitHub │ Jira │ Linear │ Texto │
└────────┬────────┴────┬─────┴───┬────┴────┬─────┴────┬───┘
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
┌─────────────────────────────────────────────────────────┐
│ FIXI AGENT │
│ │
│ ┌──────────┐ ┌───────────┐ ┌──────────┐ ┌───────┐ │
│ │ Parser │→│ Classifier │→│ Analyzer │→│ Fixer │ │
│ │ Universal │ │ (7 tipos) │ │(root cause)│ │(impl) │ │
│ └──────────┘ └───────────┘ └──────────┘ └───┬───┘ │
│ │ │
│ ┌──────────┐ ┌───────────┐ ┌──────────────────┘ │
│ │ Tester │←─┤ PR Creator│←─┘ │
│ └──────────┘ └───────────┘ │
│ │
│ Guardrails: 13 reglas de seguridad activas │
│ Autonomía: GUIDED │ CONFIRM_PLAN │ FULL_AUTO │
└─────────────────────────────┬───────────────────────────┘
│
┌────────────────────┴────────────────────┐
▼ ▼
┌──────────────────────┐ ┌──────────────────────┐
│ Azure Repos / GitHub │ │ Tracking │
│ PRs para revisión │ │ ACTIVO.md + │
│ humana │ │ Mission Control │
└──────────────────────┘ └──────────────────────┘
Fixi se despliega como infraestructura-como-código (Terraform). El skeleton completo está en terraform/ — 25 archivos, 5 módulos, ~1,955 líneas de HCL + Markdown, validado con terraform validate y terraform fmt.
📁
terraform/README.mdtiene la guía completa: arquitectura, prerequisites, setup en 6 pasos (incluyendo el bootstrap de secrets), tabla de variables, tabla de outputs, estimación de costo (~$25-30/mes dev, $150-250/mes prod), security notes, disclaimer.
Beneficios para GlobalMVM:
- Reproducibilidad: el mismo
terraform applyen cualquier suscripción Azure - Auditoría: toda la infraestructura es versionada en Git, sin ClickOps
- Escalabilidad: ajustar SKUs y recursos sin intervención manual
- Aislamiento: cada equipo o proyecto puede tener su propia instancia
| Componente | Servicio Azure | Módulo Terraform | Propósito |
|---|---|---|---|
| Agente Fixi | Azure Container Instances | modules/container_instance |
Ejecución del agente como container long-running |
| Registro de imágenes | Azure Container Registry | modules/container_registry |
Versionado de la imagen de Fixi |
| Secrets | Azure Key Vault (RBAC mode) | modules/key_vault |
PATs de Azure DevOps, GitHub, API key de Anthropic |
| Identidad | User-Assigned Managed Identity | modules/managed_identity |
Pull desde ACR + lectura de secrets de KV |
| Red | Virtual Network + NSG deny-all inbound | modules/networking |
Aislamiento, sin ingreso público |
| Logs | Log Analytics Workspace | (en root main.tf) |
Diagnostics del container |
- Cero secrets hardcoded en HCL ni en tfvars committeados
- Key Vault en modo RBAC (no access policies), integra con PIM
- Soft-delete + purge protection en KV
- NSG deny-all inbound explícito (Fixi no expone HTTP, recibe trabajo via queue/CLI)
- ACR admin disabled, solo Managed Identity con
AcrPull secret_referencesoutput marcadosensitive = true.gitignorebloquea state files y root-level tfvars
Estas decisiones están documentadas en comentarios del código Terraform para que el equipo de seguridad de GlobalMVM las pueda revisar línea por línea.
GlobalMVM corre 99% sobre Azure. Fixi soporta el flujo nativo de Azure DevOps:
- Pattern URL:
dev.azure.com/{org}/{project}/_workitems/edit/{id} - Shorthand:
ADO-{id},WI-{id},AB#{id} - Comando:
az boards work-item show --id {id} --output json - Field mapping:
System.Title→ título,System.Description→ body (HTML),System.Tags→ labels,Microsoft.VSTS.Common.Priority→ prioridad,System.WorkItemType→ hint de clasificación - Fallback: WebFetch si
azno autenticado, input manual si todo falla
- Auto-detección del remote: si matchea
dev.azure.comovisualstudio.com→ usaaz repos pr create - PR template idéntico al de GitHub (Issue / Clasificación / Causa Raíz / Cambios / Testing)
- Linkeo automático PR ↔ Work Item:
az repos pr work-item add --id {pr_id} --work-items {wi_id} - Si el remote no es Azure: cae a
gh pr createautomáticamente
- Detección automática de
azure-pipelines.yml - Verifica que el pipeline corre post-push
- Documenta resultado en comments del PR
El skill completo (10 pasos, 656 líneas) está en
skill/SKILL.md. Las 13 reglas de seguridad están enskill/references/guardrails.md. La taxonomía de los 7 tipos está enskill/references/classification.md.
| Documento | Para qué sirve |
|---|---|
| README | Overview técnico del proyecto |
| diagrams.md | 5 diagramas Mermaid: flujo principal, clasificación, autonomía, tracking, arquitectura de integración |
| PLAN.md | Roadmap completo: 6 fases, 46 tareas (incluye Azure DevOps, Terraform IaC, MCP Server, demo público, self-dogfooding) |
| SPEC.md | Especificación técnica completa |
| SKILL.md | Workflow operacional de Fixi (10 pasos) |
| terraform/README.md | Guía de despliegue en Azure |
- ✅ Repo cloneable entregado —
lotsofcontext/fixi+lotsofcontext/fixi-demo-dotnet, ambos públicos - ✅ Terraform analizable entregado — 25 archivos en
terraform/, validado, documentado - ✅ Primer rehearsal end-to-end documentado — Fixi resolvió WI-101 en 3m 51s. PR fixi-demo-dotnet#1 + transcript en
docs/demos/run-01-github.md - ⏳ Rehearsal por el path Azure DevOps — WI-102 y WI-103, requiere setup de ADO sandbox
- ⏳ GlobalMVM revisa los repos — feedback técnico, preguntas, refinamientos
- ⏳ Caso de uso real ("el chicharrón") — GlobalMVM provee un caso concreto de uno de sus proyectos para validar contra su stack real
- ⏳ Reunión de aclaración — revisión técnica conjunta
- ⏳ Piloto acotado — implementación en un proyecto real con un equipo pequeño
Para preguntas técnicas o coordinación del piloto, contactar directamente al equipo de consultoría.
Este documento describe las capacidades actuales y planeadas de Fixi. La implementación está en desarrollo activo en branches públicos — el progreso se trackea en kanban/BOARD.md del repo principal.