Skill v1.0.0
currentAutomated scan100/100version: "1.0.0" name: async-attention description: Use when deciding between follow-up queues, scheduled callbacks, automation-owned attention, wakeups, and async follow-up surfaces. metadata: id: async-attention title: Async Attention and Wakeups summary: Built-in routing guide for follow-up queues, owning surfaces, and later attention. status: active tools:
- the unified conversation deferred-resume admin command
- activity
- scheduled_task
- neon_pilot
Async Attention and Wakeups
Use the smallest scheduling surface that matches the owner of the work. For wait-then-continue requests, use the unified conversation deferred-resume admin command; do not run sleep in bash.
Choose the right surface
| Need | Use | Durable home | |
|---|---|---|---|
| Agent should continue this conversation later | the unified conversation deferred-resume admin command | live queue or deferred resume | |
| Unattended automation should run later or recur | scheduled_task | automation store + run logs | |
| Passive async result tied to a thread | surface the owning conversation | conversation/activity | |
| Scheduled task result should come back to a thread | scheduled task conversation callback | task log + optional wakeup |
There is no standalone tell-me-later tool. Human “tell me later” requests are same-thread follow-ups unless they need a true app-wide automation.
the unified conversation deferred-resume admin command
Use the unified conversation deferred-resume admin command when this same conversation should continue later.
Actions:
add— queue a follow-uplist— list pending follow-ups for this conversationcancel— cancel a queued follow-up by listedid
For action: "add", always include trigger:
trigger: "after_turn"queues work after the current turn; do not includedelayorat.trigger: "delay"queues a later continuation; include compact duration syntax like30s,10m,2h,4h, or1d.trigger: "at"queues a later continuation for a specific timestamp or human time phrase.
Example:
{"action": "add","trigger": "delay","delay": "4h","deliverAs": "followUp","title": "Check release state","prompt": "Wake up and check whether the release is ready. If it is still blocked, requeue instead of asking the user."}
Use the unified conversation deferred-resume admin command with action: "list" before assuming no wakeups are pending.
Do not schedule a the unified conversation deferred-resume admin command just to poll a running background command/subagent that was started with deliverResultToConversation: true. That run already owns completion/failure delivery. Only schedule a wakeup for a distinct time-based action that should happen regardless of completion timing, and include a clear reason.
scheduled_task and heartbeats
Use scheduled_task for app-wide recurring or one-time automations, especially work that can run without this conversation being active.
For recurring conversation self-admin callbacks, use the unified Neon Pilot admin surface instead: neon-pilot heartbeats start/list/stop externally or the internal neon_pilot tool actions heartbeat_start, heartbeat_list, and heartbeat_stop. Heartbeats are backed by scheduled conversation automations and coalesce by skipping due ticks while the target conversation is already running.
Do not
- invent a shared inbox substitute for ordinary async work
- use scheduled tasks for a simple same-thread follow-up
- use
bash+sleepas a timer for deferred conversation work - store async state only in notification/alert state
- copy conversation ids into portable durable files