/cloud commands
Every /cloud command the plugin adds to omp, where finished turns and questions go, and the cards they land as.
| Command | Does |
|---|---|
/cloud | Open the hub (the threads, their detail and actions on the keys listed below); outside omp's interactive UI, the same list as a card |
/cloud [new] <task> | Hand off a task. A task whose first word is a command name needs new: /cloud new list the open TODOs |
/cloud list | Threads as job tiles, grouped by the repository each was started from: this session's repository first and expanded, the others collapsed (up to 30 threads, then +N more); a tile shows the name, what the agent is doing, a context headline with its trend, a chart of context per turn, and cost, tokens, requests and tools. In Tern each tile has a hover card with the full widget and the details (title, id, repository, branch, changes, pushed, model, created, last active, VM state) |
/cloud show <id> | Show the thread's latest reply and result; marks the thread read |
/cloud watch <id> · /cloud unwatch | Follow a thread live; stop following threads live |
/cloud send <id> <message> | Follow-up message; also follows the thread |
/cloud answer <id> [text] | Answer the agent's question; without text, omp's ask dialog |
/cloud stop <id> | Stop the running turn, cancel queued ones. Cancelling the thread's job in omp's jobs panel, /jobs or proc://<id>/kill stops the turn too; omp's own cleanup on /clear, a switch or a branch does not (jobs) |
/cloud pull <id> [--into <dir>] | Fetch the result branch omp-cloud/<id> and save the cloud conversation as a local omp session. With --into <dir> a repository thread's result is checked out in a new worktree there, and a scratch thread's result is cloned into the new directory |
/cloud resume <id> | Check out omp-cloud/<id> and continue its conversation locally; needs a clean working tree |
/cloud delete <id> | After a confirmation, delete the thread, its VM and gateway client |
/cloud login <provider> | Log the cloud broker in to a provider (the server machine's owner connection only). The provider's sign-in link (and a device code, when it uses one) is posted in the transcript as a card to click or copy, then omp asks for the redirect URL or code the browser ended on. In omp's interactive UI the agent must be idle, so the card can appear at once. A paired device is refused before any request and told to run omp-cloud login <provider> on the server (over ssh: ssh -t <user>@<host> '~/.local/bin/omp-cloud login <provider>'); the same pointer replaces /cloud login in a handoff refused for a provider the cloud cannot run, in /cloud status and in the hub |
/cloud update | Check the service for a newer omp-cloud; for the owner, when one is ready, confirm and restart the service to install it. A paired device is told what the service says |
/cloud dashboard | Print a one-time sign-in link (valid 60 s) to the dashboard, and open it in a browser from the interactive UI |
/cloud pair | On the service host, in omp's interactive UI: show a pairing code (sent to your clipboard), approve the device that uses it (pairing) |
/cloud connect [<code> | <ssh target>] | On another machine: pair this omp with the service, from a pairing code or over ssh (--name <name>, --replace, --allow-public). Without an argument it asks for the code or target |
/cloud devices · /cloud devices revoke <name|id-prefix> | List paired devices; revoke one (after a confirmation) |
/cloud disconnect [--force] | Revoke this device and forget the connection |
/cloud status | Connection and where it comes from, the delivery mode, and what the cloud can run |
/cloud help | Usage |
Wherever a command takes <id> (the cloud tool takes the same references), type the full 12-character thread id (any thread, any age) or one of these, matched case-insensitively among the newest 1000 threads, each in turn until one matches uniquely:
- The id of the job omp shows for the thread's running turn (
PaneZoomShortcut, with omp's-2suffix when an earlier turn's job still holds the id), or the job id without a suffix. - A suffix of the thread id (at least 4 characters).
- A prefix of the thread id.
- A word the thread's name starts with (
/cloud show zoom, when no other name has a word starting with it).
A reference that matches several threads at one step is refused with up to 10 candidates; use the full id. Completion offers threads by name.
Where results go#
For a thread you started yourself, a finished turn (done or failed) and a question do not land in the conversation. They go to a cloud inbox you read when you are ready, and cost the model nothing:
- The footer status counts them:
☁ 3 unread, or☁ 2 working · 1 waiting · 3 unread; the owner's footer also saysupdate readywhen an update waits for a click. /cloudopens the hub, which is the inbox: its header reads☁ omp-cloud · <user> · N unread, and a thread with unread entries starts with[N new]. Selecting a thread loads its detail and marks it read. The keyoopens that thread's latest finished turn as a card with its buttons (it never wakes the model), marks it read and closes the hub; a thread with no finished turn yet says so. The hub footer lists the keys:↑↓ select · s send · a answer · o open · x stop · p pull · r resume · d delete · q close, plusu updatewhile the owner has an update ready./cloud showand a card's Show button mark a thread read too.- In a terminal that supports it, the same entries reach the terminal's own attention tray through the Program Status Protocol (OSC 7501): a pending question shows as blocked, a result as done, a failure as an error, one record per thread, cleared when you read or answer it. In Tern an entry that arrives while the omp pane is unfocused fills "Needs attention" and badges the bell; one that arrives while you are looking at that pane counts as seen and gets no tray entry. Either way the pane's tab shows the state (red for a question) until you read it. It is written only on a real terminal, never headless, and only while omp's
terminal.programStatusis on. - A desktop notification also goes out for each entry, under omp's own switches:
completion.notifyfor a finished turn,error.notifyfor a failure (off by default in omp) andask.notifyfor a question. - Text that comes from the cloud (thread names, the first line of a reply or error, a question) has control characters replaced with spaces before it reaches the inbox, the tray record or the notification, since some terminals write those raw. A deleted thread's entries and tray record are dropped, and a question already in the inbox is not added or notified a second time when you re-watch a waiting thread. If omp's
terminal.programStatusis switched off and on again, or the terminal is suspended and resumed, the records are written again. - A thread the model delegated through the
cloudtool is the exception: its results reach the model, not the inbox (how results arrive). - Set
deliver: transcriptin your personal~/.config/omp-cloud/config.ymlto get cards for every thread;deliver: trayis the default. A repository's.omp-cloud.ymlcannot set it (ignored, with a warning)./cloud statusshowsdeliver: tray (default)ordeliver: transcript (~/.config/omp-cloud/config.yml). The inbox lives in memory for the session and holds at most 200 entries.
Cards and buttons#
Hand-offs, and the finished turns and questions of model-delegated threads (or of every thread with deliver: transcript, or opened with o), land in the transcript as cards. In Tern each ends in a row of buttons that run the command for you; a terminal UI and the model see the command hints instead.
- A launch card has Respond, Show and Stop.
- A finished turn has Respond (the main action), Pull, Resume and Show; a failed one has Respond and Show.
- A single-choice question lists its options (the recommended one badged) and gets one Other… button; a multiple-choice or free-text question gets one Answer… button. In Tern the card lists the options the way omp's
askdoes; once answered, expired or cancelled it settles and shows the answer. In a terminal without Tern's protocol the card is framed with omp's own output block and status line, with ask markers on a question. A launch card's chip follows turn 1 (running, done, failed or cancelled) and has no chip while that is unknown. - A card announcing a service update (owner only) has a Restart to update button; a terminal UI shows
/cloud update. - Respond opens omp's input sheet (
Reply to <name> · <short id>) and sends your text as/cloud sendwould. A question of a thread you started yourself opens omp's own ask dialog by itself (all of the turn's pending questions in one; tool approvals and the push question use omp's approve prompt instead, where once, session or a grant approve and deny denies; closing the dialog counts as no answer); Other… and Answer… and/cloud answer <id>without text take the same path, and an omp without those APIs asks with its select and input prompts. A question of a thread the model started wakes the model through its card instead (the model answers anaskquestion through thecloudtool or asks you); approvals and pushes are always yours, and each question card is posted once. The other buttons run their verbs; Resume switches the session, so where a button has no command context it asks you to type/cloud resume <id>. - In Tern the
/cloudhub is native as well: the threads are a list you select with the keys the footer shows, the selected thread's job tile is shown with its detail, and the actions are buttons with their key caps.
A text box inside a card is not offered: in omp it would fight the composer for focus, so Respond uses the sheet.
Slash commands in the cloud agent#
A message to a cloud agent that starts with / (/cloud send <id> /usage, or the Respond button) runs in the agent's own omp, like a command typed there, when omp can run it over its RPC mode:
- Built-ins with a non-interactive handler work (
/usage,/compact,/handoff, …), and so do extension and custom commands, skills and file commands. - Terminal-only commands and names omp does not know reach the agent as plain text, as they do in omp.
- A built-in command ends its turn about a second after omp answers, not after the usual wait, and its reply is the command's output (plus any messages an extension command prints), cut at 100,000 characters. A built-in that keeps running after it answers (
/compact,/handoff, a bare/rename) keeps the turn open until the agent is idle and not compacting, and what it prints meanwhile is the reply. Such a turn costs no model requests, commits only if the command changed files, and pushes nothing; the next model turn pushes what a command changed. The conversation is saved as after any turn. /usagereports the agent's own provider usage, which is usually empty in a cloud VM, so omp falls back to the session's token tally and cost. It is not your local quota.- An extension command whose handler goes on to ask the model is an ordinary model turn: the reply is the agent's text, usage is recorded and the result is committed and pushed as usual. Output that arrives while no turn is running is dropped.
The model's side of all this, the cloud tool, is in The cloud tool.