From linkedin-skills
Drafts replies to LinkedIn comments from URLs, handles 2-level thread flattening to resolve parentComment URN, suggests reactions, and posts via Publora after approval. Use for thread continuations and re-engagements.
npx claudepluginhub sergebulaev/linkedin-skills --plugin linkedin-skillsThis skill uses the workspace's default tool permissions.
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 1-3 LinkedIn comments from post URLs using proven engagement patterns like first-commenter and data-first. Fetches context via Apify, suggests reactions, posts via Publora after approval.
Drafts authentic Reddit replies in 3 rotating formats calibrated to subreddit tone. Analyzes OP confusion, top replies, and context to create human-like, non-promotional responses for community threads.
Generates formatted LinkedIn posts from blog URLs, pasted articles, GitHub PRs, or project descriptions with hook and story arc. Optionally posts via Composio. Useful for professional announcements.
Share bugs, ideas, or general feedback.
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.active_backend():
publora (PUBLORA_API_KEY set) → react on the specific comment being replied to, pause 8-15s, then post reply with the correct top-level parentComment URN.manual (no backend configured — the default) → output the approved reply via lib.manual_mode_message(draft_text, target_url, kind="reply"). Include the parent comment URL so the user knows exactly where to paste. Do NOT attempt to post.diy (LINKEDIN_SKILLS_CUSTOM_POSTER set) → invoke the custom poster with draft, target URL, and parent-comment URN.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)linkedin-engagement-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: Kevin Payne's post → Serge's comment ("moat moved to taste") → Kevin'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 Kevin's reply → pause 12s → post reply with parentComment set to Serge's original comment URN (the TOP level, not Kevin'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 cases