linkedin-chrome
LinkedIn Chrome
Manage LinkedIn content through Chrome browser automation: review engagement, reply to comments, publish posts, and schedule content.
Prerequisites
- Chrome browser automation available (claude-in-chrome MCP or chrome-devtools-mcp)
- User signed into LinkedIn in the Chrome profile
- If using claude-in-chrome: load tools via ToolSearch before calling them
Quick Check
Before starting, verify LinkedIn is accessible:
- Navigate to
https://www.linkedin.com/feed/ - Take a snapshot. If you see a login wall, tell the user to sign in first. Do not enter credentials.
- If signed in, proceed with the workflow.
Workflows
1. Review Engagement
Check comments and reactions on recent posts.
Navigate to: https://www.linkedin.com/in/{username}/recent-activity/all/
Steps:
- Navigate to the activity page
- Take a snapshot to see post summaries
- Use JavaScript to extract post data if the accessibility tree is limited:
// Extract visible posts with engagement counts
Array.from(document.querySelectorAll('.feed-shared-update-v2')).slice(0, 10).map(post => {
const text = post.querySelector('.feed-shared-text')?.innerText?.slice(0, 100) || '';
const reactions = post.querySelector('.social-details-social-counts__reactions-count')?.innerText || '0';
const comments = post.querySelector('.social-details-social-counts__comments')?.innerText || '0';
return { text, reactions, comments };
});
- For posts with comments, click into each post to read the comment threads
- Summarize: post title snippet, reaction count, comment count, notable commenters
2. Reply to Comments
Post replies to specific commenters on your posts.
Steps:
- Navigate to the specific post (use activity page or direct post URL)
- Scroll to the comment section
- Find the target commenter's comment
- Click "Reply" under their comment (not the top-level comment box)
- Take a snapshot to confirm the reply box is open and focused on the right comment
- Type the reply text
- Click the reply/submit button
- Take a snapshot to confirm the reply posted
Reply box targeting:
LinkedIn nests reply boxes. After clicking "Reply" on a comment, the input area appears indented below that comment. Verify by snapshot that:
- The reply box mentions the commenter's name
- You are not accidentally typing in the top-level comment box
Typing strategy:
LinkedIn's editor is a contenteditable div, not a standard input. Use the fill or type tool, not JavaScript injection. If the editor doesn't accept input:
- Click the reply box to focus it
- Use the type/fill tool with the text
- Take a snapshot to verify text appeared before submitting
3. Publish a New Post
Steps:
- Navigate to
https://www.linkedin.com/feed/ - Click "Start a post" (the text input area at the top of the feed)
- Wait for the post composer modal to appear
- Take a snapshot to confirm the editor is open
- Click into the text area of the composer
- Type the post content
- Take a snapshot to verify the full text is in the editor
- Click "Post" to publish immediately
After posting:
- Wait 2-3 seconds for LinkedIn to process
- Find the new post (it may show a "View post" link or appear at the top of the feed)
- If a first comment is needed (for links -- see Link Placement below), click "Comment" on the post and add it immediately
4. Schedule a Post
CRITICAL: Use claude-in-chrome (computer tool), NOT chrome-devtools-mcp for scheduling. LinkedIn's scheduler uses custom React inputs that reject CDP-level DOM manipulation. The chrome-devtools-mcp fill/type tools cannot set the date or time. The claude-in-chrome computer tool provides real mouse/keyboard interaction that works.
Steps (using claude-in-chrome computer tool):
- Get tab context with
tabs_context_mcp, create a new tab withtabs_create_mcp - Navigate to
https://www.linkedin.com/feed/ - Click "Start a post" using computer tool
left_click - Click into the text area and use
typeto enter post content - Click the clock/schedule icon (bottom-left of composer, next to Post button)
- The schedule dialog opens with Date and Time fields
- Set the date: Triple-click the date field to select all, then
typethe new date (e.g., "3/27/2026"). A calendar picker appears. Click the target date on the calendar. - Set the time: The time field defaults to the next available slot. If it needs changing, triple-click and type (e.g., "8:00 AM"), then Tab out.
- Verify the header shows the correct "Fri, Mar 27, 8:00 AM" confirmation
- Click "Next" to proceed to the confirmation screen
- The Post button changes to "Schedule". Click "Schedule" to confirm.
- Verify "Post scheduled" toast appears at the bottom.
Important: Scheduled posts cannot have a first comment added at schedule time. Create a calendar reminder for the user to add the first comment when the post goes live.
5. Draft Content (No Browser Needed)
Draft post content based on existing blog posts, engagement patterns, or user direction. This step does not require browser automation.
Process:
- Read the LinkedIn campaign memory file if it exists
- Check existing blog content for untapped post material
- Draft the post following the Content Guidelines below
- Get user approval before publishing or scheduling
Content Guidelines
Voice
Match the user's established LinkedIn voice:
- Direct, conversational, like telling a story over beers
- Specific details: names, years, technologies, outcomes
- No marketing language, no keynote-style closers
- Short paragraphs. One idea per paragraph. Let the reader breathe.
AI Tell Avoidance
These patterns signal AI-generated content. Avoid them:
| Pattern | Fix |
|---|---|
| Triple repetition ("real X, real Y, real Z") | Say it once, plainly |
| Balanced closing sentences | End abruptly or casually |
| Parallel structure punchlines | Make it conversational |
| Lists of exactly four items | Use three, or five, or just prose |
| "Here's what I'd tell you" framing | Just say it |
| Keynote-style one-liner endings | End mid-thought or with a short sentence |
| Em dashes | Use periods or commas |
Link Placement
Never put external links in the post body. LinkedIn's algorithm suppresses posts with outbound links.
Always place links in the first comment posted immediately after the post goes live. Format:
The full breakdown: {url}
Post Structure
What works (based on engagement data):
- Open with a scene: Year, place, specific situation
- Build with concrete details: Technology names, numbers, outcomes
- Land on a lesson: One sentence. Not a motivational quote.
What doesn't work:
- Abstract positioning without a story
- General advice not grounded in experience
- Long analytical posts without a narrative arc
Posting Cadence
- Space posts 1-2 days apart so they don't cannibalize each other's reach
- Best days: Tuesday, Wednesday, Thursday
- Best times: 8-9 AM or 12-1 PM local time
- Reply to comments on existing posts between new posts to maintain engagement
DOM Reference
LinkedIn's DOM changes frequently. These selectors are starting points. Always verify with a snapshot before interacting.
Activity Page
URL: https://www.linkedin.com/in/{username}/recent-activity/all/
Posts: .feed-shared-update-v2
Post text: .feed-shared-text
Reactions count: .social-details-social-counts__reactions-count
Comments count: .social-details-social-counts__comments
Post Composer
Trigger: Click "Start a post" on feed page
Text area: contenteditable div inside the modal (.ql-editor or [role="textbox"])
Post button: button with text "Post" (becomes blue/active when text is entered)
Schedule icon: Clock icon button next to Post button
Comment Box
Top-level: .comments-comment-box__form [role="textbox"]
Reply box: Appears after clicking "Reply" on a comment, nested under that comment
Submit: Button with text "Comment" or "Reply" inside the comment form
Troubleshooting
Login wall
LinkedIn requires authentication. Do not attempt to log in. Tell the user to sign in manually in the Chrome profile, then retry.
Editor not accepting text
LinkedIn uses a rich text editor (contenteditable). If typing doesn't work:
- Click the editor to ensure focus
- Try using the keyboard type tool instead of fill
- As a last resort, use JavaScript:
document.querySelector('[role="textbox"]').innerText = 'your text'followed by dispatching aninputevent
Post not appearing after publish
After clicking "Post", LinkedIn may show a brief confirmation. The post sometimes doesn't appear at the top of the feed immediately. Navigate to the activity page to verify.
Stale snapshots
LinkedIn dynamically loads content. If elements from a snapshot are gone, take a fresh snapshot. Comment sections especially change as threads expand/collapse.
More from baphomet480/claude-skills
kitchen-sink-design-system
Kitchen Sink design system workflow for Next.js and React projects, with secondary support for Astro, SvelteKit, Nuxt, and static HTML. Use when asked for a Kitchen Sink page, Design System, UI Audit, Style Guide, or Component Inventory, or when a project needs a component inventory plus component creation and a sink page implementation. Covers CVA variant architecture, Tailwind v3/v4 token systems, shadcn/ui integration, and TinaCMS content modeling.
40deep-research
Conduct comprehensive, multi-round research that produces rich visual reports. Use when asked for "deep research", "comprehensive analysis", "compare frameworks", "evaluate options", "research the state of X", or any task requiring investigation across 10+ sources. NOT for quick lookups — this is a 5-15 minute deep dive that produces a briefing-quality artifact with screenshots, diagrams, tables, and cited findings.
37design-lookup
Search and retrieve CSS components, SVG icons, design patterns, and visual inspiration from the web. Use when the user asks to find, look up, or search for CSS snippets, SVG icons, UI components, loading spinners, animations, design inspiration, or any visual/frontend design resource. Triggers on requests like "find me a CSS button", "look up an SVG spinner", "search for a card component", "find a wave divider SVG", or "get design inspiration for a dashboard".
34nextjs-tinacms
Build Next.js 16 + React 19 + TinaCMS sites with visual editing, blocks-based page builder, and complete SEO. Use this skill whenever the user mentions TinaCMS, Tina CMS, Next.js with a CMS, visual editing with Next.js, click-to-edit, content-managed Next.js site, blocks pattern page builder, or migrating to Next.js + TinaCMS. Also trigger for TinaCMS schema design, self-hosted TinaCMS, TinaCMS media configuration, or any TinaCMS troubleshooting. Covers Day 0-2 setup from scaffolding through production deployment on Vercel.
32cloudflare-pages
Deploy static sites to Cloudflare Pages with custom domains and CI/CD. Use when the user wants to deploy a site to Cloudflare Pages, add a custom domain to a Pages project, set up GitHub Actions CI/CD for Cloudflare Pages, roll back a deployment, or verify deployment status. Triggers on "deploy to Cloudflare", "Cloudflare Pages", "add custom domain", "pages deploy", or any Cloudflare Pages hosting workflow.
31local-ocr
Local OCR pipeline for AI agents featuring auto-rotation, deskew, and searchable PDF generation via ocrmypdf and Tesseract.
23