# tryst-connect.flow — Conversational connect flow for Tryst The **canonical** way Quinn connects Tryst. Conversation, not a form. Implements the principle in [00-system-conversational-ux.md](./00-system-conversational-ux.md): screens are inspectors / fallbacks; conversation is the primary path. The [tryst-connect.screen.md](./tryst-connect.screen.md) exists as a fallback for when Quinn explicitly wants the form; this flow is what happens first. Two paths covered: cookie-paste (fast) and full-credentials (auto-re-login). Cocotte asks which Quinn wants; everything else follows. ## Transcript — cookie path (the most common first-time flow) > **Quinn**: connect tryst > > **Cocotte**: Two ways to connect Tryst — a fast one and a long-haul one. Want to hear both? > > **Quinn**: yes > > **Cocotte**: > - **Cookie paste** is faster. Sign in to tryst.link in Safari, copy a session cookie, paste it here. Done in 30 seconds. You'll re-paste every ~30 days when Tryst rotates the session. > - **Full credentials** is longer to set up — your username + password + 2FA secret if you use one. I sign in for you each time the session expires. No re-paste needed, but the first sign-in might hit a captcha I have to solve. > > Which way? > > **Quinn**: cookie > > **Cocotte**: Got it. Open tryst.link in Safari, sign in. Then: > 1. Tap the address bar → AA → Website Settings (or Safari menu on Mac → Develop → Storage). > 2. Find the `session` cookie for tryst.link. > 3. Copy its value. > > Tell me when you've got it, or paste it here and I'll grab it. > > *(Cocotte waits. Quinn taps the deep link "Open tryst.link" if she wants; otherwise she switches apps and comes back.)* > > **Quinn**: *(pastes a long opaque string)* > > **Cocotte**: Got it. Testing the connection through my browser container — one second... > > *(2–5 seconds; chat shows a single subtle pulse indicating Cocotte is working)* > > **Cocotte**: ✓ Connected. You're on Tryst as **@transquinnftw**, TLC Premium tier, 3-city slot, Sumsub-verified through 2027-03-04. Listing's active in San Francisco + Berkeley. > > Want me to start bumping on your usual cadence (every 2h since you're on Premium+, 10am–2am)? Or change anything? > > **Quinn**: yeah start bumps. and pause overnight 2 to 8 > > **Cocotte**: Done. Bumping every 2h between 8am and 2am. Pausing 2–8am. First bump in 12 minutes. That's the entire connect-and-go interaction. **Zero screens opened.** The fallback screen [tryst-connect.screen.md](./tryst-connect.screen.md) is available if Quinn says "show me the form" or if something goes wrong. ## Transcript — full-credentials path > **Quinn**: connect tryst > > **Cocotte**: Two ways to connect Tryst — a fast one and a long-haul one. Want to hear both? > > **Quinn**: just do the long one > > **Cocotte**: OK — username + password + 2FA secret if you have one. Tell me your username first. > > **Quinn**: transquinnftw@... *(types email)* > > **Cocotte**: Got it. Password? *(input field appears inline in the chat with secure-input affordance; auto-clears from chat history after submit)* > > **Quinn**: *(enters password)* > > **Cocotte**: 2FA — got a TOTP secret? You can paste the `otpauth://` URL or the raw base32 secret, or tap the camera to scan a QR. Or skip if you don't use 2FA on Tryst. > > **Quinn**: skip > > **Cocotte**: Signing in for you now — opening Tryst in my container, filling the form, watching for captchas... > > *(5–30 seconds; pulse indicator. If a captcha appears: Cocotte runs Tier 1 anti-detection → Tier 2 ML solver → Tier 3 HITL. If HITL kicks in, Cocotte sends Quinn a push notification with the challenge image to solve.)* > > **Cocotte**: ✓ Connected. Tryst threw a captcha at sign-in but I solved it. You're on as @transquinnftw, TLC Premium, all the usual. From now on I'll re-sign-in automatically whenever the session expires — you won't see it. > > Same cadence as before? Or different this time? ## What Cocotte's behavior contains (parsing + flow control) These are the patterns the conversational entry parses: | Quinn says | Cocotte parses as | Resulting flow | |---|---|---| | "connect tryst" / "add tryst" / "set up tryst" | Tryst-connect intent | This flow | | "connect everything" / "set up all my surfaces" | Multi-surface connect — sequential flow asking surface-by-surface | Defer; see [cross-surface-fanout.brief.md](./cross-surface-fanout.brief.md) §7 | | "the cookie one" / "fast way" / "cookie" | Cookie-mode branch | Cookie path above | | "the full one" / "long way" / "credentials" / "password" | Full-creds branch | Full-creds path above | | "show me the form" / "open the screen" | Open [tryst-connect.screen.md](./tryst-connect.screen.md) | Screen opens; conversation pauses | | "what is a session cookie" / "I don't know how" | Explainer (one paragraph) + same prompt | Same step, longer explanation | ## Failure paths in conversation (not screens) **Cookie invalid:** > **Cocotte**: That cookie didn't take — Tryst returned a sign-in page. Could be expired, or maybe a different domain's cookie. Try copying again from a freshly-signed-in tab? **Password wrong:** > **Cocotte**: Tryst said that username + password don't match. Want to try again, or use the cookie path instead? **Captcha solver unavailable (ML + HITL both down):** > **Cocotte**: Tryst showed a captcha and I can't solve it right now — my solver service is down and you're not available to solve it manually. Want to try the cookie path while I'm waiting on the solver? **Account flagged / locked:** > **Cocotte**: Tryst flagged this account: "under review by compliance." That's their side, not mine — open tryst.link to see why, then come back when it's clear. **Captcha needs Quinn (HITL):** > **Cocotte**: Tryst showed a captcha I can't auto-solve. I sent you a push — tap it and you'll see the image. Solve it there and I'll resume. In each failure case, the conversation continues — Quinn isn't bounced into a screen unless she asks. ## When Cocotte upgrades to the screen Cocotte opens [tryst-connect.screen.md](./tryst-connect.screen.md) on: - Quinn explicitly asks: "show me the form / screen / settings." - Quinn switches modes after first connect: "switch to credentials path." - A complex multi-account case: "I have two Tryst accounts" — the screen handles disambiguation more cleanly than chat. In all other cases, the conversation completes without a screen ever rendering. ## Voice mode Identical flow over voice (per [voice-input-settings.screen.md](./voice-input-settings.screen.md)) with two adaptations: - **Secure inputs spoken**: when Quinn needs to dictate a password / cookie / TOTP, Cocotte mutes TTS readback ("password not echoed for your ears only") and accepts dictation; or surfaces an iOS secure-input affordance that Quinn types on while voice continues for everything else. - **Status announcements**: "Connected. Touring Bay Area, TLC tier" replaces the chat receipt. ## Per-surface adaptation This flow is the **template** for every per-surface connect interaction (per [00-system-conversational-ux.md](./00-system-conversational-ux.md)). Other surfaces follow the same shape with variants: - **TS4Rent**: identical to Tryst + Sumsub-handle question on first connect. - **Slixa / Eros**: same shape; per-surface auth specifics. - **OnlyFans**: same shape + device-pairing warning + per-OF 2FA pattern. - **X / Threads / Bluesky**: skips cookie/credentials — Cocotte opens iOS OAuth; conversation says "tap to authorize me on X — back in a sec" then handles return. - **WhatsApp / Telegram / Signal**: QR-pair conversation — Cocotte shows QR, Quinn scans with her device, conversation continues. Every per-surface brief gets a connect.flow.md companion documenting its surface-specific conversation. ## Related - [00-system-conversational-ux.md](./00-system-conversational-ux.md) — principle establishing flows as canonical. - [tryst-connect.screen.md](./tryst-connect.screen.md) — fallback screen (role: fallback editor). - [surface-tryst.brief.md §2](./surface-tryst.brief.md) — dual-mode auth design (this flow is the primary realization). - [_engineering-surface-adapter-container.md](./_engineering-surface-adapter-container.md) — the container that runs both modes' login under the hood. - [_engineering-credentials-vault.md](./_engineering-credentials-vault.md) — encrypted storage for both modes' artifacts. - [voice-input-settings.screen.md](./voice-input-settings.screen.md) — voice-mode adaptation reference. - [cross-surface-fanout.brief.md](./cross-surface-fanout.brief.md) §7 — multi-surface connect ("connect everything") is a sister flow. - [A-chat-surface.brief.md](./A-chat-surface.brief.md) — the surface this flow plays out on. - Future `captcha-solve.screen.md` — HITL captcha surface (modal during the failure path). ## Out of scope - The captcha-solve modal interior (separate screen). - Mode-switching post-connect (handled by [tryst-connect.screen.md](./tryst-connect.screen.md) advanced surface). - Multi-account disambiguation (handled by the screen).