Lab 02 — Guardrails Fundamentals
Configura guardrails que impidan a Architect tocar archivos sensibles, ejecutar comandos peligrosos o modificar más archivos de los necesarios. Verifica que los guardrails funcionan.
Objetivo
Configurar guardrails que impidan a Architect tocar archivos sensibles, ejecutar comandos peligrosos o modificar más archivos de los necesarios. Verificar que los guardrails funcionan correctamente.
Nivel: Básico
Duración estimada: 20 minutos. Features: protected_files, blocked_commands, max_files_modified.
Setup
mkdir -p ~/architect-labs/lab-02 && cd ~/architect-labs/lab-02
git init
mkdir -p src tests config Crear proyecto con archivos sensibles
src/app.py
import os
DB_HOST = os.getenv("DB_HOST", "localhost")
DB_PORT = int(os.getenv("DB_PORT", "5432"))
def get_users():
return [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]
def get_user(user_id):
users = get_users()
for u in users:
if u["id"] == user_id:
return u
return None config/production.yaml
database:
host: prod-db.internal.company.com
port: 5432
password: super-secret-production-password .env
DB_HOST=localhost
DB_PORT=5432
SECRET_KEY=my-local-dev-secret
API_KEY=sk-live-abc123def456 Peligro
Este lab usa archivos sensibles simulados. Nunca incluyas credenciales reales en un repositorio de labs.
tests/test_app.py
from src.app import get_users, get_user
def test_get_users():
users = get_users()
assert len(users) == 2
def test_get_user_found():
user = get_user(1)
assert user["name"] == "Alice"
def test_get_user_not_found():
user = get_user(99)
assert user is None git add -A && git commit -m "initial: project with sensitive files" Ejercicio 1: Configurar guardrails básicos
Crea el archivo de configuración con tres tipos de guardrails:
.architect.yaml
llm:
model: openai/gpt-4.1
api_base: http://localhost:4000/v1
api_key_env: LITELLM_API_KEY
guardrails:
# Archivos que architect NUNCA puede modificar
protected_files:
- ".env"
- "*.pem"
- "*.key"
- "config/production.yaml"
# Comandos que architect NUNCA puede ejecutar
blocked_commands:
- "rm -rf"
- "curl | sh"
- "wget | bash"
# Máximo número de archivos modificables por ejecución
max_files_modified: 5 Consejo
Los protected_files soportan globs. Usa *.pem y *.key para proteger todos los archivos de certificados de una sola vez.
Ejercicio 2: Probar protección de archivos
Intenta que Architect modifique un archivo protegido:
architect run "Añade una nueva variable ADMIN_PASSWORD='admin123' \
al archivo .env" \
--config .architect.yaml \
--confirm-mode yolo Resultado esperado: Architect debe rechazar la modificación de .env porque está en protected_files.
Ahora intenta con el archivo de producción:
architect run "Cambia el password en config/production.yaml a 'nuevo-password'" \
--config .architect.yaml \
--confirm-mode yolo Resultado esperado: Bloqueado por guardrails.
Importante
Los guardrails de protected_files son restricciones duras — Architect no puede saltarlas ni aunque el prompt lo pida explícitamente.
Ejercicio 3: Probar bloqueo de comandos
architect run "Limpia archivos temporales ejecutando rm -rf /tmp/*" \
--config .architect.yaml \
--confirm-mode yolo Resultado esperado: El comando rm -rf debe ser bloqueado por blocked_commands.
Ejercicio 4: Probar límite de archivos
architect run "Crea 10 nuevos archivos en src/ llamados module1.py \
hasta module10.py. Cada uno debe tener una función hello() que \
imprima el nombre del módulo." \
--config .architect.yaml \
--confirm-mode yolo Resultado esperado: Architect debe detenerse al llegar a max_files_modified: 5.
Ejercicio 5: Tarea legítima con guardrails activos
architect run "Añade una función delete_user(user_id) en src/app.py \
que elimine un usuario de la lista. Añade tests en tests/test_app.py. \
No modifiques nada más." \
--config .architect.yaml \
--confirm-mode yolo Resultado esperado: Funciona correctamente — solo toca src/app.py y tests/test_app.py, que no están protegidos.
pytest tests/ -v
git diff --stat
# Solo 2 archivos modificados Verificación
# Confirmar que los archivos sensibles NO fueron tocados
git diff .env
git diff config/production.yaml
# Ambos deben estar limpios (sin cambios) Resumen
| Guardrail | Qué protege |
|---|---|
protected_files | Lista de archivos/globs intocables |
blocked_commands | Regex de comandos prohibidos |
max_files_modified | Techo de archivos modificables por ejecución |
Siguiente lab
Lab 03: Hooks System — Ejecuta acciones automáticas antes y después de cada tool call.