Skip to content

Remote Sessions

Remote sessions let you continue a conversation started on one device (e.g., your desktop) on another (e.g., your phone). The system uses a 6-layer security gate to ensure only authorized devices can join active sessions.

  1. A session is created on the origin device (desktop web UI or CLI)
  2. A transfer token is generated (xfer_...)
  3. The token is shared via QR code, deep link, or manual entry
  4. The joining device (mobile) redeems the token and passes security checks
  5. Both devices can view the conversation in real-time

There are three ways to join a session from the mobile app:

  1. On the origin device, generate a transfer QR code from the session menu
  2. On mobile, go to Settings > Chat Sessions > Scan QR Code
  3. Point your camera at the QR code
  4. The app automatically extracts the transfer token and begins the join flow

Tap a snippbot://session/xfer_... link on your phone (e.g., from a message or email). The app opens directly to the join flow.

  1. Go to Settings > Chat Sessions > Scan QR Code
  2. Tap Enter code manually at the bottom of the scanner
  3. Type the transfer token (starts with xfer_)
  4. Tap Submit

When joining a session, the app passes through up to 6 security layers. Each layer is configurable in session security settings.

LayerCheckConfigurable
1. Rate limitingMax join attempts per time windowServer-side
2. Device trustDevice must be in the daemon’s trusted device listrequire_trusted_device
3. Device fingerprintHardware fingerprint must match a known devicerequire_fingerprint_match
4. TOTP verification6-digit authenticator code requiredrequire_totp_on_join
5. Owner approvalSession owner must approve via push notificationrequire_owner_approval
6. Token validationTransfer token must be valid and unexpiredAlways enabled

When TOTP is required, you’ll see a 6-digit code entry screen:

  1. Open your authenticator app (Google Authenticator, Authy, etc.)
  2. Find the Snippbot entry
  3. Enter the 6-digit code in the app
  4. The code is verified against the daemon

When owner approval is required:

  1. The session owner receives a push notification with the requesting device name and platform
  2. The owner can Approve or Deny directly from the notification
  3. On mobile, you’ll see a waiting screen with a countdown timer (default: 60 seconds)
  4. If approved, you’re redirected to the conversation
  5. If denied or timed out, the join attempt fails

When you return to a conversation after being idle, the app may require re-verification:

  • If require_totp_on_idle_resume is enabled, you’ll be prompted for a TOTP code after the idle threshold
  • The idle threshold is configurable (default: 30 minutes)
  • This prevents unauthorized use of an unattended device

When you join a session as a secondary device, you enter observer mode:

  • You see all messages in real-time via a fan-out SSE stream
  • Tool calls, thinking, and agent responses stream live
  • A session indicator pill shows at the top of the chat with participant count
  • Tap the pill to see all active participants (device name, platform, join time)

Active sessions show a colored pill at the top of the chat:

ColorMeaning
GreenSession active, you’re connected
YellowSession active, reconnecting
RedSession expired or disconnected

Tap the indicator to view:

  • Session ID and status
  • All participants (device name, platform, last seen)
  • Session expiry time
  • Option to leave the session

When you’re the session owner and another device requests to join, an approval banner slides in at the top of the chat:

  • Shows the requesting device name and platform
  • Approve and Deny buttons
  • Auto-dismisses after the approval timeout
  • Also delivered as a push notification for background handling

Configure session security in Settings > Chat Sessions > Security.

ModeDescription
Explicit Only (recommended)Session owner must manually generate a transfer code
QR Code + Deep LinkTransfer via QR scan or snippbot:// deep link
AutomaticAny paired device can join any conversation
SettingDefaultDescription
Require trusted deviceOnOnly trusted devices can join
Require TOTP on joinOffAuthenticator code required to join
Require owner approvalOnOwner must approve each join request
Require TOTP on idle resumeOffRe-verify identity after idle timeout
Require fingerprint matchOffVerify device hardware fingerprint
SettingRangeDefaultDescription
Session expiry5–1440 min30 minSessions auto-expire after this duration
Max TOTP attempts1–105Device locked after this many failed codes
Lockout duration1–120 min15 minHow long a device stays locked

Use the + / - stepper controls to adjust these values.

  1. Ensure camera permission is granted in device settings
  2. Hold the camera steady, 6–12 inches from the QR code
  3. Make sure the QR code is well-lit and not distorted
  4. Try the manual entry option as a fallback
  1. Transfer tokens expire after a short time — generate a new one
  2. Ensure the token starts with xfer_
  3. Check that the session is still active on the origin device
  1. Verify your authenticator app’s time is synced (Settings > Time correction in most apps)
  2. Use the most recent code — codes rotate every 30 seconds
  3. After too many failures, your device may be locked out for the configured lockout duration
  1. Ensure the session owner has push notifications enabled
  2. The default timeout is 60 seconds — the owner must respond quickly
  3. Try again after the timeout expires