---
title: App messages in the transcript (readable system cards)
---

# App messages in the transcript (readable system cards)

## What it is

Omniscio sends messages into an agent's session on its own behalf: your Inbox approve or decline
reaching the agent that asked, the Auto-lander handing a branch back, a Gate watch or Land watch
reporting a result, a scheduled wake-up firing. Each one shows in the transcript tagged
"injected by …" with the sender's name.

Those messages are written for the agent, so they read like instructions to a machine: ids,
hashes, numbered steps, reminders about archiving. They now render as a **card** that tells a
person what happened at a glance, the same way a Verdict test result already does
([Verdict results in the transcript](verdict-result-cards.md)).

## Where to find it

There is nothing to open. A card replaces the message in place, inside the agent's transcript in
the session panel, on desktop and on the phone.

## How it behaves

### What you see

Every card has a status icon and colour, a plain-words headline, and a short fact line
(usually the branch it is about). The colour follows the app's usual meanings: green is done or
passed, red is failed or refused, orange is waiting or held up, amber means a person has to act.

| Sender | Example headlines |
| --- | --- |
| Inbox | "Request approved" (with "Carried out"), "Request declined" (with the reason), "4 requests reviewed", each request listed with its own approved or declined mark |
| Auto-lander | "Couldn't land: it conflicts with master" (handed back to the agent to fix), "Landing paused for about 5 minutes", "Couldn't land yet: a safety check is holding it", "Needs a person's sign-off before it can land", "Ready tag is out of date", "Refused to land" |
| Gate watch | "Tests passed" / "Typecheck failed", "No answer, nothing was checked", "Result is out of date", with whether it checked the whole project or the changed files |
| Land watch | "Landed on master", "Still waiting to land", "Still not landed on master after 6 hours" (the stall heads-up, in orange), "Can't land as it is", "Branch is gone", "Stopped watching: it never landed" |
| Worktree Ledger | "Worktree couldn't be created" (with the reason), "Workspace taken over by another session", "Idle workspace with unfinished work" |
| Gate restart recovery | "Tests check stopped by an app restart" |

Three senders carry someone else's words, so their card is a header with those words shown in
full underneath: **Scheduled wake** (the wake-up's own prompt), **Session Refill** (the text you
configured), and **Crew check-in** (the crew member's report).

A message whose wording the card does not recognise, or one from a rarer app sender (Git
guardrails, Runaway-command watch, PR body check), still gets the card, headed by its own first
sentence.

When a message waited in the queue, the card shows when it was queued and how long it waited, the
same line the Verdict card shows.

### The original is one click away

Every card ends with **"Show the original note"**, which reveals the exact text the agent received.
Opening it always shows the whole note: the bubble grows to fit it rather than cutting it off.
(This also fixed the same toggle on Verdict cards, where an opened note could be cut off.)

### What it does not change

- **The agent still reads the original.** Nothing about the stored message is rewritten; the card
  exists only on your screen.
- **Only the app's own senders get a card.** A message from another agent, a teammate, a guest,
  your own broadcast, or anything you typed renders exactly as before.
- **Internal ids stay off the card.** Watch ids, commit hashes and ticket numbers are one click
  away in the original.
- **Old batches:** a message that several senders' notes were merged into before Omniscio started
  recording each sender separately keeps its old look.

## Related

The same idea for test results is [Verdict results in the transcript](verdict-result-cards.md).
How messages between sessions are tagged, and how to hide them per session, is on
[Cross-session messaging](cross-session-messaging.md). How an agent's own replies are laid out is
on [Agent message display](agent-message-display.md).
