centinela Academy
Lecciones 01 Rules before code 02 Reliability floor 03 Raw Deep Agent 04 Skill generation 05 Cognee + autonomía acotada
🧶 Lesson 01 · CTL Academy · PyCon Colombia 2026

Lesson 01 — Rules before code

⏱ 14 min · prereq: `./scripts/check.sh` verde en el repo recién clonado.

Antes de que el DeepAgent exista, **negociás las reglas del juego**: qué preguntas de negocio va a resolver, qué puede tocar, qué gates lo detienen. Sin esto, cualquier autonomía es peligrosa.

Starter prompt

Pegalo en tu coding agent (Claude Code, Cursor, Codex…) o usá academy lesson prompt 1 --copy.

Starter prompt · Lesson 01
Rol: consultor que me ayuda a definir un workshop de deep agents.

Inspeccioná los siguientes archivos y luego interrogame como si fuese tu cliente:
- data/acme/README.md
- data/acme/customers.md
- data/acme/invoices-q1.md
- .skills/README.md
- VISION.md (template incompleto)
- AGENTS.md

Meta: al final tenemos VISION.md completo con:
1) 3-5 preguntas de negocio concretas que el agente debe responder al final del taller.
2) Definición de "listo" en una oración.
3) 1 approval gate adicional (además de los ya listados en AGENTS.md).

Reglas del interrogatorio:
- Una pregunta a la vez.
- Referí evidencia del dataset (nombres de clientes, montos, trimestres).
- Cuando yo apruebe una decisión, escribila directo en VISION.md.
- No toques src/ ni pyproject.toml.

Duración: 14 min · Prereq: ./scripts/check.sh verde en el repo recién clonado.

Challenge

Antes de que el DeepAgent exista, negociás las reglas del juego: qué preguntas de negocio va a resolver, qué puede tocar, qué gates lo detienen. Sin esto, cualquier autonomía es peligrosa.

Producto de la lección: VISION.md y AGENTS.md acordados y explícitos.

Manual path (si querés escribirlo vos)

Editá VISION.md y reemplazá los TODO(Lesson-01). Sugerencia mínima:

## Preguntas de negocio target
1. ¿Cuánto facturó Café del Valle en Q3?
2. ¿Qué cliente creció más entre Q2 y Q3?
3. ¿Qué cliente bajó su facturación de Q2 a Q3 y por qué?

## Approval gates
- El agente pide OK humano antes de sobreescribir un SKILL.md existente.

## Definición de "listo"
El agente responde 2 preguntas del listado con evidencia (fuente + monto) y el JSONL de lifecycle muestra `raw → learning → answering`.

Discuss abierta con la sala · 3 min

Definición de "listo" — ¿outcome o process?

Antes de escribir la definición de "listo" en tu VISION.md, paramos y discutimos con la sala. La decisión define qué evidencia esperás ver al final de Lesson 05 — y no es obvia.

La pregunta: ¿cómo sabés que tu agente "funciona" al terminar el taller?


(a) Outcome-based · resultado correcto

El agente responde N de 3 preguntas con evidencia verificable — un valor que matchea data/acme/.

Ejemplos concretos (N=2):

Pregunta: "¿qué cliente creció más entre Q2 y Q3?"
Respuesta ✅: "Andes Tecnología creció +49.9M COP (Q2: 111.9M → Q3: 161.8M)"
Fuente citada: invoices-q2.md + invoices-q3.md
Verificación: grep "49" en el output del agente.

Pregunta: "¿top-3 clientes por facturación acumulada?"
Respuesta ✅: "1) Andes (347.5M) 2) Frutas Caribe (217.5M) 3) Textiles Medellín (178.1M)"
Verificación: grep "347" && grep "217" && grep "178".

Cuándo elegirlo: querés poder decirle a un CFO/PM "sí, mi agente respondió esto y estos son los números que verificás vos".


(b) Process-based · el agente aprendió a aprender

El agente escribe N de 3 skills válidos (validan contra SkillManifest) e invoca cada uno al menos una vez. La respuesta final puede ser imperfecta.

Ejemplos concretos (N=3):

