read from the app
Opus 5
active
saved
Sonnet 5
active
saved
Default
manual
saved
every field read back equalexit 0
routine control / macOS
Claude Desktop routines are a form you fill in by hand. routinectl fills it in from a shell instead, through the macOS Accessibility API, in the background: no window raised, no app activated, no cursor moved, no clipboard used. Every field is read back out of the interface before the command reports success, and when a future build renames a control the tool repairs itself rather than breaking.
read from the app
Opus 5
active
saved
Sonnet 5
active
saved
Default
manual
saved
every field read back equalexit 0
routinectl doctor reports whether Accessibility is granted and the interface is readable, before anything is written.
routinectl options lists the permission, model, schedule and folder values the app actually offers, so nothing is guessed.
routinectl create --spec ./routine.json sets every field and verifies each one before moving to the next.
routinectl list and show return the saved values from the Routines page, whole, not the sidebar's subset.
No binary ships; the installer builds from source, so Apple silicon and Intel both work. It stands on three facts about one application's interface. The documentation names them, and routinectl doctor tells you which of them has moved before any command fails.
command surface
One Swift binary on your machine. No daemon, no package manager, no account, and no network access at any point.
Branch on the number, never on the message. 0 ok, 1 usage, 2 a required control is absent, 3 the app is not running or has no open window, 4 Accessibility is not granted to the host, 5 the action fired and the interface did not change, 6 the menu does not offer that value and available lists what it does.
Every command needs Claude Desktop running with a window open, not merely running. The app keeps its process alive after the last window closes, so a process check says yes and every command still exits 3. An unattended caller has to check for that and degrade, rather than treat it as a fault.
routinectl doctorproceed only on ok: true--dry-run prints the resolved plan and exits 0 without touching the interface, which is how you echo a routine back to someone for approval before it is created.
routinectl show "Nightly sweep" --dumpraw subtree, when a value reads wrongbefore you install
Stated here rather than discovered later. If any of the four requirements does not hold on your machine, this tool is not for you and nothing below will change that.
It does not schedule. It fills in the routine form and reads the saved values back. Claude Desktop runs the routines.
It does not create folders. --folder picks from the recently-used list the app already offers, and there is no path field to type into. Open a session in a folder once through the app and it becomes available.
It touches nothing else. No cursor movement, no window raise, no app activation, no clipboard, and none of your files. The one place it writes is ~/.routinectl, which holds its selector overlay and its failure records; ROUTINECTL_HOME moves that.
It will not survive every redesign. Self-repair rewrites the label of a control that was renamed, which is the common case. It cannot invent a control that stopped existing, or work out a new required step in the form. Those need the source, and the failure record it writes is the evidence for that work.
./install.sh --uninstallremoves the binary and the skillinstall
The installer builds the binary from the Swift source next to it, puts routinectl in your local bin directory, and drops a skill into your Claude skills directory so a session knows how to drive it. It is short. Read it first, and read the source it builds; that is why both are served as plain text here.
Uninstall with the same script and the uninstall flag. It removes the binary and the skill, and nothing else.
$ curl -fsSLO https://auto.relay70.dev/routinectl/routinectl.tar.gz && tar -xzf routinectl.tar.gz && cd routinectl && ./install.sh
Download the archive
Read the source
Read the installer
Report a problem