toryo docs
Documentation navigation

Messaging

How toryo gets your attention. Messaging is the notification spine: a single queue that anything in toryo can send into, delivered to board's inbox and raised as an OS notification.

The case it exists for: a sequence run reaches a gate and needs your decision. Without a notification, an unattended run that parks at 2am is discovered at 9am.

What sends messages today#

  • A run reaching a human gate, asking for approval, rejection, or feedback.
  • A run finishing, succeeded or failed. A run you cancelled yourself does not notify, since you already know.
  • Any part of toryo sending an informational message.
  • A live worker asking the operator a bounded question, without waiting for the sequence to reach a predefined human gate.

Message kind and severity are separate. Kind describes the interaction, such as information or an acknowledgement that expects an answer. Severity describes how serious it is: info, warning, or error. A failed-run notice can therefore remain informational in interaction shape while carrying error severity, and an approval gate need not imply an error.

How delivery works#

board holds an ambient subscription, so a notification fires regardless of which screen you are on. Clicking it focuses board and routes straight to the message, with the affected run selected.

Messages move through pending → delivered → acknowledged, and expire if their window passes unanswered.

Acknowledging a gate from the run itself also acknowledges the message, so the inbox does not accumulate items you have already dealt with.

board is the only delivery surface today. If board is not running, messages queue as pending and are there when you open it. Nothing is lost, but nothing reaches you in the meantime. External destinations (Slack, webhooks, push) are designed for and not yet built.

Repeat notifications ping once an hour#

An alarm that keeps firing, such as a job that keeps stalling, interrupts you once and then stays quiet. Informational messages that ask for no answer are limited to one notification per subject per hour. Every occurrence still lands in the inbox as its own pending message; only the pop-up is dropped. Gates and anything else that needs your answer always notify. The window is the Messaging setting notifyWindowSec (toryo messaging settings set --notify-window-sec N, 0 to turn it off), and a change takes effect when the messaging service restarts.

Answering a gate or worker question#

A gate message carries more than text. It can attach:

  • Files and links, such as the proposed plan or the pull request, rendered in a tabbed preview so you can read what you are approving without leaving board.
  • Questions, either/or prompts from a planned human gate or a live worker, rendered as pickable option cards. Live questions let an autonomous worker ask for a product decision it cannot safely infer, then continue with the answer in the same run.

Your picks are folded into your typed feedback as ordinary prose and sent back with the acknowledgement, so a planner can ask "Postgres or on-disk?" and get an answer rather than guessing and being corrected a step later.

In board#

The Messaging screen is the inbox: everything sent, its status, and the acknowledgement form.

Full command surface: CLI & contract reference.