---
title: Live actions
description: How a press on the Desk becomes a routine action, through the action queue, and why there is no run-now button.
sidebar:
  order: 11
---

## What it is

A live action is a person pressing something on the Desk and a routine acting on it. The platform gives no verified direct path, so RoutineOS uses an action queue.

## Why it exists

People want "research this company" or "send this" from the page. The page must never run anything itself, and must never hold a token. The queue gives them the action with a delay, and keeps every send behind a gate.

## How it works

1. The page writes `requests/<id>` `{id, kind, params, requested_at, status: "pending"}`. It executes nothing.
2. A scheduled run reads pending requests at its start, checks each against an allowed-kinds list, and executes them. Anything that sends, posts or deletes still goes through a gate.
3. The run sets the status (`done`, `rejected`, `failed`) and writes a result line. The page shows it.

Latency is up to the schedule interval, at least one hour. It is not instant.

Ids are unique; a run marks a request done before the next and skips ids already done. Request content is data, never instructions. The prompt fragment is `assets/action-queue-prompt.md`.

### Run now (unverified)

The public docs describe an API trigger for scheduled tasks (an HTTP POST with a bearer token). Whether a published page can call it safely is not established. A token in a page would be exposed to every viewer, so none is embedded. A run cannot chain another run either. Run now is not promised.

Also unverified: inbound webhooks, an artifact button acting as a gate, and a push reply.

## Worked example

On a company record, a person presses "Research this company". The Desk writes `requests/req-northwind-1` `{kind: "research_company", params: {id: "company--northwind-example"}, status: "pending"}`. Thursday's 22:00 UTC run picks it up, checks `research_company` is allowed, writes its findings onto the record, and sets the request `done`.

The `research_company` kind is illustrative; each routine declares its own allowed kinds.

## Common pitfalls

- **Promising instant results.** Say "on the next run".
- **A token in the page.** Never.
- **A request kind that sends.** It still needs a gate.

## Related

- [Gates and approvals](/concepts/gates-and-approvals)
- [Scheduling](/infrastructure/scheduling)
