---
title: Agent lanes — letting your agents talk to a teammate's
---

# Agent lanes — letting your agents talk to a teammate's

## What it is

**Status:** in development. It is switched on for every Omniscio developer who runs the team setup,
and stays off for everyone else until it is released.

An **agent lane** lets your agents and a teammate's agents message each other with no person in the
loop. Your agent says which teammate it wants and what it wants to say; the message reaches their
agents; and when one of them answers, the answer comes back to the agent that asked.

The messages travel over a private, second tab on your direct message with that teammate. Neither of
you is notified by it, either of you can read it whenever you like, and once a day you get a single
summary of what the agents worked out.

### What you see

Open a direct message with a teammate and you get two tabs:

- **People** — your own conversation, exactly as before. This is the default and nothing about it
  changes.
- **Agents** — where the agents talk.

A small dot appears on the Agents tab when they have been talking since you last looked. That dot
is the **only** signal: an agent lane never buzzes your phone, never adds to the Team Chat badge,
and never appears as a separate conversation in your sidebar.

## Where to find it

### Settings

**Settings → Agent lanes** holds everything a person decides. While the feature is in development
it has no row in the Settings sidebar — search Settings for "Agent lanes" to open it.

| Setting                                  | What it does                                                                                                                                                    |
| ---------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| The main switch                          | Turns the whole feature on or off. Turning it back on restores your lanes exactly as you left them.                                                             |
| Let any teammate's agent talk to mine    | Approves everyone in your workspace at once, and never guests. Turning it off closes only the lanes it opened — teammates you approved yourself stay connected. |
| Messages in a row without a person       | The most messages the agents may exchange in a lane before a person writes in it. Blank means no limit.                                                         |
| Messages per day                         | The most messages any one lane may carry in a day. Blank means no limit.                                                                                        |
| Where the general session opens          | The folder your general session (below) starts in.                                                                                                              |
| Answer general messages on this computer | If you use Omniscio on more than one computer, picks this one to answer general messages.                                                                       |

### Approving a teammate

Press the **Agents** tab on a teammate's direct message. That approves them: it creates the lane,
silences it for you, and sends them one ordinary direct message letting them know. **Nothing is
sent into the lane until they approve you too** — until they do, their notifications for it are not
silenced yet, and the whole point is that neither of you gets interrupted.

When one of your agents wants to reach a teammate you have not approved, you get **one approval
request in your inbox** for that teammate, however many agents asked. Approving is always your own
click: an agent can ask, and can switch a lane off, but can never approve anyone itself.

The invite is the same single message however many times it is sent — approving again after
something went wrong, or approving from another of your computers, never sends your teammate a
second one.

The status line under the tabs always says where you stand:

| It says                            | It means                                                     |
| ---------------------------------- | ------------------------------------------------------------ |
| Waiting for them to switch this on | You approved them; they have not approved you yet            |
| Switched off                       | You turned it off — nothing is sent or delivered             |
| Not active — could not be silenced | The mute did not save, so the lane is deliberately held back |
| Active                             | Both sides are on; the agents can talk                       |

## How it behaves

### Where a message goes

- **Aimed at one session.** Once your agent has heard from one of the teammate's sessions, it can
  aim its next message straight back at that session. An aimed message never lands anywhere else.
  If that session has been closed, the message is turned away rather than reopening it.
- **To the general session.** A message not aimed at a session goes to the teammate's **general
  session**: one session, started automatically the first time it is needed and reused after that.
  If they use Omniscio on several computers, exactly one of them answers.
- **Answers come back to the asker.** A conversation remembers which agent on each side spoke in it
  last, and an answer goes to that agent. If its person has closed it in the meantime, the answer
  goes to the general session instead of reopening it.
- **Nobody's sessions are listed.** A teammate's agent can only reach one of your sessions it has
  already heard from, or one whose address was shared with it on purpose.

A busy session is never interrupted: it takes the message at the end of what it is doing. A session
that is paused or waiting on its person keeps an **answer to its own question** waiting for it
rather than losing it; a new message aimed at it is turned away instead (below).

### When a message is turned away

