← Back to Skills Marketplace
ktech99

Async Queue

by ktech99 · GitHub ↗ · v1.0.6 · MIT-0
cross-platform ⚠ suspicious
359
Downloads
1
Stars
1
Active Installs
7
Versions
Install in OpenClaw
/install async-queue
Description
Schedule delayed tasks between OpenClaw agents — set reminders, chain tasks, coordinate agents on a delay. File-backed, no infra needed. NOT for cron-style r...
README (SKILL.md)

Async Queue

A lightweight, file-backed task queue that fires delayed tasks to any OpenClaw agent at a scheduled time. Consists of four components:

Component What it does
daemon.js Polls queue.json every 30s, delivers due tasks via the queue-wake plugin
push.js CLI to enqueue a new task with a delay
queue-cli.js CLI to list pending tasks, cancel by id prefix, and view history
queue-wake plugin OpenClaw plugin that receives delivery from daemon, enqueues a system event, and calls requestHeartbeatNow for near-exact timing

Installation (first time, macOS)

bash "$(openclaw skill path async-queue)/scripts/install.sh"

This will:

  1. Copy daemon.js + push.js to ~/.openclaw/queue/
  2. Copy the queue-wake plugin to ~/.openclaw/extensions/queue-wake/
  3. Register the daemon under launchd (auto-starts on login, auto-restarts on crash)

Then restart the OpenClaw gateway to activate the plugin:

openclaw gateway restart

Push a task

node ~/.openclaw/queue/push.js --task "description" --delay \x3C10s|5m|2h|HH:MM|H:MMam/pm> [--to \x3CagentId>] [--then "next task text"]

Arguments:

  • --to — agent name (e.g. main). Can also be a full session key like agent:main:main. Optional; defaults to queue/config.json.defaultTo if set, else marcus.
  • --task — what the agent should do when this fires
  • --delay — how long from now: 10s, 5m, 2h, or absolute time: HH:MM (24h) / H:MMam (12h)
  • --then — optional chained task text to enqueue immediately after this task fires
  • --ttl — (optional) seconds before item expires if undelivered (default: 300)

Examples:

# Remind in 30 minutes
node ~/.openclaw/queue/push.js --to main --task "Follow up: did the user save that document?" --delay 30m

# Check deploy health in 5 minutes
node ~/.openclaw/queue/push.js --to main --task "Verify deploy is healthy — check HTTP status" --delay 5m

# Fire today at 6:30 PM (or tomorrow if already past)
node ~/.openclaw/queue/push.js --task "Ping me before dinner" --delay 6:30pm

# Tonight reminder
node ~/.openclaw/queue/push.js --to main --task "Ask user about the pending decision" --delay 2h

# Chain a follow-up immediately after the first task fires
node ~/.openclaw/queue/push.js --task "Run deploy checks" --delay 10m --then "Verify logs are clean"

When to use this skill

Use async-queue when:

  • User asks to be reminded about something in X minutes/hours
  • You spawn a sub-agent or background job and need to check back on it
  • A follow-up needs to happen after a delay (e.g. verify a deploy, nudge a pending action)
  • Any work that can't be completed this turn and needs to continue later

Don't use async-queue for:

  • Immediate actions → just do them
  • Recurring schedules → use openclaw cron
  • Tasks waiting on user input → message the user directly

Schema

{
  "id": "uuid",
  "to": "agentId",
  "task": "string — what to execute when this fires",
  "then": "string — optional chained task to enqueue after successful fire",
  "runAt": "ISO 8601 timestamp",
  "createdAt": "ISO 8601 timestamp",
  "ttl": 300
}

ttl: seconds the item may remain undelivered before being dropped (default: 300s). Increase for tasks scheduled many hours out if the daemon might miss a window.


Delivery flow

push.js → queue.json → daemon.js (polls 30s)
   → POST /api/queue-wake (queue-wake plugin)
      → enqueueSystemEvent([QUEUE:agentId] task)
      → requestHeartbeatNow(agentId)
         → agent wakes, sees task in context

Check queue state

cat ~/.openclaw/queue/queue.json         # pending items
node ~/.openclaw/queue/queue-cli.js list # pretty list
node ~/.openclaw/queue/queue-cli.js history # last 20 deliveries
node ~/.openclaw/queue/queue-cli.js cancel \x3CidPrefix>
tail -20 ~/.openclaw/queue/daemon.log    # delivery history

Daemon status (macOS)

launchctl list | grep queue-daemon       # running?

# Restart if needed:
launchctl unload  ~/Library/LaunchAgents/ai.openclaw.queue-daemon.plist
launchctl load    ~/Library/LaunchAgents/ai.openclaw.queue-daemon.plist

Files installed

Path Purpose
~/.openclaw/queue/daemon.js Polling daemon
~/.openclaw/queue/push.js Push CLI
~/.openclaw/queue/queue.json Queue state file
~/.openclaw/queue/daemon.log Delivery log
~/.openclaw/extensions/queue-wake/ OpenClaw plugin
~/Library/LaunchAgents/ai.openclaw.queue-daemon.plist launchd service

Protocol

See references/PROTOCOL.md for the full protocol: when to queue, rules, TTL guidance, and common task patterns.

