Sessions on a timer

Some agent work should just happen: run the tests every night, check for old packages every morning. You should not have to be there to start it. Koloft starts a fresh session on a timer, hands it the first message you wrote, and leaves the rest to you. When a run finishes, it waits in the sidebar for you, unless the job says When done ▸ Close it. Then the run cleans up after itself.

Set up a job

Right-click a folder in the sidebar and pick Scheduled jobs… from the menu. Each job starts a Claude Code, Codex, Muse Code or Antigravity session; the Runs in row lists the agents you have on, and a remote folder gets the same list. For each one you choose:

permission what it means
Same as my other sessions Follows your Accounts setting. A job skips every check when Skip permission prompts is on in Settings ▸ Accounts and Koloft runs it on one of your accounts. If not, it asks before risky steps, like your other sessions; a Codex job follows Codex's own approval settings.
Let it edit files without asking It may change files without asking.
Never ask It never asks. It can change files anywhere on this Mac, not only in the run's folder.
Koloft's Scheduled jobs window for one folder: two jobs, a nightly test report and a morning dependency check, each with an on switch, its first message, when it runs next, and a Run now button
two jobs, each with its own switch and the time it runs next

An agent can manage jobs too, with koloft cron. See Agents can use Koloft too.

Once, and after each run

The When row has five choices. Two of them do not follow the clock:

when what happens
Once Pick a day and a time. At that time one run starts and the job turns itself off. It stays in the list; give it a new time and it is on again. If that time is missed or skipped (see History below), no run happens, and the job still turns itself off.
After each run… Pick a wait, in minutes or hours. The wait starts when the last run is over (it closed itself, you closed it, it could not start, or its agent quit with an error); then the next run starts. While a run is open, nothing new starts, Run now included. Saving the job or turning it on starts the wait again. It is never missed: if the wait ran out while Koloft was closed or asleep, the run starts as soon as Koloft is back.

Picking After each run… sets When done to Close it, so each run makes room for the next by itself. The list says waits for the open run to end while a run is open. In a remote folder, while the link is down a run's tab keeps trying to reconnect, and the run stays open. If the agent quits with an error after the run has started, the run is over at once: the wait starts, and History says Closed by you. If the agent quits before the run starts, History says Could not start.

Where it runs

Git is the tool that keeps a history of your files. A worktree is a new copy of the folder, on its own branch, so your own files are never touched. When a run's tab closes, Koloft removes its copy and branch, unless they hold work not committed, or a commit that is nowhere else. The run's row stays in the sidebar, greyed; a click makes the copy again and resumes the same session. Copies left by older runs go the next time Koloft opens.

When it is done

The job's When done row has two choices:

when done what happens
Leave it open The default. The run stays in the sidebar for you to read.
Close it Once the run has finished all its work, its tab, row, worktree and branch go, so the next run is not skipped.

In a folder git does not track, only the tab and the row go; nothing on disk is touched.

A job set to Close it says "closes when done" in the list. When its run closes, a small message pops up: "⏰ name finished and closed".

The Scheduled jobs window after a run: the nightly test report job reads last run today 13:10, done — closed itself, and History · all jobs below has one line, Nightly test report, Done — closed itself
the nightly job after its run closed itself

A run stays open, and says why, when:

History, at the bottom of the window, lists every job's runs, newest first (History · all jobs). Each line shows when it ran, then the job's name, then what happened. Click a job's name on its card: the card is highlighted and History shows that job alone (History · <job>). Click it again to see all jobs. A line there reads one of:

history line what it means
Done — waiting for you The run finished and is still open in the sidebar.
Done — closing The run finished, and Close it is cleaning it up right now.
Done — still finishing The run's turn is over, but work it started still runs in the background. Close it cleans up once that work is over; Koloft looks again every minute.
Done — closed itself The run finished and Close it cleaned it up.
Done — not closed: what is left The run finished, but something keeps it open. The line says what. Koloft looks again a little later.
Closed by you You closed the run yourself, or its agent quit with an error after the run started. The line then ends with · folder removed, or · folder kept: … and what is left in it.
Ended — Koloft quit Koloft quit while the run was open, and the run did not come back as the job's open run.
Missed — Koloft was closed or asleep The time came while Koloft was closed, or while the Mac slept more than five minutes past it.
Skipped — the last run was still open The time came, but the last run was still in the sidebar.
Could not start — why The run never began. The line says why.

When a run is missed or skipped more than once in a row, the line says how many times, such as "Missed 3 times — Koloft was closed or asleep".

If you quit Koloft while a run that had started working is open and awake (not asleep), its tab comes back when Koloft opens. It still counts as the job's open run, so the next time is skipped until it closes. A Close it run that had finished closes itself about a minute later; one cut off mid-work stays open for you.

Close it works the same for a Claude, Codex or Muse job, on this Mac and in a remote folder. On a remote machine, Koloft cannot see programs the run left going in the background. The run's copy there goes once its session has left the machine; otherwise the line says folder kept: machine unreachable or still running on the machine.

What it never does

Next page → Several accounts, one pool