开源项目 GitHub Trending Weekly 2026-09-22T12:01 正文 ok 3237 words

开源 LinkedIn Agent 技能集发布:面向 Claude Code 与 Codex,打造端到端专业社媒运营工作流

英文标题:🔥 sergebulaev/linkedin-skills

开源项目 sergebulaev/linkedin-skills 正式推出了面向 Claude Code 和 Codex 的 12 项 LinkedIn 营销专属技能套件,基于 MIT 协议完全开源。该工具包涵盖高赞文案拟定、去除 AI 语感(Humanizer)、评论线索批量处理、内容周计划以及创始人专属表达框架等功能,且全面遵循“草稿先预览、未经人工确认绝不发布”的安全机制。套件原生支持 Claude Desktop、Claude Code CLI、OpenClaw 及 Hermes Agent 等多种 Agent 运行环境,开发者与创作者无需编写复杂代码即可在终端或对话界面中调用。这一项目体现了垂直场景 Agent Skills 模块化与标准化的前沿趋势,为专业人士打造个人与品牌影响力提供了高效且防封号的自动化生产力方案。
打开原文相关 3 · 机会 2
media793.6 KB media1.3 KB media1.8 KB media1.3 KB media1.3 KB media1.2 KB media2.7 KB media1.2 KB media793.6 KB

中文

面向 LinkedIn 营销的 12 项 Claude Code 与 Codex 技能 — 开源,MIT 许可

面向 Claude Code 与 Codex 的 LinkedIn 营销技能集

最新版本 兼容 Claude Code 兼容 Codex Claude Skills MIT 许可证 GitHub stars 欢迎 PR

适用于 LinkedIn 的 Claude 技能包。 包含 12 项 Claude Code 与 Codex 技能,能以你的真实语气撰写 LinkedIn 帖子、评论与回复。它们负责起草内容、去除明显的 AI 腔调,并在任何内容发布前等待你的批准。全程无需编程。

也在使用其他平台? 同一团队还推出了配套的营销技能包,覆盖 X (Twitter) · Instagram · YouTube · TikTok · Threads · Facebook。采用相同的语气引擎与“审核后发布”流程。

选择你使用 Claude Code 或 Codex 的任意方式进行安装:

bash codex plugin marketplace add sergebulaev/linkedin-skills codex plugin add linkedin-skills@linkedin-skills

若想在发布更改前测试本地克隆版本:

bash git clone https://github.com/sergebulaev/linkedin-skills.git cd linkedin-skills codex plugin marketplace add . codex plugin add linkedin-skills@linkedin-skills

  1. 打开 claude.ai 并点击侧边栏中的 Customize(自定义)
  2. 打开 Plugins(插件)标签页
  3. 点击 Add(添加)
  4. 选择 Add marketplace(添加市场)→ Add from a repository(从仓库添加)
  5. 在此处粘贴 sergebulaev/linkedin-skills 并进行同步
  6. 在 Discover(发现)下方找到该插件,然后点击 Add(添加)
  7. 完成。当你在对话中询问关于 LinkedIn 的内容时,技能会自动激活。

注意:Skills/Plugins 需要启用代码执行(code execution)的 Claude 付费方案(Pro、Max、Team 或 Enterprise)。

Claude Desktop (Mac / Windows)

  1. 打开 Claude Desktop
  2. 点击左侧边栏的 Customize,然后打开 Plugins 标签页
  3. 点击右上角的 Add 下拉菜单,选择 Add marketplace
  4. 选择 Add from a repository,粘贴 sergebulaev/linkedin-skills 并同步
  5. 切换到 Discover 标签页,在列表中找到该插件
  6. 点击插件卡片上的 + 号进行安装
  7. 切回 Yours 确认其已列出并启用
  8. 完成。开启一段新对话,即可让 Claude 帮你撰写 LinkedIn 帖子。

