Agents that
show up on time.

Schedule Claude Code, Codex, opencode and pi from your menu bar. No terminal left open. Nothing in the cloud.

macOS 14 or laterApple silicon & IntelFree

Crontender
Next 24 hours
Pause all New job

Live — every mark is computed from your clock, right now.

Schedules

Say when.
Not how.

Pick every weekday at 7 AM. Crontender writes the cron for you — and reads it back onto the same control next time you open the job. You never have to learn five asterisks.

2 AM stays 2 AM through daylight saving, on both sides.

Schedule
Repeat
At 7:00 AM
Time zone
Every weekday at 7:00 AM 0 7 * * 1-5
New Job
NameMorning brief
Read my calendar and unread mail, then write me a five-line summary of what today needs from me.
HarnessClaude Code
Modelgemma-4-e4b · local
Skills
calendar mail web-search
CancelAdd Job

A job

Write it once.
Forget about it.

Say what you want in plain words, choose a folder, pick which skills the agent may reach for — then leave. Crontender keeps every run, so tomorrow morning the answer is already waiting.

Skills toggle one at a time. Runs are bounded by a timeout you set — and you can stop one mid-run.

Every harness

One job.
Four command lines.

Each CLI spells run this headlessly its own way. Crontender stores what you meant and translates.

Claude Code
claude -p

Your existing skills, and a base URL you can point anywhere.

Codex
codex exec

Brings its own sandbox, and a flag for running against a local model.

opencode
opencode run

Finds LM Studio by itself. No configuration at all.

pi
pi -p

Many providers, chosen per job. The one that can't be aimed at a local server.

Homebrew, npm, mise and asdf installs are all found automatically.

The folder is a wall

It can't wander
off while you sleep.

Anything above read-only gets a real shell, because an agent without one can't do much. So the limit isn't a rule the agent agrees to follow — it's an operating-system sandbox around the whole run.

Point a job at ~/Reports and that is the only place it can write. Not your Documents, not your keys, not the rest of your disk. A run that reaches past it doesn't get a warning; it gets refused.

All four tools are held the same way, so the promise doesn't change with the one you pick.

A run given ~/Reports
echo "Q3 summary" > ~/Reports/summary.md written
echo "Q3 summary" > ~/Documents/notes.md Operation not permitted
That second line is the kernel — not the agent deciding to behave.

Local models

Point it at
your own machine.

Save LM Studio or Ollama once and reuse it across every job. Point one at a proxy or a hosted gateway and its API key goes in your Keychain, never in a file — and never into a command line, where it would show up in a window and in ps.

Crontender checks the port before it starts anything, with the same key the run will use. If your server is asleep the run is skipped with a reason, instead of failing in a log you'd have to go find.

Jobs, history and settings never leave ~/Library/Application Support.

LM Studio
127.0.0.1:1234
Responding
Ollama
127.0.0.1:11434
Responding
Gateway
proxy.internal · key in Keychain
Asleep — runs skipped

Built to be left alone

It behaves when
you're not watching.

Never a backlog

Close the lid for four days and you get one catch-up run, or one clean skip — not two hundred agents waking up at once.

Asks for nothing

No Documents prompt at launch, no iCloud, no Music. Only the folder a job actually runs in, only when it runs.

Held to one folder

The permission you pick is enforced by the operating system, not honoured by the agent — and enforced the same way whichever tool runs the job.

Says what it can't do

Where a run really is unconfined, or a harness can't be handed a key, or a tool was refused mid-run — you're told. Crontender never reports a limit it didn't actually apply.

Put your agents
on the clock.

Signed with a Developer ID, installs to Applications, and lives quietly in your menu bar from then on.

UniversalmacOS 14+No account