Linkedin Reply Handler
/install linkedin-reply-handler
LinkedIn Reply Handler
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.
When to use
- User pastes a LinkedIn comment URL (contains
?commentUrn=...) and says "reply to this" - An author (e.g., Kevin Payne, Felix Tseitlin) replied to the user's comment and the user wants to continue the thread
- User wants to re-engage a conversation that's gone dormant
Input
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.
Output
- 1-2 reply drafts, 150-300 chars each
- Reaction suggestion for the comment being replied to (always react before replying)
- Thread context summary (who said what, when)
- Approval card → on user "post", fires reaction + reply via Publora
Steps
- Parse the URL.
lib.url_parser.parse_linkedin_urlreturnspost_urn,comment_id,comment_urn. - Determine thread structure. Fetch the post's comment thread (HarvestAPI if available) and locate the comment. Figure out whether it's:
- a top-level comment (parentComment = this comment's URN when replying)
- a reply to a top-level comment (parentComment = the TOP comment's URN, not this reply's URN — LinkedIn flattens)
- Read the full context. Author post text, top-level comment text, any intermediate replies. Include the user's own prior comment if they're in the thread.
- Draft the reply. Follow the engagement templates in
references/reply-templates.md. If the counterpart asked a question, answer it directly. If they pushed back, concede then sharpen. - Humanizer pass. Strip em dashes, AI vocab, enforce varied sentence length.
- Approval card. Include thread preview (who said what in last 3 turns), the draft, reaction suggestion, and the parentComment URN we'll send.
- On approval — adapt to the active backend. Call
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-levelparentCommentURN.manual(no backend configured — the default) → output the approved reply vialib.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.
The flattening gotcha
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.
Templates (references/reply-templates.md)
- R1 Answer-Their-Question — they asked, you answer plainly + one real detail
- R2 Concede-Then-Sharpen — "you're right on X, and the piece I'd push on is Y"
- R3 Extend-Their-Thesis — take their point one layer deeper with a new framing
- R4 Share-Lived-Experience — "we hit this last quarter — here's what broke"
- R5 Ask-Back — redirect with a sharper question when their position needs more context
Hard rules
- 150-300 chars. Replies are tighter than top-level comments.
- React to the comment you're replying to, not to the parent post.
- Capitalize the counterpart's first name.
- Never paste a canned "thanks!" — either respond with content or don't reply.
- If the thread is older than 72 hours, consider a DM instead (use
linkedin-thread-engagement).
Example
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).
Files
SKILL.md— this filereferences/reply-templates.md— 5 reply templates with examplesreferences/threading-rules.md— LinkedIn's 2-level flattening explained with edge cases
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install linkedin-reply-handler - 安装完成后,直接呼叫该 Skill 的名称或使用
/linkedin-reply-handler触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Linkedin Reply Handler 是什么?
Drafts precise LinkedIn comment replies from a given comment URL, handling thread structure to post under the correct top-level comment URN. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 78 次。
如何安装 Linkedin Reply Handler?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install linkedin-reply-handler」即可一键安装,无需额外配置。
Linkedin Reply Handler 是免费的吗?
是的,Linkedin Reply Handler 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Linkedin Reply Handler 支持哪些平台?
Linkedin Reply Handler 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Linkedin Reply Handler?
由 Sergey Bulaev(@sergebulaev)开发并维护,当前版本 v1.0.0。