From n00b to ZeroCool / La nueva era
Agentes de código: la promesa está real… el peligro también (y cómo gobernarlos sin matar la velocidad)
Cómo usar agentes de código sin incendiar producción: riesgos, controles, permisos, pruebas, workflows y gobernanza práctica para equipos.
Lo que vale la pena leer aquí
A las 11:47 pm, con el Wi‑Fi medio muriéndose y el Slack echando humo, se te ocurre: “pues que el agente lo arregle”. Le das acceso al repo y le sueltas un prompt tipo: “corrige el bug, actualiza dependencias y abre PR”. Te emocionas porque en 4 minutos ya cambió 18 archivos… y luego ves que también tocó Terraform, movió permisos en un pipeline y subió una lib sin revisar licencia.
A las 11:47 pm, con el Wi‑Fi medio muriéndose y el Slack echando humo, se te ocurre: “pues que el agente lo arregle”. Le das acceso al repo y le sueltas un prompt tipo: “corrige el bug, actualiza dependencias y abre PR”. Te emocionas porque en 4 minutos ya cambió 18 archivos… y luego ves que también tocó Terraform, movió permisos en un pipeline y subió una lib sin revisar licencia.
Ahí está el punto: los agentes de código sí son promesa, pero también son un multiplicador de riesgo. Si no los gobiernas, no te vuelves más rápido: te vuelves más frágil.
Qué vas a aprender
- Qué diferencia a un agente de un copiloto “normal” y por qué eso cambia el juego.
- Los 5 riesgos más comunes cuando un agente toca tu stack (con ejemplos de chamba real).
- Un modelo de gobernanza práctico: permisos, límites, auditoría, pruebas y rollout.
- Un workflow paso a paso para usar agentes sin apagar el cerebro (y sin apagar production).
- Checklist para llevarlo a tu equipo (o a tu vida de freelance) sin drama.
Contexto práctico: por qué los agentes se sienten mágicos
Un copiloto te sugiere líneas. Un agente planea y ejecuta tareas con contexto: lee archivos, crea ramas, corre tests, hace commits, abre pull requests, y en algunos setups también llama herramientas (linters, scanners, CLIs, navegadores, APIs). Si lo dejas, también “opina” sobre tu CI/CD.
Eso cambia el juego porque:
- La velocidad sube cuando el task es repetible (refactors, migraciones pequeñas, tests, documentación, scaffolding).
- El radio de explosión sube cuando le das llaves reales (tokens, permisos, acceso a prod, secretos, infraestructura).
La promesa real: menos talacha.
El peligro real: delegar decisiones sin darte cuenta.
Dos escenas muy de acá:
-
Startup con presupuesto apretado (sí, donde el staging es “prod pero con fe”). El agente “arregló” un warning actualizando dependencias y rompió builds en el pipeline. Nadie lo notó hasta que el deploy tronó un viernes 6:20 pm.
-
Consultoría con deadline encima. Alguien pegó logs en el prompt (con correos y folios). El agente los reutilizó en otro contexto. No fue malicia: fue fuga de datos por descuido.
Guía principal: promesa, peligro y gobernanza (sin burocracia inútil)
1) La promesa (cuándo sí conviene usar un agente)
Úsalo cuando el trabajo sea:
- Determinístico: “agrega tests para este módulo”, “migra de lib A a B”, “actualiza tipos”, “documenta endpoints”.
- Acotable: puedes definir éxito/fracaso con checks (tests, lint, build, snapshot, etc.).
- Revisable: el cambio cabe en un PR con diff entendible.
Ejemplos que sí pagan:
- Generar una suite de tests a partir de casos existentes.
- Refactor guiado: extraer funciones, renombrar símbolos, ordenar imports.
- Hardening básico: validaciones, sanitización, headers de seguridad.
- “Barrer” deudas pequeñas: TODOs, tipos
any, logs ruidosos.
Decisión práctica: si no puedes escribir el Definition of Done en 3–5 checks, ese trabajo todavía no es para que un agente lo ejecute solo.
2) El peligro (los riesgos que sí he visto pegar)
Riesgo A: Cambios correctos… por razones incorrectas
El agente arregla el síntoma. Tú lo aceptas. El bug regresa.
- Ejemplo: “falla el login a veces” → el agente mete un retry y listo. La causa real era un race condition con cache.
Control: exige explicación + evidencia. “¿Por qué ocurre? ¿Qué test lo prueba? ¿Qué métrica lo valida?”
Riesgo B: Supply chain y dependencias
Actualizar deps “porque sí” es el camino rápido a un incidente.
- Ejemplo: subió major versions, cambió APIs, y de paso se coló un paquete transitorio con historial dudoso.
Control: allowlist de deps, lockfile obligatorio, y PRs de dependencias separados por riesgo.
Riesgo C: Secretos y permisos
Un agente con token de CI puede convertirse en el “intern con llaves de la oficina”.
- Ejemplo: el agente lee
.env, lo pega en un log, y ese log termina en un ticket.
Control: permisos mínimos + redacción automática (secret scanning) + no exponer .env al contexto.
Riesgo D: Cambios silenciosos en infra/CI
Muchos agentes “optimizan” pipelines y configs.
- Ejemplo: desactivó un step de tests “para que pase” o modificó un workflow de GitHub Actions.
Control: carpetas protegidas (.github/, infra/, terraform/) requieren reviewer extra.
Riesgo E: Cumplimiento/privacidad (sí, aunque seas pyme)
Pegar datos de clientes en prompts es más común de lo que admitimos.
- Ejemplo: “ayúdame a depurar este error” y pegaste payloads con teléfonos/correos.
Control: política simple: no PII en prompts, masking, y entornos con datos sintéticos.
3) Gobernanza práctica: reglas claras, fricción mínima
Piensa en gobernanza como “barandales”, no como burocracia.
Modelo de 3 niveles (fácil de implementar)
- Nivel 0 – Asistente: sugiere, pero no ejecuta. Sin acceso a herramientas ni repo.
- Nivel 1 – Agente con sandbox: puede leer repo y correr tests localmente/CI en rama. Sin secretos. Sin acceso a infra.
- Nivel 2 – Agente con llaves limitadas: puede abrir PRs, comentar issues, tocar configs no críticas. Requiere aprobaciones y auditoría.
Regla de oro: el agente nunca debe tener más permisos que un dev junior en onboarding… y aun así con guardrails.
Controles mínimos que sí funcionan
- Branch protection: nada directo a
main. - CODEOWNERS: rutas sensibles requieren review (auth, pagos, infra, CI).
- Checks obligatorios: tests + lint + build.
- Auditoría: logs de herramientas llamadas, archivos tocados, prompts relevantes.
- Política de datos: “no PII, no secretos, no dumps completos”.
Paso a paso: workflow para usar un agente de código sin quemarte
Este flujo jala igual si eres freelancer (mal cotizado, con el cliente pidiendo “nomás un cambiecito”) o si estás en un equipo con CI decente.
Paso 1: Define el trabajo como contrato, no como deseo
En vez de “arregla el bug”, escribe:
- Contexto: dónde ocurre, cuándo, impacto.
- Restricciones: qué NO tocar (infra, deps, API pública).
- DoD (Definition of Done): checks de éxito.
Ejemplo de brief:
Tarea: Fix de bug en /checkout cuando el carrito viene vacío.
No tocar: Terraform, GitHub Actions, ni actualizar dependencias.
DoD:
- Agregar 3 tests (carrito vacío, carrito con 1 item, carrito con cupón inválido)
- Todos los tests pasan
- No cambia el contrato del endpoint
- PR con explicación de causa raíz
Decisión práctica: si no puedes escribir “No tocar”, el agente va a tocar.
Paso 2: Prepara un sandbox con límites reales
- Rama nueva.
- Variables de entorno con valores fake.
- Data de prueba (fixtures) sin datos reales.
- Secret scanning activo (GitHub Advanced Security o alternativa; si no, al menos
gitleaksen CI).
Si estás en una laptop de batalla (RAM justa, ventilador que ya suena raro), corre lo pesado en CI y deja local solo lint/tests rápidos.
Paso 3: Pídele plan antes que código
Primero: “dame un plan de 5–8 pasos y qué archivos vas a tocar”.
Tú revisas el plan como humano. Si el plan incluye “actualizar deps” y eso no venía en el brief, lo paras ahí. Antes del desastre.
Paso 4: Ejecuta en modo incremental (PR chico gana)
Que el agente trabaje por commits con intención:
- Commit 1: reproduce bug + test que falla.
- Commit 2: fix mínimo.
- Commit 3: refactor opcional (si aplica) y documentación.
Tradeoff real: un PR enorme “que arregla todo” te roba más tiempo en review que el que te ahorró el agente.
Paso 5: Revisión con foco (no revises todo igual)
Revisa con lupa:
- Autenticación/autorización
- Sanitización/validación
- Queries y performance
- Cambios en CI/infra
- Dependencias nuevas
Revisa “normal”:
- Naming, estilo, docs, logs
Tip de batalla: busca TODO, FIXME, disable, skip, ignore, eslint-disable, @ts-ignore. Muchos agentes “resuelven” así para que “pase”.
Paso 6: Merge con barandales
- Squash si el historial quedó ruidoso.
- Requiere 1–2 approvals según ruta.
- Feature flag si el cambio toca flujo crítico.
Paso 7: Observabilidad post-merge (porque la vida real existe)
- Métrica/alerta mínima: errores del endpoint, latencia, ratio de éxito.
- Canary release si puedes.
- Plan de rollback listo (de verdad listo, no “ahí vemos”).

