Setting a cron schedule on a routine: choose a preset or enter a custom CRON expression, then click Update schedule.
The routine workbench
Open any routine from the list and click its name or Edit to enter the workbench at/workflows/{id}. The workbench scrolls through eight sections, with a sticky section nav rail on the left (chip row on smaller screens).
The topbar shows the breadcrumb (Routines / {name}), an Open chat link, and a Run button that opens the run dialog.
The page-level save bar (at the bottom of the screen) tracks unsaved changes to Basics and Access only. Steps has its own independent save bar inside the sheet editor. Navigating away while either is dirty prompts a confirmation dialog.
Basics
The Basics section sets the routine’s core identity:- Name (required) — the display name shown in the list and topbar.
- Description — a longer explanation of what the routine does and when to use it.
- Agent — the agent that runs this routine’s conversation steps. Use the searchable selector to pick from available agents.
Access
The Access section controls who can see and edit the routine:- Private — only you — the default for new routines.
- Public — anyone in your workspace — everyone with Routines read permission can see and run it.
- Shared with users / roles / teams — explicit grants to named subjects.
Steps
The Steps section shows a read-only preview of the conversation that runs when the routine fires:{n}steps in this routine — the count of conversation turns.- Edit steps (write access) or View steps (read-only) — opens the steps sheet.
- Each turn is a message block. Edit the text directly.
- Use
{variable_name}syntax to create reusable input variables. Variables defined here appear as fields in the Run routine dialog. - Add or remove steps with the toolbar inside the sheet.
- The sheet has its own save bar — unsaved step changes do not affect the page-level form.
- Closing the sheet while steps are dirty opens a “Discard step changes?” confirmation.
Schedule
The Schedule section lets you run this routine automatically on a cron schedule. When no schedule is set, the section header shows “No schedule”. Use the editor below to pick a preset or type a custom expression, then click Save schedule. When a schedule is active, the active cron expression appears as acode element in the section header (e.g. 0 0 * * 0). A Remove schedule button is shown alongside the Update schedule button.
Schedule editor
The editor has two tabs — Presets and Custom CRON — rendered as a two-button tab row at the top of the editor. Presets tab (default) A “Select a preset” dropdown (placeholder: “Choose a preset…”) lists seven built-in schedules:
Selecting a preset shows the resulting cron expression in a read-only preview box labelled “CRON expression” below the dropdown. The editor also opens on this tab (with the preset pre-selected) when the saved schedule matches one of the preset values.
Custom CRON tab
A text input labelled “CRON expression” accepts any five-field cron expression (placeholder:
0 12 * * *). The five fields are:
A collapsible Format help disclosure shows the field reference. If the expression is invalid, an inline error reads: “Invalid CRON expression. Format: minute hour day month weekday”.
Next run
When a schedule is saved, “Next run” appears below the editor showing the next scheduled execution time as a relative timestamp.Save or update a schedule
Click Save schedule (new schedule) or Update schedule (existing). A success toast confirms “Schedule saved”.Remove a schedule
Click Remove schedule. A confirmation dialog appears:
Remove the cron schedule for “{name}”. The routine stays — only the automatic schedule is removed.
Confirm with Remove. The routine is not deleted — it remains available for on-demand runs.
Email trigger
The Email trigger section (labelled “Email trigger” in the section nav) lets you give this routine a dedicated inbound email address. When an email arrives at that address and passes the guard chain, IMP automatically starts a new run. See Email triggers for the full setup guide: enabling the trigger, configuring allowed senders, filter rules, rate limits, and how email content maps to run variables.Runs
The Runs section shows every run of this routine — both past and in-progress — and lets you act on them.Run states
Each run carries one of the following states:The
stuck state is defined in the system but not currently written to runs.The runs list
The list shows each run with:- Status — the run state (see above). The Needs attention badge appears for
waiting_approvalruns. - Trigger source — how the run was started: Manual (from the UI or direct API call), API (external API trigger), Schedule (cron schedule), or Email (inbound email trigger).
- Started — relative timestamp.
- Duration — elapsed time for terminal runs.
waiting_approval runs. A count badge in the navigation shows the number of runs currently waiting for approval across all your routines.
Filter bar
The filter bar lets you narrow the runs list by state, trigger source, date range, and free-text search. Use the Needs attention toggle to show only approval-paused runs. Show filtered addsfiltered email guard rejections to the list (hidden by default).
Run row actions
Click any run row to expand it. The expanded row shows the run’s error (if any), trigger metadata, and a raw-payload toggle. Available actions depend on the run’s state:- Cancel run — available while the run is non-terminal (
waiting,active,waiting_approval). Cancels the run immediately. - Retry run — available for
failedorcancelledruns. Re-enqueues the run and resumes from the step where it stopped; prior step outputs are preserved. - Open session — opens the linked chat session for this run (available when a session was created).
Retry re-uses the same run record, resuming from the failed or cancelled step. It does not create a new run row.
Tool approvals and auto_approve_tools
By default, queue-backed routine runs respect tool approvals: if an agent tool requires user approval, the run pauses at that step and moves towaiting_approval. Open the linked chat session, approve or deny the tool call there, and the run resumes automatically.
If the routine has auto_approve_tools enabled (a per-routine backend field), all tool calls are pre-approved and the run never pauses for approval — waiting_approval cannot occur for those runs. This is an escape hatch for fully automated pipelines; it is off by default. See Tool approvals for how approval works in chat.
Queue
The Queue section shows the job queue for this routine’s agent. If the agent has no queue configured, the section shows: “No queue configured for this routine’s agent.” If a queue is configured, click Manage queue to open the queue panel as a sheet. The panel shows:- Pending jobs waiting to run
- Running jobs currently executing
- Recently completed or failed jobs
Danger zone
The Danger zone section appears at the bottom of the workbench for users with delete permission. It contains one action: Delete. Clicking it opens a confirmation dialog:This permanently deletes the routine. To confirm, type its name below. Click the name to copy it.Type the routine’s exact name and click Delete routine. The routine is permanently removed along with all its run history. This cannot be undone.
The global runs console
The Routines list page also shows a Runs console below the routines table. It displays every routine run across your workspace — all routines you can read — and defaults to the Needs attention lens sowaiting_approval runs surface first.
The console uses the same filter bar and run rows as the per-routine Runs section. There is no separate /runs page; this console is the workspace-wide view.
Next steps
Routines overview
Browse the routines list, run a routine, and understand how routines are created.
Email triggers
Give a routine a dedicated inbound address to start runs from email.
Tool approvals
How tool approval works in chat and how it interacts with routine runs.
Routine runs API
Query, cancel, and retry runs via the GraphQL API.