Communitygithub.com

Diseño de Colas de Trabajos en Segundo Plano

Úsalo al diseñar un sistema de trabajos en segundo plano, eligiendo entre BullMQ / Sidekiq / RQ / Temporal / SQS, decidiendo cola vs flujo de trabajo, dimensionando concurrencia vs límites de tasa, construyendo colas de mensajes fallidos, o haciendo manejadores idempotentes.

¿Qué es Diseño de Colas de Trabajos en Segundo Plano?

Esta habilidad proporciona una guía completa para diseñar sistemas robustos de trabajos en segundo plano, abordando los tres modos de fallo fundamentales: trabajos perdidos, ejecución duplicada y reintentos descontrolados. Enfatiza que 'al menos una vez' es el único modelo de entrega honesto, por lo que todos los manejadores deben ser idempotentes. Cubre la selección de la herramienta adecuada (BullMQ, Sidekiq, SQS, Temporal) según la complejidad del trabajo, la configuración de tiempos de espera de visibilidad, la clasificación de errores con colas de mensajes fallidos (DLQ), y la implementación de retroceso exponencial con 'jitter' para evitar avalanchas. También incluye prácticas de higiene de memoria para Redis y pautas para apagados graceful. Es útil para desarrolladores que trabajan con Node, Ruby, Python o Go, y que necesitan evitar problemas comunes como la pérdida de trabajos tras fallos del worker, la duplicación de efectos secundarios o la saturación de la DLQ.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/curiositech/windags-skills/tree/HEAD/skills/background-job-queue-design

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

¿Qué hace Diseño de Colas de Trabajos en Segundo Plano?

Un sistema de trabajos en segundo plano tiene tres modos de fallo contra los que debes diseñar desde el primer día: trabajos perdidos, ejecución duplicada y reintentos descontrolados. Si eliges la primitiva incorrecta, pasarás el próximo año arreglando los tres. El consenso recurrente en la industria, a través de la documentación de BullMQ, Sidekiq, SQS y Temporal, es que 'al menos una vez' es la única semántica de entrega honesta — diseña cada manejador para que sea idempotente y deja de perseguir 'exactamente una vez'. (Caduh — Queues 101)

Salta a tu problema:

Cuándo usar

  • Diseñando un nuevo sistema de trabajos en segundo plano en Node, Ruby, Python o Go.
  • Migrando desde setTimeout / cron / colas caseras a un broker real.
  • Los fallos de worker están perdiendo trabajos.
  • Los reintentos en producción están causando efectos secundarios duplicados.
  • Eligiendo entre BullMQ (Node + Redis), Sidekiq (Ruby + Redis), RQ / Celery / Dramatiq (Python), Asynq (Go + Redis), SQS (gestionado) o Temporal (ejecución duradera).

Capacidades principales

Elige la primitiva que coincida con el trabajo

TienesRecurre aRazón
Trabajos cortos con efectos secundarios (enviar email, redimensionar imagen) en NodeBullMQNativo de Redis, DLQ madura, patrones de flujo, ~~5k trabajos/seg/nodo típico
Lo mismo en RubySidekiq (Pro para fiabilidad)Misma forma; Pro super_fetch añade recuperación fiable mediante LMOVE (Wiki de Sidekiq)
Flujos de trabajo de múltiples pasos con distribución externa de API, duraciones de horas a díasTemporalEjecución duradera; reproduce desde el historial de eventos (Documentación de Temporal)
Nativo de AWS, distribución simple, no quieres ejecutar RedisSQS + Lambda'Al menos una vez' gestionado; tiempo de espera de visibilidad + DLQ de primera clase (AWS SQS DLQ)
Aislamiento multitenencia y multirregiónTemporal o SQSUn solo Redis no sobrevivirá limpiamente en múltiples regiones
Necesitas 'exactamente una vez' a través de BD + email + pagosNinguna — diseña para 'al menos una vez' + manejadores idempotentes'Exactamente una vez' dentro del broker no se extiende a través de sistemas (Caduh)

El criterio oculto: ¿qué tan compleja es la historia de recuperación? Una cola simple de BullMQ con reintentos está bien para "enviar un recibo". Un flujo de trabajo de compra de 12 pasos que espera 24 horas por un webhook es un flujo de trabajo de Temporal, no 12 trabajos de cola encadenados.

Idempotencia