步骤 5 和 7 中的标签页切换是常常让人困惑的地方:同步市场只是将插件加入目录(Discover),而不是直接放入你的已安装列表(Yours)。步骤 6 中的 + 位于插件卡片本身内部,而不是章节标题旁边。

  1. 打开你的 OpenClaw 工作目录

  2. 将技能仓库克隆至该目录:

    bash git clone https://github.com/sergebulaev/linkedin-skills.git

  3. 在 OpenClaw 设置中,将以下内容添加至你的 system prompt:

    text You have LinkedIn marketing skills in ./linkedin-skills/. For any LinkedIn task, read the relevant skills/*/SKILL.md first. Use lib/url_parser.py for URL parsing, lib/apify_client.py for reading posts / comments / engagers, lib/publora_client.py for publishing actions.

  4. 完成。现在你可以要求 OpenClaw 撰写 LinkedIn 帖子或评论。

Claude Code (CLI / VS Code / JetBrains)

bash /plugin marketplace add sergebulaev/linkedin-skills /plugin install linkedin-skills@linkedin-skills

或者直接克隆本仓库并将其作为工作目录打开 —— 无需安装插件即可自动激活技能,这也是在 /plugin 命令不可用时的推荐路径:

bash git clone https://github.com/sergebulaev/linkedin-skills.git cd linkedin-skills

该仓库内置了 .claude/skills/ 的软链接镜像,因此 Claude Code 能够自动识别全部 12 项技能。

Hermes Agent(Nous Research 出品)遵循 agentskills.io 开放标准,可以直接加载 skills/*/SKILL.md。将套件克隆至你的 Hermes 技能文件夹中:

bash git clone https://github.com/sergebulaev/linkedin-skills.git ~/.hermes/skills/linkedin-skills

如果你是从 OpenClaw 迁移过来的,运行 hermes claw migrate 即可自动导入这些技能。随后在任意 Hermes 对话界面中通过 /<skill-name> 即可调用。

一条通用于 Claude Code、Codex、Cursor 以及任何支持读取 SKILL.md 文件的 Agent 的命令:

bash npx skills add sergebulaev/linkedin-skills

觉得有用?给仓库点个 Star 吧。 精选的 Claude Code 和 Codex 目录根据 Star 数量进行排序和准入筛选,因此你的 Star 是让下一位开发者发现这些技能的关键。这是我们唯一的请求,无需注册,无需留邮箱。

安装完成后,只需在 Claude Code 或 Codex 中咨询与 LinkedIn 相关的需求,对应的技能就会自动激活。

撰写帖子:

"Write me a LinkedIn post about why AI agencies are replacing traditional ones. Make it viral." (帮我写一篇关于 AI Agency 为何正在取代传统 Agency 的 LinkedIn 帖子,让它具备病毒式传播潜力。)

评论他人的帖子:

