Producción · Políticas versionadas y auditables
Governance-as-code
En 2026, la diferencia entre un POC y un agente en producción es la gobernanza. OpenClaw aplica el principio governance-as-code: las políticas viven en tu repositorio, se revisan en pull request, se versionan y se aplican consistentemente a todos los agentes.
Anatomía de una policy
# policies/support.yaml
version: 1
name: support-agent-policy
appliesTo: ['support', 'support-escalations']
budget:
perConversation: { eur: 0.5 }
perDay: { eur: 200 }
onExceeded: escalate
dataProtection:
piiRedaction: true # redactar PII antes de log/LLM
piiTypes: [email, phone, nif, iban, creditcard]
dataResidency: eu-west-1
humanApproval:
rules:
- whenToolMatches: 'refund_*'
andInputExceeds: { amount: 100 }
approvalChannel: slack
target: '#support-approvals'
timeoutSeconds: 300
- whenToolMatches: 'delete_*'
approvalChannel: dashboard
contentFilters:
disallowOutput:
- medicalAdvice # guardrails integrados
- legalAdvice
- investmentAdvice
customPatterns:
- regex: '(?i)garantía de \d+%'
action: rewrite
replacement: 'resultados estimados'
auditing:
logLevel: full # prompts + outputs + tool calls
retentionDays: 365
exportTo: s3://audit-bucket/openclaw/Cargar policies en código
import { loadPolicy } from '@openclaw/sdk/policy';
const supportPolicy = loadPolicy('./policies/support.yaml');
claw.agent({
name: 'support',
policy: supportPolicy,
systemPrompt: '...',
tools: [...],
});También se pueden definir en TypeScript con tipado completo si prefieres mantenerlas junto al código del agente:
import { definePolicy } from '@openclaw/sdk/policy';
export const supportPolicy = definePolicy({
version: 1,
name: 'support-agent-policy',
budget: { perConversation: { eur: 0.5 } },
humanApproval: {
rules: [
{
whenToolMatches: /^refund_/,
andInputExceeds: { amount: 100 },
approvalChannel: 'slack',
target: '#support-approvals',
},
],
},
// ... resto
});Auditoría y trazabilidad
Cada interacción del agente se audita: prompt del sistema, mensaje del usuario, modelo usado, tools invocadas, outputs, tokens, coste, tiempo. Exportable a SIEM o data lake.
// Ejemplo de registro de auditoría
{
"traceId": "tr_01HX3Y...",
"agent": "support",
"channel": "whatsapp",
"userId": "usr_abc123",
"conversationId": "conv_xyz",
"timeline": [
{ "t": 0, "event": "user_message", "len": 42 },
{ "t": 120, "event": "model_call", "model": "claude-haiku-4-5", "tokens": 1230 },
{ "t": 1850, "event": "tool_call", "tool": "get_order_status", "input": "…redacted pii…" },
{ "t": 2100, "event": "tool_result", "status": "ok" },
{ "t": 2250, "event": "model_call", "model": "claude-haiku-4-5", "tokens": 890 },
{ "t": 3400, "event": "response_delivered", "len": 210 }
],
"cost_eur": 0.0034,
"policyChecks": [
{ "policy": "budget.perConversation", "result": "pass" },
{ "policy": "humanApproval.refund", "result": "not_applicable" }
]
}Tests de compliance en CI
Las policies se testean como cualquier código: ejecuta suites de prompts esperados y verifica que las decisiones del agente respetan la política.
// tests/policy-support.test.ts
import { testPolicy } from '@openclaw/sdk/testing';
import { supportPolicy } from '../policies/support';
testPolicy(supportPolicy, {
scenarios: [
{
name: 'Refund < 100€ no requiere aprobación',
tool: 'refund_order',
input: { amount: 50 },
expect: { humanApproval: false },
},
{
name: 'Refund > 100€ requiere aprobación en Slack',
tool: 'refund_order',
input: { amount: 250 },
expect: { humanApproval: true, channel: 'slack' },
},
],
});Anterior
MCP
Siguiente
Despliegue