La propiedad obligatoria. Todos los documentos de las colas populares comienzan con esto. De la página de trabajos idempotentes de BullMQ: "no debería suponer una diferencia para el estado final del sistema si un trabajo se completa con éxito en su primer intento, o si falla inicialmente y tiene éxito cuando se reintenta." (BullMQ idempotent-jobs)

Patrones prácticos:

// 1. Clave de idempotencia derivada del evento de negocio, no de la cola.
//    Usa el event_id ascendente si lo tienes (Stripe event.id, Shopify hook id).
const job = await queue.add(
  'send-receipt',
  { orderId, amount },
  {
    jobId: `send-receipt:${orderId}`,   // BullMQ deduplica por jobId en la cola.
    attempts: 5,
    backoff: { type: 'exponential', delay: 1000 },
    removeOnComplete: { age: 3600, count: 1000 },
    removeOnFail:     { age: 86400 },
  }
);

// 2. Dentro del manejador, deduplica también en el sitio del efecto secundario.
async function processSendReceipt(job) {
  const { orderId, amount } = job.data;
  // Si ya enviamos, no hacer nada.
  const sent = await db.queryOne(
    'INSERT INTO email_sends (idempotency_key, order_id) VALUES ($1, $2) ON CONFLICT DO NOTHING RETURNING id',
    [`send-receipt:${orderId}`, orderId]
  );
  if (!sent) return { skipped: 'already-sent' };
  await emailProvider.send({ to: ..., subject: ..., body: render(amount) });
}

El jobId deduplica las adiciones mientras un duplicado aún está en cola. La restricción única de la BD deduplica a través de fallos de worker, reintentos y reproducciones. Ambos son necesarios; solo jobId es insuficiente porque BullMQ elimina los trabajos completados y la ventana de deduplicación se evapora.

Recuperación fiable y tiempo de espera de visibilidad

Cuando un worker extrae un trabajo y falla, ¿qué sucede?

SistemaComportamiento predeterminadoRecuperación
BullMQEl trabajo tiene un lockDuration (predeterminado 30s). El verificador de trabajos estancados vuelve a poner en cola después de la expiración (BullMQ production)Los workers DEBEN extender el bloqueo o terminar dentro de lockDuration; de lo contrario, se ejecuta dos veces
Sidekiq OSSPop no es atómico; si el worker muere entre pop y proceso, el trabajo se pierdeActualiza a Sidekiq Pro super_fetch (Redis 6.2+ LMOVE a una cola de trabajo privada)
Sidekiq Pro super_fetchLMOVE a una lista de trabajo por proceso. El latido expira a los 60s; la verificación de huérfanos barre y vuelve a poner en cola (Wiki de Sidekiq)Incorporado
SQSTiempo de espera de visibilidad (predeterminado 30s, máximo 12h). El mensaje reaparece después del tiempo de espera si no se eliminaEstablece el tiempo de espera > latencia p99 del manejador; extiende con ChangeMessageVisibility para trabajos largos
TemporalLas actividades tienen latidos + políticas de reintento. El historial del flujo de trabajo sobrevive a la muerte del workerReproduce desde el historial; no tienes que pensar en esto

La trampa: lockDuration / tiempo de espera de visibilidad más corto que el p99 del manejador → el trabajo se ejecuta dos veces. Más largo que el tiempo de recuperación aceptable → el trabajo fallido espera demasiado. Mide tu p99 primero, establece el tiempo de espera a ~3x eso, y haz que el manejador envíe latidos / extienda el bloqueo para trabajos realmente largos.

Clasificación de errores y DLQ

No todos los errores deben reintentarse para siempre. De los documentos de SQS: "Establece el máximo de recepciones... y la política de redirección para enviar mensajes a la DLQ una vez que se supere el umbral." (AWS SQS DLQ)

// Clasifica antes de lanzar. Los errores permanentes NO deben reintentarse.
class PermanentError extends Error { constructor(m: string) { super(m); this.name = 'PermanentError'; } }
class TransientError extends Error { constructor(m: string) { super(m); this.name = 'TransientError'; } }

async function process(job) {
  try {
    const user = await db.user(job.data.userId);
    if (!user) throw new PermanentError('user-not-found');   // → DLQ en el primer intento
    if (user.suspended) throw new PermanentError('user-suspended');
    await externalApi.call(user);
  } catch (e) {
    if (e instanceof PermanentError) {
      // Mover a DLQ inmediatamente — reintentar no ayudará.
      job.discard();    // BullMQ: evita el reintento
      throw e;
    }
    throw e;            // Red/timeout → reintentar según política de intentos
  }
}

