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 (the desktop web UI, with the feature flag enabled)
  2. A transfer token is generated (xfer_...) that expires after 2 minutes
  3. The token is shared as a QR code or a snippbot:// deep link
  4. The joining device (mobile) redeems the token and passes security checks
  5. Both devices can view the conversation in real time

Open a snippbot://session/xfer_... link on your phone — tap it in a message, or scan the origin device’s transfer QR code with your phone’s camera. The app opens directly to the join flow.

The app’s own QR scanner (on the pairing screen, Scan QR code instead) also recognizes transfer codes and routes them to the join flow.

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 the requestrequire_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 daemon sends a Session Join Request push notification to the owner’s phone, showing the requesting device name and platform
  2. If the owner has Snippbot open on the Chat tab, an in-app approval banner appears with Approve and Deny
  3. On the joining device, you’ll see a waiting screen with a countdown to the request’s expiry
  4. If approved, you’re redirected to the conversation
  5. If denied, or if nobody responds within 120 seconds, the join attempt fails

When you return to a joined 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 defaults to 5 minutes and is set on the daemon (web UI chat settings)
  • This prevents unauthorized use of an unattended device

When you join a session from your phone:

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

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

ColorMeaning
GreenSession active
YellowLess than 5 minutes until the session expires

When you’re the session owner and another device requests to join while Snippbot is open on the Chat tab, an approval banner slides in at the top:

  • Shows the requesting device name and platform
  • Approve and Deny buttons
  • A countdown bar; the request expires on the daemon after 120 seconds

Configure session security in Settings → Chat Sessions (the Chat Session Security screen).

ModeDescription
Explicit Only (default, 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 joinOnAuthenticator code required to join
Require owner approvalOnOwner must approve each join request
Require TOTP on idle resumeOnRe-verify identity after idle timeout
Require fingerprint matchOnVerify device hardware fingerprint
SettingRange in appDefaultDescription
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. Transfer tokens expire after 2 minutes — generate a new one
  2. Ensure the token starts with xfer_
  3. Check that the session is still active on the origin device
  4. Make sure your phone is paired with the same daemon as 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. The owner needs Snippbot open on the Chat tab to see the approval banner
  2. The request expires after 120 seconds — the owner must respond within that window
  3. Try again after the request expires