Skills

Hive.linkedin Automation

Read before automating LinkedIn with browser_* tools.

Install

npx skills add aden-hive/hive --skill hive.linkedin-automation -g -a claude-code -y
Repository
aden-hive/hive11.1k
Category
Engineering
Updated
9d ago
License
Apache-2.0
Context cost
Mediumabout 3,000 tokens
Runs scripts
No, instructions only

What it does

Read before automating LinkedIn with browser_* tools. LinkedIn combines shadow DOM (#interop-outlet), strict Trusted Types CSP that silently drops innerHTML, Lexical composer, native beforeunload dialogs that hang the bridge, and aggressive spam filters, each has bitten us at least once. Verified flows for profile messaging, connection-request acceptance, feed composition, and search. Requires hive.browser-automation. Verified against logged-in production 2026-04-11.

LinkedIn Automation

LinkedIn is the hardest mainstream site to automate because it combines shadow DOM (#interop-outlet for messaging), strict Trusted Types CSP (silently drops innerHTML), heavy React reconciliation (injected nodes get stripped on re-render), native beforeunload draft dialogs (hang the bridge), and aggressive spam filters. Every one of those has bit us at least once. This skill documents what actually works.

Always activate browser-automation first. This skill assumes you already know about CSS-px coordinates, browser_type/browser_type_focused, and browser_shadow_query. The guidance below is LinkedIn-specific; general browser rules are there.

Rule #0: screenshot + coordinates, not selectors

LinkedIn changes class names aggressively and hides composers inside shadow roots AND iframes. Selectors break constantly. Your default strategy on every LinkedIn page should be:

  1. browser_screenshot(), see the page visually
  2. Pick the target's position from the image
  3. browser_coords(image_x, image_y) → get CSS pixels
  4. browser_click_coordinate(css_x, css_y), reaches shadow DOM, iframes, and React elements indifferently
  5. browser_type(use_insert_text=True, text=...), types into whatever is focused, including Lexical composers

If browser_evaluate(...querySelectorAll...) returns [] even once, do not try a different selector. Stop, screenshot, and click. The "what if I try .artdeco-list__item next" instinct has burned ~50 tool calls in real sessions before the agent pivoted. Don't fall into that loop.

The selectors in the table below are only for when you already know the target is in the light DOM and you want a faster path than screenshot+coord. When in doubt, default to coordinates.

Invitation manager, inline message button path is BROKEN

Read the whole SKILL.md on GitHub

More in Engineering