CULTIVA IA AgentCore · MLOps v1.0 · 2026-06-16

Guías Karpathy para Codificación con LLM

Directrices operativas para agentes LLM que trabajan en AgentCore. Aplicar como system prompt y checklist de code review.
Stack: Python 3.12 · FastAPI · LangChain · pgvector
Agentes: Claude, GPT-4, Cursor
Fuente: Karpathy @x / Apache-2.0
01
Pensar Antes de Codificar
"No asumas. No ocultes confusión. Muestra los trade-offs."
✓ Hacer
✓ Explicitar supuestos antes de escribir código
✓ Presentar 2-3 enfoques si hay ambigüedad
✓ Preguntar si algo del dominio AgentCore es unclear
✓ Proponer el enfoque más simple cuando exista
✗ No hacer
✗ Elegir silenciosamente entre interpretaciones
✗ Asumir cómo funciona el router de agentes
✗ Inventar esquemas de BD sin confirmar
✗ Continuar cuando hay una dependencia no resuelta
Ejemplo · AgentCore MAL → asume el schema sin preguntar
# ❌ El agente asume sin preguntar
def route_task(task: Task) -> Agent:
    # Asumo que task.type siempre existe y tiene un enum
    if task.type == "seo": return SeoAgent()
    elif task.type == "copy": return CopyAgent()
Ejemplo · AgentCore BIEN → confirma antes de implementar
# ✅ Antes de implementar, el agente pregunta:
# "El campo task.type: ¿es un Enum en DB o string libre?"
# "¿Qué debe devolver si el tipo no tiene agente asignado?"
# Solo después de respuesta → implementa
02
Simplicidad Primero
"Código mínimo que resuelve el problema. Nada especulativo."
✓ Hacer
✓ Código mínimo que pasa los tests
✓ Una función, una responsabilidad
✓ Si puede ser 30 líneas, no sean 100
✓ Preguntarse: "¿un senior diría que esto es overcomplicated?"
✗ No hacer
✗ Crear AbstractAgentFactory sin que nadie la pida
✗ Añadir parámetros de configuración no requeridos
✗ Patrones de diseño para uso único
✗ Error handling para escenarios imposibles en AgentCore
Anti-patrón frecuente en AgentCore OVER-ENGINEERED
# ❌ Nadie pidió esto
class AbstractAgentFactory:
    def create_agent(self, config: AgentConfig) -> BaseAgent: ...
class ConcreteAgentFactory(AbstractAgentFactory):
    def create_agent(self, config) -> BaseAgent:
        return AgentRegistry.get(config.type)(config)

# ✅ Lo que pidieron: un dict de 2 líneas
AGENTS = {"seo": SeoAgent, "copy": CopyAgent}
get_agent = lambda t: AGENTS[t]()
03
Cambios Quirúrgicos
"Toca solo lo que debes. Limpia solo tu propio desorden."
✓ Hacer
✓ Cambiar solo las líneas que resuelven la petición
✓ Mantener el estilo de código existente
✓ Eliminar imports/vars que TUS cambios dejaron huérfanos
✓ Mencionar código muerto adyacente sin borrarlo
✗ No hacer
✗ "Mejorar" funciones adyacentes no rotas
✗ Reformatear bloques que no tocas
✗ Renombrar variables por estilo personal
✗ Eliminar código preexistente sin pedirlo
Test de cambio quirúrgico → cada línea modificada tiene su razón
# Petición: "añade logging al endpoint /run"

# ❌ El agente también refactoriza validate_task()
@app.post("/run")
async def run_task(task: Task):
    validate_task_improved(task)  # ← no se pidió refactor
    result = await execute(task)
    return {"data": result, "version": "v2"}  # ← no se pidió

# ✅ Solo añade el logging pedido
@app.post("/run")
async def run_task(task: Task):
    validate_task(task)
    logger.info("task_started", task_id=task.id, type=task.type)
    result = await execute(task)
    logger.info("task_done", task_id=task.id)
    return result
04
Ejecución Orientada a Objetivos
"Define criterios de éxito. Itera hasta verificar."
✓ Hacer
✓ Escribir el test que define "hecho" antes del código
✓ Para tareas multi-paso: listar el plan con verificaciones
✓ "Arregla el bug" → reproduce el bug en test primero
✓ Loop autónomo hasta que todos los checks pasen
✗ No hacer
✗ Criterio vago: "make it work"
✗ Marcar como done sin haber ejecutado el test
✗ Pedir confirmación humana en cada sub-paso trivial
✗ Ignorar fallos de tests existentes al hacer cambios
Plan tipo para tarea AgentCore TEMPLATE
# Tarea: "Añadir rate limiting al router de agentes"

# Plan orientado a objetivos:
"""
1. Escribir test: task_router rechaza >10 req/s por cliente
   → verificar: test_rate_limit_exceeded() pasa en rojo

2. Implementar SlowDownMiddleware en FastAPI
   → verificar: test pasa en verde; tests existentes siguen ok

3. Añadir config RATE_LIMIT_PER_SEC en settings.py
   → verificar: pytest -q retorna 0 errores

4. Documentar en docstring del router
   → verificar: sin regresiones en test suite completo
"""