BAMF.AILinkedIn access
Recommended architecture · consolidated 2026-09-17

Own the queue and browser runtime; use provider APIs as accelerators.

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.

One architecture, one hosted review surface

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

One control plane, three write executors

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.

BAMF LinkedIn execution architectureINTENTBAMF agent / useraction + approval contextCONTROL PLANEBAMF durable action queuelimits · approvals · idempotencyCapability routerentitlement · health · leaseEXECUTORSLiaufa APIdeterministic entitled writesMultilogin + BAMF Browserpersistent hosted executionExtension + local Browseruser-present fallbackObserve · reconcile · durable receiptprovider result + screenshot + attribution + ambiguity stateHosted browser boundaryMachine control: CDP / BiDi / accessibility / native inputHuman view: opaque authenticated stream through broker; no cookies, raw CDP endpoint, or VNC credentials in the paneOne LinkedIn identity lease prevents concurrent writers across provider, hosted, and local lanes
Use now
  • Keep Zernio as the connection, publishing, scheduling, analytics, and ads lane.
  • Use Liaufa first for supported deterministic actions, including giveaway comment-to-DM delivery.
  • Keep BAMF Connect browser skills as an admin escape hatch while hosted-runner parity is built.
  • Use Apify for discovery, reads, and reconciliation; keep Lempod as separate boost attribution.
Build next
  • Provision one leased Multilogin profile per LinkedIn identity on BAMF-operated runners.
  • Expose watch and takeover as control modes on that runtime, not as another execution lane.
  • Route machine control through CDP, BiDi, accessibility, and native input; send the right pane only an opaque authenticated visual stream.
  • Enforce one writer lease, shared limits, idempotency, approval gates, and ambiguous-write reconciliation across every executor.
Graduate later
  • Expand BAMF-owned browser execution only after receipt parity and regression fixtures prove each action.
  • Add WebRTC streaming after noVNC proves the broker and takeover contract.
  • Retire the one-off BAMF Connect browser operator only after hosted-runner parity is verified.

Routing matrix

NeedPrimaryFallbackBAMF ownership
Connect account, publish, schedule, analytics, adsZernioDirect adapter where requiredProvider connection; BAMF queue records intent and receipt
DM, comment, reaction, connection request, giveaway deliveryLiaufa APIMultilogin + BAMF BrowserBAMF queue, limits, approvals, idempotency, attribution
Persistent login, challenges, UI-only actions, recoveryMultilogin + BAMF BrowserHuman takeoverBAMF runner, identity lease, browser broker, audit trail
User-present local actionChrome extension + local BAMF BrowserNoneLocal-only session; same BAMF action envelope and receipt
Public discovery, scrape, reconcileApifyBAMF Browser readRead-only evidence; never action-state authority
Engagement boost attributionLempodManual reconciliationSeparate boost ledger; not a LinkedIn access executor

Architecture artifact library

These are the relevant source artifacts found across BAMF.ai and BAMFsite. “Canonical” means architecture authority; everything else supplies contracts, product context, or evidence.

