Omniscio documentation
Browse all documentation
  1. Getting Started13
  2. Sessions & Agents115
  3. Inbox & Notifications59
  4. Projects & Tasks95
  5. Automation & Scheduling75
  6. Knowledge & Memory26
  7. AI Features60
  8. Integrations100
  9. Plugins & Marketplace33
  10. Cloud & Teams56
  11. Settings & Customization58
  12. Account & Billing28
  13. Troubleshooting84
  14. CLI & API Reference22
  15. Legal & Policies4
  16. Uncategorised22

Show system messages (per-session diagnostic toggle)

The chat panel's default view — the real-conversation layout — hides the "plumbing" rows that Omniscio generates around your actual conversation, so a long session reads as the dialogue you actually had. Most of the time that's what you want. But sometimes you need to confirm the plumbing is working: did the OAuth retry actually fire?

What it is

What it does

The chat panel's default view — the real-conversation layout — hides the "plumbing" rows that Omniscio generates around your actual conversation, so a long session reads as the dialogue you actually had. Most of the time that's what you want. But sometimes you need to confirm the plumbing is working: did the OAuth retry actually fire? did the account-switch recovery happen? is the away-mode auto-reply going out? Show system messages is a per-session toggle that reveals those hidden rows for one session at a time.

Turn it on for a session and the chat panel adds back three classes of rows that the default view folds away. Turn it off and the session goes back to the clean conversation view. Each session remembers its own setting, and the setting survives an app restart — so you can leave it on for the one session you're debugging without affecting any other session.

It is off by default, and turning it on changes only what you see — it never alters, deletes, or re-fetches anything. The hidden rows were always stored and always available; the toggle just unfolds them in the chat view.

What you see when it's on

With the toggle ON, these three normally-hidden row classes appear inline in the conversation, in the order they happened:

  • System status events — plain unkinded rows like "Session ready" bootstrap chatter. (See "What stays the same" below for the kinded ones, which are always visible regardless of the toggle — with the one exception called out there.)
  • System-injected continues — the "Please continue" style prompts Omniscio sends on your behalf, not messages you typed: auto-continue after an interrupted answer, stall-retry, rate-limit recovery, crash recovery, and restart recovery. When revealed they appear as their own turns so you can see exactly when each one fired.
  • Away-mode auto-replies — the rule-driven automatic responses Omniscio sends while you're away (e.g. an SMS auto-reply like "I'm asleep right now, will reply in the morning").

With the toggle OFF (the default), none of those three classes render — the view shows only your real messages and the agent's real replies.

Plus a kinded exception — interruption notices. A small family of "session interrupted" rows are kinded but, unlike the other kinded markers below, are hidden by default (chat clutter, not signal) and revealed only by this toggle: the "Session interrupted — app closed unexpectedly" row written for each running session when Omniscio restarts after an unclean shutdown, and — as of 2026-08-12 — the "Session interrupted when the app closed…" row written for a mid-work session at a normal app-close (previously a loud card that appeared on every close for Codex and other non-Claude engines, since those never take Claude's quieter "will resume on restart" path). None are ever deleted — the rows stay in the database and search/export still find them. See crash-interruption-notice-contract.md.

Why this exists

The real-conversation layout deliberately folds plumbing rows so long, tool-heavy sessions read as a conversation instead of a wall of noise. That's the right default for reading, but it's the wrong default for debugging — when you're checking whether a recovery, retry, or away-mode rule actually fired, you need to see the plumbing. Rather than make everyone choose between "readable" and "complete", Omniscio keeps the clean view as the default and gives you a per-session escape hatch for the one session where you need the detail.

This is not the same thing as the older, rejected idea of hiding system rows in the database query and surfacing them behind a button. That approach made the stored timeline lie about what existed. This toggle does the opposite: the database always returns everything, and the toggle only changes how the already-loaded rows are folded for display. (See the reconciliation note in show-all-messages-system-only-postmortem.md in the repo for the full history of why these are different.)

Where to find it

How to turn it on

  1. Open the session you want to inspect.
  2. Click the ⋯ overflow menu in the session header.
  3. Expand View.
  4. Under Filter Messages, click Show system messages (wrench icon). A check mark appears when it's on.
  5. Click it again to turn it back off.

The chat re-renders immediately when you toggle it — no reload needed.

Note: this toggle only has an effect when the real-conversation layout is on (the default). If you've turned the real-conversation layout off (Settings → Sessions → "Real-conversation layout"), the chat already shows every row — including all the system and auto-reply rows — so there is nothing for this toggle to reveal.

How it behaves

What stays the same

  • Kinded system markers always render — toggle or not. Compaction dividers, snooze markers, rate-limit notices, auth-retry messages, seed-context rows, and sub-agent results are kinded system rows; they show up in the conversation view whether or not the toggle is on. The toggle governs the three classes listed above (the unkinded system events, the system-injected continues, and the away-mode auto-replies) — plus a deliberate exception: the interruption notices (the unclean-restart "Session interrupted — app closed unexpectedly" and the normal-app-close "Session interrupted when the app closed…"), which are kinded but hidden by default and revealed by this toggle (see the note above).
  • It's per-session and persistent. Each session has its own setting, stored on the session row. Flipping it for one session leaves every other session untouched, and the choice is remembered across restarts.
  • It's render-only. The rows it reveals are always kept in the database. Nothing is deleted, nothing is hidden from storage, and toggling does not re-query anything — it re-folds rows the panel already has.
  • Search, export, share, and audit are unaffected. Those features always saw every row regardless of this toggle; they don't go through the conversation-view fold at all.

For agents

Where it lives in code

What Where
Persisted column sessions.show_system_messages (schema v224, default 0) src/main/db/database.ts
Session.showSystemMessages: boolean src/shared/types.ts
IPC channel SESSION_SET_SHOW_SYSTEM_MESSAGES + push SESSION_SHOW_SYSTEM_MESSAGES_CHANGED src/shared/ipc-channels/index.ts
Store action setShowSystemMessages + push reducer updateSessionShowSystemMessages src/renderer/src/stores/session-store.ts
Menu item (⋯ → More → Filter Messages → Show system messages) src/renderer/src/features/sessions/SessionOverflowMenu.tsx
Render-time fold the toggle overrides buildRealConversationTurns(messages, { excludeAutoResponses, showSystemMessages }) in src/renderer/src/lib/real-conversation-turns.ts
Call site that reads the flag and recomputes turns src/renderer/src/features/sessions/useSessionPanel/useSessionConversationTurns.ts
Build contract (R18 / AC20) .claude/memory/project_real_conversation_layout.md

Related

Last verified 2026-10-05