Every LinkedIn action enters one BAMF-owned durable queue. A capability router selects the best available executor, applies one identity lease and common limits, and records one receipt regardless of provider. Liaufa is first for deterministic entitled actions today; Multilogin plus BAMF Browser is the durable owned runtime for persistent auth, UI-only gaps, challenges, recovery, and progressively more execution; the extension is the user-present fallback.
This page is the hosted, human-readable projection of the canonical plan. It may summarize evidence and decisions, but it must not independently redefine the architecture.
bamfaiapp:project-context/plans/2026-09-17-multilogin-hosted-linkedin-browser-plan.md · bamfaiapp commit b8cff5b5b
Zernio is the official connection and publishing lane. Write actions enter BAMF’s queue and route to Liaufa, the hosted BAMF Browser, or the local user-present browser. Watch and takeover are control modes on a browser runtime—not a fourth executor.
| Need | Primary | Fallback | BAMF ownership |
|---|---|---|---|
| Connect account, publish, schedule, analytics, ads | Zernio | Direct adapter where required | Provider connection; BAMF queue records intent and receipt |
| DM, comment, reaction, connection request, giveaway delivery | Liaufa API | Multilogin + BAMF Browser | BAMF queue, limits, approvals, idempotency, attribution |
| Persistent login, challenges, UI-only actions, recovery | Multilogin + BAMF Browser | Human takeover | BAMF runner, identity lease, browser broker, audit trail |
| User-present local action | Chrome extension + local BAMF Browser | None | Local-only session; same BAMF action envelope and receipt |
| Public discovery, scrape, reconcile | Apify | BAMF Browser read | Read-only evidence; never action-state authority |
| Engagement boost attribution | Lempod | Manual reconciliation | Separate boost ledger; not a LinkedIn access executor |
These are the relevant source artifacts found across BAMF.ai and BAMFsite. “Canonical” means architecture authority; everything else supplies contracts, product context, or evidence.
bamfaiapp:project-context/plans/2026-09-17-multilogin-hosted-linkedin-browser-plan.mdbamfaiapp:project-context/plans/2026-09-17-multilogin-hosted-linkedin-browser-plan.htmlbamfsite:project-context/research/2026-09-17-liaufa-api-browser-runtime-delta.mdbamfaiapp:project-context/plans/2026-09-17-runtime-map-computers-browsers-vault.mdbamfaiapp:project-context/contracts/bamf-execution-router-v1/README.mdbamfaiapp:project-context/contracts/bamf-browser-adapter-v1/README.mdbamfaiapp:project-context/contracts/bamf-browser-broker-v1/README.mdbamfaiapp:project-context/contracts/bamf-resource-lease-v1/README.mdbamfsite:project-context/plans/2026-08-31-164000-PDT-bamf-browser-multilogin-adapter.mdbamfsite:project-context/plans/2026-08-04-bamf-e2b-runtime-retirement.mdbamfaiapp:project-context/v2-desktop/desktop-browser-companion-current-scope-2026-09-08.mdbamfaiapp:project-context/plans/2026-09-14-resource-giveaway-dogfood-program/prd.mdbamfaiapp:project-context/evidence/2026-09-14-gau-liaufa-readonly-api-contract.mdbamfsite:project-context/research/2026-08-07-expandi-bamf-connect-salesnav-audit.mdbamfsite:project-context/multilogin-x-agent-stack.mdDOM-selector scrapers and cookie-passing services are brittle because LinkedIn reshapes its front end on its own schedule. An agent that uses the browser the way a person does — vision plus the accessibility tree plus a growing library of skills — is more durable and, unlike a third-party provider, ownable. The agentic browser running on BAMF's own runners is the ownable core of LinkedIn access; provider APIs are accelerators layered on top of it, not the foundation underneath it.
BAMF is the cloud agent for badass marketers and founders — a cloud computer and browser agent with shared logins and authenticator keys that can do anything you can do in a browser: content, publishing, vibe coding, outreach, research. It is not positioned as a LinkedIn automation tool. LinkedIn is the first deep skill pack the agent ships with, not the product.
| Approach | Verdict | What it proved | Evidence |
|---|---|---|---|
| PhantomBuster 2025-09-04 → unverified Referenced only in docs/marketing/legacy migrations now (ECOSYSTEM.md, sitemap.xml, imported prompts); no live call sites found grepping current src/. Superseded by Apify for scrape use cases. | ditched | Early profile/post scraping and historical import before Apify replaced it Constraint: Third-party DOM-selector automation breaks whenever LinkedIn reshapes its front end; Provider-side account risk not owned by BAMF | |
| Cookie/session sync to a server (li_at, linkedin_cookies tables) 2026-01-15 → 2026-09-08 This is the 'old open browser session toggle' the plan asked to verify: the code found is a REMOVED legacy client, actively guarded against regressing, not a live toggle. See rsiLoop-adjacent note in the plan markdown. Recommendation: remove references to the old toggle from any surviving UI copy; nothing to revive. | ditched | Historical: browser_sessions / linkedin_cookie_persistence tables let the server read a user's LinkedIn cookie Constraint: Server-side cookie custody is an unnecessary account-takeover and operational blast-radius surface; Explicitly removed: a regression test now asserts the renderer cookie-storage client is gone | |
| Local-only Chrome extension -> desktop BAMF Browser cookie import (v2.2.0) 2026-09-02 → 2026-09-08 Verified in code: chrome.cookies.getAll({domain:'linkedin.com'}) behind an optional permission and explicit per-click gesture, transported only through the page bridge to Tauri invoke into the WKWebView cookie store — never to a server. Flags default OFF (LINKEDIN_SESSION_SEED_ENABLED, VITE_ENABLE_CHROME_COOKIE_IMPORT). | keep-narrow | Local-only users who want to sign the desktop BAMF Browser into LinkedIn without typing credentials into BAMF's UI Constraint: Concurrent session from a second browser context can trigger a LinkedIn challenge; Only covers local-only users, not cloud scale | |
| LinkedIn email+password credential sharing unverified → unverified No direct grep hit for a stored plaintext-password LinkedIn flow in bamfaiapp/src or supabase; marking unverified rather than asserting one ever existed in code. D5's authenticator-setup-key design is the explicit replacement direction and is itself still open/blocked on a security review. | ditched | No retained production use. Constraint: Password custody is a standing security liability; No durable evidence of a live raw-password flow found in current src/ | |
| Multilogin (profile-per-account browser fingerprinting) 2026-06-15 → 2026-08-21 No bamf-multilogin-x-operator skill/runner/adapter directory found under ~/.agent-shared or ~/.claude/skills in bamfaiapp/bamfsite trees themselves (that skill lives globally, operating an existing Multilogin X install, not shipping the hosted runner). Hosted runner pool described in D11 is design-stage, not yet a running service per current evidence. | building | Persistent authentication, challenges, UI-only actions, recovery; Cloud runner pool: one profile per LinkedIn account, proxy pinned to user city (D11) Constraint: Requires runner-pool infra and a lease/fence model so a profile never runs in two places at once (D11); Customers never install Multilogin themselves — cloud always means BAMF-operated runners, which is infra BAMF must build and pay for | |
| Legacy "open browser session" toggle in creator/author integrations 2026-01-15 → 2026-09-08 No live 'open browser session' toggle exists in the current Integrations UI. Keep the removed renderer cookie/session-material client retired. The new hosted browser broker is not a revival of that client: it exposes opaque session references and an authenticated visual stream while credentials, cookies, CDP/BiDi endpoints, and VNC secrets remain inside the broker/runtime boundary. | ditched | No retained production use. Constraint: Superseded by receipt-only browser_visible_attestation; direct cookie inspection removed | |
| BAMF's own LinkedIn OAuth app 2025-05-20 → unverified | keep-narrow | Identity/sign-in only Constraint: No full developer quotas — never usable at scale for publishing/analytics | |
| Zernio/Late OAuth (publish, schedule, analytics, ads) unverified → 2026-09-17 First-seen date for the Zernio integration itself not isolated via git log in this pass; grep hits span >10 files with mixed introduction dates. Marking unverified rather than guessing; lastTouched taken from D13's 2026-09-17 acceptance. | keep | Default first connection for every user; Publishing, scheduling, analytics; Primary ads lane (D13) including Thought Leader Ads, Meta and X ads Constraint: Ads: campaigns must be created paused or refused; activation needs a second explicit confirmation within budget caps (D13) | |
| BAMF Connect / Liaufa provider API 2026-06-03 → 2026-09-14 | keep | High-volume deterministic DMs, comments, reactions, connection requests, giveaway DM delivery Constraint: Never allowed to become the source of truth for action state (D2); Ambiguous-write reconciliation required wherever Liaufa can time out (D2, D3) | |
| BAMF Connect browser skills (no persistent runtime) unverified → unverified Recommendation per plan: fold into the Cloud Browser runner (layer 3) so BAMF Connect UI-only actions run against a persistent, leased Multilogin session instead of a one-off invocation. | evaluate | Login/profile switching/settings extraction on connect.bamf.com for admin agents, per-invocation Constraint: Skill drives a browser only for the duration of one invocation; no persistent session to reuse across runs; Duplicates work the Cloud Browser runner (D11) is meant to own once built | |
| Apify scrapers unverified → unverified Multiple first-seen candidates across many files with no single introduction commit isolated in this pass; marking unverified rather than picking one file's date. | keep-narrow | Public profile/post scraping for onboarding (LinkedInProfileAnalysisStep, LinkedInPostsAnalysisStep) Constraint: Public-page DOM scraping is still subject to LinkedIn markup changes, just lower-stakes than authenticated automation | |
| computer-use-step edge function 2026-09-11 → 2026-09-11 | building | Server-side step execution primitive for computer-use-driven agent actions Constraint: New (first seen 2026-09-11); not yet evidenced as wired end-to-end into the browser.act.v1 envelope or the Cloud Browser runner | |
| Desktop BAMF Browser local session import + browser.act.v1 envelope 2026-09-08 → 2026-09-08 | keep-narrow | Local, user-present acting (find/click/type/press) inside the desktop BAMF Browser only Constraint: Only issuable to client_kind 'bamf-browser', LinkedIn origin, 10-minute cap — the Chrome companion can never obtain one, by design | |
| Lempod (engagement pods) 2026-06-15 → 2026-09-16 Filename-date vs git-log-date reconciliation was not fully isolated for this entry in this pass; treat the 2026-07-18 filename prefix as the more reliable first-seen signal and the note above as a caveat, not a confirmed git-log result. | keep-narrow | Engagement-pod member intelligence and attribution ingestion, giveaway/boost control ledger Constraint: Provider-owned pod mechanics; BAMF only ingests/reconciles identities and attributions, does not operate the pod engine itself |
Do not report this as implemented. The routing classifier and the saved-skills governance table both exist and are real, tested code, but the full closed loop (browser receipt -> screenshot trail -> skill delta -> two-level promotion -> Activity tab surfacing -> regression fixture) is not evidenced end-to-end in either repo as of 2026-09-17.