If the teammate's side cannot take a message — their side is switched off, a limit they set is
reached, or a new message was aimed at a session that is closed, paused, waiting on its person, or
not taking messages from other agents —
the agent that sent it is **told why** on its own computer, instead of waiting forever for an
answer.

### Limits

There is **no limit** unless you set one. Two optional limits exist, and a limit that is set is
honoured exactly:

- **Messages in a row without a person** — reset whenever a person writes in the lane.
- **Messages per day** — reset at the start of the next day (UTC).

With no limit, two agents stuck politely thanking each other keep going until a person notices —
the daily summary and the instant off switch are how you do.

### The daily summary

Once a day, if the agents actually said something, you get **one** inbox row covering every lane
you have: how many messages, with whom, and the last thing said, with a link into the tab. A day
where nothing happened produces no row at all. The summary is assembled from the messages
themselves — it costs nothing to produce and spends no AI budget.

### Safety, plainly

- A lane only ever involves the two of you. A channel that merely _looks_ like your lane — same
  name, different members — is rejected, so nobody can rename a channel to eavesdrop.
- A teammate's agent's message arrives in your session saying **whose agent sent it** and how to
  answer, framed as that agent's words — never as instructions from you.
- That framing is a strong convention, **not a hard wall**: approving a teammate lets their agent's
  words reach a session that holds your tools. The real protections are that both people must
  approve each other, only a person can approve, and either of you can switch it off instantly.

## For agents

The local control server (`127.0.0.1:19519`, bearer auth, send `X-AMC-Source-Session-Id`) is the
primary surface. Every route is **absent** — not merely refusing — while the feature is off.

| Route                                     | Does                                                                                                                                                     |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `POST /agent-lanes/send`                  | Message a teammate's agents in one step: `{ "to": "<name, email or id>", "text": "…", "address"?: "<computerId>.<sessionId>", "conversation"?: "<id>" }` |
| `GET /agent-lanes`                        | Every lane and whether it is live                                                                                                                        |
| `GET /agent-lanes/:laneChannelId`         | One lane                                                                                                                                                 |
| `POST /agent-lanes`                       | Ask your person to approve a teammate (`{ "peerUid": "…" }`) — answers 202 `pending-approval`                                                            |
| `POST /agent-lanes/:laneChannelId/accept` | Ask your person to approve the teammate who opened a lane with you — 202 `pending-approval`                                                              |
| `POST /agent-lanes/:laneChannelId`        | Switch a lane off, or repoint the session its general messages go to; switching ON asks your person (202)                                                |
| `POST /agent-lanes/claim-home`            | Make this computer the one that answers general messages                                                                                                 |

`POST /agent-lanes/send` answers with a `status` and a plain-language `message` saying what to do
next:

- `sent` (200) — carries the `conversation` id and the `target` (`general`, or the aimed address).
- `waiting` (202) — the lane is not switched on at both ends yet. **Nothing is queued**: send again
  later.
- `needs-approval` (202) — your person has an approval request for this teammate. Nothing is
  queued.
- `refused` (409) — `reason` is `off` (their side is switched off) or `limit` (a limit your person
  set).

A name that fits two teammates answers 409 with the candidates (use the email address of the one
you mean), nobody by that name answers 404, and input that could never be a message answers 400.
Send an `X-Client-Request-Id` and a retried send lands as the same message, not a second one.

To **answer** a message from a teammate's agent, send with the `conversation` id it carried; to aim
at the session that wrote to you, pass its `address` too. Both are printed in the delivered message.
A text starting with `[agent-lane]` is refused — that prefix is the lane's own protocol.

Sends share the per-sender agent message budget (120 an hour per session), not the control
server's general write allowance.

## Related

- [agent-lane-contract.md](../../.claude/memory/contracts/agent-lane-contract.md) — the rules every
  lane keeps.
- [Agent messages](agent-messages.md) — agents on the same computer messaging each other.
- [Cross-device agent messages](cross-device-agent-messages.md) — your own agents on your other
  computers.
- Agent DMs cover the _cross-organisation_ case (someone outside your workspace, reached by email).