Usage Guidance
This package appears to implement a local delayed-task queue as described, but review a few items before installing: - Authentication & port assumptions: daemon.js POSTs to 127.0.0.1:18789 with no auth headers while the plugin route declares auth: "plugin". Confirm how your OpenClaw gateway exposes plugin HTTP routes and whether unauthenticated localhost POSTs are accepted. If your gateway requires tokens, the daemon will fail unless adapted. - Port binding is assumed (18789). Verify your OpenClaw instance listens on that port or update daemon.js accordingly. - Persistent daemon: running the provided install.sh will copy files into ~/.openclaw and register+load a launchd job that auto-starts on login and restarts on crash. Only run the install script if you accept a persistent process running under your user account. - Files & permissions: the queue file (queue.json), history, and logs live in your home directory. Inspect their contents and set restrictive file permissions if needed to prevent other local users from inserting tasks. - Default agent name: push.js falls back to a hard-coded default agent 'marcus' if no config is present. If you don't specify --to and don't set config.json, queued tasks may target that account; consider editing config.json or the code to set the desired default. - Review the plugin code: it enqueues system events and calls requestHeartbeatNow to wake agents — this is needed for the feature but is a capability you should be comfortable granting. Ensure only trusted local processes can write to the queue.json or call the plugin endpoint. If you want to proceed safely: (1) audit the files in the package, (2) run the install.sh inside a controlled user account (not root), (3) verify the plugin endpoint and its auth model on your OpenClaw gateway, and (4) consider changing the default agent and tightening filesystem permissions on ~/.openclaw/queue.
Capability Analysis
Type: OpenClaw Skill Name: async-queue Version: 1.0.6 The async-queue skill provides a legitimate mechanism for scheduling delayed tasks between OpenClaw agents using a local file-backed queue. It implements persistence via a macOS launchd daemon (ai.openclaw.queue-daemon.plist) and a local HTTP plugin endpoint (/api/queue-wake), both of which are explicitly disclosed in SKILL.md and public.json. The implementation is transparent, uses only built-in Node.js modules (fs, path, http, crypto), and restricts network communication to 127.0.0.1, with no evidence of data exfiltration or unauthorized execution.
Capability Assessment
Purpose & Capability
Name/description align with what the package installs: a file-backed queue, a daemon to poll queue.json, a push CLI, a queue-cli, and an OpenClaw plugin that wakes agents. The files present (daemon.js, push.js, plugin code) are consistent with the stated functionality.
Instruction Scope
The runtime instructions and code assume the daemon can POST to an OpenClaw plugin HTTP endpoint at 127.0.0.1:18789 with no authentication headers; the plugin declares route auth: "plugin". It's unclear whether the OpenClaw HTTP layer will accept unauthenticated local posts or if additional auth tokens are required. The daemon also hard-codes port 18789 and expects the plugin to be reachable there — this is an external assumption not enforced in the plugin code. Also push.js falls back to a hard-coded default agent name ('marcus') if no config is present; that default may cause tasks to be directed to an unexpected agent if a user doesn't supply --to or a config.
Install Mechanism
No remote downloads or installers — install.sh copies packaged files into the user's home (~/.openclaw), writes a launchd plist, and runs launchctl load. All code is included in the skill bundle, which is the lowest-risk install type short of being instruction-only. The script does start the daemon immediately via launchctl when run.
Credentials
The skill requests no environment variables, credentials, or external services. Files are written under the user's home (~/.openclaw/queue and ~/.openclaw/extensions/queue-wake). No unrelated secrets or system credentials are requested.
Persistence & Privilege
The install script installs a launchd job and loads it so the daemon runs persistently (RunAtLoad + KeepAlive). This is expected for a background queue, but installing a persistent daemon is a privileged change to the user's environment and should be done consciously. The skill is not force-included (always: false) and does not request elevated system-wide privileges beyond the user's own home directory and launchd entry.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install async-queue
  3. After installation, invoke the skill by name or use /async-queue
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.6
Fix: version sync between SKILL.md and package.json.
v1.0.5
Better description — clearer use cases, won't truncate in search. No code changes.
v1.0.4
Fix documentation inconsistency: clarified daemon.js uses http module (not execSync). Added openclaw minimum version requirement (2026.3.7).
v1.0.3
Remove hard-coded agent targets (jarvis/marcus), remove unused execSync import, fix documentation to match actual implementation (HTTP POST, not CLI invocation).
v1.0.2
Security fixes: removed hard-coded agent targets (now user-configurable via targets.json), added required binaries to metadata (node, launchctl, openclaw), clarified install is manual not automatic.
v1.0.1
Added security disclosure in SKILL.md and public.json — clarifies launchd daemon, execSync usage, and file paths. No functional changes.
v1.0.0
Initial release — file-backed async task queue for OpenClaw agents. Schedule delayed tasks, chain follow-ups, queue discipline pattern with hash reporting.
Metadata
Slug async-queue
Version 1.0.6
License MIT-0
All-time Installs 1
Active Installs 1
Total Versions 7
Frequently Asked Questions

What is Async Queue?

Schedule delayed tasks between OpenClaw agents — set reminders, chain tasks, coordinate agents on a delay. File-backed, no infra needed. NOT for cron-style r... It is an AI Agent Skill for Claude Code / OpenClaw, with 359 downloads so far.

How do I install Async Queue?

Run "/install async-queue" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Async Queue free?

Yes, Async Queue is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Async Queue support?

Async Queue is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Async Queue?

It is built and maintained by ktech99 (@ktech99); the current version is v1.0.6.

💬 Comments