Lab 13 — Sub-Agents & Writer/Reviewer
Implementa el patrón Writer/Reviewer donde un agente build genera código y un agente reviewer lo verifica contra el código fuente real. Si encuentra problemas, un tercer step los corrige.
Concepto clave
Nivel: Avanzado
Duración estimada: 35 minutos. Features: sub-agents, pipeline, auto-review.
Un pipeline puede usar diferentes agentes en cada step. El patrón más útil: un agente build genera código, y un agente reviewer lo verifica contra el código fuente real (no contra su memoria). Si encuentra problemas, un tercer step fix los corrige.
Setup
mkdir -p ~/architect-labs/lab-13 && cd ~/architect-labs/lab-13
git init && mkdir -p src tests pipelines src/auth.py
import hashlib
import os
class AuthService:
def __init__(self):
self.users = {}
def register(self, username, password):
if username in self.users:
raise ValueError(f"User {'{username}'} already exists")
salt = os.urandom(32)
key = hashlib.pbkdf2_hmac('sha256', password.encode(), salt, 100000)
self.users[username] = {"salt": salt, "key": key}
return True
def login(self, username, password):
if username not in self.users:
return False
user = self.users[username]
key = hashlib.pbkdf2_hmac('sha256', password.encode(), user["salt"], 100000)
return key == user["key"] .architect.yaml
llm:
model: openai/gpt-4.1
api_base: http://localhost:4000/v1
api_key_env: LITELLM_API_KEY
agents:
build:
confirm_mode: yolo
max_steps: 50
reviewer:
system_prompt: >
Eres un code reviewer senior. Tu trabajo es encontrar bugs,
problemas de seguridad, y violaciones de buenas prácticas.
Siempre lees el código fuente real (no confíes en tu memoria).
Sé específico: indica archivo, línea, y fix sugerido.
allowed_tools: [read_file, search_code, grep, list_directory]
confirm_mode: yolo
max_steps: 20
guardrails:
max_files_modified: 15 git add -A && git commit -m "initial" Consejo
El agente reviewer tiene allowed_tools limitados a solo lectura. No puede editar archivos — solo inspeccionar y reportar.
Ejercicio 1: Pipeline Writer/Reviewer
pipelines/auth-expand.yaml
name: auth-expansion
steps:
- name: write
agent: build
task: >
Expande src/auth.py con:
1. Token-based sessions (genera token en login, valida en check_session)
2. Password requirements (min 8 chars, al menos 1 número, 1 mayúscula)
3. Rate limiting (max 5 intentos de login por usuario en 5 min)
4. Change password (requiere password actual)
Genera tests en tests/test_auth.py.
checkpoint: true
- name: review
agent: reviewer
task: >
Revisa src/auth.py y tests/test_auth.py generados en el step anterior.
Verifica:
1. Los tokens son suficientemente aleatorios?
2. El rate limiting tiene race conditions?
3. Los tests cubren edge cases (empty password, expired token)?
4. Hay timing attacks en las comparaciones?
Escribe REVIEW_NOTES.md con findings organizados por severidad.
- name: fix
agent: build
task: >
Lee REVIEW_NOTES.md y corrige todos los findings de severidad
HIGH y MEDIUM. Para findings LOW, añade un comentario TODO.
Ejecuta pytest tests/test_auth.py para verificar que todo pasa.
checkpoint: true architect pipeline pipelines/auth-expand.yaml \
--config .architect.yaml \
--report-file reports/auth-pipeline.json Qué observar:
- Step 1 (build): genera código
- Step 2 (reviewer): lee el código con tools de lectura (NO puede editar)
- Step 3 (build): corrige basándose en el review
cat REVIEW_NOTES.md
pytest tests/test_auth.py -v Ejercicio 2: Auto-review en run
architect run "Añade a src/auth.py un método revoke_all_sessions(username) \
que invalide todas las sesiones activas de un usuario. Añade tests." \
--config .architect.yaml \
--confirm-mode yolo \
--auto-review Con --auto-review, Architect automáticamente ejecuta un agente reviewer después de que el build termine, y aplica las correcciones si encuentra problemas.
Ejercicio 3: Sub-agentes especializados
pipelines/full-service.yaml
name: full-service
steps:
- name: design
agent: build
task: >
Crea DESIGN.md con la especificación de un UserService que incluya:
CRUD de usuarios, búsqueda, paginación, y export. Define la API
pública (métodos, params, returns) sin implementar.
- name: implement
agent: build
task: >
Implementa el diseño de DESIGN.md en src/user_service.py.
Usa dataclasses para User. Implementa todos los métodos.
- name: test
agent: build
task: >
Genera tests exhaustivos en tests/test_user_service.py.
Usa fixtures de pytest. Cubre todos los métodos y edge cases.
Ejecuta pytest para verificar.
- name: security-review
agent: reviewer
task: >
Revisa src/user_service.py buscando:
1. Inyección en búsquedas
2. Leaks de datos sensibles
3. Falta de validación de input
Escribe findings en SECURITY_REVIEW.md.
- name: harden
agent: build
task: >
Corrige los findings de SECURITY_REVIEW.md.
Añade validaciones y sanitización donde haga falta.
Re-ejecuta tests. architect pipeline pipelines/full-service.yaml \
--config .architect.yaml Consejo
Este pipeline de 5 pasos (design → implement → test → review → harden) es un patrón robusto para generar código seguro y bien testeado.
Resumen
| Concepto | Descripción |
|---|---|
agents.reviewer | Agente con permisos de solo lectura |
allowed_tools | Limita qué tools puede usar un agente |
| Writer/Reviewer | Patrón: uno genera, otro verifica |
--auto-review | Auto-review después de cada run |
| Sub-agentes | Agentes especializados en steps del pipeline |
Siguiente lab
Lab 14: MCP Integration — Conecta Architect a herramientas externas vía MCP.