OpenAI Swarm a examen: buena lección de handoffs, no un framework de producción en 2026
OpenAI Swarm es un pequeño framework Python que explica orquestación multiagente con dos primitives: agentes y handoffs. Su README oficial lo califica ahora de experimental y educativo, afirma que OpenAI Agents SDK lo reemplaza y recomienda migrar todos los casos de producción. Esta advertencia debe preceder a las funciones: Swarm es código docente, no la recomendación actual de OpenAI.
El repositorio no estaba marcado archived el 20 de agosto de 2026. El último commit verificado, del 15 de abril, fijó hooks de pre-commit a revisiones inmutables: mantenimiento de supply chain, no nueva release de runtime. No existen GitHub Releases formales y la instalación apunta al repositorio Git. Visible no significa recomendado para producción.
Swarm sigue siendo pedagógicamente útil. Una routine combina instructions y functions. Cuando una función devuelve otro Agent, cambia el agente activo. Context variables alimentan instrucciones y funciones; el client loop llama Chat Completions, ejecuta tools, fusiona updates y cambia control. Su tamaño deja ver tanto el patrón como la infraestructura ausente.
Estado en 2026
| Pregunta | Respuesta verificada | Decisión |
|---|---|---|
| Official positioning | experimental/educativo; reemplazado | No iniciar producción |
| GitHub flag | archived=false | No es aprobación |
| Latest commit | 6af0b4c · 2026-04-15 | commit de mantenimiento |
| Releases | sin releases formales | fijar Git SHA |
| License | MIT | API/modelos aparte |
| Runtime | Chat Completions; loop stateless | persistir estado |
| Successor | OpenAI Agents SDK | sucesor oficial |
Qué enseña realmente Swarm
| Primitive | Comportamiento Swarm | Límite |
|---|---|---|
| Agent | name + instructions + functions | prompt persona ≠ security principal |
| Routine | instructions + focused tools | probabilistic, not workflow constraint |
| Function/tool | Python callable + schema | authorization and side effects |
| Handoff | function returns another Agent | cycle, misroute, context disclosure |
| context_variables | mutable run dictionary | not durable memory |
| Result | value + agent + context update | merge/persistence belong to app |
| Client.run | model/tool loop until stop/max turns | no queue/checkpoint/lease |
| Streaming | chunks + delimiters | no reconnect/exactly-once |
Experimento ejecutable de handoff
El experimento debe ser estrecho: triage solo transfiere a sales o refund. Sales usa catálogo read-only y refund únicamente prepara una devolución. customer_id, idioma y propiedad del pedido, ya verificados en servidor, entran en context_variables. Cada transfer registra origen, destino y motivo; max_turns vale cinco. Empiece con proveedor falso y tools sandbox. Se estudia routing, no se entrega autoridad financiera al modelo.
Pruebe cada routine por separado. Un set etiquetado de billing, sales, ambigüedad y ataques mide destino y handoffs innecesarios. Cada especialista conserva solo las tools necesarias y debe rechazar fuera de scope. Después simule ciclo A→B→A, llamadas paralelas, argumentos inválidos, excepción, acceso cross-tenant y prompt injection en una nota. El resultado esperado incluye fallo seguro, no solo una respuesta fluida.
context_variables son datos locales de una ejecución, no canal secreto ni memoria automática. Una instruction dinámica puede insertar sus valores en el prompt. Clasifique cada key como model-visible o code-only, no permita que el modelo elija tenant y no almacene credenciales persistentes en un dict mutable. El estado autoritativo reside versionado en base de datos; cada run reconstruye el contexto mínimo.
Migración y evaluación
- Fijar commit, Python y modelo.
- Dibujar agentes, handoffs, tools, contexto, terminales, ciclos y privilegios.
- Crear golden set de routing, respuestas, refusals, results y fallos seguros.
- Usar sandbox, tools fake/read-only, max_turns, timeout y ledger.
- Registrar active agent, origen/destino/motivo, call ID, hash, result y usage.
- Reconstruir con handoffs/agents-as-tools y contexto tipado.
- Añadir state, approvals, guardrails, authorization, idempotencia y trace policy.
- Hacer shadow idéntico y comparar routing, calidad, tools, turns, latencia y coste.
- Canary read-only; luego write mínimo con approval; probar crash y rollback.
- Tras paridad, eliminar Swarm y conservar tests y grafo.
Qué medir
| Métrica | Método | Por qué |
|---|---|---|
| Handoff accuracy | labeled destination/confusion matrix | wrong route ruins specialist quality |
| Cycle rate | repeated agent edges | loops burn tokens |
| Authorization | allow/deny by tenant/resource | schema ≠ permission |
| Side effects | idempotency duplicate simulation | retry can repeat action |
| Answer quality | task rubric/evidence | routing ≠ correct answer |
| Turns/usage | requests/tokens by agent | network amplifies cost |
| Latency | p50/p95 per step | handoffs serialize calls |
| Recovery | crash/timeout/approval/resume | no durable checkpoint |
| Trace privacy | sensitive-field detection | observability can leak |
Migrar empieza inventariando conducta. Liste agentes, instructions, functions, edges, context keys, model settings, max turns, eventos streaming y side effects. Dibuje el grafo real y marque ciclos, terminales y aumentos de privilegio. Transcripts redactados y tool traces forman el golden set. Mantenga temporalmente commit y snapshot de modelo fijados para una baseline reproducible.
En Agents SDK, Agent pasa al Agent mantenido, transfers a handoffs o handoff() y context variables a RunContextWrapper tipado. Use handoff si el especialista toma la conversación; Agent.as_tool() si el manager conserva la respuesta final. Elija una sola memoria: session, to_input_list() o continuación administrada por OpenAI. Mezclarlas duplica history.
Añada approvals, timeouts, guardrails de tool, estado interrupt/resume y tracing durante la migración. El tracing de Agents SDK está activado por defecto y puede contener input/output sensible; redaction o desactivación son decisiones de política. Los guardrails validan etapas, pero no sustituyen authorization de identity, tenant y recurso en servidor.
Seguridad, estado y operaciones
| Riesgo | Control mínimo | Carencia Swarm |
|---|---|---|
| Wrong handoff | allowlisted edges + eval + human route | model selects route |
| Privilege escalation | separate tools + server authorization | agent name is not identity |
| Infinite loop | max_turns + cycle detector | agents can return each other |
| Duplicate action | idempotency + ledger | no exactly-once |
| Lost state | database/session + resume token | stateless across calls |
| Prompt injection | instruction/data separation + validation | tool content returns to model |
| Secret leakage | code-only context + redaction | dynamic prompt may expose values |
| Silent failure | structured trace + usage + alerts | no production observability |
Swarm frente a alternativas
| Opción | Elegir si | Diferencia |
|---|---|---|
| OpenAI Agents SDK | official maintained OpenAI path | handoffs + state + guardrails + tracing |
| LangGraph | durable checkpoints/graphs/provider flexibility | more engineering, stronger state |
| AutoGen | event-driven/distributed teams | broader runtime surface |
| CrewAI | role crews + business flows | more opinionated ecosystem |
| Single agent + tools | one model can route tools | simpler baseline |
| Deterministic workflow | known audited sequence | less autonomous, easier control |
| Swarm | learn minimal handoff loop | small, inspectable, superseded |
Swarm carece de durable state, scheduler, runtime distribuido, auth, aislamiento tenant, retry ledger, budget y trace store. Si el proceso muere tras el side effect y antes del result, un retry es ambiguo. Use idempotency key del negocio, transactional outbox, timeout, rate limit, max turns, escalado humano y detector de edges repetidas.
Prompt injection empeora cuando el handoff cambia las tools. Texto del usuario, retrieval y outputs son datos no confiables. Una instrucción de transferencia dentro de un documento no puede decidir routing. Autorice cada tool con identidad del servidor, valide cuenta, importe y destino, reduzca credenciales y exija approval para acciones irreversibles. Registre policy decision separada del razonamiento del modelo.
Veredicto: Swarm es uno de los mejores codebases pequeños para comprender handoffs. La falta de machinery hace visible el loop, una ventaja docente y un riesgo productivo. Lea el source, reproduzca el experimento y migre el patrón, no la dependencia, a Agents SDK, LangGraph u otro runtime según durabilidad y provider.
Preguntas frecuentes
¿Swarm está listo para producción?
No. README lo llama experimental/educativo, reemplazado por Agents SDK, y recomienda migrar producción.
¿Está archived?
El flag era false el 20-08-2026; no es una aprobación productiva.
¿Sigue mantenido?
Hubo commit de mantenimiento en 2026-04, pero cero releases formales. Actividad no equivale a evolución productiva.
¿Qué es handoff?
Transferencia tipo tool que cambia active agent; una función devuelve otro Agent.
¿context_variables es memoria?
No. Son datos del run; estado conversacional y de negocio se persiste fuera.
¿Otros modelos?
Una capa compatible puede funcionar, pero no justifica elegir un proyecto sustituido.
¿Qué reemplaza Swarm?
OpenAI recomienda Agents SDK.
¿Guardrails sustituyen authorization?
No. Identity, tenant y permisos de recursos siguen en servidor.
¿Todo necesita multiagente?
No. Single agent+tools o workflow determinista es la baseline.
¿Cómo migrar?
Fijar baseline, mapear grafo/contexto, reconstruir tipado, añadir controls, shadow, canary y retirar Swarm.
Fuentes
- Official Swarm repository
- Swarm README: replacement notice
- Swarm source: core loop
- Swarm commits
- Swarm releases
- Swarm MIT license
- OpenAI Agents SDK quickstart
- Agents SDK handoffs
- Agents SDK context
- Agents SDK guardrails
- Agents SDK running and state
- Agents SDK tracing
- LangGraph overview
- AutoGen AgentChat
- AutoGen handoff pattern
- CrewAI documentation
Revisión independiente del 20 de agosto de 2026. Estado, commits y APIs cambian; verifique README y Agents SDK actual.



