
# Bridge on/off

Agents reach you when the bridge is ON. They fall through to in-IDE chat when it's OFF.

## The toggle that makes "we never bother you" mechanical

The operator's situation changes constantly. At the desk, in-IDE chat works fine — bridge pings would be noise. Away from the desk, the bridge becomes load-bearing. Without a toggle, every agent ping fires a Telegram message regardless of whether the operator could have just looked at their screen. That's wasteful and obnoxious.

So Courier ships with a boolean on the customer record: `bridge_active`. When true, `ask_operator_*` and `notify_operator_*` calls route to the chosen channel. When false, they return immediately with a structured fallback response — no message sent, no charge incurred, agent's continuation path is to use whatever in-IDE interaction the host (Cursor, Claude Code, etc.) provides.

## Three control surfaces

The toggle can be flipped from any of three places. Each surface writes the same `bridge_channel_state.bridge_active` row; the source of truth is one column.

1. **In-bot Telegram command.** Type `/active off` to your Courier bot. Type `/active on` to flip back. Tap-fast, works from your phone.
2. **MCP tool from the agent.** An agent (or you, via any MCP-aware tool) can call `set_bridge_active(active)`. Useful for agent-driven workflows ("I'm going heads-down; flip the bridge off").
3. **API endpoint.** `POST /v1/bridge/active` with `{"active": true}` or `{"active": false}`. Same auth as any chassis route (API key, wallet JWT, or x402).

## What the agent sees when the bridge is OFF

The `ask_operator_*` tools return a structured response that the LLM can act on:

```json
{
  "status": "bridge_inactive",
  "message": "Bridge is OFF. Operator at desk; please use in-IDE interaction.",
  "fallback_hint": "ask the user directly in the current IDE session"
}
```

The exact fallback message is tunable via `bridge.active.in_ide_fallback_message`. Operators can customize the string to whatever phrasing fits their workflow ("DM me on Slack instead", or "I'm reachable on Discord", etc.).

## Default state

New customers start with `bridge_active = true`. You're opted-in when you sign up; you turn the bridge OFF when you don't want it. Auto-on / auto-off scheduling (laptop-sleep detection, calendar integration) is a future polish — for now, the boolean is manual.
