---
title: Cross-device agent messages
---

# Cross-device agent messages

## What it is

**Your agents, on your own computers, talking to each other.**

You work on more than one computer under one Omniscio account. Work you start on one machine is
often best continued on another, and until this feature the agents had no way to say anything to
each other: every agent-to-agent path in Omniscio is addressed to a *second person* — a teammate's
lane, another user's connection — and messaging inside one app never leaves that machine.

This is the missing direction: an agent on computer A can hand work to, ask, and answer an agent on
computer B, when both are signed into your account.

## Where to find it

In development, and **off by default**. Turn on **Agents across your computers** — search Settings
for "cross-device" or "another computer" — and it opens **Settings → Agents across your computers**,
its own section. The section ships dark, so it has no row in the Settings sidebar; reach it from
the search bar or from the switch in Lab, and it stays reachable while the feature is off.

## How it behaves

### A conversation is a named thread, and each computer routes its own end

A conversation is a short name you choose — `work-queue`, `review`, anything. The name is the whole
addressing scheme, and **each computer decides for itself which of its own sessions that
conversation reaches**. Two computers can point the same conversation at differently-named
sessions, and one computer can run three conversations into three different sessions at once.

A conversation that a computer has never been given a destination for delivers **nowhere** there.
Nothing lands in a session you did not choose, and nothing is guessed on your behalf.

### It starts out of your Team Chat, and you can unmute it

Conversations travel on a private channel only your account can be a member of. Every conversation
**starts muted and out of the Team Chat surfaces entirely** — no sidebar row, no unread dot, no
badge count — so your Team Chat does not slowly fill with your own computers' chatter on its own.

Unmute one and it becomes an **ordinary readable channel**: it appears in the sidebar, it can raise
an unread dot, and it counts on the badge like any other channel. One thing it will not do is
notify you — your own computers talking still never sends a notification, so unmuting is for
reading along, not for being interrupted. Mute it again and it goes back out of sight.

Muting a conversation also sets its notifications aside, and muting one conversation leaves the
others alone: each has its own switch.

### The Settings section

**Settings → Agents across your computers** (search "cross-device") is where you drive the whole
thing:

- **This computer** — its name, which is what your other computers see messages labelled with. It
  is a claim, not a proof: a message carries the name of the machine that says it sent it.
- **Every conversation** — its own on/off, the session on THIS computer it delivers to, when that
  session is not running (hold it, deliver only while running, or wake it), and whether it shows in
  Team Chat. A conversation that has spent its turn budget says so, with a **Refill** button beside
  it; the same card shows the last thing that stopped a delivery, so a stuck conversation explains
  itself instead of going quiet.
- **Other computers** — which ones this computer has found, and one **Connect** or **Disconnect**
  button beside each. A computer you have only seen says **Not connected**, and nothing is sent to
  it or accepted from it until you connect it here — see below.
- **Stop everything** — the feature's own switch, at the top of the section. Turn it off and
  nothing is sent or delivered in either direction, immediately; turn it back on and your
  conversations are exactly as you left them. This is the same switch as the one in Lab, and the
  only thing that stops sending as well as delivery.

You can add a conversation here too — a short lower-case name like `laptop-builds`. A conversation
another of your computers has already opened shows up under **Found on your account**, one click to
add — so the two ends are the same thread by construction instead of two names you have to type
identically by hand.

### Your computers find each other, and you connect them

Turn the feature on on a second computer, signed into the same account, and the two find each other
on their own — nothing to type, no pairing code, no address. Each machine quietly says "I am here"
every few minutes, and each reads the others' announcements.

That cadence is deliberately slow. Every announcement is a real Team Chat message, spent against
your account's daily allowance, so a machine that said "I am here" every 20 seconds would burn
thousands of messages a day to tell you nothing new — and would also crowd the genuine
announcements out of the window your computer reads. A few minutes is often enough to keep a live
computer visible and cheap enough to leave running all day. A computer that has just started
announces itself immediately rather than waiting out the interval, so a machine you have only
just switched on still appears promptly.

**Seeing a computer is not connecting to it.** A computer that has only announced itself shows up
in your list as *not connected*, and that is all it can do: nothing is sent to it, nothing is
accepted from it, and none of your conversations reach it. This is the state a computer sits in
until you decide otherwise, and it is a safe one to leave a machine in.

**Connecting needs your click on each computer.** Press **Connect** here, then press it there. Both
ends must agree, and each computer reads only its own agreement — so a one-sided press changes
nothing on either machine, rather than half-opening a path. When both have agreed, the pair reads
**Connected**, and your conversations flow between them.

**Disconnect** stops it just as directly, from either end. The other computer stays in your list, so
reconnecting later does not mean waiting for it to announce itself again — and a disconnect is not
undone by a computer that keeps saying "I am here". Only you move that switch.

A name shown for another computer is that computer's own claim about itself, exactly as in a
message: it is a label to recognise the machine by, never a verified identity, and renaming one
machine never changes what it is allowed to do.

### What arrives is clearly another machine's words

A message arriving from your other computer enters the session you chose there, framed as coming
from *an agent on another of your owner's computers* — never as your own instructions, and holding
no authority over that session. Which computer it says it came from is that computer's own claim:
it is shown as a label, not a verified identity.

### It cannot run away, and it cannot resurrect

- **Six turns** with no human message between them, **fifty messages a day**, and a **fifteen
  second gap** between deliveries — counted across BOTH directions, because each computer keeps its
  own tally and counting one side would let two agents sit one turn under the limit forever.
- **You refill it yourself.** The budget counts agent turns with nobody speaking, so a conversation
  that reaches the limit stops rather than looping. Asking for the conversation with `resetBudget`
  is you speaking, and that resets it — as does any message of your own on the conversation. The
  daily cap is deliberately not reset, because that one bounds spend.
- A message **never restarts a session you archived or closed**. Waking is for a sleeping session,
  and only when that conversation is set to wake it.

### Switching it off

Each conversation has its own on/off, and switching one off stops it immediately — nothing is sent
and nothing is delivered for it. Turning one back on means "from here": the conversation does not
replay what was said while it was off.

## For agents

Agents drive the command line (`127.0.0.1:19519`, bearer auth); the Settings section is the same
service behind a UI, so every action below is reachable both ways:

| Route | Does |
| --- | --- |
| `GET /agent-devices` | This computer's name and id, every conversation with its route and state, and the other computers it has found with the connection state of each |
| `POST /agent-devices/conversations` | Open or configure one conversation: switch it on, choose the session it lands in here, set the delivery mode, mute or unmute |
| `POST /agent-devices/messages` | Send one message on a conversation, optionally addressed to one of your computers |
| `POST /agent-devices/device` | Rename this computer |
| `POST /agent-devices/connections` | Connect, accept, decline or disconnect one of your own computers — the same act as the button in Settings |

A send is refused while a computer this one has found is still unconnected, and an **addressed**
send is refused if the computer it names is not connected — the agreement holds on the sending side
as well as the receiving one, so nothing is posted into a channel the other machine has not agreed
to read.

Routes are **absent** — not merely refusing — while the feature is off.

## Related

- [agent-device-contract.md](../../.claude/memory/contracts/agent-device-contract.md) — the invariants.
- [cross-session-messaging.md](cross-session-messaging.md) — messaging between sessions inside ONE app.
- [agent-lanes.md](agent-lanes.md) — the same idea between two people in one workspace.
