async-systems

Design and review async systems covering queues, streams, backpressure, and failure semantics.

1|Updated Apr 24, 2026
One-click install
npx skills add https://github.com/kreek/consult --skill async-systems-kreek
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: async-systems
Source: https://github.com/kreek/consult/tree/main/plugin/skills/async-systems
Command: npx skills add https://github.com/kreek/consult --skill async-systems-kreek

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill includes references (resource) components.

What problem does it solve? Async systems fail silently: jobs vanish, queues overflow, events arrive out of order, and retries duplicate work. This Skill gives coding agents a concrete rule set for designing and reviewing concurrency, queues, streams, and pub/sub so every async boundary names its ownership, lifetime, backpressure, and failure semantics. ## Core Features & Use Cases - Async boundary rules: Enforces immutable payloads, single-ownership of mutable state, bounded queues with overflow policies, and supervised task lifetimes with deterministic shutdown. - Transport selection guidance: Starts with polling, SSE, or WebSockets for live updates and escalates to Kafka, Kinesis, or Redis Streams only when a named requirement (replay, retention, fanout) justifies it. - Tripwire detection: Flags common mistakes like passing session objects to jobs, enqueueing inside transactions, swallowing job failures, and using one queue for all workloads. - Use Case: When reviewing a background job system that silently drops exhausted jobs, use this Skill to require visible failure signals, idempotent consumers, and explicit DLQ and poison-message handling. ## Quick Start Use the async-systems skill to review my background job and streaming design for ownership, backpressure, ordering, and failure handling.

Frequently Asked Questions about async-systems

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I choose between SSE, WebSockets, and Kafka for live updates?▼

Start with polling, SSE, or WebSockets for user-facing live updates. Escalate to Kafka, Kinesis, or Redis Streams only after naming a requirement simpler transports cannot meet, such as independent replay, long retention, multi-service fanout, or durable recovery.

How do I design background jobs that fail safely?▼

Make retried jobs idempotent, deduplicated, or explicitly marked non-retryable with a reason. Never rescue and log job failures silently; re-raise, mark terminal, or record the failure so exhausted work stays visible with tests and signals.

When should I use SSE instead of WebSockets?▼

SSE is the default for one-way server-to-browser updates like notifications, progress, dashboards, and token streams. WebSockets are for bidirectional messaging, low-latency client input, collaborative editing, games, and presence.

Why is enqueueing a job inside a database transaction a problem?▼

Enqueueing inside a transaction can dispatch jobs before the data they read is committed. Enqueue after commit or use a transactional outbox when the job reads transaction-written state; it is safe only if the job reads none of the transaction's writes.

What should every queue or stream define to avoid overload?▼

Every queue, channel, pool, stream, and buffer needs a bound and an overflow policy. Blocking work must not starve latency-sensitive work, and user-facing traffic should be isolated from bulk queues via priority, concurrency limits, or separate workers.