Canonical architecture authority
bamfaiapp:project-context/plans/2026-09-17-multilogin-hosted-linkedin-browser-plan.md
b8cff5b5b
Visual architecture plan
Canonical · superseded-as-review-surface
Source visual consolidated into this page
bamfaiapp:project-context/plans/2026-09-17-multilogin-hosted-linkedin-browser-plan.html
b8cff5b5b
Live API evidence and capability gaps
bamfsite:project-context/research/2026-09-17-liaufa-api-browser-runtime-delta.md
968b7861
Runtime placement and custody boundaries
bamfaiapp:project-context/plans/2026-09-17-runtime-map-computers-browsers-vault.md
2026-09-17
Execution router v1
Contract · current
Capability routing and executor selection contract
bamfaiapp:project-context/contracts/bamf-execution-router-v1/README.md
2026-09-17
Browser adapter v1
Contract · current
Machine-control adapter contract
bamfaiapp:project-context/contracts/bamf-browser-adapter-v1/README.md
2026-09-17
Browser broker v1
Contract · current
Opaque live-view and takeover broker contract
bamfaiapp:project-context/contracts/bamf-browser-broker-v1/README.md
2026-09-17
Resource lease v1
Contract · current
Single-writer identity and runtime lease contract
bamfaiapp:project-context/contracts/bamf-resource-lease-v1/README.md
2026-09-17
BAMF Browser Multilogin adapter plan
Supporting · supporting
Earlier implementation plan retained as supporting history
bamfsite:project-context/plans/2026-08-31-164000-PDT-bamf-browser-multilogin-adapter.md
2026-08-31
E2B runtime retirement
Supporting · historical
Retired runtime boundary and migration context
bamfsite:project-context/plans/2026-08-04-bamf-e2b-runtime-retirement.md
2026-08-04
Local app and extension boundary
bamfaiapp:project-context/v2-desktop/desktop-browser-companion-current-scope-2026-09-08.md
2026-09-08
Giveaway dogfood PRD
Product · current
First high-value LinkedIn delivery use case
bamfaiapp:project-context/plans/2026-09-14-resource-giveaway-dogfood-program/prd.md
2026-09-14
Verified API evidence for giveaway integration
bamfaiapp:project-context/evidence/2026-09-14-gau-liaufa-readonly-api-contract.md
2026-09-14
Provider and account-surface research
bamfsite:project-context/research/2026-08-07-expandi-bamf-connect-salesnav-audit.md
2026-08-07
Multilogin X agent stack
Supporting · supporting
Existing Multilogin operating context
bamfsite:project-context/multilogin-x-agent-stack.md
current tree

Open decisions for Houston

01Who owns Multilogin profiles by default?
Recommendation: BAMF-owned workspace by default; allow bring-your-own Multilogin only for enterprise migration or contractual isolation.
02Which live-view transport ships first?
Recommendation: Ship noVNC behind the broker first; add WebRTC only after session leases, takeover, and audit receipts are proven.
03How should 2FA/TOTP work in phase one?
Recommendation: Use explicit human takeover for challenges; defer storing authenticator setup keys until the vault and security review are complete.
04What happens to the BAMF Connect browser operator?
Recommendation: Keep it as an admin escape hatch until the hosted runner proves parity, then deprecate the one-off path.
05How is hosted execution entitled?
Recommendation: Meter runner minutes and provider actions separately; gate scheduled cloud execution to paid tiers while keeping local user-present execution available.
06How are proxy regions selected?
Recommendation: Suggest a stable region from profile geography, make it user-editable during setup, and avoid automatic region churn.

History and evidence

DOM-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.

ApproachVerdictWhat it provedEvidence
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.
ditchedEarly 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.
ditchedHistorical: 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-narrowLocal-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.
ditchedNo 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.
buildingPersistent 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.
ditchedNo 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-narrowIdentity/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.
keepDefault 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
keepHigh-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.
evaluateLogin/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-narrowPublic 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
buildingServer-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-narrowLocal, 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-narrowEngagement-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

Account surfaces and learning loop

Free
Baseline navigation skill pack; no Sales Navigator or Recruiter surfaces.
Premium
Adds Premium-only UI surfaces the skill pack must detect and route around.
Sales Navigator
Distinct navigation shell; often paired with 2FA/authenticator requirements (D5, open/blocked on security review).
Recruiter
Distinct navigation shell; same 2FA exposure as Sales Navigator (D5).
Evidenced state

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.

  • Wire computer-use-step / browser.act.v1 run receipts into the learningRouter/savedSkills pipeline.
  • Build the Activity tab surfacing of promoted skill deltas.
  • Turn failed-run fixtures into regression evals automatically.

Research gaps

Provision the Houston-only Ubuntu runner after confirming Multilogin workspace ownership and initial region; the canonical plan now defines the M0-M9 build and acceptance sequence.
Isolate the actual first-seen commits for Zernio and the Apify onboarding scrapers.
Scope the link from computer-use-step/browser.act.v1 receipts into learningRouter and saved-skill governance.