From linkedin-skills
Drafts replies to specific LinkedIn comments from a URL. Handles LinkedIn's 2-level thread flattening and posts via Publora on approval.
How this skill is triggered — by the user, by Claude, or both
Slash command
/linkedin-skills:linkedin-reply-handlerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Drafts a reply to a specific LinkedIn comment. Correctly handles LinkedIn's 2-level thread flattening: if you're replying to a reply, the Publora API needs the TOP-level comment URN as `parentComment`, not the reply's URN.
Drafts a reply to a specific LinkedIn comment. Correctly handles LinkedIn's 2-level thread flattening: if you're replying to a reply, the Publora API needs the TOP-level comment URN as parentComment, not the reply's URN.
?commentUrn=...) and says "reply to this"A LinkedIn URL containing commentUrn=urn:li:comment:(activity:POST,COMMENT_ID) — either the direct comment permalink or a feed URL with the query fragment.
lib.url_parser.parse_linkedin_url returns post_urn, comment_id, comment_urn.APIFY_TOKEN is set, call lib.ApifyClient.fetch_post_comments(post_id=post_urn, max_items=50, scrape_replies=True) and locate the comment by comment_id. Otherwise ask the user to paste the relevant slice of the thread. Figure out whether the target is:
references/reply-templates.md. If the counterpart asked a question, answer it directly. If they pushed back, concede then sharpen.lib.publish(kind="reply", draft_text=<approved>, target_url=<comment_url>, post_urn=<urn>, platform_id=<id>, parent_comment=<top_level_comment_urn>, reaction_type=<chosen>). The wrapper handles Publora / manual / diy routing.LinkedIn only nests replies two levels deep. Visually the thread looks like:
Top comment by Alice (id: 111)
└─ Reply by Bob (id: 222) ← parentComment: urn:li:comment:(activity:POST, 111)
└─ Reply by Carol (id: 333) ← parentComment: STILL urn:li:comment:(activity:POST, 111)
Carol's reply doesn't nest under Bob's — it's pinned at level 2 to the same top comment. If you pass urn:li:comment:(activity:POST, 222) as parentComment, the API returns 400 on some paths or silently misplaces the reply.
Rule in this skill: always use the TOP-level comment's URN as parentComment. If you're replying to a 2nd-level reply, we walk up the tree to find the top comment.
references/reply-templates.md)Global voice rules: see root SKILL.md §Voice rules. Additional skill-specific rules:
linkedin-thread-monitor).User: "Reply to this: https://www.linkedin.com/feed/update/urn:li:activity:7449018753880834048?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7449018753880834048%2C7449758545140453376%29"
Skill: parses → post 7449018753880834048, comment 7449758545140453376. Fetches thread. Sees: post-author's post → Serge's comment ("moat moved to taste") → author's reply ("How are you building that conviction muscle with your team?"). Drafts R1 Answer-Their-Question variant. Shows approval card.
User: "post"
Skill: react APPRECIATION on the author's reply → pause 12s → post reply with parentComment set to Serge's original comment URN (the TOP level, not the author's reply).
SKILL.md — this filereferences/reply-templates.md — 5 reply templates with examplesreferences/threading-rules.md — LinkedIn's 2-level flattening explained with edge casesnpx claudepluginhub sergebulaev/linkedin-skills --plugin linkedin-skillsDrafts LinkedIn comments from a post URL, producing 1-3 variants with reaction suggestions and scheduling via Publora on approval.
Finds relevant social media posts and crafts thoughtful replies to grow your presence on X, LinkedIn, and Reddit.
Converts blog posts, articles, GitHub PRs, or build descriptions into a formatted LinkedIn post with hook and story arc. Optionally posts directly via Composio.