La DLQ entonces necesita:

  • Una alerta por recuento creciente (no solo distinto de cero — "DLQ tiene 3 cosas para siempre" está bien; "DLQ creció 100/min" es una emergencia).
  • Una herramienta de reproducción (CLI o UI de administración) para que un humano pueda arreglar el error ascendente, reproducir los trabajos fallidos y limpiar la DLQ.
  • Paneles de control (ver grafana-dashboard-builder).

Retroceso y jitter

El retroceso exponencial por sí solo no es suficiente. Si 1000 trabajos fallan todos a las 12:00:00 porque un servicio descendente tuvo un parpadeo, el retroceso exponencial simple hará que los 1000 reintenten exactamente a las 12:00:01, 12:00:03, 12:00:07 — una manada atronadora que podría mantener el servicio descendente caído. Añade jitter completo:

// Estilo AWS "jitter completo": delay = random(0, exp_backoff)
const baseDelay = Math.min(2 ** attempt * 1000, 30_000);
const delay = Math.random() * baseDelay;

Para la línea base recomendada de BullMQ, el documento going-to-production sugiere intervalos de reintento entre 1s y 20s con retryStrategy. (BullMQ production)

Concurrencia y limitador

La concurrencia por worker ejecuta N trabajos en paralelo desde un solo proceso. Múltiples workers multiplican eso. Sin un limitador a nivel de cola, no puedes limitar las llamadas agregadas a un servicio descendente:

// BullMQ — límite de tasa global en todos los workers de esta cola.
const queue = new Queue('outbound-emails', {
  connection,
  limiter: { max: 100, duration: 1000 }, // 100 correos/segundo en toda la flota
});

La forma correcta: muchos workers concurrentes + un limitador de cola para los límites del contrato descendente. Sidekiq tiene limitadores de tasa equivalentes; SQS usa concurrencia de Lambda o tasa por mensaje.

Higiene de memoria

El error más enfatizado en la producción de BullMQ: maxmemory-policy noeviction en la instancia de Redis. Cualquier otra cosa (allkeys-lru, volatile-lru) eliminará silenciosamente trabajos en cola bajo presión. (BullMQ production)

También:

  • removeOnComplete agresivo (ej. { age: 3600, count: 1000 }).
  • removeOnFail aún más agresivo una vez que hayas migrado a un patrón DLQ.
  • Habilita la persistencia AOF de Redis — appendfsync everysec es el punto óptimo documentado para BullMQ. (BullMQ production)
  • maxRetriesPerRequest: null en el worker para evitar que ioredis lance durante desconexiones transitorias. (BullMQ production)
  • Del lado de la cola: enableOfflineQueue: false para que el productor falle rápidamente en lugar de almacenar en búfer.

Apagado graceful

process.on('SIGTERM', async () => {
  await worker.close();   // dejar de aceptar; terminar trabajos en curso.
  await connection.quit();
  process.exit(0);
});
process.on('SIGINT', async () => { /* igual */ });

La guía de producción de BullMQ señala explícitamente: cierra los workers antes de detener el proceso; el tiempo de espera de estancamiento predeterminado es ~30s. (BullMQ production)

Decisión cola vs flujo de trabajo

Un marco útil de los documentos de Temporal: "A diferencia de las colas de mensajes que mueven datos entre servicios, Temporal orquesta procesos completos... sabe dónde estás en un flujo de trabajo, qué está completo, qué está pendiente y qué necesita reintentar." (Temporal blog)

flowchart TD
  A[Trabajo en segundo plano] --> B{¿Efecto secundario único o pipeline?}
  B -->|Único| C[BullMQ / Sidekiq / SQS]
  B -->|Múltiples pasos| D{¿Los pasos abarcan segundos u horas+?}
  D -->|Segundos| E[BullMQ flows / Sidekiq batches]
  D -->|Horas+ o humano en el bucle| F[Temporal / DBOS / Restate]
  C --> G{¿Necesitas aislamiento multirregión o multitenencia?}
  G -->|Sí| H[SQS o Temporal — un solo clúster de Redis no servirá]
  G -->|No| I[Ejecuta con clúster Redis + AOF + noeviction]

Antipatrones

Idempotencia solo mediante SET-NX de Redis

