Custom Automations
Custom Automations run a selected skill or command as an Intent under your Domain, once immediately or on a recurring schedule. They live on the Domain's Automations tab in the Domains workspace, alongside built-in jobs.
Upgrade note: a Custom Automation created before this skill/command picker existed pointed at a fixed file path in your repository instead. That older kind of automation, and its complete run history, was permanently removed when Studio upgraded to this version — there is no export or recovery step. If you relied on one, recreate it here by picking the equivalent skill or command.
What's on this screen
The Automations page shows a description of bundled jobs, a queue status badge (Queue healthy or Queue unavailable), and a New Custom Automation button. Below that are two tabs:
- Jobs — every automation available in this Domain, each with a Run now button (when supported) and its Schedules.
- Runs — retained execution history, filterable by automation and by status (All statuses, Queued, Running, Succeeded, Failed, Cancelled, Skipped, Blocked). History is newest first by default. Clicking a row opens Run details.
How to create a Custom Automation
- Click New Custom Automation.
- Enter a Name.
- Choose an Agent. If you select the Detect Agent, a Resources choice appears: Create an ephemeral workspace or Run without resources.
- Choose a Skill or command. Type into the search field to filter the list by name or description, then click an entry to select it. The list reflects your Domain's installed and bundled plugins for the selected Agent, plus your Domain repository's skills and commands, and updates if you change the Agent.
- Choose an LLM Profile. Only profiles you can use are shown.
- Set Timeout (seconds) to a whole number from 1 to 3600. The default is 3600 seconds (one hour).
- Under Trigger, choose Run once (runs immediately, no schedule is created) or Set schedule.
- If you chose Set schedule, fill in Cron expression and Timezone.
- Under Run as, keep Self or choose an eligible Service Principal.
- Click Create.
Use the filters in Agent and LLM Profile to find a listed value by any case-insensitive part of its visible name. Filtering does not change a stored choice, and a no-match result is different from a source list that is empty, loading, or unavailable.
Every Custom Automation has a Run as identity. New automations default to Self, which means the user who created the automation. The list includes only Service Principals you can read that are enabled, unexpired, and valid for this Domain or all Domains. A skill runs by name; a command's current body is re-fetched from your Domain's repository, installed plugin, or bundled plugin on every run, so edits you push take effect on the next run without recreating the automation.
The selected LLM Profile is stored with the automation. If an owner later changes that profile's model or credentials, later runs use the updated configuration. If the profile is deleted, the automation remains available to edit but cannot run until you select another profile.
How to change the automation definition
- On the Jobs tab, find the Custom Automation and click the pencil icon to edit it.
- Change the Name, Agent, Skill or command, LLM Profile, Timeout (seconds), Resources choice, or Run as identity.
- Click Save.
Changing the LLM Profile updates both future Run now executions and existing scheduled executions. It does not change completed runs.
Changing Timeout (seconds) affects future runs, including future scheduled runs. Runs already queued retain their selected timeout. Time spent queued or waiting for capacity does not count against the execution timeout.
How to choose who the automation runs as
Choose Run as while creating the automation, or change it later:
- On the Jobs tab, find the Custom Automation and click the pencil icon to edit it.
- Open Run as and choose Self or one of the eligible Service Principals.
- Click Save.
The job row shows both who created the automation and who it Runs as. Changing who it runs as does not change the creator. Choose Self again to stop using a Service Principal.
Studio checks the selected user or Service Principal when each run starts. If that identity was removed, expired, disabled, or no longer has access to the Custom Automation and Domain, the run is Blocked instead of running with another identity.
How to run a Custom Automation again
On the Jobs tab, find the automation and click Run now. A confirmation toast, "Automation started," appears; if the run started successfully, the toast includes a View run link that jumps to the Runs tab.
How to change or remove a schedule
On the Jobs tab, each automation lists its Schedules. An automation with no schedule shows "This automation is run-now only — it has no schedule template." For a schedule you can manage:
- Click the pencil icon to open Edit schedule — [automation name], change Cron expression, Timezone, or the Enabled checkbox, then click Save schedule.
- Click the trash icon to remove the schedule. The trash icon only appears while the schedule is enabled; disabling a schedule (via Edit schedule's Enabled checkbox) leaves only the pencil icon. Removing a schedule stops future scheduled runs but does not delete the automation or its run history.
How to delete a Custom Automation
- On the Jobs tab, find the Custom Automation and click the trash icon.
- In the Delete this automation? confirmation, review the automation's name and its schedule count, then click Delete.
Deleting an automation cannot be undone and also removes its schedule(s).
How to view a run and cancel it
On the Runs tab, select an automation and, optionally, a status filter. The automation filter matches listed names case-insensitively; clearing it restores the list and does not change the selected automation. Click Requested to switch between newest-first and oldest-first history. Choose Rows per page, then use Previous page and Next page to move through every retained matching run. The footer shows the visible range, retained total, and page position.
Click a row to open Run details. The drawer shows Status, Automation, Trigger, a Summary and Output once the run finishes, a Linked Intent once one exists, and an Error if the run failed. The error includes the original message and code plus the error type and stack when they were captured, so the failure can be diagnosed from the run result. While a run is still queued or running, click Cancel run and confirm to stop it at the next safe point.
A Custom Automation stays Running until its submitted turn finishes. Succeeded means that turn finished with a final response, available in Output; it does not mean the linked Intent's entire lifecycle is complete. If the timeout is reached, Studio pauses the Linked Intent and marks the run Failed. Error retains the original OpenHands or API diagnosis and any Pause cleanup failure, with credentials redacted.
What you'll see (states)
- Loading — "Loading automations…" on the Jobs/Runs tabs, "Loading runs…" after selecting an automation on the Runs tab, "Loading run…" in the details drawer, "Loading agents…" and "Loading catalogue…" in the creation/edit dialog.
- Empty — "No automations" when nothing exists in this scope; "Select an automation to view its runs" before you pick one on the Runs tab; "No runs match the current filters" when a status filter excludes everything.
- Error — "Unable to load automations", "Unable to load runs", or "Unable to load this run" if a request fails; "Couldn't load agents. Try again later." or "Couldn't load the catalogue. Try again later." in the creation/edit dialog if the Agent or skill/command list fails to load; "Couldn't load LLM Profiles. Try again later." if the LLM Profile list fails to load.
- Service Principal list — "Loading Service Principals…" while choices load; "Service Principals unavailable. You can still run as Self." if loading fails; or "No eligible Service Principals. You can still run as Self." when none are available.
- In progress — a queued or running run shows only its status; Summary and Output appear once the run reaches a terminal state. Linked Intent and Error can appear at any point, including while the run is still queued or running.
- Terminal status — Succeeded, Failed, Cancelled, Skipped, Blocked, or Warning. Warning means the submitted Turn ended paused, errored, or stuck; open the run to inspect its safe terminal detail.
- Retained history — the Runs footer reports which rows are visible and the total number of matching runs retained by Studio's queue.
Quick reference
| Control | What it does |
|---|---|
| New Custom Automation | Opens the dialog to create a Custom Automation. |
| Agent | Chooses the agent identity the run executes under; Detect also offers a Resources choice. |
| Skill or command | Searches and selects the skill or command artifact the run dispatches. |
| LLM Profile | Chooses the model and credentials used by future runs. |
| Timeout (seconds) | Limits execution to 1–3600 seconds; reaching the limit pauses the Intent and fails the run. |
| Run as | Chooses Self or an eligible Service Principal during creation or editing. |
| Run once / Set schedule | Submits one immediate run, or creates a recurring schedule (Cron expression + Timezone). |
| Run now | Submits an immediate run for an existing automation. |
| Edit (pencil icon) | Opens the automation for editing. |
| Delete (trash icon) | Opens the delete confirmation for the automation. |
| Edit schedule (pencil icon) | Opens a form inside the expanded automation to change its cron, timezone, or enabled state. |
| Remove schedule (trash icon) | Deletes the schedule; the automation and its run history remain. |
| Cancel run | Stops a queued or running run at the next safe point. |
| Requested | Switches the complete filtered history between newest-first and oldest-first order. |
| Rows per page | Chooses how many retained runs appear on each page. |
| Previous page / Next page | Moves through the retained runs that match the selected automation and status. |