"Comment on this post: https://linkedin.com/posts/... — I want to add a thoughtful take." (对这条帖子进行评论:https://linkedin.com/posts/... —— 我想给出一个有深度的观点。)

发布前审查草稿:

"Audit this post draft for AI tells and algorithm issues: [paste your text]" (审查该帖子草稿是否存在 AI 味以及违背算法规则的问题:[粘贴文本])

逆向拆解爆款帖子:

"What hook formula does this post use? https://linkedin.com/posts/..." (这条帖子使用了哪种 Hook 公式?https://linkedin.com/posts/...)

规划每周内容:

"Create a 7-day LinkedIn content plan. I'm a B2B SaaS founder targeting VPs of Marketing." (制定一份 7 天 LinkedIn 内容计划。我是一名面向营销副总裁的 B2B SaaS 创始人。)

重写个人主页:

"Optimize my LinkedIn profile for inbound leads: https://linkedin.com/in/yourname" (为获取 Inbound Leads 优化我的 LinkedIn 主页:https://linkedin.com/in/yourname)

消除任意文本的 AI 痕迹:

"Humanize this text: [paste AI-generated draft]" (拟人化修改这段文本:[粘贴 AI 生成的草稿])

每一项技能都会优先呈现草稿并等待你的确认,未经你的许可绝不会向外发布任何内容。

技能名称 功能说明
Post Writer(帖子生成) 利用 20 种经过验证的 2026 年 Hook 公式(首语重复、R.I.P. 讣告体、同比反转、好奇心缺口、情绪冷启动、受控 A/B 结构、伪二元结构等另外 13 种)及创始人专属视角库,根据互动目标撰写具备高传播潜力的帖子
Comment Drafter(评论草拟) 仅凭 LinkedIn 帖子 URL 即可起草针对性评论
Reply Handler(回复处理) 起草针对任何评论的回复,能正确处理 LinkedIn 的二级扁平化回帖层级。或者直接输入帖子 URL,它即可扫描整个线索 —— 包括所有顶级评论与回复 —— 过滤掉低价值内容,并一次性批量起草回复
Post Audit(帖子审查) 在发布前对照 2026 年算法机制与 AI 检测模式对草稿进行严格检查
Humanizer(去 AI 痕迹 / 拟人化) 剔除人类读者和 LinkedIn 垃圾内容(slop)过滤器所反感的典型 AI 痕迹:依据段落密度评分的 2026 年典型 AI 词汇、过渡承接桥段、断奏式碎片堆叠、三段论堆砌、表演性真诚;限制而非彻底禁用破折号。该功能不承诺欺骗所有检测器(没有任何编辑能够可靠做到)。内置三套子工具:AI Emoji 密度打分器、多检测器离散度测试器(针对 GPTZero、Originality.ai、ZeroGPT、Sapling、Copyleaks 等工具的判定分歧进行记录),以及用于辩护文风选择的规则说明参考。
Hook Extractor(Hook 提取器) 逆向拆解任意爆款帖子的 Hook 公式,生成可直接填入自选主题的空白模板
Content Planner(内容规划) 制定包含每日发帖主题、内容格式、Hook 设计、发帖时间以及评论互动目标的 7 天内容规划
Engagement Monitor(互动监控) 提供两套读取端工作流:(1) 追踪你的评论线索中作者的回复,并在 6-24 小时黄金窗口内起草跟进回复;(2) 抓取任意帖子上的点赞者与评论者,并按 ICP 契合度(同行 / 理想目标 / 潜在客户)进行归类。
Profile Optimizer(主页优化) 针对 2026 年转化规律重写个人头衔(Headline)、关于(About)、精选(Featured)及工作经历(Experience)等版块
Employee Advocacy(员工代言) 策划团队 LinkedIn 运营方案:包含 14 天启动路线、发帖节奏、品牌准则与 ROI 追踪机制
Repurposer(内容再利用) 将其他平台内容(推文、Thread、YouTube 视频、博客、Newsletter)转化为 LinkedIn 原生帖子:为首屏折叠重新设计 Hook、扩充至 900-1300 字符的最佳区间、将外链移至首条评论,并自动运行拟人化过滤
Interviewer(访谈萃取器) 通过访谈你本人,将回答存入“故事库”(Story Bank):记录过往角色、带有真实数据的凭证、转折点、伤疤经验及你会坚持捍卫的立场。其他所有技能都会读取该库,从而避免在后续生成草稿时中途要求你补充具体数字。此外还能进行针对性单点访谈,将单一主题提炼为发帖主线。这是在你从未发过帖时唯一适用的冷启动技能,因为它依赖于你的职业生涯阅历,而非过往历史发帖存档

如果你是初创团队创始人,该套件还提供专属的“创始人层级”(founder layer)。创始人面对的真实瓶颈通常并非总曝光量,而是少数高价值的关键读者:下一位投资人、核心候选人,或是能成为标杆案例的首期共创客户(Design Partner)。创始人层针对这部分窄众群体的信任建立进行了深度优化,而非单纯追逐曝光数据。

  • 10 大创始人视角模板(位于 references/founder-topics.md),以填空模板形式提供:重构品类定价、内容转化 Pipeline、单一读者法则、有限试错数学模型、不体面的押注、委派代理的极限、设计巧合、规避式语句检验、授权边界线、认知门槛。每个视角均与特定的互动目标及 Hook 公式挂钩。
  • 4 种结构化 Hook 公式 (F17-F20),用于重塑帖子的论证逻辑:受控 A/B 故事、伪二元对立化解、故事与论据桥接、分歧曲线收尾。
  • 创始人版专属内容规划(信念 Conviction / 公开构建 Building in public / 数据推导 The math / 证明 Proof),已集成在 Content Planner 中。

只需告知 Post Writer 你是创始人,或者要求 Content Planner 输出一份“founder plan”,各项技能就会优先启用上述体系。

社区技能

由外部开发者基于本套件规范构建的独立技能(遵循相同的语气规则、相同的确认卡片交互流、以及相同的 Not for X (use Y) 语义消歧)。它们托管在各自作者的仓库中,因此本核心库始终保持 11 项技能及一条读写管道。你可以通过相同方式将它们与本套件一同安装:

  • 由 @smfardeen7 开发的 linkedin-outreach —— 用于起草 300 字符的好友添加邀请留言(提供 10 种场景模板)以及通过后的跟进序列(包含天数间隔与终止规则)。仅提供草稿生成:LinkedIn 未开放邀请或私信 API,需手动复制发送。

如果你也构建了相关技能,欢迎提交 PR 在此处增加单行推荐。

可选:使用 Apify 读取 LinkedIn 数据

其中有四项技能(Comment Drafter、Reply Handler、Hook Extractor、Engagement Monitor)支持读取帖子正文、评论线索以及个人主页互动数据……

English / 原文

12 Claude Code and Codex skills for LinkedIn marketing — open source, MIT licensed

LinkedIn Marketing Skills for Claude Code and Codex

Latest release Claude Code Compatible Codex Compatible Claude Skills MIT License GitHub stars PRs Welcome

Claude skills for LinkedIn. 12 Claude Code and Codex skills that write LinkedIn posts, comments, and replies in your voice. They draft content, strip AI tells, and wait for your approval before anything gets published. No coding required.

On another platform too? The same team ships matching marketing skill bundles for X (Twitter) · Instagram · YouTube · TikTok · Threads · Facebook. Same voice engine, same approve-before-publish flow.

Pick whichever way you use Claude Code or Codex:

codex plugin marketplace add sergebulaev/linkedin-skills
codex plugin add linkedin-skills@linkedin-skills

To test a local clone before publishing changes:

git clone https://github.com/sergebulaev/linkedin-skills.git
cd linkedin-skills
codex plugin marketplace add .
codex plugin add linkedin-skills@linkedin-skills
  1. Open claude.ai and click Customize in the sidebar
  2. Open the Plugins tab
  3. Click Add
  4. Choose Add marketplace → Add from a repository
  5. Paste sergebulaev/linkedin-skills there and sync
  6. Find the plugin under Discover , then click Add
  7. Done. The skills activate automatically when you ask about LinkedIn.

Note: Skills/Plugins require a paid Claude plan (Pro, Max, Team, or Enterprise) with code execution enabled.

Claude Desktop (Mac / Windows)

  1. Open Claude Desktop
  2. Click Customize in the left sidebar, then open the Plugins tab
  3. Click the Add dropdown at the top right and choose Add marketplace
  4. Select Add from a repository , paste sergebulaev/linkedin-skills, and sync
  5. Switch to the Discover tab and find the plugin in the list
  6. Click the + on the plugin card to install it
  7. Switch back to Yours to confirm it is listed and enabled
  8. Done. Start a new conversation and ask Claude to write a LinkedIn post.

The tab switch in steps 5 and 7 is the part that trips people: syncing a marketplace puts the plugin in the catalog (Discover), not in your installed list (Yours). The + in step 6 sits on the plugin card itself, not beside a section heading.

  1. Open your OpenClaw working directory

  2. Clone the skills into it:

    git clone https://github.com/sergebulaev/linkedin-skills.git
    
  3. In OpenClaw settings, add this to your system prompt:

    You have LinkedIn marketing skills in ./linkedin-skills/.
    For any LinkedIn task, read the relevant skills/*/SKILL.md first.
    Use lib/url_parser.py for URL parsing,
        lib/apify_client.py for reading posts / comments / engagers,
        lib/publora_client.py for publishing actions.
    
  4. Done. Ask OpenClaw to write a LinkedIn post or comment.

Claude Code (CLI / VS Code / JetBrains)

/plugin marketplace add sergebulaev/linkedin-skills
/plugin install linkedin-skills@linkedin-skills

Or clone the repo and open it as your working directory — the skills activate with no plugin install, which is the route to use where /plugin is unavailable:

git clone https://github.com/sergebulaev/linkedin-skills.git
cd linkedin-skills

The repo ships a .claude/skills/ mirror of symlinks, so Claude Code finds all 12 skills on its own.

Hermes Agent (Nous Research) follows the agentskills.io open standard and loads skills/*/SKILL.md directly. Clone the bundle into your Hermes skills folder:

git clone https://github.com/sergebulaev/linkedin-skills.git ~/.hermes/skills/linkedin-skills

Coming from OpenClaw? hermes claw migrate imports these skills automatically. Then call /<skill-name> from any of your Hermes chat surfaces.

One command that works across Claude Code, Codex, Cursor, and any other agent that reads SKILL.md files:

npx skills add sergebulaev/linkedin-skills

Found this useful?Star the repo. Curated Claude Code and Codex directories rank and gate by star count, so a star is what makes these skills findable for the next person. It is the only thing we ask. No signup, no email.

Once installed, just ask Claude Code or Codex for help with LinkedIn. The right skill activates automatically.

Write a post:

"Write me a LinkedIn post about why AI agencies are replacing traditional ones. Make it viral."

Comment on someone's post:

"Comment on this post: https://linkedin.com/posts/... — I want to add a thoughtful take."

Check a draft before publishing:

"Audit this post draft for AI tells and algorithm issues: [paste your text]"

Reverse-engineer a viral post:

"What hook formula does this post use? https://linkedin.com/posts/..."

Plan your week:

"Create a 7-day LinkedIn content plan. I'm a B2B SaaS founder targeting VPs of Marketing."

Rewrite your profile:

"Optimize my LinkedIn profile for inbound leads: https://linkedin.com/in/yourname"

Remove AI tells from any text:

"Humanize this text: [paste AI-generated draft]"

Every skill shows you a draft first and waits for your OK before doing anything. Nothing gets posted without your approval.

Skill What it does
Post Writer Drafts viral-ready posts using 20 proven 2026 hook formulas (anaphora, R.I.P. obituary, year-over-year pivot, curiosity gap, emotional cold-open, controlled A/B, false-binary, and 13 more) plus a founders-edition angle library, picked by engagement goal
Comment Drafter Drafts a comment on any LinkedIn post from its URL
Reply Handler Drafts a reply to any comment, correctly handling LinkedIn's 2-level thread flattening. Or give it just a post URL and it sweeps the whole thread — every top-level comment and reply — filters out low-value ones, and drafts the rest in one batch
Post Audit Checks your draft against 2026 algorithm rules and AI-detection patterns before you publish
Humanizer Removes the AI tells human readers and LinkedIn's slop filter react to: 2026 AI vocabulary scored by paragraph density, reveal bridges, staccato fragment stacks, stacked triads, performed sincerity; caps em dashes instead of banning them. Does not promise to beat detectors (no edit reliably does). Bundles three sub-tools: AI-emoji density scorer, multi-detector spread tester (GPTZero, Originality.ai, ZeroGPT, Sapling, Copyleaks) that documents how much they disagree, and a rule-explainer reference for defending stylistic choices.
Hook Extractor Reverse-engineers the hook formula from any viral post. Returns a blank template you can fill with your own topic
Content Planner Creates a 7-day plan with daily post topics, formats, hooks, posting times, and comment targets
Engagement Monitor Two read-side workflows: (1) tracks your comment threads for author replies and drafts follow-ups in the 6-24h window; (2) pulls likers and commenters on any post and groups them by ICP fit (peer / aspirational / prospect).
Profile Optimizer Rewrites your headline, About section, Featured section, and Experience for 2026 conversion patterns
Employee Advocacy Plans a team LinkedIn program: 14-day launch, posting cadence, brand governance, ROI tracking
Repurposer Turns content from another platform (tweet, thread, YouTube video, blog, newsletter) into a native LinkedIn post: re-hooks for the fold, expands to the 900-1300 char sweet spot, moves links to the first comment, runs the humanizer
Interviewer Interviews you and keeps the answers in a Story Bank: roles, receipts with real numbers, turning points, scars, positions you would defend. Every other skill reads it, so drafts stop asking you for a specific number mid-request. Also runs a focused interview that turns one topic into a post spine. The only skill that works when you have never posted before, since it needs a career rather than an archive

If you are a founder, the bundle ships a dedicated founder layer. Your real constraint is rarely reach. It is a small number of high-stakes readers: the next investor, the next hire, the design partner who becomes a case study. The founder layer optimizes for trust with that narrow audience instead of impressions.

  • 10 founder angles (references/founder-topics.md) as fill-in templates: reprice the category, content-to-pipeline, audience of one, the scarce-shots math, the unglamorous bet, the limit of delegation, designed serendipity, the evasive-sentence test, the delegation line, the learning gate. Each maps to an engagement goal and a hook formula.
  • 4 structural hook formulas (F17-F20) that shape a post's logic: controlled A/B anecdote, false-binary dissolve, anecdote-meets-evidence bridge, diverging-curves close.
  • A founders-edition content plan (Conviction / Building in public / The math / Proof) in the Content Planner.

Just tell the Post Writer you are a founder, or ask the Content Planner for a "founder plan," and the skills reach for these first.

Community skills

Standalone skills built by other people on this bundle's conventions (same voice rules, same approval-card flow, same Not for X (use Y) disambiguation). They live in their authors' repos, so the core stays at 11 skills and one read/write pipeline. Install them next to this bundle the same way.

  • linkedin-outreach by @smfardeen7 - drafts 300-character connection-request notes (10 scenario templates) and post-accept follow-up sequences with day offsets and stop rules. Draft-only: LinkedIn has no invite or DM API, you paste and send.

Built one? Open a PR that adds a single line here.

Optional: read LinkedIn data with Apify

Four of the skills (Comment Drafter, Reply Handler, Hook Extractor, Engagement Monitor) can read post bodies, comment threads, your own recent comments, and the people who liked or commented on any post. Without an Apify token they fall back to asking you to paste the relevant text. With one, they fetch automatically.

Apify free tier ships with $5/month of credit, which goes a long way at $1-$5 per 1,000 results. The skills use four no-cookies actors:

Use case Actor Cost
Post body by URL supreme_coder/linkedin-post $1 / 1,000
Comments + replies on a post apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies $5 / 1,000
Your own recent comments apimaestro/linkedin-profile-comments $5 / 1,000
Likers + commenters on any post scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-cookies $5 / 1,000

Setup: drop APIFY_TOKEN=apify_api_... into your .env. The thin client at lib/apify_client.py exposes fetch_post, fetch_post_comments, fetch_user_recent_comments, and fetch_post_engagers.

A typical creator running daily comment ops + a weekly engager-analytics sweep stays under $2/month, well inside the free tier.

Optional: auto-post with Publora

By default, skills draft content for you to copy-paste into LinkedIn. If you want Claude Code or Codex to publish directly to your LinkedIn (and optionally to X, Threads, Instagram), connect Publora. It takes about 2 minutes.

Publora is a publishing API that handles LinkedIn's quirks (3 different URL formats, reaction type mismatches, thread flattening bugs). The free tier gives you 15 posts/month.

Publora also ships official MCP skills (npx skills add publora/skills): one skill per platform, covering the publish side only. This bundle is the layer above them, adding the reading, the writing craft and the approval flow.

Before or after any of it, one command tells you where you stand:

python3 scripts/selftest.py          # install, accounts, tests, and which skills work right now
python3 scripts/selftest.py --fresh  # clone to a temp dir and check a genuinely clean install

It reports each of Apify, Publora and Pixfaro separately, using free endpoints that verify a key without doing any work, and it names what is missing rather than only that something is. Skills that need a layer you have not connected still work, by drafting for you to paste, and the report says which ones those are.

Two ways to connect, pick either

A connector, if you are on claude.ai or Claude Code. Publora and Pixfaro both publish one. Authorize it once in your connector settings and the skills use it: no key on disk, no .env, nothing to rotate. Publora's connector also carries post_stats and profile_stats, which the REST path below does not have.

An API key, if you are anywhere else — a plain terminal, CI, a script, or you would rather the credential lived in a file you control. That is the seven steps below.

They are not exclusive and neither is second-class. One caveat worth knowing: scripts/check_config.py and scripts/selftest.py read .env and the shell, so a connector is invisible to them. If they say "manual" while your posts are going out, the connector is doing the work and nothing is wrong.

Step 1. Sign up at https://app.publora.com/signup (free)

Step 2. Connect LinkedIn: click Channels in the left sidebar, then Add Channel , pick LinkedIn , authorize.

Step 3. Find your Platform ID: go to Channels , click your LinkedIn account. The ID looks like linkedin-ABC123DEF. Copy the whole thing including linkedin-.

Step 4. Get your API key: click Settings (gear icon, bottom-left), then API , then Create Key. Copy the sk_... string.

Step 5. Create a file called .env in the linkedin-skills folder:

PUBLORA_API_KEY=sk_paste_your_key_here
LINKEDIN_PLATFORM_ID=linkedin-paste_your_id_here

If you cloned the repo, you can copy the template instead:

Then open .env and replace the placeholders with your real values.

Step 6. Install two small Python packages:

pip install requests python-dotenv

Step 7. Test it. Ask Claude Code or Codex:

"Schedule a test LinkedIn post via Publora 24 hours from now: 'testing the API connection — will cancel in dashboard'."

If Publora returns a scheduled-post ID, you're set. Cancel the post in the Publora dashboard before the scheduled time. If you get HTTP 401, your API key is wrong. If you get HTTP 400 about a missing platformId, your LINKEDIN_PLATFORM_ID isn't set. See Troubleshooting.

Optional: generate illustrations with Pixfaro

Posts with a visual get more dwell time. The Post Writer can generate an illustration for a draft (a feed image, a carousel slide, or a quote-card of your hook) and attach it automatically when publishing. Without a key it drafts the image prompt and asks you to generate it yourself, so nothing breaks.

Pixfaro is a single image API over multiple models (from flux-schnell at $0.004 to gpt-5-image). It composites your handle, brand color, or logo onto the image as a pixel-exact overlay , so a cheap base model still renders crisp text on a quote-card or thumbnail. Pull those brand fields from your Voice & Brand Profile (section 6) and every asset stays on-brand.

Setup: sign up at api.pixfaro.com/signup, create a key (name it linkedin, scope Generate), and put PIXFARO_TOKEN=pf_live_... in .env at the root of thelinkedin-skills folder (next to this README; keys are shown once). Then python3 scripts/check_config.py calls Pixfaro's GET /v1/key and prints the key's name and scope when it is right. The thin client at lib/pixfaro_client.py and the wrappers lib.illustrate(prompt, kind=...) / lib.refine(image_id, instruction) return a hosted URL that flows straight into lib.publish(..., media_urls=[url]). refine edits a prior image by its id (cheaper than regenerating); results carry cost, balance_after, and a premium flag so the skills never quietly spend on a pricey model.

For text-led visuals (a quote-card of your hook), the skills skip the image model entirely and use Pixfaro's design templates: lib.quote_card("<hook>", handle="@you", style="brand") typesets the card server-side (POST /v1/renders), so the line is crisp at any length — same hosted-URL flow. lib.available_templates() lists templates and live prices. A brand logo can be uploaded once with lib.brand_logo("logo.png") (full-scope key); the returned logo_id goes into Voice & Brand Profile §6 and every overlay from then on stamps the real mark.

Every skill follows these rules automatically:

  1. Em dashes capped at about 1 per 100 words. The character stopped being a tell in 2026; the density is.
  2. Capitalize names. Always. Lowercase reads as disrespectful.
  3. No AI vocabulary: "leverage", "fundamentally", "streamline", "harness", "delve", "unlock", "foster".
  4. Specific numbers beat adjectives. "$14,200" beats "significant savings".
  5. One sharp insight per comment beats three vague ones.
  6. 200-350 chars for comments, 900-1,300 chars for posts.
Problem Fix
Skills don't activate when I ask about LinkedIn Make sure you installed via the Skills panel, /plugin install, or codex plugin add. Try starting a new conversation.
"Publora API key not provided" Your .env file is missing or in the wrong folder. It should be in the linkedin-skills/ root.
"401 Unauthorized" from Publora Your API key expired. Go to Publora Settings > API > Create a new key.
Image skills keep saying "No Pixfaro key set" although you added one The key was not loaded: .env must be at the linkedin-skills/ root and python-dotenv installed. python3 scripts/check_config.py now says exactly which — and, with a key, whether Pixfaro accepts it (GET /v1/key).
"401" from Pixfaro The key was copied short or revoked. Keys are shown once — mint a new one in the Pixfaro dashboard and paste the whole pf_live_... string.
"404 on comment/post" Your LINKEDIN_PLATFORM_ID is wrong. Go to Publora Channels and copy the full linkedin-... string.
"400 reactionType" error Known Publora quirk. The skills handle this automatically. If you're calling the API manually, use PRAISE (not CELEBRATE), INTEREST (not INSIGHTFUL).
pip install fails Use a virtual environment: python -m venv venv && source venv/bin/activate && pip install requests python-dotenv

For developers: runtime compatibility, URL parsing, and internals

linkedin-skills/
├── skills/          ← SKILL.md frontmatter; native to Claude Code and Codex, others read as markdown
├── .codex-marketplace/ ← generated nested Codex package (run scripts/sync_codex_marketplace.py)
├── lib/             ← pure Python, works in any agent runtime
├── references/      ← pure markdown, works anywhere
└── scripts/         ← pure Python CLI, works anywhere
Runtime Auto-discovers skills? Setup
Claude Code (CLI, Desktop, Web, IDE) Yes Install via plugin or clone. Skills activate on matching prompts.
Codex CLI Yes Install via codex plugin marketplace add sergebulaev/linkedin-skills and codex plugin add linkedin-skills@linkedin-skills.
Anthropic Managed Agents (/v1/agents) Yes Pass skill files in the agent context.
OpenClaw Manual Mount the repo, add system prompt pointing to skills/*/SKILL.md.
Cursor / Cline / Aider Manual Read SKILL.md files as prompt context; import lib/ as Python.
Manus No Upload references/ as knowledge base. Call Publora API directly.
LangChain / AutoGen No Use lib/ as a package; feed references/ as prompt context.
git clone git@github.com:sergebulaev/linkedin-skills.git

# Add to OpenClaw system prompt:
# "You have LinkedIn marketing skills in ./linkedin-skills/.
#  Read the relevant skills/*/SKILL.md before any LinkedIn task.
#  Use lib/url_parser.py for URL parsing,
#      lib/apify_client.py for reading posts / comments / engagers,
#      lib/publora_client.py for publishing."

Generic Python agent quickstart

import sys; sys.path.insert(0, "path/to/linkedin-skills")
from lib import parse_linkedin_url, PubloraClient, ApifyClient

parsed = parse_linkedin_url("https://www.linkedin.com/posts/slug-activity-7448808898326654978-iW20")
print(parsed["post_urn"])  # urn:li:activity:7448808898326654978

# Read side (Apify)
apify = ApifyClient()  # reads APIFY_TOKEN from env
post = apify.fetch_post(post_url="https://www.linkedin.com/posts/...")
engagers = apify.fetch_post_engagers(post_url="https://www.linkedin.com/posts/...", max_items=50)

# Write side (Publora)
client = PubloraClient()  # reads PUBLORA_API_KEY from env
client.create_comment(post_urn=parsed["post_urn"], message="draft", platform_id="linkedin-xxx")

# Image side (Pixfaro) — optional, reads PIXFARO_TOKEN from env
from lib import illustrate
img = illustrate("Minimal flat-vector lighthouse, calm blue palette", kind="wide")
# img["url"] -> pass to publish(..., media_urls=[img["url"]])

LinkedIn has three post URN types. The lib/url_parser.py handles all of them:

URL fragment URN
/posts/slug-activity-7448... urn:li:activity:7448...
/posts/slug-share-7449... urn:li:share:7449...
/feed/update/urn:li:ugcPost:7447... urn:li:ugcPost:7447...

Comment URLs include a commentUrn query param. The parser extracts both post_urn and comment_id.

LinkedIn flattens reply threads to 2 levels. When replying to a reply, parentComment must point to the top-level comment URN, not the reply's URN. The linkedin-reply-handler skill handles this correctly.

python lib/url_parser.py "https://www.linkedin.com/posts/<author-handle>_activity-<id>"

These skills come out of Creative Content Crafts, an engineering company. We build the machinery underneath a company's public voice: ICP parsing, engagement systems, content guardrails, and posting infrastructure. We do not sell the words themselves.

We call that layer content engineering. Writing collapsed to the price of a chat subscription. What stayed valuable is everything below it: pulling every post your market wrote this week, keeping a live list of the people who matter, engaging on it daily with judgment in the loop, and catching the risky drafts before the platform does.

On LinkedIn specifically, that is the whole job. We are engineers of LinkedIn growth, not a ghostwriting agency.

This repo is the thin top layer of that stack, open-sourced. The engine underneath is what we build for clients.

MIT. Powered by Publora.

Related open-source skill bundles

Part of a family of AI social-media marketing skill bundles for Claude Code and Codex:

Also: Anthropic Skills repo, the awesome-claude-skills directory.