Síntoma: Durante un parpadeo o reinicio de Redis, el mismo trabajo se ejecuta dos veces y crea efectos secundarios duplicados (cobro, correo, ticket). Diagnóstico: Redis es un caché; puede ser desalojado, reiniciado o particionado. La deduplicación SET-NX que solo vive en Redis es de esfuerzo máximo. Solución: Clave de idempotencia con una restricción única de BD en el registro del efecto secundario (ej. email_sends.idempotency_key). La transacción de BD que crea el efecto secundario ES la primitiva de deduplicación.

lockDuration más corto que el p99 del manejador

Síntoma: Entradas de registro de trabajos estancados; el mismo trabajo procesado por dos workers. Los clientes se quejan. Diagnóstico: El lockDuration predeterminado es 30s; el manejador a veces tarda 45s; el segundo worker lo recoge. Solución: Mide el p99, establece lockDuration a ~3x p99, y llama a job.extendLock() dentro de manejadores largos. O divide el trabajo.

Retroceso exponencial simple (sin jitter)

Síntoma: Un parpadeo descendente se convierte en una caída descendente; 10k trabajos golpean el servicio en recuperación al unísono. Diagnóstico: Sin jitter, los reintentos están correlacionados. Solución: Retroceso con jitter completo. Limita el retardo máximo para acotar el tiempo hasta el fallo de la DLQ.

maxmemory-policy allkeys-lru en Redis

Síntoma: La cola pierde trabajos misteriosamente bajo carga. Sin errores. (BullMQ production) Diagnóstico: Redis desalojó claves de trabajo para hacer espacio. Solución: CONFIG SET maxmemory-policy noeviction Y verifícalo al inicio. Los workers deberían negarse a iniciar de lo contrario.

Fingir 'exactamente una vez' a través de sistemas

Síntoma: Cliente cobrado dos veces; enviado dos veces el mismo correo. El ingeniero está seguro de que "el broker es exactamente una vez". Diagnóstico: Incluso un broker FIFO/exactamente una vez no extiende su garantía a tu BD + proveedor de correo + Stripe + libro mayor. Solución: Trata la cola como 'al menos una vez'. Idempotencia en cada límite de efecto secundario.

DLQ sin herramienta de reproducción

Síntoma: "Tenemos 3.200 trabajos en la DLQ. No sabemos qué hay ahí." La DLQ se convierte en un cementerio no monitoreado. Diagnóstico: Construiste la DLQ, no construiste la herramienta del operador. Solución: Reproducir por ID, reproducir por rango de tiempo, vaciar con confirmación. CLI o UI de administración. Probado.

Trabajo de bloqueo largo en el bucle de eventos

Síntoma: El proceso del worker de BullMQ se cuelga; los latidos se detienen; el bloqueo expira; el trabajo se vuelve a ejecutar. Diagnóstico: Trabajo ligado a CPU en el mismo proceso que el latido de la cola; el bucle de eventos se bloquea por > lockDuration. Solución: Crea un proceso hijo o un hilo de worker para trabajo ligado a CPU. O ejecuta un procesador en sandbox (BullMQ soporta sandboxing de procesos por trabajo).

Puertas de calidad

  • Prueba: prueba de caos — mata un worker a mitad del trabajo; verifica que el trabajo se vuelva a ejecutar y el efecto secundario no se duplique.
  • Prueba: prueba de tormenta de reintentos — falla el servicio descendente durante 60s; verifica que el retroceso + jitter distribuya los reintentos (sin manada atronadora en las métricas).
  • Cada manejador es idempotente y usa una clave de idempotencia estable derivada del evento de negocio.
  • Una restricción única a nivel de BD respalda cualquier deduplicación en Redis (jobId, SET-NX).
  • lockDuration / tiempo de espera de visibilidad ≥ 3× latencia p99 medida del manejador, Y los manejadores largos extienden el bloqueo.
  • Los errores permanentes (clase PermanentError o equivalente) omiten el reintento y van directamente a la DLQ.
  • Alertas de DLQ: página cuando la tasa de crecimiento > N por minuto, no solo recuento > 0.
  • La herramienta de reproducción de DLQ existe y está probada (única + rango).
  • Redis: maxmemory-policy=noeviction, AOF habilitado (appendfsync everysec), verificado al inicio del worker. (BullMQ production)
  • removeOnComplete y removeOnFail configurados. La métrica de recuento de trabajos se sigue en grafana-dashboard-builder.

Referencias


Entregado por curiositech/windags-skills. Edita en agents/queue-design/SKILL.md.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

