Schedules Beta
Schedules let you run a shell command on a recurring cron. Each fire
becomes its own interactive terminal — you can attach to it while it's
running, pause and resume the process in-place, terminate it, and
replay the captured output later. Designed for long-running automated
sessions (e.g. claude --dangerously-skip-permissions "review my open PRs"
on weekday mornings).
Creating a schedule
Open the Schedules section in the sidebar (below Favourites) and click +. A dialog opens with five fields:
- Name — how it shows up in the sidebar and history.
- Working directory — click Browse for a native Finder folder picker, or paste a path. The command runs from here.
- Command — anything you'd run in a terminal. Multi-line ok. A trailing newline is added automatically.
- When — see Schedule modes below.
- Enabled — uncheck to keep the schedule but pause firing.
The dialog shows the resolved cron expression and the next-fire time live as you edit. Hit Create and the schedule starts running on its cadence.
Schedule modes
The "When" picker offers four modes:
- Every — every N minutes, hours, or days (with a time-of-day for the day variant).
- Daily — once a day at a specific time.
- Weekly — toggle the days of the week + time.
- Cron — standard 5-field cron expression, or aliases like
@hourly/@daily/@weekly.
How it runs
Schedules run in your default shell, with the same setup you'd get
opening Terminal.app — your PATH, aliases, and everything from
nvm / asdf / oh-my-zsh all work.
When the command finishes, the terminal stays open at a prompt.
You can read the output, retry, or run follow-up commands. It only
ends when you type exit or terminate from the UI.
Viewing runs
Each schedule has a history of runs. Click the clock icon on a schedule row in the sidebar to open the history dialog, then click any row to open its viewer.
Active runs
When you open an active run, the viewer attaches to the live session. Output up to that point fills the terminal, and any new output streams in. You can type into it like a normal terminal:
- Answer prompts (e.g. Claude's "Is this a project you trust? 1").
- Use Shift + Enter to insert a literal newline.
- Use ⌘ + ← / → for line start / line end, ⌘ + Backspace to clear the line.
- Cmd-click URLs to open them in your system browser.
- Copy with trailing whitespace stripped.
Closing the viewer (X) just detaches — the run keeps going in the background. Reopen any time to pick up where it was.
Pause and resume
Pause freezes the process exactly where it is — mid-thought, mid-loop, anywhere. The badge turns yellow. Resume picks back up from that exact point. Same process, same state. Not a restart.
Terminating
Terminate kills the run and marks it as Terminated in history. Use this when you're done and don't intend to come back. Deleting the schedule entirely also terminates any of its active runs.
Closed runs
Once a run has ended, the viewer becomes a read-only replay of the captured output. Colors and formatting (Claude's UI, ANSI escape sequences) are preserved.
A concrete example
Schedule a Claude review session for weekday mornings:
- Name: Morning PR review
- Working directory:
~/code/myapp - Command:
claude --dangerously-skip-permissions "Check open PRs on github.com/me/myapp. \
For each: read description, diff, comments. List anything unresolved, and for \
clear fixes, apply and push a commit on the PR's branch. Use gh CLI."
- When: Weekly → Mon Tue Wed Thu Fri at 08:00.
At 8am on weekdays you'll get a toast: "Schedule running — Morning PR review". Click it to drop into the live terminal, answer any prompts, and let Claude work. Come back at lunch and read the output.