Screenshots sugeridos
- Config de Branch protection rules (checks requeridos y revisión obligatoria).
- Archivo CODEOWNERS mostrando rutas sensibles (auth, payments, infra).
- Ejemplo de PR “bien hecho”: descripción con DoD, evidencia de tests y causa raíz.
- Output de CI: tests pasando + secret scanning.
Errores comunes (y cómo salir sin perder la semana)
Error 1: “Le di acceso al repo completo para que fuera más rápido”
Síntoma: cambió cosas que no pediste.
Arreglo:
- Reduce scope: submódulo/carpeta.
- Usa CODEOWNERS y rutas protegidas.
- Pide plan primero.
Error 2: “Acepté el PR porque todos los tests pasaron”
Síntoma: tests pasan pero el bug sigue o aparece otro.
Arreglo:
- Agrega test que falle antes del fix (reproducción).
- Incluye caso borde (nulos, vacíos, timeouts).
- Observabilidad post-merge.
Error 3: “El agente metió una dependencia nueva y ni me di cuenta”
Síntoma: build funciona, pero legal/security no.
Arreglo:
- Diff del
package-lock.json/pnpm-lock.yaml/poetry.lockcomo artefacto importante. - Política: dependencias nuevas requieren aprobación.
- SCA (Software Composition Analysis) si está en tus posibilidades.
Error 4: “Pegamos logs con datos reales en el prompt”
Síntoma: fuga de PII o incumplimiento interno.
Arreglo:
- Masking: correos, teléfonos, tokens.
- Usa datos sintéticos.
- Plantilla de depuración que no requiera payload completo.
Error 5: “Dejé que tocara CI/infra porque ‘también es código’”
Síntoma: pipelines inseguros, permisos ampliados, tests desactivados.
Arreglo:
- Rutas de infra requieren reviewer extra.
- Regla simple: no cambiar CI/infra en el mismo PR que un bugfix.
- Auditoría de cambios sensibles.