curiositech/windags-skills

Expert in 2000s-era music visualization (Milkdrop, AVS, Geiss) and modern WebGL implementations. Specializes in Butterchurn integration, Web Audio API AnalyserNode FFT data, GLSL shaders for audio-reactive visuals, and psychedelic generative art. Activate on "Milkdrop", "music visualization", "WebGL visualizer", "Butterchurn", "audio reactive", "FFT visualization", "spectrum analyzer". NOT for simple bar charts/waveforms (use basic canvas), video editing, or non-audio visuals.

curiositech/windags-skills

Expert legal research agent for finding and scraping expungement data state by state. Knows authoritative sources, URL patterns, Firecrawl configuration, and 2026 legal landscape.

curiositech/windags-skills

Expert in 3D computer vision labeling tools, workflows, and AI-assisted annotation for LiDAR, point clouds, and sensor fusion. Covers SAM4D/Point-SAM, human-in-the-loop architectures, and vertical-specific training strategies. Activate on '3D labeling', 'point cloud annotation', 'LiDAR labeling', 'SAM 3D', 'SAM4D', 'sensor fusion annotation', '3D bounding box', 'semantic segmentation point cloud'. NOT for 2D image labeling (use clip-aware-embeddings), general ML training (use ml-engineer), video annotation without 3D (use computer-vision-pipeline), or VLM prompt engineering (use prompt-engineer).

curiositech/windags-skills

Implement WCAG 2.2 AA/AAA compliance with automated testing, keyboard navigation, screen reader support, and focus management. Activate on: accessibility audit, WCAG compliance, keyboard navigation, screen reader, aria attributes, axe-core, focus trap. NOT for: design-level accessibility review (use design-accessibility-auditor), color contrast only (use css-in-js-architect).

curiositech/windags-skills

Time-blind friendly planning, executive function support, and daily structure for ADHD brains. Specializes in realistic time estimation, dopamine-aware task design, and building systems that actually work for neurodivergent minds.

curiositech/windags-skills

Designs digital experiences for ADHD brains using neuroscience research and UX principles. Expert in reducing cognitive load, time blindness solutions, dopamine-driven engagement, and compassionate design patterns. Activate on 'ADHD design', 'cognitive load', 'accessibility', 'neurodivergent UX', 'time blindness', 'dopamine-driven', 'executive function'. NOT for general accessibility (WCAG only), neurotypical UX design, or simple UI styling without ADHD context.

curiositech/windags-skills

>- Apply crisis decision-making research to agent routing, uncertainty triage, and coordination failure analysis in time-pressured systems. Use when diagnosing handoff failures, analytical paralysis, or expert judgment under incomplete information. NOT for routine coding, simple CRUD design, or static single-agent tasks with complete information.

curiositech/windags-skills

Extend and modify the admin dashboard, developer portal, and operations console. Use when adding new admin tabs, metrics, monitoring features, or internal tools. Activates for dashboard development, analytics, user management, and internal tooling.

curiositech/windags-skills

Conversation patterns and interaction protocols for multi-agent systems. Covers request/response, pub/sub, blackboard, delegation chains, debate, critique, consensus, fan-out/fan-in, supervisor-worker, and peer negotiation. Deep analysis of AutoGen conversation patterns, CrewAI delegation, LangGraph state passing, and FIPA-ACL performatives. Teaches how to design what agents say to each other and in what order. Activate on: "agent conversation", "agent protocol", "multi-agent debate", "agent delegation", "supervisor worker pattern", "agent voting", "consensus protocol", "fan-out fan-in", "agent negotiation", "blackboard pattern", "agent dialogue", "conversation topology", "agent handoff". NOT for: wire format or serialization (use agent-interchange-formats), orchestration infrastructure (use agentic-infrastructure-2026), single agent behavior (use agentic-patterns).

curiositech/windags-skills

Meta-agent for creating new custom agents, skills, and MCP integrations. Expert in agent design, MCP development, skill architecture, and rapid prototyping. Activate on 'create agent', 'new skill', 'MCP server', 'custom tool', 'agent design'. NOT for using existing agents (invoke them directly), general coding (use language-specific skills), or infrastructure setup (use deployment-engineer).

curiositech/windags-skills