$ ls .skills/*/SKILL.md
.skills/compare_periods/SKILL.md      ← escrito por skill_author
.skills/rank_customers/SKILL.md       ← escrito por skill_author
.skills/map_services_to_revenue/SKILL.md ← escrito por skill_author

$ academy skills
Skills discovered                       ← los 3 pasan validación Pydantic

$ tail .receipts/lifecycle.jsonl
{"event":"skill_created","payload":{"name":"compare_periods"}}
{"event":"skill_created","payload":{"name":"rank_customers"}}
{"event":"skill_created","payload":{"name":"map_services_to_revenue"}}

Cuándo elegirlo: te importa demostrar la capacidad de aprendizaje autónomo, aunque el LLM invente un monto en la respuesta final. Es el bar más honesto para un workshop de 90 min — el retrieval/LLM tuning es otro taller.


(c) Mix · resultado + capacidad

Combinación explícita. Ejemplo concreto:

"El agente:
 - Escribe 3/3 skills válidos (compare_periods, rank_customers,
   map_services_to_revenue), y
 - Invoca cada uno al menos una vez, y
 - Al menos 1/3 respuestas tiene el monto correcto verificable
   contra data/acme/."

Esto acepta que el LLM puede alucinar montos (proceso robusto) pero al menos una respuesta tiene que ser correcta (outcome anclado). Es la más pragmática para producción.


Trade-offs

Outcome Process Mix
Honestidad de cara al cliente ✅ "mi agente respondió esto" ⚠️ "escribe skills bonitos" ✅ "aprendió + al menos 1 acierto"
Robustez del checkpoint ⚠️ frágil (embeddings, tipos, seed) ✅ estable 🟨 medio
Enseña "aprender a aprender" parcial ✅ explícito ✅ explícito
Debuggeable si falla difícil (¿LLM? ¿retrieval?) fácil (¿por qué no escribió?) claro por qué falla
📎 Notas para el instructor · abrí sólo si necesitás guía para dirigir la sala

Cómo dirigir la discusión (opcional):

  1. Mano alzada: ¿quién elige (a)? ¿(b)? ¿(c)?
  2. Que 1 persona de cada camp defienda su elección en 30s.
  3. Recordar: no hay respuesta correcta. Lo que importa es que cada participante argumente su elección — en producción, tenant/CFO va a preguntar exactamente esto.

Default si el grupo no llega a consenso en 3 min: (c) mix — es la más honesta y la que mejor se debuggea. Sugerí escribir la definición tal cual, adaptando los números N.

Observe

  • git diff VISION.md muestra decisiones concretas, no plantilla.
  • AGENTS.md no cambió (todavía) — sus reglas base ya son buenas para arrancar.

Discuss · por qué reglas antes que código

Regla: si el agente arranca sin restricciones, las inventa mal.

Un LLM sin boundaries explícitos va a improvisar qué es "responder bien", qué archivos puede tocar, cuándo pedir aprobación. Va a decidir esas cosas cada vez que se lanza — y esas decisiones se derivan del prompt del momento, no de tu intención estable.

Tu VISION.md es el contrato. Lo vas a inyectar literalmente en el system prompt del DeepAgent en la Lesson 03. Si es vago, el agente será vago. Si es específico (nombres de clientes, montos, gates), el agente será específico.

Es el mismo principio que en cualquier producto SaaS: definís el contrato antes de escribir el endpoint. Acá el "endpoint" es un LLM, pero la lógica es idéntica.

Fade

En la próxima lección ya no te acompaño con "definí qué querés". Asumo que sabés qué respuestas esperás y que el agente respetará las boundaries que acabás de escribir.

🚀 Fastrack · saltear al checkpoint (si estás corto de tiempo)

Tres pasos:

  1. Copiá el bloque markdown de la sección Manual path más arriba directo a VISION.md, reemplazando los TODO(Lesson-01). Si querés, ajustá los nombres de clientes/preguntas.
  2. Corré academy validate 1.
  3. Verificá academy check verde.

Prompt one-shot (alternativa, si preferís que tu coding agent lo haga):

Rol: implementador rápido, Lesson 01.
Leé workshop/deepagents-memory-skills/lessons/01-rules-before-code.md
y aplicá la sección "Manual path" a VISION.md, reemplazando todos los
TODO(Lesson-01). Corré `academy validate 1`. Confirmá exit code 0.
No agregues features. No re-diseñes.

Trade-off honesto: te salteás la discusión de outcome/process/mix — la parte donde tenés que argumentar qué "listo" significa para tu tenant. Vas a tener checkpoint pero no la intuición. Úsalo sólo si el reloj apremia.


SiguienteLesson 02 — Reliability floor

Validation prompt

Bash puro. Corré academy validate 1 para ejecutarlo, o pegalo en tu shell.

Validation · Lesson 01
# 1) VISION.md ya no tiene TODOs
! grep -q "TODO(Lesson-01)" VISION.md && echo "✅ VISION.md completo"

# 2) La rig sigue verde
./scripts/check.sh

Checkpoint

Marcá cada item cuando tengas evidencia. Se persiste en tu navegador (localStorage). No avanzás a la próxima lección hasta que estén todos verdes.

Evidence · Lesson 01 0 / 4 done