Schedule a one-time local agent prompt or terminal command from the user's machine, with a bias toward the macOS + Warp workflow that keeps interactive Claude/Codex sessions visible.
Default workflow
- Confirm the scheduling intent from the prompt.
- Extract the exact command to run. Preserve quoting exactly when the user gives a command.
- Extract the target time and timezone. Use the system's current local time as the default reference.
- Extract the working directory. If the user says "this repo", "current directory", or leaves it implicit, use the active shell
pwd. - Extract optional tags such as
fable,content,enterprise,codex, orresume; tags become stable job names, file names, and labels.
- Choose the run surface.
- Use
--app Warpby default when the command is interactive or the user wants to see it in Warp. - Use direct launchd execution only for non-interactive commands that do not need a terminal UI.
- Do not schedule cloud agents when the user says it must run locally, depends on local usage limits, or needs the local filesystem/session.
- Use
- Use the bundled script for setup.
- Run
scripts/prompt_scheduler.py schedule ...from this skill directory. - The script creates missing local folders, writes an executable
.commandfile, writes a launchd wrapper, installs a one-time LaunchAgent, loads it withlaunchctl, and prints a verification summary.
- Run
- Verify before handing off.
- Confirm
launchctlshowsstate = not running,runs = 0, and the expected calendar interval. - Confirm the
.commandfile and wrapper are executable. - Confirm log directories are writable.
- Confirm
- Explain the practical nuance.
- Opening in Warp via
.commandis reliable for a visible interactive session. - It will open a Warp tab/window, not inject into the exact already-open conversation block.
- The machine must be awake and logged in for GUI app opening. If the user already uses Amphetamine or another keep-awake tool, mention that this satisfies the wake requirement.
- Opening in Warp via
Scheduling command
From the skill directory:
python3 scripts/prompt_scheduler.py schedule \
--name "Fable Content Resume" \
--tag fable \
--tag content \
--at "2026-07-02 03:45" \
--cwd "/Users/jakerains/projects/elevenlabsacademy" \
--app Warp \
--command 'claude-me-yolo --worktree content --resume "Fable Content" "resume"'
For a same-day or next-day local time, the script accepts HH:MM and resolves it against the system clock:
python3 scripts/prompt_scheduler.py schedule \
--name "Enterprise Resume" \
--tag enterprise \
--at "03:45" \
--cwd "$PWD" \
--app Warp \
--command 'claude-yolo --worktree enterprise --resume "Enterprise" "lets do option 1"'
If HH:MM is earlier than or equal to the current local time, the script schedules it for tomorrow. If the user says "tonight" or gives a date, resolve that explicitly before running the script.
Verification command
Use the label printed by the scheduler:
python3 scripts/prompt_scheduler.py verify --label local.prompt-scheduler.fable-content-resume
The verification summary should show:
- the LaunchAgent is loaded
state = not runningruns = 0before the scheduled time- plist syntax is valid
- command and wrapper files are executable
- log directory is writable
Testing a Warp handoff
If the user wants proof that Warp will open, create a separate immediate test command rather than firing the real scheduled job. Use a different --name and pass --open-now:
python3 scripts/prompt_scheduler.py command-file \
--name "Enterprise Resume Test" \
--tag enterprise \
--cwd "$PWD" \
--app Warp \
--command 'claude-yolo --worktree enterprise --resume "Enterprise" "lets do option 1"' \
--open-now
This mirrors the scheduled .command path but does not install a LaunchAgent.
Safety rules
- Never run the user's scheduled command as a test unless they explicitly ask for an immediate trigger.
- Preserve secrets: do not print env vars or inline secret values in command examples.
- Keep generated files under user-local locations:
- command files:
~/.local/share/prompt-scheduler/commands/ - wrappers:
~/.local/share/prompt-scheduler/wrappers/ - logs:
~/Library/Logs/prompt-scheduler/ - LaunchAgents:
~/Library/LaunchAgents/
- command files:
- Use one-time launchd jobs for specific dates/times. The wrapper unloads and removes its plist after opening the command.
- Do not force recurring behavior unless the user asks for recurrence.
- Do not commit changes unless the user explicitly asks.
Troubleshooting
- If a Warp launch configuration URI fails to visibly open, switch to the
.commandmethod. Opening.commandfiles withopen -a Warpis the preferred path for interactive sessions. - If
open -a Warpfails, confirm Warp is installed withosascript -e 'id of application "Warp"'. - If launchd shows
runs = 0after the scheduled time, check whether the Mac was awake and logged into the user session. - If the terminal opens but the command is missing, remember
.commandfiles run/bin/zsh -lic, so aliases/functions from the user's login shell should load; still verify the command with/bin/zsh -lic 'command -v COMMAND || type COMMAND'when in doubt. - If the user needs Linux support, use systemd user timers or
at; this bundled script is intentionally macOS-first because it targets local Warp + launchd.