AI-powered calendar management and agent-based scheduling coordination. Covers calendar APIs (Google Calendar, CalDAV/iCal), AI scheduling assistants (Reclaim, Clockwise, Motion, Cal.com), building custom calendar agents with MCP, multi-calendar merging, timezone management, focus block protection, meeting fatigue detection, and agent-to-agent meeting negotiation protocols. Activate on: "calendar agent", "AI scheduling", "calendar coordination", "meeting scheduling", "calendar API", "focus time protection", "calendar optimization", "Google Calendar MCP", "Reclaim", "Clockwise", "Motion", "Cal.com", "smart scheduling", "calendar-aware agent", "timezone scheduling", "agent negotiation meetings". NOT for: manual calendar UI component design (use form-validation-architect), project management scheduling or Gantt charts (use project-management-guru-adhd), general time-tracking or pomodoro apps (use adhd-daily-planner for time-awareness), building the agent itself from scratch (use agent-creator).

curiositech/windags-skills

Build and adopt production AI agent infrastructure in 2026. Covers framework selection (LangGraph, CrewAI, AutoGen, MCP), orchestration patterns, evaluation, observability, memory systems, and tool use. Also covers the SOCIAL dimension: how to sell agent infrastructure internally, change management, measuring ROI, building trust in autonomous systems, and scaling adoption across teams. Activate on: "agent infrastructure", "agent framework comparison", "which agent framework", "sell AI tools internally", "agent adoption", "agent observability", "agent evaluation", "MCP architecture", "agentic mesh", "enterprise AI agents", "AI change management", "agent ROI". NOT for: building specific agents (use ai-engineer), designing agent behavior patterns (use agentic-patterns), prompt tuning (use prompt-engineer).

curiositech/windags-skills

Fundamental patterns for effective agentic behavior. Teaches decomposition, tool orchestration, error recovery, context management, quality self-assessment, and knowing when to stop. Model-agnostic principles that make any agent more effective regardless of domain. Activate on: "how should I structure this agent", "agentic workflow", "agent patterns", "multi-step task", "tool orchestration", "/agentic-patterns", "decompose this", "agent best practices", "chain of actions", "when should the agent stop", "agent loop design". NOT for: creating agent infrastructure (use agent-creator), building DAGs (use windags-architect), specific tool implementation.

curiositech/windags-skills

Automated discovery and matching of agent skills for dynamic task routing and capability assessment

curiositech/windags-skills

Cryptographic security for agentic systems — zero-trust agent networking, signed message envelopes (JWS/JWE), capability-based security (ocaps), Merkle tree audit trails, WASM sandboxing, and formal verification. Covers CLI dev tool security, mTLS between agents, permission boundaries (least privilege for AI agents), and supply chain security for skills/plugins. Activate on: "agent security", "zero trust agents", "secure agent communication", "capability-based security", "ocap", "signed messages between agents", "agent audit trail", "sandbox agent execution", "agent permissions", "mTLS agents", "cryptographic verification", "agent supply chain", "OWASP agentic", "prove agent did X", "tamper-proof agent logs". NOT for: application-level SAST scanning (use security-auditor), network firewall rules (use infrastructure), SOC2/HIPAA compliance (organizational), or prompt injection defense (use prompt-engineer).

curiositech/windags-skills

Data structures and serialization formats for agent-to-agent communication. Covers message envelopes, structured output schemas, capability declarations, task handoff payloads, error/retry signaling, and context windows as data structures. Deep comparison of A2A protocol, MCP, OpenAI function calling, and LangChain message types. Teaches when to use rigid schemas vs free-form with validation, typed vs untyped, streaming vs batch. Activate on: "agent message format", "agent communication schema", "agent-to-agent protocol", "A2A protocol", "MCP message format", "structured output for agents", "agent interop", "interchange format", "agent serialization", "task handoff format", "capability declaration". NOT for: what agents say to each other (use agent-conversation-protocols), orchestration topology (use multi-agent-coordination), building agent infrastructure (use agentic-infrastructure-2026).

curiositech/windags-skills

Logic-based agent programming language implementing BDI architecture for practical autonomous agent development

curiositech/windags-skills

>- Design AgentSpeak(L)-style BDI agents with context-guarded plans, selection functions, and intention stacks. Use for interruptible autonomy, agent policy, and multi-agent orchestration in dynamic environments. NOT for simple rule engines, static planners, or centralized workflows.

curiositech/windags-skills

Foundational concurrent computation model where actors communicate exclusively through asynchronous message passing

curiositech/windags-skills

license: Apache-2.0 NOT for unrelated tasks outside this domain.

Skills relacionados