Automations
Automations let you schedule prompts to run automatically at recurring times. Each run creates a chat and executes through the normal chat completion pipeline, so model defaults, tools, filters, and other pipeline behavior still apply.
Automations can be enabled or disabled globally by an administrator via the ENABLE_AUTOMATIONS environment variable or the Settings > Admin > System > General toggle. When disabled, the automation worker stops processing, API endpoints return 403, and the sidebar entry is hidden.
What You Can Automate
- Run a prompt on a schedule (hourly, daily, weekly, monthly, custom RRULE)
- Trigger a run manually with Run Now
- Pause/resume automations without deleting them
- Review execution history for each automation
- Optionally file the chats a schedule creates into one of your folders
- Optionally attach a terminal server and working directory for runs that need terminal context
Access Control
Automations are permission-gated for non-admin users.
- Admins: always have access to Automations
- Users: require the Features > Automations permission
Automations are private to the user who created them. Only the owner can open, edit, run, or delete one; every other request, including one from an administrator, is answered as if the automation did not exist. The Features > Automations permission decides whether someone may have automations at all, not whose automations they may reach.
See RBAC Permissions for the permission category.
To grant user access:
- Open Admin Panel > Users > Groups
- Edit Default permissions or a specific group
- Enable Features > Automations
You can also set this default via USER_PERMISSIONS_FEATURES_AUTOMATIONS.
Hold Shift in the User Menu to reveal pin/unpin buttons. Pinning Automations adds a shortcut icon to the sidebar rail for one-click access.
Admin Limits
Administrators can set global limits on automation usage for non-admin users. These are configured via environment variables. Admins bypass all limits.
| Setting | Effect | Env Variable |
|---|---|---|
| Max Automation Count | Caps the number of automations a user can create | AUTOMATION_MAX_COUNT |
| Min Recurrence Interval | Rejects schedules that run more frequently than the configured interval (in seconds) | AUTOMATION_MIN_INTERVAL |
- Max count is checked only on creation. Existing automations are not deleted if the limit is lowered.
- Min interval is checked on both creation and update. One-time automations (
COUNT=1) are exempt. - Both default to empty (no limit). Set to a positive integer to enforce.
Create an Automation
- Open User Menu > Automations
- Click New Automation
- Set:
- Title
- Instructions (prompt)
- Model
- Schedule
- (Optional) Choose a Folder for the chats the automation creates
- (Optional) Select a Terminal server and Working Directory
- Click Create
After creation, Open WebUI opens the dedicated automation editor page at /automations/{id}.
Edit and Manage
From the Automations list, click an automation to open its dedicated editor page.
On the editor page, you can:
- Update title, instructions, model, schedule, and terminal settings
- Save changes
- Run immediately with Run now
- Pause/resume automation state
- Delete the automation
- Review execution logs and open run chats
Execution logs are paginated with infinite scroll in the editor, so large run histories load incrementally.
Export and Import
The Automations list header has a split Create button. Its dropdown holds Import JSON and Export JSON, which move automations between instances or accounts.
Export JSON downloads every automation you own as automations-export-<timestamp>.json, regardless of the search box or the status filter. Each entry keeps its name, schedule and other settings, folder assignment and enabled state. IDs, timestamps and run history are not written to the file, so an export is a copy of your definitions, not a backup of past runs.
Import JSON accepts a .json file holding either a bare array of automations or an object with an automations key. Anything else is rejected as invalid JSON format.
What import does and does not do:
- Every entry becomes a new automation. Nothing is matched against what you already have, so importing the same file twice leaves you with duplicates.
- Entries are created active unless the file sets
is_activetofalse. Importing can therefore start scheduled runs on the target instance right away; disable them first if that is not what you want. - A folder is kept only if a folder with that ID exists in your own account. Otherwise it is dropped and the automation is imported without one.
- Each entry goes through the normal create path, so schedule validation and the admin limits still apply. The first entry that is rejected, an invalid
RRULEor a hit againstAUTOMATION_MAX_COUNTfor example, aborts the rest of the import; entries created before it stay.
Folders
An automation can be assigned a folder, and every chat it creates from then on is filed there instead of landing loose in the chat list. This keeps a recurring report or digest out of the way, and lets the folder's unread badge tell you how many runs you have not read yet.
- Only your own folders can be chosen. A folder shared with you belongs to someone else and is not offered, and naming one anyway is rejected the same way an unknown folder is.
- The folder is a filing destination, not a project context: the chat is placed in the folder, and the folder's system prompt and attached knowledge apply to it as they do to any other chat there.
- The automations list can be narrowed to a folder through the API and the chat tools; the list page itself does not label or filter by folder.
- Clearing the folder is a normal edit. The automation keeps running and its future chats go back to the ungrouped list; chats already created stay where they are.
- Deleting a folder does not delete the automations pointed at it. They lose the folder and keep running. The same happens if a folder disappears between two runs: the run notices, clears the setting, and creates its chat outside any folder rather than failing.
- Imported automations keep their folder only if a folder with that ID exists in your account; otherwise they are imported without one.
Scheduling
Supported schedule modes:
- Once
- Hourly
- Daily
- Weekly
- Monthly
- Custom (
RRULE)
Custom schedules accept standard RRULE syntax. Invalid or exhausted rules are rejected.
A few rules about how a custom rule is read:
- Sub-daily rules snap to the clock. A
SECONDLY,MINUTELYorHOURLYrule with noDTSTARTis anchored to the clock, so every 5 minutes means:00,:05,:10rather than five minutes after you happened to save it. - A
DTSTARTis honored where it is still meaningful. Give the rule a start time and the schedule counts from there, keeping any phase you intended. If that start lies so far in the past that following it literally would mean walking through more than 100,000 occurrences to reach now, the rule falls back to clock alignment instead of stalling. INTERVALmust be a positive whole number. Zero or a negative value is rejected rather than quietly treated as one.- One rule per schedule. Multiple
RRULElines are rejected, andEXRULEis not supported at all; build the exclusion into the rule itself. - Property names are read case-insensitively, so
freq=dailybehaves likeFREQ=DAILY.
Notes
- Automations run in the background worker loop on a polling interval.
- Every run records a status (
successorerror) and optional error details. - Deleting an automation also removes its run history.
Managing Automations from Chat
When using Native Function Calling Mode with a capable model, automations can also be created and managed directly from within a chat conversation using builtin tools. This allows you to say things like "Schedule a daily summary report at 9am" and the model will create the automation for you.
Available tools
| Tool | What it does |
|---|---|
create_automation | Create a new scheduled automation with a name, prompt, and RRULE schedule, and optionally a folder for its chats. Uses the current chat model. |
update_automation | Update an existing automation's name, prompt, schedule, model, or folder |
list_automations | List your scheduled automations with status, folder, schedule, and next runs |
toggle_automation | Pause or resume a scheduled automation |
delete_automation | Delete a scheduled automation and all its run history |
Requirements
For chat-based automation tools to be available:
- Native Function Calling must be enabled for the model
- Builtin Tools capability must be enabled for the model
- Automations category must be enabled in the model's Builtin Tools settings (enabled by default)
ENABLE_AUTOMATIONSmust be enabled globally (enabled by default)- The user must have the Features > Automations permission (admins always pass)
The folder argument these tools accept is a folder ID, and it is checked against the folders you own: a folder that is not yours, or no longer exists, comes back as an error instead of being applied. On update_automation and list_automations, leaving the argument out keeps the automation's current folder or lists across all folders, while passing an empty string clears the folder or the filter.
See the Builtin Tools reference for full details on all builtin tools.