MCP-native task scheduler

Open Routines

Schedule, run, and verify OpenCode tasks in the background.

$ go install github.com/4nkitd/open-routines/cmd/routines@latest

Single Go binary · systemd / launchd / Windows SCM · zero external deps · GPLv3

You, to your agent

Every day at 8 AM, check my emails and send me a summary to ntfy.

routine created — 0 8 * * * · next run tomorrow 08:00 · verified after every execution

How it works

Your agent schedules the task. Open Routines runs it, then a second, independent agent judges the result.

01
Agent
describes a task in natural language
02
MCP server
stores the routine via routines_create
03
Scheduler
fires on cron or one-time timestamp
04
opencode run
fresh instance executes the prompt
05
Verifier
second instance reviews the output
06
Verdict
JSON pass/fail recorded in run history

Features

Everything a background agent needs — nothing it doesn't.

MCP-native

Seven tools — routines_create, list, get, update, delete, trigger, runs. Agents manage their own schedules without leaving the conversation.

One-time & recurring

Cron expressions like 0 8 * * *, shortcuts like @hourly and @every 30m, or RFC3339 timestamps for one-shot tasks.

Execute → Verify

Every run is judged by an independent second OpenCode instance. No self-grading — the verifier records a structured JSON verdict.

Native background service

Installs as systemd, launchd, or Windows SCM service. Survives reboots on macOS, Linux, and Windows.

Web dashboard

Local UI on localhost:47600 — create and edit routines, trigger run-now, and browse full run history.

Webhook notifications

Fire a webhook on run success or failure. Wire it to ntfy, Slack, or anything that accepts an HTTP POST.

Single binary, zero deps

Pure Go with embedded bbolt storage. No database server, no runtime, no container — one file and you're done.

Agents talk, routines run

A routine is just a prompt with a schedule. At run time, opencode run gets the prompt verbatim — fully self-contained, fresh context.

opencode — mcp: routines
> Every day at 8 AM, check my emails and send me a summary to ntfy.

⏺ routines_create(name: "morning-email-summary",
    schedule: "0 8 * * *", once: false,
    prompt: "Check unread emails, write a concise
    summary, POST it to https://ntfy.sh/…")

  ✓ created id=rtn_01hx…  next_run=2026-07-03T08:00:00+05:30

── next morning, 08:00 ──────────────────────────

  ⏺ run     opencode run "Check unread emails…"  exit 0
  ⏺ verify  independent instance reviews output
  ⏺ verdict {"pass": true, "reason": "summary sent to ntfy"}

Install

Two commands to a persistent, reboot-surviving scheduler.

1

Install the binary with Go, or grab a prebuilt one from GitHub Releases.

$ go install github.com/4nkitd/open-routines/cmd/routines@latest
2

Install the service — registers with systemd, launchd, or Windows SCM and starts the MCP server + dashboard.

$ routines install
3

Point your agent at it — add the MCP server to OpenCode and start scheduling. Dashboard lives at localhost:47600.

Prebuilt binaries for macOS, Linux, and Windows on the releases page.