Checklist final (para operar agentes sin volverte rehén)
- Definí el DoD en checks claros (tests, lint, build, métricas)
- Le di un scope: qué tocar y qué NO tocar
- Trabajó en rama, nunca directo a
main - PR chico, incremental, con test que falla antes del fix
- CODEOWNERS para rutas sensibles (auth/pagos/infra/CI)
- Secret scanning /
gitleaksactivo - Revisé lockfiles y dependencias nuevas
- Observabilidad post-merge (alerta/métrica) y rollback posible
- Quedó registro: plan, cambios y herramientas ejecutadas
FAQ
1) ¿Un agente reemplaza al dev?
No. Le quita talacha al workflow y acelera partes del flujo. Pero decisiones de arquitectura, seguridad, producto y riesgo siguen siendo humanas (aunque el humano traiga ojeras).
2) ¿Qué permisos mínimos debería tener un agente?
Lectura del repo y ejecución en sandbox/CI en ramas. Para abrir PRs, que lo haga con un token limitado. Nada de secretos ni acceso a infraestructura por default.
3) ¿Cómo evito que “arregle” desactivando validaciones o tests?
Checks obligatorios + revisión enfocada buscando skip/ignore/disable + regla: cambios a tests/CI requieren reviewer extra.
4) ¿Qué tareas NO le darías a un agente?
Rotación de secretos, cambios en auth/pagos sin supervisión fuerte, migraciones de base de datos en prod, cambios de IAM/permisos, y cualquier cosa sin DoD verificable.
5) ¿Cómo lo vendo en mi equipo sin que digan “esto es peligroso”?
Con un piloto controlado: Nivel 1 (sandbox), métricas de éxito (tiempo de PR, bugs escapados, retrabajo) y reglas claras (branch protection + CODEOWNERS + scanning). Si te baja el retrabajo, se gana el lugar solito.
Siguiente episodio
La siguiente parada: cómo convertir prompts en playbooks reutilizables para tu equipo sin que se vuelvan ritual vacío.
La idea es armar plantillas que sobrevivan a un viernes en la tarde y a un release con sueño.
Idea para cerrar bien este post: toma una sola práctica de aquí y conviértela en algo que tu equipo pueda aplicar hoy.
Cuando un artículo aterriza en decisiones reales, deja de ser contenido y se vuelve ventaja.


