santismm-knowledge-mcp 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +62 -0
- package/content/CONVENTIONS.md +77 -0
- package/content/LICENSE +55 -0
- package/content/architectures/ai-workforce.json +280 -0
- package/content/architectures/customer-service-agent.json +292 -0
- package/content/architectures/enterprise-knowledge-assistant.json +292 -0
- package/content/architectures/operations-center.json +280 -0
- package/content/architectures/sales-copilot.json +280 -0
- package/content/governance/agentic-ai-governance-checklist.json +323 -0
- package/content/governance/audit-framework-for-agentic-systems.json +280 -0
- package/content/governance/enterprise-ai-governance-framework.json +277 -0
- package/content/governance/eu-ai-act.json +162 -0
- package/content/governance/human-oversight-and-accountability-policy.json +275 -0
- package/content/governance/iso-42001.json +161 -0
- package/content/governance/mitre-atlas.json +280 -0
- package/content/governance/nist-ai-rmf.json +161 -0
- package/content/governance/owasp-llm-top10.json +301 -0
- package/content/harness/HRN-001-definition-and-overview.es.md +76 -0
- package/content/harness/HRN-001-definition-and-overview.md +125 -0
- package/content/harness/HRN-001-definition-and-overview.pt.md +76 -0
- package/content/harness/HRN-002-a-brief-history-of-harness-engineering.es.md +83 -0
- package/content/harness/HRN-002-a-brief-history-of-harness-engineering.md +113 -0
- package/content/harness/HRN-002-a-brief-history-of-harness-engineering.pt.md +83 -0
- package/content/harness/HRN-003-the-harness-taxonomy.es.md +105 -0
- package/content/harness/HRN-003-the-harness-taxonomy.md +158 -0
- package/content/harness/HRN-003-the-harness-taxonomy.pt.md +105 -0
- package/content/harness/HRN-004-harness-engineering-principles.es.md +91 -0
- package/content/harness/HRN-004-harness-engineering-principles.md +135 -0
- package/content/harness/HRN-004-harness-engineering-principles.pt.md +91 -0
- package/content/harness/HRN-005-memory-in-agentic-systems.es.md +98 -0
- package/content/harness/HRN-005-memory-in-agentic-systems.md +145 -0
- package/content/harness/HRN-005-memory-in-agentic-systems.pt.md +98 -0
- package/content/harness/HRN-006-observability-for-agentic-systems.es.md +97 -0
- package/content/harness/HRN-006-observability-for-agentic-systems.md +139 -0
- package/content/harness/HRN-006-observability-for-agentic-systems.pt.md +97 -0
- package/content/harness/HRN-007-evaluation-of-agentic-systems.es.md +96 -0
- package/content/harness/HRN-007-evaluation-of-agentic-systems.md +145 -0
- package/content/harness/HRN-007-evaluation-of-agentic-systems.pt.md +96 -0
- package/content/harness/HRN-008-governance-within-the-harness.es.md +105 -0
- package/content/harness/HRN-008-governance-within-the-harness.md +146 -0
- package/content/harness/HRN-008-governance-within-the-harness.pt.md +105 -0
- package/content/harness/HRN-009-planning-and-goal-management.es.md +102 -0
- package/content/harness/HRN-009-planning-and-goal-management.md +142 -0
- package/content/harness/HRN-009-planning-and-goal-management.pt.md +102 -0
- package/content/harness/HRN-010-orchestration.es.md +107 -0
- package/content/harness/HRN-010-orchestration.md +149 -0
- package/content/harness/HRN-010-orchestration.pt.md +107 -0
- package/content/harness/HRN-011-security-for-agentic-systems.es.md +107 -0
- package/content/harness/HRN-011-security-for-agentic-systems.md +147 -0
- package/content/harness/HRN-011-security-for-agentic-systems.pt.md +107 -0
- package/content/harness/HRN-012-case-studies-in-harness-engineering.es.md +120 -0
- package/content/harness/HRN-012-case-studies-in-harness-engineering.md +157 -0
- package/content/harness/HRN-012-case-studies-in-harness-engineering.pt.md +120 -0
- package/content/harness/HRN-013-glossary.es.md +109 -0
- package/content/harness/HRN-013-glossary.md +124 -0
- package/content/harness/HRN-013-glossary.pt.md +109 -0
- package/content/harness/HRN-014-bibliography.es.md +89 -0
- package/content/harness/HRN-014-bibliography.md +109 -0
- package/content/harness/HRN-014-bibliography.pt.md +89 -0
- package/content/homeric/episodes/achilles-and-hector.json +139 -0
- package/content/homeric/episodes/aeolus-and-the-winds.json +131 -0
- package/content/homeric/episodes/agamemnons-murder.json +162 -0
- package/content/homeric/episodes/calypso-ogygia.json +157 -0
- package/content/homeric/episodes/catalogue-of-ships.json +177 -0
- package/content/homeric/episodes/cattle-of-the-sun.json +131 -0
- package/content/homeric/episodes/chryse-and-the-plague.json +131 -0
- package/content/homeric/episodes/cicones-at-ismarus.json +131 -0
- package/content/homeric/episodes/circe-on-aeaea.json +131 -0
- package/content/homeric/episodes/cyclops-polyphemus.json +162 -0
- package/content/homeric/episodes/laestrygonians.json +153 -0
- package/content/homeric/episodes/lotus-eaters.json +138 -0
- package/content/homeric/episodes/menelaus-and-proteus.json +130 -0
- package/content/homeric/episodes/nekyia.json +160 -0
- package/content/homeric/episodes/phaeacians-on-scheria.json +129 -0
- package/content/homeric/episodes/priams-ransom.json +131 -0
- package/content/homeric/episodes/return-to-ithaca.json +167 -0
- package/content/homeric/episodes/scylla-and-charybdis.json +131 -0
- package/content/homeric/episodes/suitors-ambush-at-asteris.json +131 -0
- package/content/homeric/episodes/telemachus-at-pylos.json +130 -0
- package/content/homeric/episodes/telemachus-in-sparta.json +130 -0
- package/content/homeric/episodes/the-achaean-camp.json +138 -0
- package/content/homeric/episodes/the-sirens.json +129 -0
- package/content/homeric/episodes/wooden-horse.json +168 -0
- package/content/homeric/places/aeaea.json +129 -0
- package/content/homeric/places/aeolia.json +161 -0
- package/content/homeric/places/asteris.json +120 -0
- package/content/homeric/places/aulis.json +122 -0
- package/content/homeric/places/cape-malea.json +126 -0
- package/content/homeric/places/chryse.json +120 -0
- package/content/homeric/places/dodona.json +129 -0
- package/content/homeric/places/dulichium.json +177 -0
- package/content/homeric/places/egypt.json +125 -0
- package/content/homeric/places/ephyra-acheron.json +127 -0
- package/content/homeric/places/hellespont.json +125 -0
- package/content/homeric/places/house-of-hades.json +91 -0
- package/content/homeric/places/ismarus.json +120 -0
- package/content/homeric/places/ithaca.json +240 -0
- package/content/homeric/places/knossos.json +132 -0
- package/content/homeric/places/laestrygonia.json +168 -0
- package/content/homeric/places/land-of-the-cyclopes.json +169 -0
- package/content/homeric/places/land-of-the-lotus-eaters.json +122 -0
- package/content/homeric/places/mount-ida.json +126 -0
- package/content/homeric/places/mycenae.json +152 -0
- package/content/homeric/places/ogygia.json +125 -0
- package/content/homeric/places/pharos.json +120 -0
- package/content/homeric/places/planctae.json +77 -0
- package/content/homeric/places/pylos.json +188 -0
- package/content/homeric/places/same.json +177 -0
- package/content/homeric/places/scheria.json +129 -0
- package/content/homeric/places/scylla-and-charybdis.json +135 -0
- package/content/homeric/places/sirens.json +127 -0
- package/content/homeric/places/sparta.json +179 -0
- package/content/homeric/places/tenedos.json +129 -0
- package/content/homeric/places/thrinacia.json +116 -0
- package/content/homeric/places/tiryns.json +123 -0
- package/content/homeric/places/troy.json +224 -0
- package/content/homeric/places/zacynthus.json +126 -0
- package/content/homeric/routes/achaean-expedition.json +132 -0
- package/content/homeric/routes/nostoi-of-the-others.json +205 -0
- package/content/homeric/routes/odysseus-nostos.json +307 -0
- package/content/homeric/routes/telemachy.json +134 -0
- package/content/knowledge/agent-memory.json +153 -0
- package/content/knowledge/agentic-ai.json +158 -0
- package/content/knowledge/agentic-evaluation.json +156 -0
- package/content/knowledge/agentic-threat-model.json +287 -0
- package/content/knowledge/ai-agent.json +153 -0
- package/content/knowledge/ai-cyberdefense.json +274 -0
- package/content/knowledge/ai-governance.json +155 -0
- package/content/knowledge/ai-observability.json +156 -0
- package/content/knowledge/context-engineering.json +153 -0
- package/content/knowledge/embeddings.json +153 -0
- package/content/knowledge/enterprise-rag.json +154 -0
- package/content/knowledge/fine-tuning.json +153 -0
- package/content/knowledge/foundation-models.json +154 -0
- package/content/knowledge/guardrails.json +153 -0
- package/content/knowledge/harness-engineering.json +158 -0
- package/content/knowledge/human-in-the-loop.json +153 -0
- package/content/knowledge/mcp-security.json +284 -0
- package/content/knowledge/model-context-protocol.json +154 -0
- package/content/knowledge/multi-agent-architecture.json +153 -0
- package/content/knowledge/prompt-engineering.json +153 -0
- package/content/knowledge/prompt-injection.json +138 -0
- package/content/knowledge/reasoning-models.json +153 -0
- package/content/knowledge/tool-use.json +156 -0
- package/content/library/cognitive-architecture-emergent-ai.md +15 -0
- package/content/library/devready-ep108-ai-customer-experiences.md +14 -0
- package/content/library/how-genai-impact-business.md +12 -0
- package/content/library/lmm-reshaping-industries-2024.md +12 -0
- package/content/library/rethinking-ai-pause.md +12 -0
- package/content/library/rise-of-agentic-ai.md +16 -0
- package/content/library/self-improving-autonomous-ai.md +16 -0
- package/content/library/the-stopwatch-and-the-exam.md +12 -0
- package/content/library/unlock-gpt4-secrets.md +12 -0
- package/content/library/vibe-coding-enterprise.md +15 -0
- package/content/library/video-transformando-negocios-genai.md +14 -0
- package/content/library/video-volando-alto-sky-airlines.md +13 -0
- package/content/matrix/agentic-control-matrix.json +967 -0
- package/content/patterns/attributed-memory.json +237 -0
- package/content/patterns/context-compression.json +304 -0
- package/content/patterns/egress-allowlist.json +310 -0
- package/content/patterns/evaluator-optimizer.json +180 -0
- package/content/patterns/goal-decomposition.json +290 -0
- package/content/patterns/human-approval-gate.json +311 -0
- package/content/patterns/human-escalation.json +288 -0
- package/content/patterns/least-privilege-tooling.json +333 -0
- package/content/patterns/long-term-memory.json +305 -0
- package/content/patterns/orchestrator-workers.json +202 -0
- package/content/patterns/parallelization.json +180 -0
- package/content/patterns/prompt-chaining.json +181 -0
- package/content/patterns/recovery-strategy.json +305 -0
- package/content/patterns/reflection.json +298 -0
- package/content/patterns/routing.json +294 -0
- package/content/patterns/sandboxed-execution.json +311 -0
- package/content/patterns/semantic-caching.json +201 -0
- package/content/patterns/supervisor-agent.json +290 -0
- package/content/patterns/task-prioritization.json +307 -0
- package/dist/content.js +181 -0
- package/dist/index.js +27 -0
- package/dist/shape.js +649 -0
- package/dist/tools.js +652 -0
- package/package.json +47 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "routing",
|
|
3
|
+
"category": "orchestration",
|
|
4
|
+
"updated": "2026-06-24",
|
|
5
|
+
"version": "1.1",
|
|
6
|
+
"technologies": [
|
|
7
|
+
"Classifier models",
|
|
8
|
+
"LangGraph",
|
|
9
|
+
"Model routers",
|
|
10
|
+
"Rules engines"
|
|
11
|
+
],
|
|
12
|
+
"related": [
|
|
13
|
+
"prompt-chaining",
|
|
14
|
+
"orchestrator-workers",
|
|
15
|
+
"parallelization"
|
|
16
|
+
],
|
|
17
|
+
"references": [
|
|
18
|
+
{
|
|
19
|
+
"title": "Anthropic — Building Effective Agents (2024)",
|
|
20
|
+
"url": "https://www.anthropic.com/research/building-effective-agents"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"evidence": {
|
|
24
|
+
"evidenceLevel": "production",
|
|
25
|
+
"confidenceLevel": "low",
|
|
26
|
+
"sourceType": ["production_system", "personal_experience", "industry_observation"]
|
|
27
|
+
},
|
|
28
|
+
"locales": {
|
|
29
|
+
"en": {
|
|
30
|
+
"name": "Routing",
|
|
31
|
+
"summary": "Routing classifies an input and directs it to the most appropriate specialized handler, prompt or model. It improves quality by letting each path be optimized for its case, and controls cost by sending easy requests to cheap models and hard ones to capable models.",
|
|
32
|
+
"definition": "Routing is a pattern that classifies each incoming request and dispatches it to the most appropriate handler or model, so easy inputs use cheap paths and hard inputs use capable ones.",
|
|
33
|
+
"problem": "A single prompt or model handling every kind of input does each one worse, and using one expensive model for everything wastes money on easy requests.",
|
|
34
|
+
"context": "Use routing when inputs fall into distinct categories that benefit from different handling — different prompts, tools, models or workflows — and the categories can be classified reliably.",
|
|
35
|
+
"solution": [
|
|
36
|
+
"A lightweight classifier (an LLM call or a model) labels the input, then a router sends it to the matching downstream handler. Each handler is specialized and optimized for its category.",
|
|
37
|
+
"Routing also enables cost-performance tiering: route simple queries to a fast, cheap model and complex ones to a stronger reasoning model, paying for capability only when it is needed."
|
|
38
|
+
],
|
|
39
|
+
"components": [
|
|
40
|
+
"Classifier",
|
|
41
|
+
"Routing logic",
|
|
42
|
+
"Specialized handlers",
|
|
43
|
+
"Fallback / default route"
|
|
44
|
+
],
|
|
45
|
+
"benefits": [
|
|
46
|
+
"Each path is optimized for its case, raising quality.",
|
|
47
|
+
"Cost control by tiering models to difficulty.",
|
|
48
|
+
"Separation of concerns keeps each handler simple."
|
|
49
|
+
],
|
|
50
|
+
"risks": [
|
|
51
|
+
"Misclassification sends inputs down the wrong path.",
|
|
52
|
+
"The classifier adds a step and some latency.",
|
|
53
|
+
"Category drift over time degrades routing accuracy."
|
|
54
|
+
],
|
|
55
|
+
"whenNot": [
|
|
56
|
+
"When inputs are homogeneous — one handler suffices.",
|
|
57
|
+
"When categories cannot be classified reliably.",
|
|
58
|
+
"When the added classification step is not worth the gain."
|
|
59
|
+
],
|
|
60
|
+
"examples": [
|
|
61
|
+
"Routing support tickets to billing, technical or sales handlers.",
|
|
62
|
+
"Sending simple questions to a small model and hard ones to a reasoning model.",
|
|
63
|
+
"Directing different document types to type-specific extractors."
|
|
64
|
+
],
|
|
65
|
+
"productionEvidence": {
|
|
66
|
+
"context": "Single-operator, local-first OpenClaw deployment observed over 57 days (161 sessions / 2,776 turns), aggregated from the agent's own trajectory traces.",
|
|
67
|
+
"scenario": "Inbound channel messages and autonomous wake-ups are routed to one agent through distinct entrypoints, with channel/peer/role bindings selecting the session.",
|
|
68
|
+
"technology": "Binding + route registry (resolveAgentRoute), per-channel session keys, and a resolved-route cache.",
|
|
69
|
+
"load": "3 channels (Telegram, web chat, WhatsApp) and 4 trigger kinds (user, heartbeat, cron, memory).",
|
|
70
|
+
"results": "Routing held across all three channels and four trigger types with no misroute surfacing as a failure (98.8% session success overall). Single-operator local-first deployment — a working reference, not a scale benchmark."
|
|
71
|
+
},
|
|
72
|
+
"kpis": [
|
|
73
|
+
{
|
|
74
|
+
"metric": "Routing accuracy",
|
|
75
|
+
"note": "Share of inputs sent to the correct handler/model; the single metric that defines the pattern's value."
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"metric": "Cost savings vs. always-best-model",
|
|
79
|
+
"note": "Money saved by routing easy inputs to cheaper models instead of the top one for everything."
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"metric": "Misroute cost",
|
|
83
|
+
"note": "The downstream damage of wrong routes — a misroute can cost far more than the savings it chased."
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
"metric": "Router latency overhead",
|
|
87
|
+
"note": "Time the routing decision itself adds before any real work begins."
|
|
88
|
+
}
|
|
89
|
+
],
|
|
90
|
+
"failureModes": [
|
|
91
|
+
"Misclassification: the router sends an input to the wrong model or path, degrading the answer.",
|
|
92
|
+
"Ambiguous inputs that don't fit any route cleanly and get forced into a poor one.",
|
|
93
|
+
"Router becomes a bottleneck or single point of failure for every request.",
|
|
94
|
+
"Drift: input distribution shifts over time and the router's categories go stale."
|
|
95
|
+
],
|
|
96
|
+
"lessons": [
|
|
97
|
+
"Optimize for the cost of a misroute, not just routing accuracy — some wrong routes are far costlier than others.",
|
|
98
|
+
"Add a default / fallback route for inputs that match nothing well.",
|
|
99
|
+
"Keep the router cheap and fast; if it costs as much as the work, it defeats the purpose.",
|
|
100
|
+
"Monitor input drift and re-tune routes as the distribution changes."
|
|
101
|
+
],
|
|
102
|
+
"faqs": [
|
|
103
|
+
{
|
|
104
|
+
"q": "What classifies the input?",
|
|
105
|
+
"a": "Usually a lightweight LLM call or a dedicated classifier model; for clear-cut cases, deterministic rules can route without a model."
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"q": "How does routing save cost?",
|
|
109
|
+
"a": "By tiering: easy requests go to cheap, fast models and only hard ones reach expensive reasoning models, so you pay for capability only when needed."
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"q": "What if the classifier is wrong?",
|
|
113
|
+
"a": "Provide a sensible default route and monitor misroutes; a fallback handler and good observability limit the impact of misclassification."
|
|
114
|
+
}
|
|
115
|
+
]
|
|
116
|
+
},
|
|
117
|
+
"es": {
|
|
118
|
+
"name": "Enrutamiento (Routing)",
|
|
119
|
+
"summary": "El enrutamiento clasifica una entrada y la dirige al manejador, prompt o modelo especializado más adecuado. Mejora la calidad al optimizar cada camino para su caso y controla el coste enviando peticiones fáciles a modelos baratos y las difíciles a modelos capaces.",
|
|
120
|
+
"definition": "El enrutado es un patrón que clasifica cada petición entrante y la despacha al manejador o modelo más apropiado, de modo que las entradas fáciles usan caminos baratos y las difíciles, modelos capaces.",
|
|
121
|
+
"problem": "Un solo prompt o modelo manejando cada tipo de entrada hace cada una peor, y usar un modelo caro para todo malgasta dinero en peticiones fáciles.",
|
|
122
|
+
"context": "Usa el enrutamiento cuando las entradas caen en categorías distintas que se benefician de un manejo diferente —distintos prompts, herramientas, modelos o flujos— y las categorías se pueden clasificar de forma fiable.",
|
|
123
|
+
"solution": [
|
|
124
|
+
"Un clasificador ligero (una llamada al LLM o un modelo) etiqueta la entrada, y luego un enrutador la envía al manejador adecuado. Cada manejador está especializado y optimizado para su categoría.",
|
|
125
|
+
"El enrutamiento también permite escalonar coste-rendimiento: enruta consultas simples a un modelo rápido y barato y las complejas a un modelo de razonamiento más fuerte, pagando por capacidad solo cuando hace falta."
|
|
126
|
+
],
|
|
127
|
+
"components": [
|
|
128
|
+
"Clasificador",
|
|
129
|
+
"Lógica de enrutamiento",
|
|
130
|
+
"Manejadores especializados",
|
|
131
|
+
"Ruta por defecto / fallback"
|
|
132
|
+
],
|
|
133
|
+
"benefits": [
|
|
134
|
+
"Cada camino se optimiza para su caso, elevando la calidad.",
|
|
135
|
+
"Control de coste escalonando modelos según la dificultad.",
|
|
136
|
+
"La separación de responsabilidades mantiene simple cada manejador."
|
|
137
|
+
],
|
|
138
|
+
"risks": [
|
|
139
|
+
"La mala clasificación envía entradas por el camino equivocado.",
|
|
140
|
+
"El clasificador añade un paso y algo de latencia.",
|
|
141
|
+
"La deriva de categorías en el tiempo degrada la precisión."
|
|
142
|
+
],
|
|
143
|
+
"whenNot": [
|
|
144
|
+
"Cuando las entradas son homogéneas: basta un manejador.",
|
|
145
|
+
"Cuando las categorías no se pueden clasificar de forma fiable.",
|
|
146
|
+
"Cuando el paso de clasificación añadido no compensa la ganancia."
|
|
147
|
+
],
|
|
148
|
+
"examples": [
|
|
149
|
+
"Enrutar tickets de soporte a manejadores de facturación, técnico o ventas.",
|
|
150
|
+
"Enviar preguntas simples a un modelo pequeño y las difíciles a uno de razonamiento.",
|
|
151
|
+
"Dirigir distintos tipos de documento a extractores específicos por tipo."
|
|
152
|
+
],
|
|
153
|
+
"productionEvidence": {
|
|
154
|
+
"context": "Despliegue OpenClaw local-first y mono-operador observado durante 57 días (161 sesiones / 2.776 turnos), agregado desde las propias trazas del agente.",
|
|
155
|
+
"scenario": "Los mensajes entrantes de canal y los despertares autónomos se enrutan a un agente por entrypoints distintos, con bindings de canal/peer/rol que seleccionan la sesión.",
|
|
156
|
+
"technology": "Registro de bindings y rutas (resolveAgentRoute), claves de sesión por canal y caché de ruta resuelta.",
|
|
157
|
+
"load": "3 canales (Telegram, chat web, WhatsApp) y 4 tipos de trigger (usuario, heartbeat, cron, memoria).",
|
|
158
|
+
"results": "El enrutado se mantuvo en los tres canales y los cuatro tipos de trigger sin que ningún error de ruta apareciera como fallo (98,8% de éxito por sesión). Despliegue local-first mono-operador — una referencia que funciona, no un benchmark de escala."
|
|
159
|
+
},
|
|
160
|
+
"kpis": [
|
|
161
|
+
{
|
|
162
|
+
"metric": "Precisión de enrutado",
|
|
163
|
+
"note": "Proporción de entradas enviadas al manejador/modelo correcto; la métrica que define el valor del patrón."
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
"metric": "Ahorro vs. usar siempre el mejor modelo",
|
|
167
|
+
"note": "Dinero ahorrado al enrutar entradas fáciles a modelos más baratos en vez del mejor para todo."
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
"metric": "Coste de mal enrutado",
|
|
171
|
+
"note": "El daño posterior de rutas erróneas; un mal enrutado puede costar mucho más que el ahorro buscado."
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"metric": "Sobrecoste de latencia del router",
|
|
175
|
+
"note": "Tiempo que la propia decisión de enrutado añade antes de empezar el trabajo real."
|
|
176
|
+
}
|
|
177
|
+
],
|
|
178
|
+
"failureModes": [
|
|
179
|
+
"Mala clasificación: el router envía una entrada al modelo o ruta equivocados, degradando la respuesta.",
|
|
180
|
+
"Entradas ambiguas que no encajan bien en ninguna ruta y se fuerzan a una deficiente.",
|
|
181
|
+
"El router se convierte en cuello de botella o punto único de fallo de cada petición.",
|
|
182
|
+
"Deriva: la distribución de entradas cambia con el tiempo y las categorías del router quedan obsoletas."
|
|
183
|
+
],
|
|
184
|
+
"lessons": [
|
|
185
|
+
"Optimiza por el coste de un mal enrutado, no solo por la precisión: algunas rutas erróneas son mucho más caras que otras.",
|
|
186
|
+
"Añade una ruta por defecto / de respaldo para entradas que no encajen bien en nada.",
|
|
187
|
+
"Mantén el router barato y rápido; si cuesta tanto como el trabajo, pierde su sentido.",
|
|
188
|
+
"Monitoriza la deriva de entradas y reajusta las rutas cuando cambie la distribución."
|
|
189
|
+
],
|
|
190
|
+
"faqs": [
|
|
191
|
+
{
|
|
192
|
+
"q": "¿Qué clasifica la entrada?",
|
|
193
|
+
"a": "Normalmente una llamada ligera al LLM o un modelo clasificador dedicado; para casos claros, reglas deterministas pueden enrutar sin modelo."
|
|
194
|
+
},
|
|
195
|
+
{
|
|
196
|
+
"q": "¿Cómo ahorra coste el enrutamiento?",
|
|
197
|
+
"a": "Escalonando: las peticiones fáciles van a modelos baratos y rápidos y solo las difíciles llegan a modelos de razonamiento caros, así pagas por capacidad solo cuando hace falta."
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
"q": "¿Y si el clasificador se equivoca?",
|
|
201
|
+
"a": "Provee una ruta por defecto sensata y monitoriza los errores de ruta; un manejador de respaldo y buena observabilidad limitan el impacto de la mala clasificación."
|
|
202
|
+
}
|
|
203
|
+
]
|
|
204
|
+
},
|
|
205
|
+
"pt": {
|
|
206
|
+
"name": "Roteamento (Routing)",
|
|
207
|
+
"summary": "O roteamento classifica uma entrada e a direciona ao manipulador, prompt ou modelo especializado mais adequado. Melhora a qualidade ao otimizar cada caminho para seu caso e controla o custo enviando requisições fáceis a modelos baratos e as difíceis a modelos capazes.",
|
|
208
|
+
"definition": "O roteamento é um padrão que classifica cada requisição recebida e a despacha ao manipulador ou modelo mais apropriado, de modo que entradas fáceis usam caminhos baratos e as difíceis, modelos capazes.",
|
|
209
|
+
"problem": "Um único prompt ou modelo lidando com cada tipo de entrada faz cada uma pior, e usar um modelo caro para tudo desperdiça dinheiro em requisições fáceis.",
|
|
210
|
+
"context": "Use o roteamento quando as entradas caem em categorias distintas que se beneficiam de tratamento diferente — diferentes prompts, ferramentas, modelos ou fluxos — e as categorias podem ser classificadas de forma confiável.",
|
|
211
|
+
"solution": [
|
|
212
|
+
"Um classificador leve (uma chamada ao LLM ou um modelo) rotula a entrada, e então um roteador a envia ao manipulador adequado. Cada manipulador é especializado e otimizado para sua categoria.",
|
|
213
|
+
"O roteamento também permite escalonar custo-desempenho: roteie consultas simples a um modelo rápido e barato e as complexas a um modelo de raciocínio mais forte, pagando por capacidade só quando necessário."
|
|
214
|
+
],
|
|
215
|
+
"components": [
|
|
216
|
+
"Classificador",
|
|
217
|
+
"Lógica de roteamento",
|
|
218
|
+
"Manipuladores especializados",
|
|
219
|
+
"Rota padrão / fallback"
|
|
220
|
+
],
|
|
221
|
+
"benefits": [
|
|
222
|
+
"Cada caminho é otimizado para seu caso, elevando a qualidade.",
|
|
223
|
+
"Controle de custo escalonando modelos conforme a dificuldade.",
|
|
224
|
+
"A separação de responsabilidades mantém cada manipulador simples."
|
|
225
|
+
],
|
|
226
|
+
"risks": [
|
|
227
|
+
"A má classificação envia entradas pelo caminho errado.",
|
|
228
|
+
"O classificador adiciona um passo e alguma latência.",
|
|
229
|
+
"A deriva de categorias ao longo do tempo degrada a precisão."
|
|
230
|
+
],
|
|
231
|
+
"whenNot": [
|
|
232
|
+
"Quando as entradas são homogêneas: basta um manipulador.",
|
|
233
|
+
"Quando as categorias não podem ser classificadas de forma confiável.",
|
|
234
|
+
"Quando o passo de classificação adicionado não compensa o ganho."
|
|
235
|
+
],
|
|
236
|
+
"examples": [
|
|
237
|
+
"Rotear chamados de suporte a manipuladores de faturamento, técnico ou vendas.",
|
|
238
|
+
"Enviar perguntas simples a um modelo pequeno e as difíceis a um de raciocínio.",
|
|
239
|
+
"Direcionar diferentes tipos de documento a extratores específicos por tipo."
|
|
240
|
+
],
|
|
241
|
+
"productionEvidence": {
|
|
242
|
+
"context": "Implantação OpenClaw local-first e de operador único observada por 57 dias (161 sessões / 2.776 turnos), agregada a partir dos próprios rastros do agente.",
|
|
243
|
+
"scenario": "Mensagens de canal recebidas e despertares autônomos são roteados para um agente por entrypoints distintos, com bindings de canal/peer/papel selecionando a sessão.",
|
|
244
|
+
"technology": "Registro de bindings e rotas (resolveAgentRoute), chaves de sessão por canal e cache de rota resolvida.",
|
|
245
|
+
"load": "3 canais (Telegram, chat web, WhatsApp) e 4 tipos de gatilho (usuário, heartbeat, cron, memória).",
|
|
246
|
+
"results": "O roteamento se manteve nos três canais e nos quatro tipos de gatilho sem que nenhum erro de rota aparecesse como falha (98,8% de sucesso por sessão). Implantação local-first de operador único — uma referência que funciona, não um benchmark de escala."
|
|
247
|
+
},
|
|
248
|
+
"kpis": [
|
|
249
|
+
{
|
|
250
|
+
"metric": "Precisão de roteamento",
|
|
251
|
+
"note": "Proporção de entradas enviadas ao manipulador/modelo correto; a métrica que define o valor do padrão."
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
"metric": "Economia vs. usar sempre o melhor modelo",
|
|
255
|
+
"note": "Dinheiro economizado ao rotear entradas fáceis para modelos mais baratos em vez do melhor para tudo."
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
"metric": "Custo de roteamento errado",
|
|
259
|
+
"note": "O dano posterior de rotas erradas; um roteamento errado pode custar muito mais que a economia buscada."
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"metric": "Sobrecusto de latência do roteador",
|
|
263
|
+
"note": "Tempo que a própria decisão de roteamento adiciona antes de começar o trabalho real."
|
|
264
|
+
}
|
|
265
|
+
],
|
|
266
|
+
"failureModes": [
|
|
267
|
+
"Má classificação: o roteador envia uma entrada ao modelo ou rota errados, degradando a resposta.",
|
|
268
|
+
"Entradas ambíguas que não encaixam bem em nenhuma rota e são forçadas a uma deficiente.",
|
|
269
|
+
"O roteador vira gargalo ou ponto único de falha de cada requisição.",
|
|
270
|
+
"Deriva: a distribuição de entradas muda com o tempo e as categorias do roteador ficam obsoletas."
|
|
271
|
+
],
|
|
272
|
+
"lessons": [
|
|
273
|
+
"Otimize pelo custo de um roteamento errado, não só pela precisão: algumas rotas erradas são muito mais caras que outras.",
|
|
274
|
+
"Adicione uma rota padrão / de fallback para entradas que não encaixem bem em nada.",
|
|
275
|
+
"Mantenha o roteador barato e rápido; se custa tanto quanto o trabalho, perde o sentido.",
|
|
276
|
+
"Monitore a deriva de entradas e reajuste as rotas quando a distribuição mudar."
|
|
277
|
+
],
|
|
278
|
+
"faqs": [
|
|
279
|
+
{
|
|
280
|
+
"q": "O que classifica a entrada?",
|
|
281
|
+
"a": "Normalmente uma chamada leve ao LLM ou um modelo classificador dedicado; para casos claros, regras determinísticas podem rotear sem modelo."
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
"q": "Como o roteamento economiza custo?",
|
|
285
|
+
"a": "Escalonando: as requisições fáceis vão a modelos baratos e rápidos e só as difíceis chegam a modelos de raciocínio caros, então você paga por capacidade só quando necessário."
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"q": "E se o classificador errar?",
|
|
289
|
+
"a": "Forneça uma rota padrão sensata e monitore os erros de rota; um manipulador de fallback e boa observabilidade limitam o impacto da má classificação."
|
|
290
|
+
}
|
|
291
|
+
]
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
{
|
|
2
|
+
"slug": "sandboxed-execution",
|
|
3
|
+
"category": "safety",
|
|
4
|
+
"updated": "2026-08-22",
|
|
5
|
+
"version": "1.0",
|
|
6
|
+
"technologies": [
|
|
7
|
+
"Containers",
|
|
8
|
+
"microVMs (Firecracker / gVisor)",
|
|
9
|
+
"Ephemeral workspaces",
|
|
10
|
+
"Resource quotas and timeouts",
|
|
11
|
+
"Scoped secret injection"
|
|
12
|
+
],
|
|
13
|
+
"related": [
|
|
14
|
+
"least-privilege-tooling",
|
|
15
|
+
"egress-allowlist",
|
|
16
|
+
"recovery-strategy",
|
|
17
|
+
"human-approval-gate"
|
|
18
|
+
],
|
|
19
|
+
"references": [
|
|
20
|
+
{
|
|
21
|
+
"title": "OWASP — Top 10 for LLM Applications",
|
|
22
|
+
"url": "https://genai.owasp.org/llm-top-10/"
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"title": "MITRE ATLAS — Adversarial Threat Landscape for AI Systems",
|
|
26
|
+
"url": "https://atlas.mitre.org/"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"title": "NIST — AI Risk Management Framework (AI RMF 1.0)",
|
|
30
|
+
"url": "https://www.nist.gov/itl/ai-risk-management-framework"
|
|
31
|
+
}
|
|
32
|
+
],
|
|
33
|
+
"evidence": {
|
|
34
|
+
"evidenceLevel": "industry_observation",
|
|
35
|
+
"confidenceLevel": "high",
|
|
36
|
+
"sourceType": [
|
|
37
|
+
"industry_observation",
|
|
38
|
+
"personal_experience",
|
|
39
|
+
"paper"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"locales": {
|
|
43
|
+
"en": {
|
|
44
|
+
"name": "Sandboxed Execution",
|
|
45
|
+
"summary": "Run everything an agent generates or invokes inside a disposable, isolated environment with no ambient credentials, a bounded filesystem, controlled egress and hard resource caps. The sandbox is not there because the agent is malicious; it is there because the agent's input can be.",
|
|
46
|
+
"definition": "Sandboxed execution is the practice of running agent-generated code and agent-invoked actions inside an isolated, ephemeral environment whose filesystem, network, credentials and resources are bounded by the host rather than by the agent, so that a hijacked or mistaken agent cannot affect anything outside it.",
|
|
47
|
+
"problem": "An agent that executes code on the host inherits the host: its credentials, its filesystem, its network position. One successful injection or one confidently wrong command is then indistinguishable from a compromise of the machine.",
|
|
48
|
+
"context": "Use it whenever an agent runs code, executes shell commands, installs packages or processes untrusted files. The threshold is low: if the agent can cause execution, the execution belongs in a sandbox.",
|
|
49
|
+
"solution": [
|
|
50
|
+
"Make it ephemeral. Create the environment per task, destroy it after, and never carry state forward that the next task did not ask for. Persistence is how a one-off compromise becomes a foothold.",
|
|
51
|
+
"Remove ambient credentials. Nothing in the environment should be usable simply because it is present; inject only the narrowly scoped secrets the task needs, for its duration.",
|
|
52
|
+
"Bound the filesystem to the working set. Mount the repository or the input, nothing else, and mount read-only whatever does not need writing.",
|
|
53
|
+
"Constrain egress inside the sandbox, not around it. The isolation and the network policy are the same control from the attacker's point of view, and a sandbox with open network is a jail with a phone.",
|
|
54
|
+
"Cap resources — CPU, memory, disk, wall-clock, process count. Runaway consumption is the failure mode that arrives first and most often, usually without any adversary at all.",
|
|
55
|
+
"Log what crossed the boundary: which files came in, which came out, which destinations were reached. The boundary is only useful if you can see what passed through it."
|
|
56
|
+
],
|
|
57
|
+
"components": [
|
|
58
|
+
"An isolation primitive: container, microVM or equivalent, chosen for the strength the workload needs.",
|
|
59
|
+
"Ephemeral lifecycle management, with destruction as the default rather than a cleanup step.",
|
|
60
|
+
"A secret-injection path scoped to the task and its duration.",
|
|
61
|
+
"A network policy applied inside the sandbox boundary.",
|
|
62
|
+
"Resource quotas and timeouts, enforced by the host.",
|
|
63
|
+
"Boundary logging: inputs, outputs and destinations."
|
|
64
|
+
],
|
|
65
|
+
"benefits": [
|
|
66
|
+
"Converts 'the agent ran something bad' from an incident into a discarded container.",
|
|
67
|
+
"Makes it safe to give an agent genuine execution ability, which is often what makes it useful at all.",
|
|
68
|
+
"Bounds honest mistakes as well as attacks — the same control catches an infinite loop and an injected payload.",
|
|
69
|
+
"Gives a clean place to observe: everything the task touched crossed one boundary."
|
|
70
|
+
],
|
|
71
|
+
"risks": [
|
|
72
|
+
"Isolation weaker than assumed: a shared kernel is not a security boundary against determined escape, and treating a container as a microVM is a category error.",
|
|
73
|
+
"Credentials smuggled in for convenience — one mounted config file undoes the whole pattern.",
|
|
74
|
+
"Sandboxes that quietly become persistent because rebuilding is slow, so the ephemerality that carried the guarantee is gone.",
|
|
75
|
+
"Escape via the shared surface that remains: mounted volumes, the orchestrator API, or the network the sandbox still reaches."
|
|
76
|
+
],
|
|
77
|
+
"whenNot": [
|
|
78
|
+
"Read-only agents with no execution capability, where there is nothing to isolate and the cost buys nothing.",
|
|
79
|
+
"Latency-critical inline paths where environment startup dominates the task and a narrower control — a restricted interpreter, a pure function — fits better.",
|
|
80
|
+
"When the sandbox would need the very credentials it exists to withhold, which is a sign the task should be split rather than isolated."
|
|
81
|
+
],
|
|
82
|
+
"examples": [
|
|
83
|
+
"A coding agent that clones into a fresh container per task, with the repository mounted, no cloud credentials present and egress limited to the package registry. A malicious dependency install destroys a container and nothing else.",
|
|
84
|
+
"A data-analysis agent executing generated Python in a microVM with the input dataset mounted read-only, no network at all and a wall-clock cap. The generated code can be wrong; it cannot be expensive or exfiltrating.",
|
|
85
|
+
"A document-processing agent that opens untrusted PDFs inside a disposable environment, because a parser exploit in an uploaded file is a real path to the host and the file arrived from outside."
|
|
86
|
+
],
|
|
87
|
+
"kpis": [
|
|
88
|
+
{
|
|
89
|
+
"metric": "Share of executions sandboxed",
|
|
90
|
+
"note": "The coverage number. Anything running outside the sandbox is the actual security posture, regardless of what the sandboxed share does."
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"metric": "Sandbox lifetime",
|
|
94
|
+
"note": "How long environments live. Rising lifetimes mean ephemerality is eroding into persistence."
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
"metric": "Resource-cap hits",
|
|
98
|
+
"note": "Tasks stopped by a quota or timeout. A useful mix of runaway generations and genuine limits set too tight."
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"metric": "Secrets present at runtime",
|
|
102
|
+
"note": "Count of credentials reachable inside the environment. The target is the minimum the task needs, and often zero."
|
|
103
|
+
}
|
|
104
|
+
],
|
|
105
|
+
"failureModes": [
|
|
106
|
+
"The convenience mount: a home directory, a credentials file or a socket mounted in so a task would stop failing.",
|
|
107
|
+
"Persistent reuse: the environment stops being per-task because rebuilding costs too much, so state and compromise both survive.",
|
|
108
|
+
"Open egress inside the boundary: strong isolation with a free network is containment against the filesystem only.",
|
|
109
|
+
"Orchestrator reachability: the sandbox can call the API that manages sandboxes, which is escape by design rather than by exploit."
|
|
110
|
+
],
|
|
111
|
+
"lessons": [
|
|
112
|
+
"Isolate execution before you trust generation. The sandbox is what makes it reasonable to let an agent run code at all.",
|
|
113
|
+
"Ephemeral is the security property; isolation alone only postpones the problem.",
|
|
114
|
+
"The credential that is not present cannot be stolen — and it is the only control that holds after an escape.",
|
|
115
|
+
"Most sandbox activations are honest mistakes, not attacks. That is the pattern working, not evidence it was unnecessary."
|
|
116
|
+
],
|
|
117
|
+
"faqs": [
|
|
118
|
+
{
|
|
119
|
+
"q": "Is a container enough, or do I need a microVM?",
|
|
120
|
+
"a": "It depends on what runs inside. For your own code with an injection risk, a hardened container with no credentials and constrained egress is usually proportionate. For arbitrary code from untrusted sources, assume the shared kernel can be escaped and use a microVM."
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
"q": "How does this differ from least-privilege tooling?",
|
|
124
|
+
"a": "Least privilege bounds what the agent may ask for; the sandbox bounds what happens when something runs anyway. One governs the request, the other the environment it executes in, and agents that run code need both."
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"q": "The sandbox slows everything down. Is it worth it?",
|
|
128
|
+
"a": "Compare against the alternative cost, not against zero. Most of the latency is environment startup, which pools and pre-warmed images largely remove; the failure it prevents is a compromise of the host that runs the agent."
|
|
129
|
+
}
|
|
130
|
+
]
|
|
131
|
+
},
|
|
132
|
+
"es": {
|
|
133
|
+
"name": "Ejecución en Sandbox",
|
|
134
|
+
"summary": "Ejecuta todo lo que un agente genera o invoca dentro de un entorno aislado y desechable, sin credenciales ambientales, con sistema de ficheros acotado, salida controlada y límites duros de recursos. El sandbox no está porque el agente sea malicioso, sino porque su entrada puede serlo.",
|
|
135
|
+
"definition": "La ejecución en sandbox es la práctica de correr el código generado por el agente y las acciones que invoca dentro de un entorno aislado y efímero cuyo sistema de ficheros, red, credenciales y recursos los acota el anfitrión y no el agente, de forma que un agente secuestrado o equivocado no pueda afectar a nada fuera de él.",
|
|
136
|
+
"problem": "Un agente que ejecuta código en el anfitrión hereda el anfitrión: sus credenciales, su sistema de ficheros, su posición de red. Una inyección con éxito o un comando confiadamente equivocado pasan entonces a ser indistinguibles de un compromiso de la máquina.",
|
|
137
|
+
"context": "Úsala siempre que un agente ejecute código, corra comandos de shell, instale paquetes o procese ficheros no confiables. El umbral es bajo: si el agente puede provocar ejecución, la ejecución va en un sandbox.",
|
|
138
|
+
"solution": [
|
|
139
|
+
"Hazlo efímero. Crea el entorno por tarea, destrúyelo al terminar y no arrastres estado que la siguiente tarea no haya pedido. La persistencia es cómo un compromiso puntual se convierte en punto de apoyo.",
|
|
140
|
+
"Elimina las credenciales ambientales. Nada del entorno debería ser utilizable solo por estar presente; inyecta únicamente los secretos acotados que la tarea necesita, durante lo que dure.",
|
|
141
|
+
"Acota el sistema de ficheros al conjunto de trabajo. Monta el repositorio o la entrada y nada más, y monta en solo lectura todo lo que no necesite escritura.",
|
|
142
|
+
"Restringe la salida dentro del sandbox, no alrededor. Desde el punto de vista del atacante el aislamiento y la política de red son el mismo control, y un sandbox con red abierta es una celda con teléfono.",
|
|
143
|
+
"Limita recursos: CPU, memoria, disco, tiempo de reloj, número de procesos. El consumo desbocado es el modo de fallo que llega primero y más a menudo, normalmente sin ningún adversario.",
|
|
144
|
+
"Registra lo que cruzó la frontera: qué ficheros entraron, cuáles salieron, a qué destinos se llegó. La frontera solo sirve si puedes ver qué pasó por ella."
|
|
145
|
+
],
|
|
146
|
+
"components": [
|
|
147
|
+
"Una primitiva de aislamiento: contenedor, microVM o equivalente, elegida por la fuerza que la carga necesita.",
|
|
148
|
+
"Gestión de ciclo de vida efímero, con la destrucción como comportamiento por defecto y no como paso de limpieza.",
|
|
149
|
+
"Una vía de inyección de secretos acotada a la tarea y a su duración.",
|
|
150
|
+
"Una política de red aplicada dentro de la frontera del sandbox.",
|
|
151
|
+
"Cuotas de recursos y timeouts aplicados por el anfitrión.",
|
|
152
|
+
"Registro de frontera: entradas, salidas y destinos."
|
|
153
|
+
],
|
|
154
|
+
"benefits": [
|
|
155
|
+
"Convierte «el agente ejecutó algo malo» de incidente en contenedor descartado.",
|
|
156
|
+
"Hace seguro dar a un agente capacidad real de ejecución, que suele ser justo lo que lo hace útil.",
|
|
157
|
+
"Acota los errores honestos igual que los ataques: el mismo control atrapa un bucle infinito y un payload inyectado.",
|
|
158
|
+
"Da un buen sitio donde observar: todo lo que la tarea tocó cruzó una única frontera."
|
|
159
|
+
],
|
|
160
|
+
"risks": [
|
|
161
|
+
"Aislamiento más débil de lo supuesto: un kernel compartido no es una frontera de seguridad frente a un escape decidido, y tratar un contenedor como una microVM es un error de categoría.",
|
|
162
|
+
"Credenciales coladas por comodidad: un solo fichero de configuración montado deshace el patrón entero.",
|
|
163
|
+
"Sandboxes que se vuelven persistentes en silencio porque reconstruir es lento, y con ello desaparece la efimeridad que sostenía la garantía.",
|
|
164
|
+
"Escape por la superficie compartida que queda: volúmenes montados, la API del orquestador o la red a la que el sandbox sigue llegando."
|
|
165
|
+
],
|
|
166
|
+
"whenNot": [
|
|
167
|
+
"Agentes de solo lectura sin capacidad de ejecución, donde no hay nada que aislar y el coste no compra nada.",
|
|
168
|
+
"Rutas en línea críticas en latencia donde el arranque del entorno domina la tarea y encaja mejor un control más estrecho: un intérprete restringido, una función pura.",
|
|
169
|
+
"Cuando el sandbox necesitaría justo las credenciales que existe para retener, que es señal de que la tarea hay que partirla en lugar de aislarla."
|
|
170
|
+
],
|
|
171
|
+
"examples": [
|
|
172
|
+
"Un agente de programación que clona en un contenedor nuevo por tarea, con el repositorio montado, sin credenciales de nube presentes y con salida limitada al registro de paquetes. Una instalación de dependencia maliciosa destruye un contenedor y nada más.",
|
|
173
|
+
"Un agente de análisis de datos que ejecuta Python generado en una microVM con el dataset montado en solo lectura, sin red alguna y con límite de tiempo de reloj. El código generado puede estar mal; no puede salir caro ni exfiltrar.",
|
|
174
|
+
"Un agente de procesamiento documental que abre PDFs no confiables dentro de un entorno desechable, porque un exploit del parser en un fichero subido es una vía real al anfitrión y el fichero vino de fuera."
|
|
175
|
+
],
|
|
176
|
+
"kpis": [
|
|
177
|
+
{
|
|
178
|
+
"metric": "Porcentaje de ejecuciones en sandbox",
|
|
179
|
+
"note": "El número de cobertura. Lo que corre fuera del sandbox es la postura de seguridad real, diga lo que diga la parte que sí está dentro."
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
"metric": "Vida del sandbox",
|
|
183
|
+
"note": "Cuánto duran los entornos. Vidas crecientes significan que la efimeridad se está erosionando hacia la persistencia."
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
"metric": "Choques con límites de recursos",
|
|
187
|
+
"note": "Tareas detenidas por una cuota o un timeout. Una mezcla útil de generaciones desbocadas y límites legítimos puestos demasiado estrechos."
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"metric": "Secretos presentes en ejecución",
|
|
191
|
+
"note": "Número de credenciales alcanzables dentro del entorno. El objetivo es el mínimo que la tarea necesite, y a menudo cero."
|
|
192
|
+
}
|
|
193
|
+
],
|
|
194
|
+
"failureModes": [
|
|
195
|
+
"El montaje por comodidad: un directorio home, un fichero de credenciales o un socket montados para que una tarea dejara de fallar.",
|
|
196
|
+
"Reutilización persistente: el entorno deja de ser por tarea porque reconstruir cuesta demasiado, así que sobreviven el estado y el compromiso.",
|
|
197
|
+
"Salida abierta dentro de la frontera: aislamiento fuerte con red libre es contención solo frente al sistema de ficheros.",
|
|
198
|
+
"Alcance al orquestador: el sandbox puede llamar a la API que gestiona sandboxes, lo que es escapar por diseño y no por exploit."
|
|
199
|
+
],
|
|
200
|
+
"lessons": [
|
|
201
|
+
"Aísla la ejecución antes de confiar en la generación. El sandbox es lo que hace razonable dejar que un agente ejecute código.",
|
|
202
|
+
"Lo efímero es la propiedad de seguridad; el aislamiento por sí solo únicamente aplaza el problema.",
|
|
203
|
+
"La credencial que no está presente no se puede robar, y es el único control que aguanta después de un escape.",
|
|
204
|
+
"La mayoría de activaciones del sandbox son errores honestos, no ataques. Eso es el patrón funcionando, no la prueba de que sobraba."
|
|
205
|
+
],
|
|
206
|
+
"faqs": [
|
|
207
|
+
{
|
|
208
|
+
"q": "¿Basta un contenedor o necesito una microVM?",
|
|
209
|
+
"a": "Depende de qué corre dentro. Para código propio con riesgo de inyección, un contenedor endurecido sin credenciales y con salida acotada suele ser proporcionado. Para código arbitrario de origen no confiable, asume que el kernel compartido se puede escapar y usa una microVM."
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"q": "¿En qué se diferencia del mínimo privilegio en herramientas?",
|
|
213
|
+
"a": "El mínimo privilegio acota lo que el agente puede pedir; el sandbox acota lo que ocurre cuando algo se ejecuta igualmente. Uno gobierna la petición y el otro el entorno donde se ejecuta, y un agente que corre código necesita ambos."
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"q": "El sandbox lo ralentiza todo, ¿compensa?",
|
|
217
|
+
"a": "Compáralo con el coste de la alternativa, no con cero. Casi toda la latencia es el arranque del entorno, que los pools y las imágenes precalentadas eliminan en buena parte; el fallo que evita es un compromiso del anfitrión que ejecuta el agente."
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
},
|
|
221
|
+
"pt": {
|
|
222
|
+
"name": "Execução em Sandbox",
|
|
223
|
+
"summary": "Execute tudo o que um agente gera ou invoca dentro de um ambiente isolado e descartável, sem credenciais ambientais, com sistema de arquivos limitado, saída controlada e limites rígidos de recursos. O sandbox não existe porque o agente seja malicioso, mas porque a entrada dele pode ser.",
|
|
224
|
+
"definition": "Execução em sandbox é a prática de rodar o código gerado pelo agente e as ações que ele invoca dentro de um ambiente isolado e efêmero cujo sistema de arquivos, rede, credenciais e recursos são limitados pelo host e não pelo agente, de modo que um agente sequestrado ou equivocado não afete nada fora dele.",
|
|
225
|
+
"problem": "Um agente que executa código no host herda o host: suas credenciais, seu sistema de arquivos, sua posição de rede. Uma injeção bem-sucedida ou um comando confiantemente errado passam a ser indistinguíveis de um comprometimento da máquina.",
|
|
226
|
+
"context": "Use sempre que um agente executar código, rodar comandos de shell, instalar pacotes ou processar arquivos não confiáveis. O limiar é baixo: se o agente pode provocar execução, a execução vai para um sandbox.",
|
|
227
|
+
"solution": [
|
|
228
|
+
"Torne-o efêmero. Crie o ambiente por tarefa, destrua ao final e não carregue estado que a próxima tarefa não pediu. A persistência é como um comprometimento pontual vira ponto de apoio.",
|
|
229
|
+
"Remova as credenciais ambientais. Nada no ambiente deveria ser utilizável só por estar presente; injete apenas os segredos restritos de que a tarefa precisa, pelo tempo dela.",
|
|
230
|
+
"Limite o sistema de arquivos ao conjunto de trabalho. Monte o repositório ou a entrada e nada mais, e monte como somente leitura tudo o que não precisa de escrita.",
|
|
231
|
+
"Restrinja a saída dentro do sandbox, não em volta dele. Do ponto de vista do atacante, o isolamento e a política de rede são o mesmo controle, e um sandbox com rede aberta é uma cela com telefone.",
|
|
232
|
+
"Limite recursos: CPU, memória, disco, tempo de relógio, número de processos. O consumo descontrolado é o modo de falha que chega primeiro e com mais frequência, normalmente sem adversário algum.",
|
|
233
|
+
"Registre o que cruzou a fronteira: quais arquivos entraram, quais saíram, quais destinos foram alcançados. A fronteira só é útil se você puder ver o que passou por ela."
|
|
234
|
+
],
|
|
235
|
+
"components": [
|
|
236
|
+
"Uma primitiva de isolamento: contêiner, microVM ou equivalente, escolhida pela força que a carga exige.",
|
|
237
|
+
"Gestão de ciclo de vida efêmero, com a destruição como comportamento padrão e não como etapa de limpeza.",
|
|
238
|
+
"Um caminho de injeção de segredos restrito à tarefa e à duração dela.",
|
|
239
|
+
"Uma política de rede aplicada dentro da fronteira do sandbox.",
|
|
240
|
+
"Cotas de recursos e timeouts aplicados pelo host.",
|
|
241
|
+
"Registro de fronteira: entradas, saídas e destinos."
|
|
242
|
+
],
|
|
243
|
+
"benefits": [
|
|
244
|
+
"Converte «o agente executou algo ruim» de incidente em contêiner descartado.",
|
|
245
|
+
"Torna seguro dar a um agente capacidade real de execução, que costuma ser justamente o que o torna útil.",
|
|
246
|
+
"Limita erros honestos tanto quanto ataques: o mesmo controle pega um laço infinito e um payload injetado.",
|
|
247
|
+
"Dá um bom lugar para observar: tudo o que a tarefa tocou cruzou uma única fronteira."
|
|
248
|
+
],
|
|
249
|
+
"risks": [
|
|
250
|
+
"Isolamento mais fraco do que o suposto: um kernel compartilhado não é fronteira de segurança contra um escape determinado, e tratar um contêiner como microVM é um erro de categoria.",
|
|
251
|
+
"Credenciais contrabandeadas por conveniência: um único arquivo de configuração montado desfaz o padrão inteiro.",
|
|
252
|
+
"Sandboxes que ficam persistentes em silêncio porque reconstruir é lento, e com isso some a efemeridade que sustentava a garantia.",
|
|
253
|
+
"Escape pela superfície compartilhada que resta: volumes montados, a API do orquestrador ou a rede que o sandbox ainda alcança."
|
|
254
|
+
],
|
|
255
|
+
"whenNot": [
|
|
256
|
+
"Agentes somente leitura sem capacidade de execução, onde não há o que isolar e o custo não compra nada.",
|
|
257
|
+
"Caminhos em linha críticos em latência onde a inicialização do ambiente domina a tarefa e um controle mais estreito cabe melhor: um interpretador restrito, uma função pura.",
|
|
258
|
+
"Quando o sandbox precisaria justamente das credenciais que ele existe para reter, o que é sinal de que a tarefa deve ser dividida em vez de isolada."
|
|
259
|
+
],
|
|
260
|
+
"examples": [
|
|
261
|
+
"Um agente de programação que clona em um contêiner novo por tarefa, com o repositório montado, sem credenciais de nuvem presentes e com saída limitada ao registry de pacotes. Uma instalação de dependência maliciosa destrói um contêiner e nada mais.",
|
|
262
|
+
"Um agente de análise de dados que executa Python gerado em uma microVM com o dataset montado somente leitura, sem rede alguma e com limite de tempo de relógio. O código gerado pode estar errado; não pode sair caro nem exfiltrar.",
|
|
263
|
+
"Um agente de processamento de documentos que abre PDFs não confiáveis dentro de um ambiente descartável, porque um exploit de parser em um arquivo enviado é um caminho real até o host e o arquivo veio de fora."
|
|
264
|
+
],
|
|
265
|
+
"kpis": [
|
|
266
|
+
{
|
|
267
|
+
"metric": "Percentual de execuções em sandbox",
|
|
268
|
+
"note": "O número de cobertura. O que roda fora do sandbox é a postura de segurança real, independentemente do que a parte de dentro faça."
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"metric": "Tempo de vida do sandbox",
|
|
272
|
+
"note": "Quanto duram os ambientes. Vidas crescentes significam que a efemeridade está erodindo para persistência."
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
"metric": "Batidas em limites de recursos",
|
|
276
|
+
"note": "Tarefas interrompidas por cota ou timeout. Uma mistura útil de gerações descontroladas e limites legítimos apertados demais."
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
"metric": "Segredos presentes em execução",
|
|
280
|
+
"note": "Número de credenciais alcançáveis dentro do ambiente. O alvo é o mínimo de que a tarefa precisa, e muitas vezes zero."
|
|
281
|
+
}
|
|
282
|
+
],
|
|
283
|
+
"failureModes": [
|
|
284
|
+
"A montagem por conveniência: um diretório home, um arquivo de credenciais ou um socket montados para que uma tarefa parasse de falhar.",
|
|
285
|
+
"Reutilização persistente: o ambiente deixa de ser por tarefa porque reconstruir custa demais, então estado e comprometimento sobrevivem.",
|
|
286
|
+
"Saída aberta dentro da fronteira: isolamento forte com rede livre é contenção apenas contra o sistema de arquivos.",
|
|
287
|
+
"Alcance ao orquestrador: o sandbox consegue chamar a API que gerencia sandboxes, o que é escapar por design e não por exploit."
|
|
288
|
+
],
|
|
289
|
+
"lessons": [
|
|
290
|
+
"Isole a execução antes de confiar na geração. O sandbox é o que torna razoável deixar um agente rodar código.",
|
|
291
|
+
"O efêmero é a propriedade de segurança; o isolamento sozinho apenas adia o problema.",
|
|
292
|
+
"A credencial que não está presente não pode ser roubada — e é o único controle que resiste depois de um escape.",
|
|
293
|
+
"A maioria das ativações do sandbox são erros honestos, não ataques. Isso é o padrão funcionando, não prova de que era desnecessário."
|
|
294
|
+
],
|
|
295
|
+
"faqs": [
|
|
296
|
+
{
|
|
297
|
+
"q": "Um contêiner basta ou preciso de microVM?",
|
|
298
|
+
"a": "Depende do que roda dentro. Para código próprio com risco de injeção, um contêiner endurecido sem credenciais e com saída limitada costuma ser proporcional. Para código arbitrário de origem não confiável, assuma que o kernel compartilhado pode ser escapado e use uma microVM."
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"q": "Em que difere de ferramentas com privilégio mínimo?",
|
|
302
|
+
"a": "O privilégio mínimo limita o que o agente pode pedir; o sandbox limita o que acontece quando algo executa mesmo assim. Um governa a requisição, o outro o ambiente em que ela roda, e agentes que executam código precisam dos dois."
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
"q": "O sandbox deixa tudo mais lento. Compensa?",
|
|
306
|
+
"a": "Compare com o custo da alternativa, não com zero. Quase toda a latência é a inicialização do ambiente, que pools e imagens pré-aquecidas removem em boa parte; a falha que ele evita é um comprometimento do host que roda o agente."
|
|
307
|
+
}
|
|
308
|
+
]
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|