# Platform-specific gotchas and conventions Known DOM quirks and account-flow conventions for specific platforms, gathered from real runs. Check here before assuming a generic extension mode/B approach will work against Instagram, SoundCloud, YouTube Studio, or the others listed below. ## Identity backbone — assume ProtonMail for every account flow **Standing directive from the user (captured 2026-05-10):** > Future automation workflows will use ProtonMail accounts for these activities (account creation, verification emails, password recovery, magic-link logins, 2FA recovery codes). While the user has ProtonMail open in an authorized Chrome tab, the agent should set itself up with MCP or API access for ProtonMail so future runs can read verification emails programmatically instead of falling back to "ask the user to paste the code." **What this means in practice:** 1. **Default to ProtonMail when an automation flow needs a fresh email** — staging accounts, new SaaS signups. Don't propose Gmail; don't ask which provider. 2. **Inventory the ProtonMail tab on every session start.** If `mail.proton.me` is open, persist its target ID so verification reads are a same-session round-trip. 3. **Probe before assuming you can read inbox.** ProtonMail decrypts client-side; the DOM under `[data-testid="message-row"]` *should* be readable once a thread is open, but new clients sometimes virtualize the list. Run a read-only probe first. 4. **Look for a Bridge or API path before scraping the DOM.** ProtonMail Bridge exposes IMAP/SMTP locally on `127.0.0.1` once configured; prefer that over DOM scraping. No official public REST API for inbox reads at the time of writing — DOM-via-Path-A-snapshot is the realistic fallback. Re-check upstream before assuming this is still true. 5. **Never store the user's ProtonMail password or recovery phrase in AutoMem, files, or screenshots.** If a screenshot includes a verification code, it stays under `~/.dev-browser/tmp/` or `~/.browser-hand/screenshots/` and is not committed. 6. **Treat verification codes as ephemeral.** Read → use → don't persist. If MCP/API access for ProtonMail gets configured later, link to it in this section and prefer that path. --- ## Platform-specific DOM gotchas (grow this list as you hit them) These apply primarily to **headless/remote-debug mode** (script-driven SPA flows, `references/remote-debug-fallback.md`). extension mode's `snapshot`/`click`/`type` operate on the same DOMs, so the same selectors/quirks apply when targeting via `--selector` or `--text` — just without the QuickJS sandbox limits. | Platform | Gotcha | Workaround | |---|---|---| | Instagram web | Website field is mobile-only. Web edit page shows: "Editing your links is only available on mobile." | Set link slot via IG mobile app. Bios pack should fall back to Linktree URL until the user does this. | | Instagram web (2026-05-23) | Second manifestation of the same mobile-only constraint: `/accounts/edit/` returns a generic `Something went wrong / There's an issue and the page could not be loaded` error page (title `Page couldn't load • Instagram`) — survives in-app nav, "Reload page" button, AND `page.reload()`. No `aria-label`s, no inputs in the DOM. Observed on the `stacy.offline` session. Profile-grid renders normally; only the edit route 500s. | Treat as functionally equivalent to the mobile-only block. Do NOT attempt mobile-UA spoofing as a workaround on a launch-critical account — anti-bot risk far exceeds the value of one bio link. Stop and report; have the user set the link via the IG mobile app. | | Instagram web | Submit button is `
`, not `