LinkedIn human-mode

Drive your real Chrome via the claude-in-chrome MCP. Lower-risk than Playwright scraping because it uses your existing browser session, but halt on account warnings, captchas, or login walls. Slower than Playwright scraping (~15-30s/JD) and designed for careful recovery. See CLAUDE.md §8.122.

Today's harvests
0cards today
0unique companies
0all-time
Before you start a session
  • ✅ Open your daily Chrome (the one LinkedIn already trusts)
  • ✅ Make sure the claude-in-chrome extension is installed and connected (sidebar shows the Claude icon active)
  • ✅ Log into linkedin.com normally — complete any "verify your identity" prompts LinkedIn shows
  • ✅ Keep at least one tab open — the agent will navigate that tab through search URLs and JD pages
Pick the search matrix

The agent will iterate 0 search cells (keyword × location × time-frame). With ~15-30s per JD and ~8 cards/cell, expect ~0 minutes for the full matrix.

Keywords
Edit your role-keyword set in /settings; this picker reads from there.
Locations
Time frames
Work modes
Max cards per cell
2 — Paste this command into Claude Code chat

The agent will use the claude-in-chrome MCP to drive your Chrome: navigate each search URL, scroll, click cards, extract JD bodies, and POST to /api/linkedin-human/enqueue. The existing pipeline (enrich + score + jd_preprocess) picks them up unchanged.

Run a LinkedIn human-mode scrape session via my claude-in-chrome Chrome.

Search matrix:
  keywords: 
  locations: india, worldwide
  time_frames: 24h, week
  work_modes: remote, hybrid, onsite
  max_cards_per_cell: 8
  total cells: 0

Steps for each cell:
  1. POST to /api/linkedin-human/preview-matrix with the above filters to get the URL list.
  2. For each URL in the matrix:
     a. Use mcp__Claude_in_Chrome__navigate to that URL on my LinkedIn tab.
     b. Wait ~3s, then run mcp__Claude_in_Chrome__javascript_tool with the JS_EXTRACT_SEARCH_CARDS snippet from src/apply/linkedin_human_mode.py to get card metadata.
     c. For up to 8 cards in the result:
        - Navigate to the card's apply_url.
        - Click "See more" on the JD body if present (JS_CLICK_SHOW_MORE).
        - Run JS_EXTRACT_JD_BODY to get the full JD text (must be >=200 chars).
        - Build a card dict via build_scraped_card (see linkedin_human_mode.py for the shape) and accumulate into a list.
     d. Pause 4-8 random seconds between JD page loads to look human.
  3. After every ~10 cards or after each cell finishes, POST the accumulated cards to /api/linkedin-human/enqueue (body: {"cards": [...]}).
  4. The existing pipeline (enrich + score + jd_preprocess) picks them up automatically.

Stop conditions:
  - Any LinkedIn login redirect, captcha, or "unusual activity" page → STOP IMMEDIATELY, surface the error, do not continue.
  - 30 cards harvested total → safe natural stop.
  - I say "stop" or "pause" in chat.

Be conversational about progress. Don't rush — pacing matters.
Recent harvests (live, polls every 5s)

Each row = one card the agent enqueued via human-mode. They flow into the same pipeline_scraped queue as the Playwright scraper — enrich + score + jd_preprocess pick them up automatically.