OpenCron source

OpenCode on a schedule.

OpenCron runs OpenCode jobs in a sandbox on a home server. Each job has a workspace folder and a prompt.

01

Create a job.

/cron weekdays at 8am, timezone America/Denver, workspace notes: summarize unread mail

Run that command from another computer, or fill in the same fields in the browser. The workspace is a folder name inside the sandbox volume. New jobs use the timezone and model from Settings.

new jobdefaults from Settings

name
morning mail
schedule
0 8 * * 1-5
timezone
America/Denver
workspace folder
notes
model
opencode-go/kimi-k3
prompt
summarize unread mail

02

Each run ends with a summary.

After each session, OpenCron asks the model to write a summary. It says whether the task finished and what changed. If the model reports an unfinished task, the run fails even when OpenCode exited cleanly.

03

The browser and /cron share the same records.

In the browser

The browser shows the job list and every run. Open a job to run it now, pause it, edit the prompt, or delete it.

From another computer

Connect OpenCode to the MCP endpoint. /cron list and /cron results for notes return the same records. A skill file makes /cron the short command. You can also ask in plain language.

04

The scheduler stays on your machine.

Token

CRON_TOKEN signs you in to the web UI. The API and MCP accept the same token.

Sandbox

The agent's tools stay inside its workspace folder. The sandbox drops all capabilities and prevents privilege escalation. The app reaches it over the Compose network.

Network

The app serves port 8787 on a private network such as Tailscale. A Go key saved in Settings stays on the server.

Deploy with the Compose file in the repository. Setup needs a token, a Go key, a timezone, and a model. Deploy notes