Everyday use
Routines
Name an agent, give it a brief, put it on a schedule — it runs on your own computer with your own Claude Code, and you review what it did.
A routine is an agent with a name, a brief and a schedule. When it's due, Claude Code starts on one of your computers, in the project's folder, works on the brief, and stops. While it works it shows on the Agents board like any other agent — named after the routine, with a small routine tag — and each run is kept in the routine's history: when it started and ended, how it went, and the tokens it used.
Routines run locally: on your own computer, with your own Claude Code and your own Claude plan. Agentower never runs anything itself and adds no cost. Your computer must be switched on and awake at the time.
#Set up a computer for routines
You need the Agentower hook on that computer (Connect Claude Code). Then, from the Agentower repository on that computer:
node scripts/claude-code.mjs connect --routines --remote=ownThis installs the routines runner (~/.agentower/agentower-routines.sh) and asks your computer to start it every minute:
- macOS: a LaunchAgent,
~/Library/LaunchAgents/com.agentower.routines.plist. - Linux: a systemd user timer,
agentower-routines.timer. It runs while you're signed in; for runs when you're not, runloginctl enable-linger "$USER"once. - Windows: nothing is changed automatically. The installer prints a Task Scheduler command to run once (it needs Git for Windows).
Each minute the runner asks Agentower which routines on this computer are due. It's quiet the rest of the time.
Answers from Agentower must be allowed on this computer (AGENTOWER_REMOTE=own or team in ~/.agentower/claude-code.env — see Each computer decides too). With off, routines don't run there: their runs show as Blocked: answers are off on this computer. With own, only routines last changed by you run; with team, routines your project's approvers changed run too — after you confirm them.
To stop routines on a computer, run node scripts/claude-code.mjs disconnect. It removes the schedule; your confirmations stay until you delete ~/.agentower/routines-approved.
#Create a routine
Open Routines in the sidebar (or a project's page) and choose New routine. Owners and the project's approvers can create routines, with a sign-in from the last 7 days.
| Field | What it does |
|---|---|
| Name | What the routine — and its agent on the board — is called. |
| Project | Which project it works on. |
| Computer | One of your own computers (Settings → Computers). |
| Brief | Exactly what Claude Code is told to do, up to 8,000 characters. |
| Schedule | Every hour at a minute, daily at a time, weekdays at a time, weekly on a day at a time, or a custom cron. |
| Time zone | The schedule's time zone, such as Europe/London. Your browser's is filled in. |
| Permission mode | Claude Code's plan (reads and plans, changes nothing), default or accept edits mode. |
| Allowed tools | Optional: tools it may use without asking, such as Read or Bash(git log:*), one per line. |
| Time limit | Minutes before the run is stopped (1–240; 30 if empty). |
| Token limit | Optional: tokens before the run is paused. |
A routine never uses Claude Code's "bypass permissions" mode or --dangerously-skip-permissions. Runs are non-interactive (claude -p), so anything that would ask for permission is refused unless it's in Allowed tools or allowed by the mode.
#Confirm it on the computer
After you save a routine — and after any change to its brief, project, schedule, permission mode, allowed tools or time limit — it shows Waiting for confirmation on your computer until you confirm it there:
sh ~/.agentower/agentower-routines.sh approveFor each new or changed routine this shows everything that decides what it does — the brief in full, the project, schedule, permission mode, allowed tools and time limit — and asks y/N. The first time a project comes up, it asks for that project's folder on this computer (the full path), and checks the folder is that project. Nothing is guessed: routines run only in folders you named here.
What you confirm is kept as a fingerprint (a SHA-256 hash) in ~/.agentower/routines-approved, readable only by you. Before every run, the runner works the fingerprint out again from what Agentower sent. If anything differs, the run doesn't start and shows as Blocked.
Other commands:
sh ~/.agentower/agentower-routines.sh list— the routines on this computer and whether each is confirmed.sh ~/.agentower/agentower-routines.sh map <project> <folder>— set or change a project's folder.sh ~/.agentower/agentower-routines.sh forget <routine id>(or--all) — withdraw a confirmation.
#Schedules
- Every hour at a minute past the hour, daily at, weekdays at (Monday to Friday) and weekly on a day at a time.
- Custom (cron): five fields — minute, hour, day of the month, month, day of the week — with numbers,
*, ranges (1-5), lists (1,15) and steps (*/15). Sunday is0or7. A custom schedule runs at most every 10 minutes.
Times follow the routine's time zone, including the clocks changing: a time that's skipped when the clocks go forward doesn't run that day, and a time that happens twice when they go back runs once.
If the computer is off or asleep at the time, that run is missed — it isn't run later (the runner allows up to 15 minutes). If the previous run is still going when the next is due, the next is Skipped.
Run now starts the routine at the next minute's check (within 30 minutes, or it's dropped), even when its schedule is switched off — but only if it's confirmed on the computer.
#Runs and their states
| State | Meaning |
|---|---|
| Queued | Due; the computer is starting it. |
| Running | Working. Its agent is on the board. |
| Done | Claude Code finished without an error. |
| Failed | It stopped with an error, reached its time limit, or the computer couldn't start it (for example, no folder set). The reason says which. |
| Skipped | The previous run was still going. |
| Blocked | It wasn't allowed to run: waiting for confirmation on the computer, or answers from Agentower are off there. |
Each routine's page lists its runs with their start, end, state and tokens. In an agent's details panel, Stats shows which routine it's a run of, with a link to the runs.
To review what a run did, open its agent: with Agent chats on, its last message is in the chat. The run's full output stays on the computer, in ~/.agentower/routines/logs/ (the last 50 runs, readable only by you).
#Limits
- Up to 20 routines per workspace.
- Brief up to 8,000 characters; up to 20 allowed tools.
- Time limit 1 to 240 minutes. The token limit pauses the run like a guardrail; someone who may approve the project can let it continue.
#Who can do what
- Owners and the project's approvers create, change, delete, switch on or off and Run now. Creating, changing, switching on and Run now need a sign-in from the last 7 days.
- Viewers see each routine's name, project, computer, schedule and runs — never its brief or allowed tools.
- A routine goes on your own computer. An owner or approver can change a routine on someone else's computer, but it runs only after that person confirms the change on their computer (and only if their computer is set to
team). - Every create, change, delete, switch and Run now is in the audit log — never the brief's text.
- Deleting a project deletes its routines and their runs. Merging a project into another moves its routines there; as the project is part of what you confirmed, each one waits for confirmation on its computer again.
#What's sent and kept
- Stored by Agentower: the routine as you set it up — including the brief's text, which is your configuration, shown only to owners and the project's approvers — and each run's times, state, reason and tokens. The brief is deleted with the routine, its project or the workspace; run history follows your plan's history (see Privacy).
- Sent by the runner: the computer's random id, its answers setting, and the ids and fingerprints of the routines confirmed there; for each run, its start, end and a short reason code (such as "timeout"). Never the folder, the output, or anything Claude does — tokens come through Claude Code's normal telemetry.
- Sent by the hook: for a routine's session, the run's id, so the board can show it as that routine's run.