---
title: Offline banner (is it my network?)
---

# Offline banner (network-connectivity indicator)

## What it is

### What it is

A thin banner across the top of the app that appears when your computer loses its internet connection, so you know a failing session or a stalled sync is your network — not Omniscio. It is always on; there is no setting to configure.

This is the counterpart the [Anthropic outage alerts](anthropic-status-monitor.md) monitor defers to: that monitor watches Anthropic's status page and never alerts about the status page being unreachable, because an unreachable status page just means _your_ connection is down — which is the offline banner's job to show.

## Where to find it

The top of the app window. The banner is automatic and always on — there is no setting, no menu and no control surface for it.

## How it behaves

### What you see

- When you go offline, a slim amber bar slides in at the top of the window with a Wi-Fi-off icon and the message **"You are offline. Some features are unavailable."**
- The bar clears itself the moment your connection returns.
- A brief blip does **not** flash the banner: it appears only after you have been offline continuously for ~5 seconds, so a one-second drop while switching networks never shows it.

### How it works (under the hood)

- A main-process **connectivity service** ([connectivity-service.ts](../../src/main/services/connectivity-service.ts)) polls Electron's `net.isOnline()` on a self-rescheduling timer — every **10 s** while online, tightened to every **2 s** while offline so a restored network is detected within ~2 s rather than lagging a full interval.
- On a transition it emits a single `NETWORK_STATUS_CHANGED` push (`{ online }`); the renderer's `useAppNetworkStatus` hook updates the connectivity store, and `useOfflineBannerGate` applies the ~5 s debounce before the banner in `AppBanners` renders.
- The poll loop is fully fail-safe: a throw in a listener or in `net.isOnline()` can never stop the reschedule, so the offline/online signal — and every isOnline()-gated poller downstream — keeps recovering.

### While you're offline, your sessions wait instead of burning retries

The same connectivity signal also **pauses the automatic session-retry engines** while you're offline, so a dropped connection no longer makes Omniscio hammer the Claude API with retries that can't possibly succeed:

- A session that hits an API error while offline **holds quietly** — it stays green (not "Needs you") with a one-line **"No internet connection — will retry automatically when you're back online. No action needed."** note — instead of burning through its ~5 silent paid retries, and it sends a single "continue" the moment you reconnect.
- The background stuck-session **recovery sweep** stops re-driving failed sessions while offline: no wasted respawns, and nothing is pushed toward "given up" for a transient outage. It resumes on its own within ~90 s of your connection returning.
- Both read the same `net.isOnline()` signal above (via `shouldDeferRetryWhileOffline()` in [connectivity-service.ts](../../src/main/services/connectivity-service.ts)) and revert instantly with `AMC_DISABLE_OFFLINE_RETRY_GATE=1`. This covers a genuine loss of internet; a link that is up but can't reach the API (a captive portal, or an Anthropic outage) is still handled by the normal bounded retries + the [Anthropic outage alerts](anthropic-status-monitor.md).

## For agents

### CLI access

The offline banner is a passive, automatic indicator with no user actions and no CLI control surface — there is nothing to trigger or configure over the control server. An external agent that needs the online/offline signal reads it indirectly (the same `net.isOnline()` check drives session-spawn and poller gating).

## Related

### Related

- **[Anthropic outage alerts](anthropic-status-monitor.md)** — the sibling monitor that watches Anthropic's status page and hands the "is it my network?" question to this banner.

