Skip to content
RoutineOS
Esc
↑↓navigate↵open⌘Jpreview
On this page

Live actions

How a press on the Desk becomes a routine action, through the action queue, and why there is no run-now button.

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.

Was this page helpful?