<!-- Markdown mirror. Canonical: https://empryo.com/docs/tools/routines -->

# Routines

> Schedule agent runs for a repository with /schedule: a nightly review, an hourly check, a daily summary. They run while Empryo is open, with no service.

## Overview

A routine is a prompt that Empryo runs for you on a schedule. Use it for work you would otherwise repeat by hand: a nightly review of the day's changes, an hourly check for new pull requests, a weekly cleanup.

Each routine belongs to one repository. When it is time, Empryo starts a background `empryo --headless` run with your prompt in that repository. You do not need to watch it.

Routines run while Empryo is open on the repository, in the terminal UI or the desktop app, or while `empryo --headless --routines` is running. When phone access runs in the background, it also keeps Empryo running for every trusted project that has a routine turned on, so routines fire with the apps closed. Otherwise nothing keeps running after you quit, and nothing is installed on your system.

## Commands

| Command | What it does |
|---------|--------|
| `/schedule` | Open the routines list with each routine's next run |
| `/schedule list` | Print the list in the chat |
| `/schedule add <5-field cron> <prompt>` | Add a routine with a cron pattern |
| `/schedule <prompt> --every 30m` | Add a routine with a plain-word schedule (see below) |
| `/schedule run <n or id>` | Run a routine now |
| `/schedule stop <n or id>` | Stop the routine's run that is in progress |
| `/schedule remove <n or id>` | Remove a routine by its number in the list or its id. A run in progress stops too. |
| `/schedule on <n or id>` / `/schedule off <n or id>` | Turn a routine on or off |

`/routine` and `/cron` do the same as `/schedule`.

A run in progress shows **Running** in the list. Stop it with **Stop run** in the desktop routines list or on your phone, or with `/schedule stop`. Removing a routine stops its run as well, wherever you remove it from.

Example with a cron pattern (every day at 22:00):

```
/schedule add 0 22 * * * review the day's uncommitted work and summarize risks
```

Empryo checks the pattern when you add it. A pattern that can never run is rejected straight away.

## Plain-word schedules

You do not have to write cron. Write the prompt, then add the schedule as a flag at the end:

```
/schedule review repo for new PRs --every 30m
/schedule summarize the day --daily 18:00 --mode auto
/schedule deep audit --on monday 08:00 --model anthropic/claude-opus-4-6
```

| Flag | When it runs |
|------|-------|
| `--every 15m` · `--every 2h` · `--hourly` | On that interval |
| `--daily` · `--daily 09:30` | Every day (09:00 when you give no time) |
| `--weekdays 18:00` | Monday to Friday |
| `--on monday 08:00` · `--weekly` | Once a week (`--weekly` means Monday 09:00) |
| `--cron "0 18 * * 1-5"` | A raw 5-field cron pattern |

Each plain-word schedule is turned into a cron pattern and checked before the routine is saved.

Other flags set how the run behaves: `--mode` (the agent mode), `--model` (the model to use), `--agent` (a custom agent) and `--name` (a label for the list).

## From your phone

The Empryo iPhone app has a **Schedules** screen (`/schedules` in the composer, or the chat menu). Pick Hourly, Daily, Mon–Fri, Weekly, or **Cron** to type a 5-field pattern yourself. Turn routines on and off, run one now, stop a run or delete it from the same list.

When a run finishes or fails while the app is closed, the phone gets a notification with the start of the run's summary. Tapping it opens that run as a chat. Routines run on your computer: turn on background phone access there and they run even when Empryo is closed.

## Bare runs

A bare routine runs with **no repository and no tools**. It sends one short prompt and gets one answer back. That costs far less per run than a full agent run.

Use bare runs for anything that does not need your code: a standup line, a reminder, a summary of text you put in the prompt. Do not use them for work that must read files, search or run commands.

To make a routine bare, ask the agent to create it as a bare routine. The agent's `routine` tool has a `bare` option.

## From an agent, and headless

The agent can manage routines too, through its `routine` tool. It can `list`, `add`, `remove`, `enable`, `disable`, `run` and `stop` them. A routine that is already running is never started a second time.

A routine's prompt can start an orchestration (a saved graph of agents, see [Orchestrator](/docs/tools/side-agents#orchestrator)): `/orchestrate <graph-id> <input>`.

To run routines without the terminal UI or the desktop app open, start the scheduler from a terminal:

```bash
empryo --headless --routines     # runs this repo's routines until you press Ctrl+C
```

On the desktop, routines and their run history are under **My tools → Routines** ([the workbench](/docs/surfaces/workbench#my-tools)). The desktop app only runs a repository's routines after you trust that repository.

## How a run works

- When a routine is due, Empryo starts a separate headless run with your prompt, using the repository as the working folder.
- If the previous run of the same routine is still going, the new one is skipped and counted. Two agents working on the same files at once would get in each other's way.
- Empryo records the time and exit code of the last run. `/schedule` shows them.

## Where routines live

Routines are saved in `.empryo/schedules.json` inside the project, one file per repository. The `/schedule` command edits it for you. Routines are tied to a repository on purpose: a nightly review belongs to the code it reviews.
