Deferring Task Execution
Deferring Task Execution
Delays agent work until a user-specified time using a background timer script, then proceeds with the deferred task.
Script Location
~/.claude/skills/deferred-task-execution/scripts/wait-until.sh
Supported Input Formats
The script accepts one argument in either format:
Duration - relative delay from now:
30s,5m,1h,90m,2h30m,1h15m30s
Clock time - specific time of day:
14:30,9:00,3pm,3:30pm- If the time has already passed today, it waits until that time tomorrow
Workflow
Step 1: Confirm the user's intent
Confirm what task to perform and when. Parse their natural language into a wait-until argument:
| User says | Argument |
|---|---|
| "in 30 minutes" | 30m |
| "in an hour" | 1h |
| "in 2 and a half hours" | 2h30m |
| "at 3pm" | 3pm |
| "at 14:30" | 14:30 |
| "at half past 9" | 9:30am |
Tell the user exactly what will happen and when the timer will fire. Ask them to confirm before starting.
Step 2: Launch the timer in background
Run the wait script using Bash with run_in_background: true:
~/.claude/skills/deferred-task-execution/scripts/wait-until.sh <argument>
Note the task ID from the response -- you need it for the next step.
Step 3: Wait for the timer
Use the TaskOutput tool to block until the timer completes:
- Set
block: true - Set
timeout: 600000(maximum: 10 minutes / 600000ms) - Use the task ID from Step 2
If the wait exceeds 10 minutes: TaskOutput will return before the timer completes because the maximum timeout is 600000ms. Check the output -- if it does not contain "Timer complete", call TaskOutput again with the same task ID and block: true. Repeat until the timer finishes.
Step 4: Execute the deferred task
Once TaskOutput returns output containing "Timer complete. Proceed with deferred task.", carry out whatever work the user requested.
Important Notes
- The agent session must remain open for the timer to work. If the user closes the session, the deferred task will not execute. Warn the user about this.
- For very long waits (multiple hours), remind the user that the session needs to stay active.
- If the user asks to cancel, use
TaskStopwith the background task ID. - Always tell the user the calculated wake time so they know when to expect the action.