Routines
Send a prompt to an agent on a schedule, each run in its own session and within the permissions you give it.
A routine sends a prompt to an agent on a schedule. Each run works in a session of its own, which you can open later. Click Routines in the sidebar to see yours.
Routines run only while Kettu is open. To keep them going, turn on Open at login and Run in the background in Settings › General; with the second one, closing the window leaves Kettu running.
Create a routine
Say what to do
Click New routine on the Routines page and write the Prompt. It is sent as written each time the routine runs.
Choose where and with which agent
Pick the Project its runs work in, or No project, and the Agent and model, with the options its runs use.
Set permissions and a time limit
Choose the Permissions level, described below. Time limit is 15 minutes, 30 minutes, 1, 2 or 4 hours; a run stops when it reaches it, not counting the time it waits for you.
Set the schedule
Choose the Schedule in your local time, then click Create routine.
| Schedule | Runs |
|---|---|
| Once | On one date and time |
| Every | Every so many minutes or hours, counted from a time |
| Daily | Every day at a time |
| Weekly | On the days you pick, at a time |
| Cron | As a cron expression says, such as 0 9 * * 1-5 |
Runs must be at least 5 minutes apart. A new routine starts as weekdays at 9:00, Read only, with a 1-hour time limit. Each routine has an on and off switch on the Routines page, and Duplicate and Delete… in its menu; deleting a routine deletes its run sessions too.
Permissions
The level says what a run may do without asking:
| Level | Allows |
|---|---|
| Read only | Read and search the project. |
| Edit the project | Also create, change, move and delete files inside the project folder. |
| Edit and run commands | Also run commands, which can do anything you can. |
Use the web adds fetching pages and searching the web, at any level.
When the agent asks for permission, Kettu answers inside the scope with allow once, never always allow. Every path the request names must be inside the project folder, and edits never reach .git. Anything else pauses the run: the routine shows A run is waiting for your approval, and Open the run takes you to its session to answer. Runs due in the meantime are skipped.
How far the scope holds depends on the agent:
- Claude Code asks before edits and most commands, so Kettu answers each.
- Codex keeps its own sandbox: Edit the project also lets it run commands inside the project without asking.
- OpenCode asks only for what its own permission settings mark “ask”, nothing by default, and Pi never asks, so Kettu cannot hold them to the scope.
Skipped and paused runs
- If the routine’s last run is still working when the next is due, that one is skipped.
- When one of an agent’s plan limits is 90% used or reached, all of that agent’s routines pause until the window resets, or for an hour if it gives no reset time. Times due during the pause are skipped, not made up later.
- If Kettu was closed or the computer asleep at a scheduled time, the routine runs once when Kettu is back, marked Catch-up.
Run now on a routine’s page starts a run at once, even during a plan-limit pause.
Run history
A routine’s page lists its Runs, newest first: how each was started (Scheduled, Run now or Catch-up), how it ended (such as Finished, Failed, Timed out or Cancelled) and how long it worked. Click a run to open its session.
The sidebar’s Routines row counts the runs waiting for your approval and marks a run that is working or has failed. A system notification tells you when a run finishes, fails or needs your approval.