#261 by GitHub stars

sergebulaev/linkedin-skills

Claude skills for LinkedIn. 12 Claude Code and Codex skills that write human-sounding LinkedIn posts, craft comments that get noticed, analyze your feed, and build a publishing cadence, all from your terminal. Content engineering by Creative Content Crafts. MIT.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-comment-drafter/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-content-planner/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-employee-advocacy/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-engager-analytics/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-hook-extractor/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Network or broad shell

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-humanizer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-interviewer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-post-writer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-profile-optimizer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-reply-handler/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Network or broad shell

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

.codex-marketplace/linkedin-skills/skills/linkedin-thread-monitor/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-comment-drafter/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-content-planner/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-employee-advocacy/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-engager-analytics/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-hook-extractor/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Network or broad shell

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-humanizer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-interviewer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-post-writer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-profile-optimizer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-reply-handler/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-repurposer/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Network or broad shell

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

skills/linkedin-thread-monitor/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

8f8bc4b40a2d → 8f8bc4b40a2d

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 8f8bc4b40a2d

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 8f8bc4b40a2d5419b2dcf898772b85712cfbdf41

git clone --filter=blob:none --no-checkout https://github.com/sergebulaev/linkedin-skills.git .hotskills/sergebulaev-linkedin-skills && git -C .hotskills/sergebulaev-linkedin-skills checkout --detach 8f8bc4b40a2d5419b2dcf898772b85712cfbdf41 # Copy each selected skill directory from .hotskills/sergebulaev-linkedin-skills into .claude/skills/<skill-name>/
git clone --filter=blob:none --no-checkout https://github.com/sergebulaev/linkedin-skills.git .hotskills/sergebulaev-linkedin-skills && git -C .hotskills/sergebulaev-linkedin-skills checkout --detach 8f8bc4b40a2d5419b2dcf898772b85712cfbdf41 # Copy each selected skill directory from .hotskills/sergebulaev-linkedin-skills into .agents/skills/<skill-name>/
5.7kGitHub stars
257stars in 7 days
26skills in this repository
18commits in 30 days

Heat

7.8
  • Star growth, last 7 daysAhead of 96% of tracked repositories
  • Star growth, last 24 hoursAhead of 97% of tracked repositories
  • Rank movement, last 7 daysAhead of 73% of tracked repositories
  • Commits, last 30 daysAhead of 82% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Aug 2, 2026Nov 7, 20265,687

Individual skills in this repository

How it works

linkedin-marketing

When your agent uses it

Plan, draft, audit, and publish LinkedIn posts and comments. Use when the user wants to write a viral LinkedIn post, draft a comment or reply on any LinkedIn post URL, audit a draft against 2026 algorithm heuristics, remove AI tells, extract hook formulas from viral posts, or plan a week of content. Powered by the Publora API for publishing. User provides post/comment URLs, skill drafts content, user approves, then publishes.

What it loads into context

Frontmatter

102 tokens

Always available to the agent

SKILL.md

3,449 tokens

When the skill is activated

Reference documents

115,979 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. When to use this bundle
  2. Founders edition
  3. Core pattern
  4. Prerequisites
  5. Telling the user what they are missing
  6. Untrusted content
  7. Voice rules (baked into every skill)
  8. How URLs map to URNs
  9. Known gotchas
  10. Resources
  11. Acknowledgments
  12. After a successful run

Scripts executed separately

  • .claude/skills/linkedin-humanizer/scripts/test_detectors.py
  • evals/run_evals.py
  • lib/__init__.py
  • lib/_env.py
  • lib/apify_client.py
  • lib/approval.py
  • lib/backend_selector.py
  • lib/pixfaro_client.py
  • lib/publora_client.py
  • lib/url_parser.py
  • scripts/check_actor_inputs.py
  • scripts/check_config.py
  • scripts/check_frontmatter.py
  • scripts/check_markdown_references.py
  • scripts/check_no_secrets.py
  • scripts/post_comment.py
  • scripts/schedule_post.py
  • scripts/selftest.py
  • scripts/sync_codex_marketplace.py
  • tests/test_client_behaviour.py
  • tests/test_detector_tool.py
  • tests/test_eval_runner.py
  • tests/test_instruction_integrity.py
  • tests/test_mcp_read_layer.py
  • tests/test_pixfaro_client.py
  • tests/test_publora_shapes.py
  • tests/test_response_shapes.py
  • tests/test_security_boundaries.py
  • tests/test_skill_contracts.py
  • tests/test_text_encoding.py

Files

  • .agents/plugins/marketplace.jsonasset401 bytes
  • .claude-plugin/marketplace.jsonasset1,776 bytes
  • .claude-plugin/plugin.jsonasset841 bytes
  • .claude/skills/linkedin-comment-drafter/SKILL.mddoc9,157 bytes
  • .claude/skills/linkedin-comment-drafter/references/comment-templates.mddoc7,855 bytes
  • .claude/skills/linkedin-comment-drafter/references/examples.mddoc433 bytes
  • .claude/skills/linkedin-comment-drafter/references/voice-rules.mddoc96 bytes
  • .claude/skills/linkedin-content-planner/SKILL.mddoc8,281 bytes
  • .claude/skills/linkedin-content-planner/references/example-plan-week.mddoc5,166 bytes
  • .claude/skills/linkedin-content-planner/references/pillars-framework.mddoc9,676 bytes
  • .claude/skills/linkedin-employee-advocacy/SKILL.mddoc6,181 bytes
  • .claude/skills/linkedin-employee-advocacy/references/advocacy-principles.mddoc3,462 bytes
  • .claude/skills/linkedin-employee-advocacy/references/governance-playbook.mddoc5,482 bytes
  • .claude/skills/linkedin-employee-advocacy/references/team-cadence-matrix.mddoc3,788 bytes
  • .claude/skills/linkedin-engager-analytics/SKILL.mddoc6,122 bytes
  • .claude/skills/linkedin-engager-analytics/references/output-spec.mddoc1,464 bytes
  • .claude/skills/linkedin-hook-extractor/SKILL.mddoc4,807 bytes
  • .claude/skills/linkedin-hook-extractor/references/classification-rules.mddoc3,381 bytes
  • .claude/skills/linkedin-hook-extractor/references/examples.mddoc959 bytes
  • .claude/skills/linkedin-humanizer/SKILL.mddoc19,882 bytes
  • .claude/skills/linkedin-humanizer/references/audit-ai-tells.mddoc11,884 bytes
  • .claude/skills/linkedin-humanizer/references/audit-checklist.mddoc4,183 bytes
  • .claude/skills/linkedin-humanizer/references/audit-examples.mddoc452 bytes
  • .claude/skills/linkedin-humanizer/references/detector-list.mddoc6,284 bytes
  • .claude/skills/linkedin-humanizer/references/emoji-patterns.mddoc3,845 bytes
  • .claude/skills/linkedin-humanizer/references/examples.mddoc1,441 bytes
  • .claude/skills/linkedin-humanizer/references/rules-explainer.mddoc15,137 bytes
  • .claude/skills/linkedin-humanizer/references/scrub-rules.mddoc27,676 bytes
  • .claude/skills/linkedin-humanizer/references/tier-rationale.mddoc17,700 bytes
  • .claude/skills/linkedin-humanizer/references/voice-fingerprint.mddoc5,434 bytes
  • .claude/skills/linkedin-humanizer/scripts/detectors.env.exampleasset428 bytes
  • .claude/skills/linkedin-humanizer/scripts/test_detectors.pyruns13,315 bytes
  • .claude/skills/linkedin-humanizer/sub-skills/detector-tester.mddoc6,148 bytes
  • .claude/skills/linkedin-humanizer/sub-skills/emoji-detector.mddoc3,993 bytes
  • .claude/skills/linkedin-humanizer/sub-skills/illustration.mddoc7,606 bytes
  • .claude/skills/linkedin-humanizer/sub-skills/post-audit.mddoc4,974 bytes
  • .claude/skills/linkedin-humanizer/sub-skills/rules-explainer.mddoc5,371 bytes
  • .claude/skills/linkedin-humanizer/sub-skills/voice-profile.mddoc3,065 bytes
  • .claude/skills/linkedin-interviewer/SKILL.mddoc8,263 bytes
  • .claude/skills/linkedin-interviewer/references/question-bank.mddoc4,433 bytes
  • .claude/skills/linkedin-post-writer/SKILL.mddoc14,489 bytes
  • .claude/skills/linkedin-post-writer/references/algorithm-heuristics.mddoc114 bytes
  • .claude/skills/linkedin-post-writer/references/hook-formulas.mddoc100 bytes
  • .claude/skills/linkedin-post-writer/references/humanizer-checklist.mddoc6,504 bytes
  • .claude/skills/linkedin-profile-optimizer/SKILL.mddoc5,856 bytes
  • .claude/skills/linkedin-profile-optimizer/references/about-section-templates.mddoc2,717 bytes
  • .claude/skills/linkedin-profile-optimizer/references/banner-photo-specs.mddoc2,245 bytes
  • .claude/skills/linkedin-profile-optimizer/references/experience-skills-rules.mddoc4,045 bytes
  • .claude/skills/linkedin-profile-optimizer/references/featured-section-playbook.mddoc3,125 bytes
  • .claude/skills/linkedin-profile-optimizer/references/profile-headline-formulas.mddoc2,296 bytes
  • .claude/skills/linkedin-reply-handler/SKILL.mddoc14,649 bytes
  • .claude/skills/linkedin-reply-handler/references/examples.mddoc1,322 bytes
  • .claude/skills/linkedin-reply-handler/references/filtering-rules.mddoc2,666 bytes
  • .claude/skills/linkedin-reply-handler/references/reply-templates.mddoc2,297 bytes
  • .claude/skills/linkedin-reply-handler/references/threading-rules.mddoc2,930 bytes
  • .claude/skills/linkedin-repurposer/SKILL.mddoc6,647 bytes
  • .claude/skills/linkedin-thread-monitor/SKILL.mddoc5,916 bytes
  • .claude/skills/linkedin-thread-monitor/references/output-spec.mddoc1,219 bytes
  • .claude/skills/linkedin-thread-monitor/references/thread-timing.mddoc3,770 bytes
  • .codex-plugin/plugin.jsonasset1,785 bytes
  • .codexignoreasset100 bytes
  • .env.exampleasset3,703 bytes
  • .github/dependabot.ymlasset205 bytes
  • .github/workflows/hol-plugin-scanner.ymlasset614 bytes
  • .github/workflows/verify-references.ymlasset1,354 bytes
  • .gitignoreasset435 bytes
  • AGENTS.mddoc9,043 bytes
  • CLAUDE.mddoc11,450 bytes
  • LICENSEasset1,070 bytes
  • README.mddoc27,980 bytes
  • SECURITY.mddoc2,707 bytes
  • SKILL.mdcore14,012 bytes
  • assets/icon.svgasset768 bytes
  • assets/linkedin-skills-hero.pngasset812,604 bytes
  • evals/run_evals.pyruns17,556 bytes
  • lib/__init__.pyruns2,035 bytes
  • lib/_env.pyruns4,188 bytes
  • lib/apify_client.pyruns15,839 bytes
  • lib/approval.pyruns1,736 bytes
  • lib/backend_selector.pyruns35,899 bytes
  • lib/pixfaro_client.pyruns15,837 bytes
  • lib/publora_client.pyruns14,443 bytes
  • lib/url_parser.pyruns4,473 bytes
  • references/algorithm-heuristics.mddoc8,627 bytes
  • references/engagement-metrics-taxonomy.mddoc2,680 bytes
  • references/founder-topics.mddoc14,536 bytes
  • references/hook-formulas.mddoc40,431 bytes
  • references/industry-benchmarks.mddoc4,327 bytes
  • references/mcp-read-layer.mddoc8,009 bytes
  • references/precedence.mddoc3,362 bytes
  • references/story-bank.mddoc3,681 bytes
  • references/untrusted-content.mddoc3,101 bytes
  • references/voice-profile.mddoc2,990 bytes
  • references/voice-rules.mddoc2,403 bytes
  • requirements-dev.txtdoc443 bytes
  • requirements-lock.txtdoc238 bytes
  • requirements.txtdoc38 bytes
  • scripts/check_actor_inputs.pyruns5,936 bytes
  • scripts/check_config.pyruns15,162 bytes
  • scripts/check_frontmatter.pyruns3,856 bytes
  • scripts/check_markdown_references.pyruns1,743 bytes
  • scripts/check_no_secrets.pyruns4,899 bytes
  • scripts/post_comment.pyruns3,015 bytes
  • scripts/schedule_post.pyruns4,459 bytes
  • scripts/selftest.pyruns24,655 bytes
  • scripts/sync_codex_marketplace.pyruns3,188 bytes
  • tests/fixtures/apify_comments.jsonasset7,788 bytes
  • tests/fixtures/apify_engagers.jsonasset1,100 bytes
  • tests/fixtures/apify_post.jsonasset2,659 bytes
  • tests/fixtures/apify_profile_comments.jsonasset7,230 bytes
  • tests/fixtures/publora_get_post.jsonasset1,850 bytes
  • tests/fixtures/publora_platform_limits.jsonasset965 bytes
  • tests/test_client_behaviour.pyruns20,132 bytes
  • tests/test_detector_tool.pyruns6,245 bytes
  • tests/test_eval_runner.pyruns2,312 bytes
  • tests/test_instruction_integrity.pyruns19,019 bytes
  • tests/test_mcp_read_layer.pyruns6,543 bytes
  • tests/test_pixfaro_client.pyruns4,630 bytes
  • tests/test_publora_shapes.pyruns4,680 bytes
  • tests/test_response_shapes.pyruns11,841 bytes
  • tests/test_security_boundaries.pyruns7,147 bytes
  • tests/test_skill_contracts.pyruns5,182 bytes
  • tests/test_text_encoding.pyruns4,960 bytes
Read SKILL.md

# LinkedIn Marketing Skills

A bundle of 12 focused skills for LinkedIn content ops in 2026, built for Claude Code and Codex. Each skill is single-purpose, follows the draft → approval → publish pattern, and uses the [Publora API](https://publora.com/?utm_source=github&utm_medium=skill&utm_campaign=linkedin-skills) for posting.

## When to use this bundle

- **Writing a viral post** → use `linkedin-post-writer`
- **Commenting on someone else's post** → use `linkedin-comment-drafter`
- **Replying to a comment** (yours or someone else's), or sweeping and replying to an entire comment thread from just the post URL → use `linkedin-reply-handler`
- **Reviewing a draft before publishing, removing AI tells, scoring AI emoji density, defending a flagged rule, or running 5 AI detectors in parallel** → use `linkedin-humanizer` (rewrite + `--mode audit` pre-publish review; folds in the former post-audit, emoji-detector, rules-explainer, and detector-tester sub-tools)
- **Extracting a hook formula from a viral post** → use `linkedin-hook-extractor`
- **Planning a week of LinkedIn content** → use `linkedin-content-planner`
- **Tracking which of your comments got author replies** → use `linkedin-thread-monitor`
- **Analyzing who liked / commented on any post (audience segmentation)** → use `linkedin-engager-analytics`
View the complete source on GitHub

Skills included

  • linkedin-marketing
  • linkedin-marketing
  • linkedin-comment-drafter
  • linkedin-content-planner
  • linkedin-employee-advocacy
  • linkedin-engager-analytics
  • linkedin-hook-extractor
  • linkedin-humanizer
  • linkedin-interviewer
  • linkedin-post-writer
  • linkedin-profile-optimizer
  • linkedin-reply-handler
  • linkedin-repurposer
  • linkedin-thread-monitor
  • linkedin-comment-drafter
  • linkedin-content-planner
  • linkedin-employee-advocacy
  • linkedin-engager-analytics
  • linkedin-hook-extractor
  • linkedin-humanizer
  • linkedin-interviewer
  • linkedin-post-writer
  • linkedin-profile-optimizer
  • linkedin-reply-handler
  • linkedin-repurposer
  • linkedin-thread-monitor

Repository facts

License
MIT
Created
Apr 14, 2026
Last pushed
Nov 3, 2026
Forks
923
Open issues
0
Project activity
Active

Rank over the last 12 weeks

Now #261 · best #255 · up 1 in 30 days

  1. #258 on Nov 1
  2. #259 from Nov 2 to Nov 3
  3. #258 on Nov 4
  4. #256 on Nov 5
  5. #259 on Nov 6
  6. #261 since Nov 7
78 earlier periods
  1. #806 on Aug 2
  2. #797 on Aug 8
  3. #807 on Aug 9
  4. #839 on Aug 10
  5. #840 on Aug 11
  6. #833 on Aug 12
  7. #837 on Aug 13
  8. #820 on Aug 14
  9. #796 on Aug 15
  10. #815 on Aug 16
  11. #818 on Aug 17
  12. #839 on Aug 18
  13. #829 on Aug 19
  14. #821 on Aug 20
  15. #825 on Aug 21
  16. #776 on Aug 22
  17. #832 on Aug 23
  18. #844 on Aug 24
  19. #846 on Aug 25
  20. #832 on Aug 26
  21. #845 on Aug 27
  22. #878 on Aug 28
  23. #796 on Aug 29
  24. #800 on Aug 30
  25. #837 on Aug 31
  26. #857 on Sep 1
  27. #795 on Sep 2
  28. #707 on Sep 3
  29. #657 on Sep 4
  30. #560 on Sep 5
  31. #538 on Sep 6
  32. #528 on Sep 7
  33. #530 on Sep 8
  34. #488 on Sep 9
  35. #457 on Sep 10
  36. #442 on Sep 11
  37. #413 on Sep 12
  38. #393 on Sep 13
  39. #383 on Sep 14
  40. #375 on Sep 15
  41. #368 on Sep 16
  42. #357 on Sep 17
  43. #345 on Sep 18
  44. #327 on Sep 19
  45. #332 on Sep 20
  46. #323 on Sep 21
  47. #306 on Sep 22
  48. #299 on Sep 23
  49. #294 on Sep 24
  50. #287 on Sep 25
  51. #281 on Sep 26
  52. #286 on Sep 27
  53. #285 on Sep 28
  54. #283 on Sep 29
  55. #278 on Sep 30
  56. #271 on Oct 1
  57. #273 on Oct 2
  58. #267 on Oct 3
  59. #261 from Oct 4 to Oct 6
  60. #263 on Oct 7
  61. #262 on Oct 8
  62. #263 on Oct 9
  63. #260 on Oct 10
  64. #262 on Oct 11
  65. #263 on Oct 12
  66. #261 on Oct 13
  67. #258 from Oct 14 to Oct 15
  68. #255 on Oct 16
  69. #257 on Oct 17
  70. #258 from Oct 18 to Oct 19
  71. #257 on Oct 20
  72. #258 from Oct 21 to Oct 22
  73. #255 on Oct 23
  74. #256 from Oct 24 to Oct 25
  75. #258 on Oct 28
  76. #259 on Oct 29
  77. #262 on Oct 30
  78. #260 on Oct 31

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 2, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 14 notes
  • .codex-marketplace/linkedin-skills/skills/linkedin-hook-extractor/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • .codex-marketplace/linkedin-skills/skills/linkedin-humanizer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • .codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • .codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • .codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • .codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • .codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/linkedin-hook-extractor/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/linkedin-humanizer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/linkedin-repurposer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/linkedin-repurposer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/linkedin-repurposer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/linkedin-repurposer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/linkedin-repurposer/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 1,090 signals by file

.claude-plugin/marketplace.json

  • Network accessline 3
    "owner": {     "name": "Serge Bulaev",     "url": "https://github.com/sergebulaev"
  • Network accessline 4
    "name": "Serge Bulaev",     "url": "https://github.com/sergebulaev"   },
  • Network accessline 5
    "url": "https://github.com/sergebulaev"
  • Network accessline 16
    "author": {         "name": "Serge Bulaev",         "url": "https://github.com/sergebulaev"
  • Network accessline 17
    "name": "Serge Bulaev",         "url": "https://github.com/sergebulaev"       },
  • Network accessline 18
    "url": "https://github.com/sergebulaev"
  • Network accessline 19
    },       "homepage": "https://github.com/sergebulaev/linkedin-skills",       "license": "MIT",
  • Network accessline 20
    "homepage": "https://github.com/sergebulaev/linkedin-skills",

.claude-plugin/plugin.json

  • Network accessline 5
    "author": {     "name": "Serge Bulaev",     "url": "https://github.com/sergebulaev"
  • Network accessline 6
    "name": "Serge Bulaev",     "url": "https://github.com/sergebulaev"   },
  • Network accessline 7
    "url": "https://github.com/sergebulaev"
  • Network accessline 8
    },   "license": "MIT",   "homepage": "https://github.com/sergebulaev/linkedin-skills",
  • Network accessline 9
    "license": "MIT",   "homepage": "https://github.com/sergebulaev/linkedin-skills",   "keywords": [
  • Network accessline 10
    "homepage": "https://github.com/sergebulaev/linkedin-skills",

.claude/skills/linkedin-comment-drafter/SKILL.md

  • Network accessline 95
    > User: "Comment on this: https://www.linkedin.com/posts/<author-handle>_activity-<id>"

.claude/skills/linkedin-comment-drafter/references/examples.md

  • Network accessline 5
    > User: "Comment on this: https://www.linkedin.com/posts/<author-handle>_activity-<id>"

.claude/skills/linkedin-employee-advocacy/references/advocacy-principles.md

  • Network accessline 3
    Source: https://co.actor/use-cases/marketing-teams + 2026 practitioner research

.claude/skills/linkedin-engager-analytics/references/output-spec.md

  • Network accessline 30
    > Input: analyze engagers on https://www.linkedin.com/posts/<author>_..., max 100

.claude/skills/linkedin-hook-extractor/references/examples.md

  • Network accessline 5
    > **Input:** `https://www.linkedin.com/posts/dharmesh_every-b2b-software-company-is-or-should-activity-7448808898326654978-iW20`

.claude/skills/linkedin-humanizer/references/detector-list.md

  • Network accessline 22
    - **Web**: https://gptzero.me
  • Network accessline 23
    - **API docs**: https://api.gptzero.me/v2/predict/text
  • Network accessline 32
    **Citation**: Liang, W., Yuksekgonul, M., Mao, Y., Wu, E., & Zou, J. (2023). "GPT detectors are biased against non-native English writers." *Patterns*, 4(7). https://doi.org/10.1016/j.patter.2023.100779
  • Network accessline 38
    - **Web**: https://originality.ai
  • Network accessline 39
    - **API docs**: https://docs.originality.ai/
  • Network accessline 54
    - **Web**: https://www.zerogpt.com - **API docs**: https://api.zerogpt.com/api/detect/detectText - **Auth**: `ApiKey` header. Free tier: 5 requests/min. Paid plans available.
  • Network accessline 55
    - **API docs**: https://api.zerogpt.com/api/detect/detectText - **Auth**: `ApiKey` header. Free tier: 5 requests/min. Paid plans available. - **Returns**: `data.fakePercentage` (0-100 integer), `data.isHuman` boolean.
  • Network accessline 64
    **Citation**: Multiple replicated demos on Twitter/X 2023-2024; Vanderbilt University communication on disabling Turnitin (Aug 2023) cited similar instability across the detector category. https://www.vanderbilt.edu/brightspace/2023/08/16/g
  • Network accessline 70
    - **Web**: https://sapling.ai/ai-content-detector - **API docs**: https://sapling.ai/docs/api/aidetect - **Auth**: `key` field in JSON body. Free tier: 50 requests/day.
  • Network accessline 71
    - **API docs**: https://sapling.ai/docs/api/aidetect - **Auth**: `key` field in JSON body. Free tier: 50 requests/day. - **Returns**: `score` (0.0-1.0), per-sentence `sentence_scores`.
  • Network accessline 80
    **Citation**: Sapling's own published benchmarks (https://sapling.ai/ai-content-detector/benchmark) acknowledge ~3-5% false positive rate even in their best-case dataset.
  • Network accessline 86
    - **Web**: https://copyleaks.com/ai-content-detector
  • Network accessline 87
    - **API docs**: https://api.copyleaks.com/documentation/v3/writer-detector/submit
  • Network accessline 107
    - **Turnitin AI Writing** — disabled by Vanderbilt, Cambridge, others. No public API; institutional only. - **Winston AI** — https://gowinston.ai. Paid only.
  • Network accessline 108
    - **Winston AI** — https://gowinston.ai. Paid only.
  • Network accessline 109
    - **Crossplag AI** — https://crossplag.com. Paid only.

.claude/skills/linkedin-humanizer/references/rules-explainer.md

  • Network accessline 28
    - **Famous human user:** none. Zero recorded cases. - **Defense strength:** zero - **Citation:** Wikipedia, "Signs of AI writing" - https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 30
    - **Citation:** Wikipedia, "Signs of AI writing" - https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 36
    - **Famous human user:** none. - **Defense strength:** zero - **Citation:** Wikipedia "Signs of AI writing"; TechCrunch on OpenAI's discontinued classifier - https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-over-lo
  • Network accessline 38
    - **Citation:** Wikipedia "Signs of AI writing"; TechCrunch on OpenAI's discontinued classifier - https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-over-low-rate-of-accuracy/
  • Network accessline 119
    - **Joan Didion**, *The Year of Magical Thinking* (2005) - em dashes for parenthetical grief. - **Defense strength:** high (single use). The overuse threshold (3+ in a short post) flips to forensic - see rule 5. - **Citation:** Stanford HAI
  • Network accessline 121
    - **Citation:** Stanford HAI / Liang et al. (2023) on detector bias - https://hai.stanford.edu/news/ai-detectors-biased-against-non-native-english-writers ; TechCrunch on OpenAI classifier shutdown for low accuracy - https://techcrunch.com/
  • Network accessline 165
    - **Every traditionally typeset book since the invention of moveable type** - curly quotes are correct typography. Straight quotes are an ASCII compromise. - **Defense strength:** high. Flagging curly quotes as AI is detector incompetence -
  • Network accessline 167
    - **Citation:** *The Chicago Manual of Style*, 17th ed., §6.115 on quotation marks; Adelphi University lawsuit illustrating cost of false positives - https://www.plagiarismtoday.com/2025/10/14/adelphi-university-sued-over-ai-allegation/
  • Network accessline 195
    - **Stanford HAI / Liang et al. (2023)** - AI detectors are biased against non-native English writers. Single most-cited paper for "detectors over-fire on aesthetic patterns." https://hai.stanford.edu/news/ai-detectors-biased-against-non-na
  • Network accessline 196
    - **TechCrunch (25 July 2023)** - OpenAI shut down its own AI-text classifier, citing low rate of accuracy. The company that built GPT couldn't reliably detect GPT. https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-
  • Network accessline 197
    - **Wikipedia, "Signs of AI writing"** - community-maintained taxonomy. Source for forensic markers (oaicite, knowledge-cutoff) and the strict vocabulary list. https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 198
    - **Adelphi University lawsuit (Oct 2025)** - student sued the university after a false-positive AI accusation. The legal cost of trusting detectors on aesthetic signals. https://www.plagiarismtoday.com/2025/10/14/adelphi-university-sued-ov

.claude/skills/linkedin-humanizer/references/tier-rationale.md

  • Network accessline 38
    - Wikipedia "Signs of AI writing" forensic-rule section: https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 61
    - Juzek & Ward (2025) "Why Does ChatGPT 'Delve' So Much?": https://arxiv.org/abs/2412.11385
  • Network accessline 99
    - Stanford HAI / Liang et al. 2023 "AI detectors biased against non-native English writers": https://hai.stanford.edu/news/ai-detectors-biased-against-non-native-english-writers
  • Network accessline 100
    - TechCrunch on OpenAI killing its own classifier at 26% accuracy: https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-over-low-rate-of-accuracy/
  • Network accessline 101
    - Newby v. Adelphi University (Oct 2025): https://www.plagiarismtoday.com/2025/10/14/adelphi-university-sued-over-ai-allegation/

.claude/skills/linkedin-humanizer/scripts/detectors.env.example

  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 7
    [Credential-related source omitted]
  • Access to secretsline 8
    [Credential-related source omitted]
  • Access to secretsline 9
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]
  • Access to secretsline 13
    [Credential-related source omitted]

.claude/skills/linkedin-humanizer/scripts/test_detectors.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 58
    [Credential-related source omitted]
  • Network accessline 60
    [Credential-related source omitted]
  • Access to secretsline 60
    [Credential-related source omitted]
  • Network accessline 61
    try:         r = requests.post(             "https://api.gptzero.me/v2/predict/text",
  • Network accessline 62
    r = requests.post(
  • Network accessline 63
    "https://api.gptzero.me/v2/predict/text",
  • Access to secretsline 77
    [Credential-related source omitted]
  • Network accessline 79
    [Credential-related source omitted]
  • Access to secretsline 79
    [Credential-related source omitted]
  • Network accessline 80
    try:         r = requests.post(             "https://api.originality.ai/api/v1/scan/ai",
  • Network accessline 81
    r = requests.post(
  • Network accessline 82
    "https://api.originality.ai/api/v1/scan/ai",
  • Access to secretsline 96
    [Credential-related source omitted]
  • Network accessline 98
    [Credential-related source omitted]
  • Access to secretsline 98
    [Credential-related source omitted]
  • Network accessline 99
    try:         r = requests.post(             "https://api.zerogpt.com/api/detect/detectText",
  • Network accessline 100
    r = requests.post(
  • Network accessline 101
    "https://api.zerogpt.com/api/detect/detectText",
  • Access to secretsline 115
    [Credential-related source omitted]
  • Network accessline 117
    [Credential-related source omitted]
  • Access to secretsline 117
    [Credential-related source omitted]
  • Network accessline 118
    try:         r = requests.post(             "https://api.sapling.ai/api/v1/aidetect",
  • Network accessline 119
    r = requests.post(
  • Network accessline 120
    "https://api.sapling.ai/api/v1/aidetect",
  • Access to secretsline 133
    [Credential-related source omitted]
  • Access to secretsline 138
    [Credential-related source omitted]
  • Network accessline 142
    login = requests.post(
  • Network accessline 143
    "https://id.copyleaks.com/v3/account/login/api",
  • Access to secretsline 148
    [Credential-related source omitted]
  • Network accessline 151
    scan_id = f"detector-test-{abs(hash(text)) % 10**8}"         r = requests.post(
  • Network accessline 152
    r = requests.post(
  • Network accessline 153
    f"https://api.copyleaks.com/v2/writer-detector/{scan_id}/check",
  • Network accessline 186
    MANUAL_DETECTORS = {     "Writer.com":  "https://writer.com/ai-content-detector/",
  • Network accessline 187
    "Writer.com":  "https://writer.com/ai-content-detector/",
  • Network accessline 188
    "Scribbr":     "https://www.scribbr.com/ai-detector/",
  • Network accessline 189
    "QuillBot":    "https://quillbot.com/ai-content-detector",
  • Network accessline 190
    "Hive Moderation": "https://hivemoderation.com/ai-generated-content-detection",
  • Access to secretsline 291
    [Credential-related source omitted]

.claude/skills/linkedin-humanizer/sub-skills/detector-tester.md

  • Access to secretsline 95
    [Credential-related source omitted]

.claude/skills/linkedin-post-writer/SKILL.md

  • Network accessline 92
    6. **Optional illustration.** If the post would land better with a visual (or the user asks), offer one: draft an image and generate it with `lib.illustrate(prompt, kind="wide")`, pulling brand handle/color from Voice & Brand Profile §6 for
  • Network accessline 94
    8. **On approval.** Call `lib.publish(kind="post", draft_text=<approved>, target_url="https://www.linkedin.com/post/new/", platforms=[{"platform":"linkedin","platformId":<id>}], scheduled_time=<iso_or_None>, media_urls=<list_or_None>)`. The

.claude/skills/linkedin-reply-handler/references/examples.md

  • Network accessline 5
    > User: "Reply to this: https://www.linkedin.com/feed/update/urn:li:activity:7449018753880834048?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7449018753880834048%2C7449758545140453376%29"
  • Network accessline 15
    > User: "Reply to everyone on this post: https://www.linkedin.com/posts/<author>_activity-<id>"

.claude/skills/linkedin-reply-handler/references/threading-rules.md

  • Network accessline 58
    https://www.linkedin.com/feed/update/urn:li:activity:P?commentUrn=urn%3Ali%3Acomment%3A%28activity%3AP%2C111%29
  • Network accessline 63
    https://www.linkedin.com/feed/update/urn:li:activity:P?commentUrn=urn%3Ali%3Acomment%3A%28activity%3AP%2C111%29&replyUrn=urn%3Ali%3Acomment%3A%28activity%3AP%2C222%29

.claude/skills/linkedin-repurposer/SKILL.md

  • Network accessline 31
    7. **Humanizer pass.** Run the scrub: 2026 AI vocab by density, em dashes above the cap (about one per 100 words), stacked rule-of-three triads, generic openers and reveal bridges. Keep the user's real numbers and named entities from the so
  • Network accessline 33
    9. **On approval.** Publish via `lib.publish(kind="post", draft_text=<approved>, target_url="https://www.linkedin.com/post/new/", platforms=[{"platform":"linkedin","platformId":<id>}], scheduled_time=<iso_or_None>)`. The wrapper handles Pub

.codex-marketplace/linkedin-skills/.codex-plugin/plugin.json

  • Network accessline 5
    "author": {     "name": "Serge Bulaev",     "url": "https://github.com/sergebulaev"
  • Network accessline 6
    "name": "Serge Bulaev",     "url": "https://github.com/sergebulaev"   },
  • Network accessline 7
    "url": "https://github.com/sergebulaev"
  • Network accessline 8
    },   "license": "MIT",   "homepage": "https://github.com/sergebulaev/linkedin-skills",
  • Network accessline 9
    "license": "MIT",   "homepage": "https://github.com/sergebulaev/linkedin-skills",   "repository": "https://github.com/sergebulaev/linkedin-skills",
  • Network accessline 10
    "homepage": "https://github.com/sergebulaev/linkedin-skills",
  • Network accessline 11
    "repository": "https://github.com/sergebulaev/linkedin-skills",
  • Network accessline 32
    "Write"     ],     "websiteURL": "https://github.com/sergebulaev/linkedin-skills",
  • Network accessline 33
    ],     "websiteURL": "https://github.com/sergebulaev/linkedin-skills",     "defaultPrompt": [
  • Network accessline 34
    "websiteURL": "https://github.com/sergebulaev/linkedin-skills",

.codex-marketplace/linkedin-skills/.codexignore

  • Access to secretsline 5
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/.env.example

  • Access to secretsline 4
    [Credential-related source omitted]
  • Network accessline 7
    # Publora API key — sign up free at https://app.publora.com/signup?utm_source=github&utm_medium=env-example&utm_campaign=linkedin-skills
  • Access to secretsline 9
    [Credential-related source omitted]
  • Network accessline 19
    # per 1,000 results. # # Sign up: https://console.apify.com/sign-up
  • Network accessline 20
    [Credential-related source omitted]
  • Network accessline 21
    # Sign up: https://console.apify.com/sign-up
  • Network accessline 22
    [Credential-related source omitted]
  • Network accessline 33
    # Pixel-exact text/logo overlay keeps every asset on-brand. # # Sign up: https://api.pixfaro.com/signup?ref=linkedin-skills  (key format: pf_live_...)
  • Network accessline 34
    # # Sign up: https://api.pixfaro.com/signup?ref=linkedin-skills  (key format: pf_live_...) # This file must sit at the root of the linkedin-skills folder; verify with
  • Network accessline 35
    # Sign up: https://api.pixfaro.com/signup?ref=linkedin-skills  (key format: pf_live_...)
  • Access to secretsline 48
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/README.md

  • Network accessline 7
    <p align="center">   <a href="https://github.com/hesreallyhim/awesome-claude-code"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Claude Code"></a>
  • Network accessline 8
    <a href="https://github.com/hesreallyhim/awesome-claude-code"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Claude Code"></a>
  • Network accessline 9
    <img src="https://img.shields.io/github/v/release/sergebulaev/linkedin-skills?color=1E40AF&label=release" alt="Latest release">
  • Network accessline 10
    <img src="https://img.shields.io/badge/Claude_Code-Compatible-D97757?logo=anthropic&logoColor=white" alt="Claude Code Compatible">
  • Network accessline 11
    <img src="https://img.shields.io/badge/Codex-Compatible-111827" alt="Codex Compatible">
  • Network accessline 12
    <img src="https://img.shields.io/badge/Claude-Skills-8A63D2" alt="Claude Skills">
  • Network accessline 13
    <img src="https://img.shields.io/badge/License-MIT-22C55E.svg" alt="MIT License">
  • Network accessline 14
    <img src="https://img.shields.io/github/stars/sergebulaev/linkedin-skills?style=social" alt="GitHub stars">
  • Network accessline 15
    <img src="https://img.shields.io/badge/PRs-welcome-F59E0B.svg" alt="PRs Welcome">
  • Network accessline 20
    > **On another platform too?** The same team ships matching marketing skill bundles for [X (Twitter)](https://github.com/sergebulaev/x-skills) · [Instagram](https://github.com/sergebulaev/instagram-skills) · [YouTube](https://github.com/ser
  • Network accessline 36
    git clone https://github.com/sergebulaev/linkedin-skills.git
  • Network accessline 44
    1. Open [claude.ai](https://claude.ai) and click **Customize** in the sidebar
  • Network accessline 72
    git clone https://github.com/sergebulaev/linkedin-skills.git
  • Network accessline 94
    git clone https://github.com/sergebulaev/linkedin-skills.git
  • Network accessline 114
    git clone https://github.com/sergebulaev/linkedin-skills.git ~/.hermes/skills/linkedin-skills
  • Network accessline 127
    > **Found this useful? [Star the repo](https://github.com/sergebulaev/linkedin-skills).** 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 on
  • Network accessline 136
    **Comment on someone's post:** > "Comment on this post: https://linkedin.com/posts/... — I want to add a thoughtful take."
  • Network accessline 137
    > "Comment on this post: https://linkedin.com/posts/... — I want to add a thoughtful take."
  • Network accessline 142
    **Reverse-engineer a viral post:** > "What hook formula does this post use? https://linkedin.com/posts/..."
  • Network accessline 143
    > "What hook formula does this post use? https://linkedin.com/posts/..."
  • Network accessline 148
    **Rewrite your profile:** > "Optimize my LinkedIn profile for inbound leads: https://linkedin.com/in/yourname"
  • Network accessline 149
    > "Optimize my LinkedIn profile for inbound leads: https://linkedin.com/in/yourname"
  • Network accessline 187
    - [linkedin-outreach](https://github.com/smfardeen7/linkedin-skills/tree/add-linkedin-outreach-skill/skills/linkedin-outreach) by [@smfardeen7](https://github.com/smfardeen7) - drafts 300-character connection-request notes (10 scenario temp
  • Network accessline 195
    [Apify](https://console.apify.com/sign-up) 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:
  • Network accessline 212
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 215
    Sign in with OAuth on first use; no key on disk. Keep the `?actors=` filter: the bare `https://mcp.apify.com` also hands the agent `search-actors` and `call-actor`, which can
  • Network accessline 216
    `https://mcp.apify.com` also hands the agent `search-actors` and `call-actor`, which can
  • Network accessline 231
    [Publora](https://publora.com/?utm_source=github&utm_medium=readme&utm_campaign=linkedin-skills) is a publishing API that handles LinkedIn's quirks (3 different URL formats, reaction type mismatches, thread flattening bugs). The free tier g
  • Network accessline 233
    Publora also ships [official MCP skills](https://github.com/publora/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 craf
  • Network accessline 255
    **Step 1.** Sign up at https://app.publora.com/signup?utm_source=github&utm_medium=readme&utm_campaign=linkedin-skills (free)
  • Access to secretsline 266
    [Credential-related source omitted]
  • Access to secretsline 273
    [Credential-related source omitted]
  • Network accessline 294
    [Pixfaro](https://pixfaro.com) 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 s
  • Network accessline 296
    [Credential-related source omitted]
  • Network accessline 374
    parsed = parse_linkedin_url("https://www.linkedin.com/posts/slug-activity-7448808898326654978-iW20")
  • Network accessline 377
    # Read side (Apify) apify = ApifyClient()  # reads APIFY_TOKEN from env post = apify.fetch_post(post_url="https://www.linkedin.com/posts/...")
  • Network accessline 378
    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)
  • Network accessline 379
    post = apify.fetch_post(post_url="https://www.linkedin.com/posts/...")
  • Network accessline 380
    engagers = apify.fetch_post_engagers(post_url="https://www.linkedin.com/posts/...", max_items=50)
  • Access to secretsline 383
    [Credential-related source omitted]
  • Network accessline 411
    python lib/url_parser.py "https://www.linkedin.com/posts/<author-handle>_activity-<id>"
  • Network accessline 418
    - [Publora API docs](https://docs.publora.com/?utm_source=github&utm_medium=readme&utm_campaign=linkedin-skills) — endpoint reference for the publishing layer
  • Network accessline 419
    - [Apify console](https://console.apify.com) — manage actors, tokens, and usage for the read layer
  • Network accessline 420
    - [360Brew paper](https://arxiv.org/abs/2501.16450) — LinkedIn's ranking foundation model
  • Network accessline 421
    - [AuthoredUp 2026 reach data](https://authoredup.com/) — format-level reach benchmarks
  • Network accessline 425
    These skills come out of [Creative Content Crafts](https://cccrafts.ai), an engineering company. We build the machinery underneath a company's public voice: ICP parsing, engagement systems, content guardrails, and posting infrastructure. We
  • Network accessline 435
    MIT. Powered by [Publora](https://publora.com/?utm_source=github&utm_medium=readme&utm_campaign=linkedin-skills).
  • Network accessline 441
    - **linkedin-skills - LinkedIn (this repo)** - [x-skills](https://github.com/sergebulaev/x-skills) - X (Twitter)
  • Network accessline 442
    - [x-skills](https://github.com/sergebulaev/x-skills) - X (Twitter)
  • Network accessline 443
    - [instagram-skills](https://github.com/sergebulaev/instagram-skills) - Instagram
  • Network accessline 444
    - [youtube-skills](https://github.com/sergebulaev/youtube-skills) - YouTube
  • Network accessline 445
    - [threads-skills](https://github.com/sergebulaev/threads-skills) - Threads
  • Network accessline 446
    - [tiktok-skills](https://github.com/sergebulaev/tiktok-skills) - TikTok
  • Network accessline 447
    - [facebook-skills](https://github.com/sergebulaev/facebook-skills) - Facebook Pages
  • Network accessline 449
    Also: [Anthropic Skills repo](https://github.com/anthropics/skills), the `awesome-claude-skills` directory.

.codex-marketplace/linkedin-skills/SECURITY.md

  • Network accessline 20
    - **Preferred:** open a private report via   [GitHub Security Advisories](https://github.com/sergebulaev/linkedin-skills/security/advisories/new)
  • Network accessline 21
    [GitHub Security Advisories](https://github.com/sergebulaev/linkedin-skills/security/advisories/new)

.codex-marketplace/linkedin-skills/SKILL.md

  • Network accessline 8
    A bundle of 12 focused skills for LinkedIn content ops in 2026, built for Claude Code and Codex. Each skill is single-purpose, follows the draft → approval → publish pattern, and uses the [Publora API](https://publora.com/?utm_source=github
  • Network accessline 53
    On approval, skills auto-publish to LinkedIn (and optionally X, Threads) via the [Publora API](https://publora.com/?utm_source=github&utm_medium=skill&utm_campaign=linkedin-skills). Free tier includes 15 LinkedIn posts/month — more than mos
  • Network accessline 57
    1. Sign up free: **https://app.publora.com/signup?utm_source=github&utm_medium=skill&utm_campaign=linkedin-skills**
  • Access to secretsline 62
    [Credential-related source omitted]
  • Network accessline 77
    1. Sign up free: **https://console.apify.com/sign-up** (free tier ships with $5/month of credit, enough for ~1,000 post fetches or ~1,000 comment-thread fetches).
  • Network accessline 171
    - [Publora API docs](https://docs.publora.com/?utm_source=github&utm_medium=skill&utm_campaign=linkedin-skills) — full endpoint reference for the publishing layer
  • Network accessline 172
    - [Apify console](https://console.apify.com) — manage actors, tokens, and usage for the read layer
  • Network accessline 178
    Publishing powered by the [Publora REST API](https://publora.com/?utm_source=github&utm_medium=skill&utm_campaign=linkedin-skills). Algorithm insights via arXiv 2501.16450 (360Brew) and AuthoredUp 2026 reach data.
  • Network accessline 184
    > If this saved you time, a star on https://github.com/sergebulaev/linkedin-skills helps other people find it.

.codex-marketplace/linkedin-skills/assets/icon.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">

.codex-marketplace/linkedin-skills/lib/__init__.py

  • Executable scriptline 1
    Executable file

.codex-marketplace/linkedin-skills/lib/_env.py

  • Executable scriptline 1
    [Credential-related source omitted]
  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]
  • Access to secretsline 11
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]
  • Access to secretsline 30
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 39
    [Credential-related source omitted]
  • Access to secretsline 43
    [Credential-related source omitted]
  • Access to secretsline 44
    [Credential-related source omitted]
  • Access to secretsline 67
    [Credential-related source omitted]
  • Access to secretsline 89
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/lib/apify_client.py

  • Executable scriptline 1
    Executable file
  • Network accessline 80
    class ApifyClient:     BASE_URL = "https://api.apify.com/v2"
  • Network accessline 81
    BASE_URL = "https://api.apify.com/v2"
  • Access to secretsline 94
    [Credential-related source omitted]
  • Network accessline 99
    )         self.timeout = timeout         self._session = requests.Session()
  • Network accessline 100
    self.timeout = timeout         self._session = requests.Session()         self._cache: OrderedDict[str, tuple[float, Any]] = OrderedDict()
  • Network accessline 101
    self._session = requests.Session()

.codex-marketplace/linkedin-skills/lib/approval.py

  • Executable scriptline 1
    Executable file

.codex-marketplace/linkedin-skills/lib/backend_selector.py

  • Executable scriptline 1
    Executable file
  • Network accessline 10
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]
  • Network accessline 12
    Sign up: https://app.publora.com/signup
  • Network accessline 44
    PUBLORA_SIGNUP_URL = "https://app.publora.com/signup?utm_source=github&utm_medium=agent&utm_campaign=linkedin-skills"
  • Access to secretsline 82
    [Credential-related source omitted]
  • Access to secretsline 93
    [Credential-related source omitted]
  • Access to secretsline 107
    [Credential-related source omitted]
  • Access to secretsline 110
    [Credential-related source omitted]
  • Access to secretsline 115
    [Credential-related source omitted]
  • Access to secretsline 151
    [Credential-related source omitted]
  • Network accessline 200
    if backend == "manual":         target = kwargs.get("target_url") or "https://www.linkedin.com/in/me/recent-activity/all/"
  • Network accessline 201
    target = kwargs.get("target_url") or "https://www.linkedin.com/in/me/recent-activity/all/"
  • Access to secretsline 391
    [Credential-related source omitted]
  • Network accessline 461
    PIXFARO_SIGNUP_URL = "https://api.pixfaro.com/signup?ref=linkedin-skills"
  • Access to secretsline 488
    [Credential-related source omitted]
  • Access to secretsline 489
    [Credential-related source omitted]
  • Access to secretsline 495
    [Credential-related source omitted]
  • Access to secretsline 532
    [Credential-related source omitted]
  • Access to secretsline 536
    [Credential-related source omitted]
  • Network accessline 877
    print(manual_mode_message(             draft_text="This is a great draft for LinkedIn.",             target_url="https://www.linkedin.com/posts/someone-activity-123",
  • Network accessline 878
    draft_text="This is a great draft for LinkedIn.",             target_url="https://www.linkedin.com/posts/someone-activity-123",             kind="comment",
  • Network accessline 879
    target_url="https://www.linkedin.com/posts/someone-activity-123",

.codex-marketplace/linkedin-skills/lib/pixfaro_client.py

  • Executable scriptline 1
    Executable file
  • Network accessline 12
    Endpoints (OpenAI-SDK-compatible):   POST https://api.pixfaro.com/v1/images/generations
  • Network accessline 13
    POST https://api.pixfaro.com/v1/images/generations
  • Network accessline 62
    BASE_URL = "https://api.pixfaro.com/v1"
  • Access to secretsline 98
    [Credential-related source omitted]
  • Access to secretsline 100
    [Credential-related source omitted]
  • Access to secretsline 101
    [Credential-related source omitted]
  • Network accessline 102
    raise PixfaroError(                 "No Pixfaro API key. Set PIXFARO_TOKEN (pf_live_...) or pass api_key. "                 "Sign up at https://api.pixfaro.com/signup?ref=linkedin-skills."
  • Network accessline 103
    [Credential-related source omitted]
  • Access to secretsline 103
    [Credential-related source omitted]
  • Network accessline 104
    "Sign up at https://api.pixfaro.com/signup?ref=linkedin-skills."
  • Network accessline 105
    )         self.timeout = timeout         self._session = requests.Session()
  • Network accessline 106
    self.timeout = timeout         self._session = requests.Session()         self._cache: "OrderedDict[str, tuple[float, dict]]" = OrderedDict()
  • Network accessline 107
    self._session = requests.Session()
  • Access to secretsline 355
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/lib/publora_client.py

  • Executable scriptline 1
    Executable file
  • Network accessline 72
    class PubloraClient:     BASE_URL = "https://api.publora.com/api/v1"
  • Network accessline 73
    BASE_URL = "https://api.publora.com/api/v1"
  • Access to secretsline 75
    [Credential-related source omitted]
  • Access to secretsline 77
    [Credential-related source omitted]
  • Access to secretsline 79
    [Credential-related source omitted]
  • Access to secretsline 81
    [Credential-related source omitted]
  • Network accessline 82
    )         self.timeout = timeout         self._session = requests.Session()
  • Network accessline 83
    self.timeout = timeout         self._session = requests.Session()         self._session.headers.update(
  • Network accessline 84
    self._session = requests.Session()
  • Access to secretsline 87
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/lib/url_parser.py

  • Executable scriptline 1
    Executable file
  • Network accessline 5
    1. Post URL (from "Copy link to post"):    https://www.linkedin.com/posts/SLUG-activity-ACTIVITY_ID-XX
  • Network accessline 6
    https://www.linkedin.com/posts/SLUG-activity-ACTIVITY_ID-XX
  • Network accessline 8
    2. Comment URL (from "Copy link to comment"):    https://www.linkedin.com/feed/update/urn:li:activity:ACTIVITY_ID?commentUrn=urn%3Ali%3Acomment%3A%28activity%3AACTIVITY_ID%2CCOMMENT_ID%29
  • Network accessline 9
    https://www.linkedin.com/feed/update/urn:li:activity:ACTIVITY_ID?commentUrn=urn%3Ali%3Acomment%3A%28activity%3AACTIVITY_ID%2CCOMMENT_ID%29
  • Network accessline 11
    3. Share/ugcPost URL:    https://www.linkedin.com/posts/SLUG-share-SHARE_ID-XX
  • Network accessline 12
    https://www.linkedin.com/posts/SLUG-share-SHARE_ID-XX
  • Network accessline 54
    >>> p = parse_linkedin_url("https://www.linkedin.com/posts/<author-handle>_activity-<id>")
  • Network accessline 118
    examples = sys.argv[1:] or [         "https://www.linkedin.com/posts/<author-handle>_activity-<id>",
  • Network accessline 119
    "https://www.linkedin.com/posts/<author-handle>_activity-<id>",
  • Network accessline 120
    "https://www.linkedin.com/feed/update/urn:li:activity:7448387840113184768?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7448387840113184768%2C7449095071892672512%29",
  • Network accessline 121
    "https://www.linkedin.com/posts/ivantsybaev_one-broker-share-7449499107418669056-ZYt7",

.codex-marketplace/linkedin-skills/references/mcp-read-layer.md

  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12

.codex-marketplace/linkedin-skills/scripts/check_actor_inputs.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 31
    USER_AGENT = "linkedin-skills-actor-check/1 (+https://github.com/sergebulaev/linkedin-skills)"
  • Network accessline 32
    SCHEMA_URL = "https://api.apify.com/v2/acts/{actor}/builds/default"
  • Network accessline 35
    def fetch_schema(actor: str) -> dict:     request = urllib.request.Request(
  • Network accessline 36
    request = urllib.request.Request(
  • Network accessline 37
    SCHEMA_URL.format(actor=actor), headers={"User-Agent": USER_AGENT}     )     with urllib.request.urlopen(request, timeout=30) as response:
  • Network accessline 38
    )     with urllib.request.urlopen(request, timeout=30) as response:         build = json.load(response).get("data", {})
  • Network accessline 39
    with urllib.request.urlopen(request, timeout=30) as response:
  • Network accessline 63
    client = ApifyClient.__new__(ApifyClient)          # no token, never runs         calls = [             ("fetch_post", lambda: client.fetch_post("https://example.invalid/post")),
  • Network accessline 64
    calls = [             ("fetch_post", lambda: client.fetch_post("https://example.invalid/post")),             ("fetch_post_comments", lambda: client.fetch_post_comments(post_id="1")),
  • Network accessline 65
    ("fetch_post", lambda: client.fetch_post("https://example.invalid/post")),
  • Network accessline 68
    lambda: client.fetch_user_recent_comments(username="someone")),             ("fetch_post_engagers",              lambda: client.fetch_post_engagers(post_url="https://example.invalid/post")),
  • Network accessline 69
    ("fetch_post_engagers",              lambda: client.fetch_post_engagers(post_url="https://example.invalid/post")),         ]
  • Network accessline 70
    lambda: client.fetch_post_engagers(post_url="https://example.invalid/post")),

.codex-marketplace/linkedin-skills/scripts/check_config.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 11
    [Credential-related source omitted]
  • Access to secretsline 80
    [Credential-related source omitted]
  • Access to secretsline 81
    [Credential-related source omitted]
  • Access to secretsline 99
    [Credential-related source omitted]
  • Access to secretsline 100
    [Credential-related source omitted]
  • Access to secretsline 103
    [Credential-related source omitted]
  • Access to secretsline 105
    [Credential-related source omitted]
  • Access to secretsline 107
    [Credential-related source omitted]
  • Access to secretsline 120
    [Credential-related source omitted]
  • Network accessline 136
    r = requests.get(
  • Network accessline 137
    "https://api.apify.com/v2/users/me",
  • Access to secretsline 153
    [Credential-related source omitted]
  • Access to secretsline 157
    [Credential-related source omitted]
  • Access to secretsline 162
    [Credential-related source omitted]
  • Access to secretsline 165
    [Credential-related source omitted]
  • Access to secretsline 168
    [Credential-related source omitted]
  • Network accessline 190
    r = requests.get(
  • Network accessline 191
    "https://api.publora.com/api/v1/platform-connections",
  • Access to secretsline 223
    [Credential-related source omitted]
  • Access to secretsline 224
    [Credential-related source omitted]
  • Access to secretsline 237
    [Credential-related source omitted]
  • Network accessline 250
    r = requests.get(
  • Network accessline 251
    "https://api.pixfaro.com/v1/key",
  • Network accessline 268
    except Exception:                 pass             report.add(BAD, "  live check", f"HTTP 401: {msg or 'token rejected'} - keys are shown once; copy the whole pf_live_ string or mint a new one at https://api.pixfaro.com/dashboard")
  • Network accessline 269
    pass             report.add(BAD, "  live check", f"HTTP 401: {msg or 'token rejected'} - keys are shown once; copy the whole pf_live_ string or mint a new one at https://api.pixfaro.com/dashboard")         elif r.status_code == 403:
  • Network accessline 270
    report.add(BAD, "  live check", f"HTTP 401: {msg or 'token rejected'} - keys are shown once; copy the whole pf_live_ string or mint a new one at https://api.pixfaro.com/dashboard")
  • Access to secretsline 301
    [Credential-related source omitted]
  • Access to secretsline 317
    [Credential-related source omitted]
  • Access to secretsline 336
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/scripts/check_frontmatter.py

  • Executable scriptline 1
    #!/usr/bin/env python3

.codex-marketplace/linkedin-skills/scripts/check_no_secrets.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 44
    [Credential-related source omitted]
  • Access to secretsline 67
    [Credential-related source omitted]
  • Dangerous shell operationline 68
    [Credential-related source omitted]
  • Access to secretsline 108
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/scripts/post_comment.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 45
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/scripts/schedule_post.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 90
    [Credential-related source omitted]
  • Access to secretsline 91
    [Credential-related source omitted]
  • Network accessline 96
    "post",             text,             "https://www.linkedin.com/feed/",
  • Network accessline 97
    text,             "https://www.linkedin.com/feed/",             scheduled_time=scheduled_utc,
  • Network accessline 98
    "https://www.linkedin.com/feed/",

.codex-marketplace/linkedin-skills/scripts/selftest.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 52
    [Credential-related source omitted]
  • Access to secretsline 78
    [Credential-related source omitted]
  • Network accessline 146
    try:         r = requests.get(url, headers={"User-Agent": USER_AGENT, **headers},
  • Network accessline 147
    r = requests.get(url, headers={"User-Agent": USER_AGENT, **headers},
  • Access to secretsline 164
    [Credential-related source omitted]
  • Network accessline 168
    [Credential-related source omitted]
  • Network accessline 169
    [Credential-related source omitted]
  • Network accessline 170
    [Credential-related source omitted]
  • Network accessline 173
    plan = (user.get("plan") or {}).get("id", "?")             headroom = ""             code, limits = probe("https://api.apify.com/v2/users/me/limits",
  • Network accessline 174
    [Credential-related source omitted]
  • Network accessline 175
    code, limits = probe("https://api.apify.com/v2/users/me/limits",
  • Access to secretsline 190
    [Credential-related source omitted]
  • Access to secretsline 192
    [Credential-related source omitted]
  • Network accessline 194
    phase.add(PASS, "Publora", "key present, not verified offline")     else:         status, _ = probe("https://api.publora.com/api/v1/platform-limits", {"x-publora-key": key})
  • Network accessline 195
    else:         status, _ = probe("https://api.publora.com/api/v1/platform-limits", {"x-publora-key": key})         if status == 200:
  • Network accessline 196
    status, _ = probe("https://api.publora.com/api/v1/platform-limits", {"x-publora-key": key})
  • Network accessline 206
    code, conns = probe("https://api.publora.com/api/v1/platform-connections",
  • Access to secretsline 214
    [Credential-related source omitted]
  • Access to secretsline 224
    [Credential-related source omitted]
  • Network accessline 234
    [Credential-related source omitted]
  • Network accessline 235
    [Credential-related source omitted]
  • Network accessline 236
    [Credential-related source omitted]
  • Network accessline 338
    sys.path.insert(0, str(ROOT))     post = "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-" \
  • Network accessline 339
    post = "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-" \
  • Access to secretsline 395
    [Credential-related source omitted]
  • Access to secretsline 506
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/skills/linkedin-comment-drafter/SKILL.md

  • Network accessline 95
    > User: "Comment on this: https://www.linkedin.com/posts/<author-handle>_activity-<id>"

.codex-marketplace/linkedin-skills/skills/linkedin-comment-drafter/references/examples.md

  • Network accessline 5
    > User: "Comment on this: https://www.linkedin.com/posts/<author-handle>_activity-<id>"

.codex-marketplace/linkedin-skills/skills/linkedin-employee-advocacy/references/advocacy-principles.md

  • Network accessline 3
    Source: https://co.actor/use-cases/marketing-teams + 2026 practitioner research

.codex-marketplace/linkedin-skills/skills/linkedin-engager-analytics/references/output-spec.md

  • Network accessline 30
    > Input: analyze engagers on https://www.linkedin.com/posts/<author>_..., max 100

.codex-marketplace/linkedin-skills/skills/linkedin-hook-extractor/references/examples.md

  • Network accessline 5
    > **Input:** `https://www.linkedin.com/posts/dharmesh_every-b2b-software-company-is-or-should-activity-7448808898326654978-iW20`

.codex-marketplace/linkedin-skills/skills/linkedin-humanizer/references/detector-list.md

  • Network accessline 22
    - **Web**: https://gptzero.me
  • Network accessline 23
    - **API docs**: https://api.gptzero.me/v2/predict/text
  • Network accessline 32
    **Citation**: Liang, W., Yuksekgonul, M., Mao, Y., Wu, E., & Zou, J. (2023). "GPT detectors are biased against non-native English writers." *Patterns*, 4(7). https://doi.org/10.1016/j.patter.2023.100779
  • Network accessline 38
    - **Web**: https://originality.ai
  • Network accessline 39
    - **API docs**: https://docs.originality.ai/
  • Network accessline 54
    - **Web**: https://www.zerogpt.com - **API docs**: https://api.zerogpt.com/api/detect/detectText - **Auth**: `ApiKey` header. Free tier: 5 requests/min. Paid plans available.
  • Network accessline 55
    - **API docs**: https://api.zerogpt.com/api/detect/detectText - **Auth**: `ApiKey` header. Free tier: 5 requests/min. Paid plans available. - **Returns**: `data.fakePercentage` (0-100 integer), `data.isHuman` boolean.
  • Network accessline 64
    **Citation**: Multiple replicated demos on Twitter/X 2023-2024; Vanderbilt University communication on disabling Turnitin (Aug 2023) cited similar instability across the detector category. https://www.vanderbilt.edu/brightspace/2023/08/16/g
  • Network accessline 70
    - **Web**: https://sapling.ai/ai-content-detector - **API docs**: https://sapling.ai/docs/api/aidetect - **Auth**: `key` field in JSON body. Free tier: 50 requests/day.
  • Network accessline 71
    - **API docs**: https://sapling.ai/docs/api/aidetect - **Auth**: `key` field in JSON body. Free tier: 50 requests/day. - **Returns**: `score` (0.0-1.0), per-sentence `sentence_scores`.
  • Network accessline 80
    **Citation**: Sapling's own published benchmarks (https://sapling.ai/ai-content-detector/benchmark) acknowledge ~3-5% false positive rate even in their best-case dataset.
  • Network accessline 86
    - **Web**: https://copyleaks.com/ai-content-detector
  • Network accessline 87
    - **API docs**: https://api.copyleaks.com/documentation/v3/writer-detector/submit
  • Network accessline 107
    - **Turnitin AI Writing** — disabled by Vanderbilt, Cambridge, others. No public API; institutional only. - **Winston AI** — https://gowinston.ai. Paid only.
  • Network accessline 108
    - **Winston AI** — https://gowinston.ai. Paid only.
  • Network accessline 109
    - **Crossplag AI** — https://crossplag.com. Paid only.

.codex-marketplace/linkedin-skills/skills/linkedin-humanizer/references/rules-explainer.md

  • Network accessline 28
    - **Famous human user:** none. Zero recorded cases. - **Defense strength:** zero - **Citation:** Wikipedia, "Signs of AI writing" - https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 30
    - **Citation:** Wikipedia, "Signs of AI writing" - https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 36
    - **Famous human user:** none. - **Defense strength:** zero - **Citation:** Wikipedia "Signs of AI writing"; TechCrunch on OpenAI's discontinued classifier - https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-over-lo
  • Network accessline 38
    - **Citation:** Wikipedia "Signs of AI writing"; TechCrunch on OpenAI's discontinued classifier - https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-over-low-rate-of-accuracy/
  • Network accessline 119
    - **Joan Didion**, *The Year of Magical Thinking* (2005) - em dashes for parenthetical grief. - **Defense strength:** high (single use). The overuse threshold (3+ in a short post) flips to forensic - see rule 5. - **Citation:** Stanford HAI
  • Network accessline 121
    - **Citation:** Stanford HAI / Liang et al. (2023) on detector bias - https://hai.stanford.edu/news/ai-detectors-biased-against-non-native-english-writers ; TechCrunch on OpenAI classifier shutdown for low accuracy - https://techcrunch.com/
  • Network accessline 165
    - **Every traditionally typeset book since the invention of moveable type** - curly quotes are correct typography. Straight quotes are an ASCII compromise. - **Defense strength:** high. Flagging curly quotes as AI is detector incompetence -
  • Network accessline 167
    - **Citation:** *The Chicago Manual of Style*, 17th ed., §6.115 on quotation marks; Adelphi University lawsuit illustrating cost of false positives - https://www.plagiarismtoday.com/2025/10/14/adelphi-university-sued-over-ai-allegation/
  • Network accessline 195
    - **Stanford HAI / Liang et al. (2023)** - AI detectors are biased against non-native English writers. Single most-cited paper for "detectors over-fire on aesthetic patterns." https://hai.stanford.edu/news/ai-detectors-biased-against-non-na
  • Network accessline 196
    - **TechCrunch (25 July 2023)** - OpenAI shut down its own AI-text classifier, citing low rate of accuracy. The company that built GPT couldn't reliably detect GPT. https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-
  • Network accessline 197
    - **Wikipedia, "Signs of AI writing"** - community-maintained taxonomy. Source for forensic markers (oaicite, knowledge-cutoff) and the strict vocabulary list. https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 198
    - **Adelphi University lawsuit (Oct 2025)** - student sued the university after a false-positive AI accusation. The legal cost of trusting detectors on aesthetic signals. https://www.plagiarismtoday.com/2025/10/14/adelphi-university-sued-ov

.codex-marketplace/linkedin-skills/skills/linkedin-humanizer/references/tier-rationale.md

  • Network accessline 38
    - Wikipedia "Signs of AI writing" forensic-rule section: https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 61
    - Juzek & Ward (2025) "Why Does ChatGPT 'Delve' So Much?": https://arxiv.org/abs/2412.11385
  • Network accessline 99
    - Stanford HAI / Liang et al. 2023 "AI detectors biased against non-native English writers": https://hai.stanford.edu/news/ai-detectors-biased-against-non-native-english-writers
  • Network accessline 100
    - TechCrunch on OpenAI killing its own classifier at 26% accuracy: https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-over-low-rate-of-accuracy/
  • Network accessline 101
    - Newby v. Adelphi University (Oct 2025): https://www.plagiarismtoday.com/2025/10/14/adelphi-university-sued-over-ai-allegation/

.codex-marketplace/linkedin-skills/skills/linkedin-humanizer/scripts/detectors.env.example

  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 7
    [Credential-related source omitted]
  • Access to secretsline 8
    [Credential-related source omitted]
  • Access to secretsline 9
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]
  • Access to secretsline 13
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/skills/linkedin-humanizer/scripts/test_detectors.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 58
    [Credential-related source omitted]
  • Network accessline 60
    [Credential-related source omitted]
  • Access to secretsline 60
    [Credential-related source omitted]
  • Network accessline 61
    try:         r = requests.post(             "https://api.gptzero.me/v2/predict/text",
  • Network accessline 62
    r = requests.post(
  • Network accessline 63
    "https://api.gptzero.me/v2/predict/text",
  • Access to secretsline 77
    [Credential-related source omitted]
  • Network accessline 79
    [Credential-related source omitted]
  • Access to secretsline 79
    [Credential-related source omitted]
  • Network accessline 80
    try:         r = requests.post(             "https://api.originality.ai/api/v1/scan/ai",
  • Network accessline 81
    r = requests.post(
  • Network accessline 82
    "https://api.originality.ai/api/v1/scan/ai",
  • Access to secretsline 96
    [Credential-related source omitted]
  • Network accessline 98
    [Credential-related source omitted]
  • Access to secretsline 98
    [Credential-related source omitted]
  • Network accessline 99
    try:         r = requests.post(             "https://api.zerogpt.com/api/detect/detectText",
  • Network accessline 100
    r = requests.post(
  • Network accessline 101
    "https://api.zerogpt.com/api/detect/detectText",
  • Access to secretsline 115
    [Credential-related source omitted]
  • Network accessline 117
    [Credential-related source omitted]
  • Access to secretsline 117
    [Credential-related source omitted]
  • Network accessline 118
    try:         r = requests.post(             "https://api.sapling.ai/api/v1/aidetect",
  • Network accessline 119
    r = requests.post(
  • Network accessline 120
    "https://api.sapling.ai/api/v1/aidetect",
  • Access to secretsline 133
    [Credential-related source omitted]
  • Access to secretsline 138
    [Credential-related source omitted]
  • Network accessline 142
    login = requests.post(
  • Network accessline 143
    "https://id.copyleaks.com/v3/account/login/api",
  • Access to secretsline 148
    [Credential-related source omitted]
  • Network accessline 151
    scan_id = f"detector-test-{abs(hash(text)) % 10**8}"         r = requests.post(
  • Network accessline 152
    r = requests.post(
  • Network accessline 153
    f"https://api.copyleaks.com/v2/writer-detector/{scan_id}/check",
  • Network accessline 186
    MANUAL_DETECTORS = {     "Writer.com":  "https://writer.com/ai-content-detector/",
  • Network accessline 187
    "Writer.com":  "https://writer.com/ai-content-detector/",
  • Network accessline 188
    "Scribbr":     "https://www.scribbr.com/ai-detector/",
  • Network accessline 189
    "QuillBot":    "https://quillbot.com/ai-content-detector",
  • Network accessline 190
    "Hive Moderation": "https://hivemoderation.com/ai-generated-content-detection",
  • Access to secretsline 291
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/skills/linkedin-humanizer/sub-skills/detector-tester.md

  • Access to secretsline 95
    [Credential-related source omitted]

.codex-marketplace/linkedin-skills/skills/linkedin-post-writer/SKILL.md

  • Network accessline 92
    6. **Optional illustration.** If the post would land better with a visual (or the user asks), offer one: draft an image and generate it with `lib.illustrate(prompt, kind="wide")`, pulling brand handle/color from Voice & Brand Profile §6 for
  • Network accessline 94
    8. **On approval.** Call `lib.publish(kind="post", draft_text=<approved>, target_url="https://www.linkedin.com/post/new/", platforms=[{"platform":"linkedin","platformId":<id>}], scheduled_time=<iso_or_None>, media_urls=<list_or_None>)`. The

.codex-marketplace/linkedin-skills/skills/linkedin-reply-handler/references/examples.md

  • Network accessline 5
    > User: "Reply to this: https://www.linkedin.com/feed/update/urn:li:activity:7449018753880834048?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7449018753880834048%2C7449758545140453376%29"
  • Network accessline 15
    > User: "Reply to everyone on this post: https://www.linkedin.com/posts/<author>_activity-<id>"

.codex-marketplace/linkedin-skills/skills/linkedin-reply-handler/references/threading-rules.md

  • Network accessline 58
    https://www.linkedin.com/feed/update/urn:li:activity:P?commentUrn=urn%3Ali%3Acomment%3A%28activity%3AP%2C111%29
  • Network accessline 63
    https://www.linkedin.com/feed/update/urn:li:activity:P?commentUrn=urn%3Ali%3Acomment%3A%28activity%3AP%2C111%29&replyUrn=urn%3Ali%3Acomment%3A%28activity%3AP%2C222%29

.codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md

  • Network accessline 31
    7. **Humanizer pass.** Run the scrub: 2026 AI vocab by density, em dashes above the cap (about one per 100 words), stacked rule-of-three triads, generic openers and reveal bridges. Keep the user's real numbers and named entities from the so
  • Network accessline 33
    9. **On approval.** Publish via `lib.publish(kind="post", draft_text=<approved>, target_url="https://www.linkedin.com/post/new/", platforms=[{"platform":"linkedin","platformId":<id>}], scheduled_time=<iso_or_None>)`. The wrapper handles Pub

.codex-plugin/plugin.json

  • Network accessline 5
    "author": {     "name": "Serge Bulaev",     "url": "https://github.com/sergebulaev"
  • Network accessline 6
    "name": "Serge Bulaev",     "url": "https://github.com/sergebulaev"   },
  • Network accessline 7
    "url": "https://github.com/sergebulaev"
  • Network accessline 8
    },   "license": "MIT",   "homepage": "https://github.com/sergebulaev/linkedin-skills",
  • Network accessline 9
    "license": "MIT",   "homepage": "https://github.com/sergebulaev/linkedin-skills",   "repository": "https://github.com/sergebulaev/linkedin-skills",
  • Network accessline 10
    "homepage": "https://github.com/sergebulaev/linkedin-skills",
  • Network accessline 11
    "repository": "https://github.com/sergebulaev/linkedin-skills",
  • Network accessline 32
    "Write"     ],     "websiteURL": "https://github.com/sergebulaev/linkedin-skills",
  • Network accessline 33
    ],     "websiteURL": "https://github.com/sergebulaev/linkedin-skills",     "defaultPrompt": [
  • Network accessline 34
    "websiteURL": "https://github.com/sergebulaev/linkedin-skills",

.codexignore

  • Access to secretsline 5
    [Credential-related source omitted]

.env.example

  • Access to secretsline 4
    [Credential-related source omitted]
  • Network accessline 7
    # Publora API key — sign up free at https://app.publora.com/signup?utm_source=github&utm_medium=env-example&utm_campaign=linkedin-skills
  • Access to secretsline 9
    [Credential-related source omitted]
  • Network accessline 19
    # per 1,000 results. # # Sign up: https://console.apify.com/sign-up
  • Network accessline 20
    [Credential-related source omitted]
  • Network accessline 21
    # Sign up: https://console.apify.com/sign-up
  • Network accessline 22
    [Credential-related source omitted]
  • Network accessline 33
    # Pixel-exact text/logo overlay keeps every asset on-brand. # # Sign up: https://api.pixfaro.com/signup?ref=linkedin-skills  (key format: pf_live_...)
  • Network accessline 34
    # # Sign up: https://api.pixfaro.com/signup?ref=linkedin-skills  (key format: pf_live_...) # This file must sit at the root of the linkedin-skills folder; verify with
  • Network accessline 35
    # Sign up: https://api.pixfaro.com/signup?ref=linkedin-skills  (key format: pf_live_...)
  • Access to secretsline 48
    [Credential-related source omitted]

.gitignore

  • Access to secretsline 1
    [Credential-related source omitted]

README.md

  • Network accessline 7
    <p align="center">   <a href="https://github.com/hesreallyhim/awesome-claude-code"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Claude Code"></a>
  • Network accessline 8
    <a href="https://github.com/hesreallyhim/awesome-claude-code"><img src="https://awesome.re/mentioned-badge.svg" alt="Mentioned in Awesome Claude Code"></a>
  • Network accessline 9
    <img src="https://img.shields.io/github/v/release/sergebulaev/linkedin-skills?color=1E40AF&label=release" alt="Latest release">
  • Network accessline 10
    <img src="https://img.shields.io/badge/Claude_Code-Compatible-D97757?logo=anthropic&logoColor=white" alt="Claude Code Compatible">
  • Network accessline 11
    <img src="https://img.shields.io/badge/Codex-Compatible-111827" alt="Codex Compatible">
  • Network accessline 12
    <img src="https://img.shields.io/badge/Claude-Skills-8A63D2" alt="Claude Skills">
  • Network accessline 13
    <img src="https://img.shields.io/badge/License-MIT-22C55E.svg" alt="MIT License">
  • Network accessline 14
    <img src="https://img.shields.io/github/stars/sergebulaev/linkedin-skills?style=social" alt="GitHub stars">
  • Network accessline 15
    <img src="https://img.shields.io/badge/PRs-welcome-F59E0B.svg" alt="PRs Welcome">
  • Network accessline 20
    > **On another platform too?** The same team ships matching marketing skill bundles for [X (Twitter)](https://github.com/sergebulaev/x-skills) · [Instagram](https://github.com/sergebulaev/instagram-skills) · [YouTube](https://github.com/ser
  • Network accessline 36
    git clone https://github.com/sergebulaev/linkedin-skills.git
  • Network accessline 44
    1. Open [claude.ai](https://claude.ai) and click **Customize** in the sidebar
  • Network accessline 72
    git clone https://github.com/sergebulaev/linkedin-skills.git
  • Network accessline 94
    git clone https://github.com/sergebulaev/linkedin-skills.git
  • Network accessline 114
    git clone https://github.com/sergebulaev/linkedin-skills.git ~/.hermes/skills/linkedin-skills
  • Network accessline 127
    > **Found this useful? [Star the repo](https://github.com/sergebulaev/linkedin-skills).** 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 on
  • Network accessline 136
    **Comment on someone's post:** > "Comment on this post: https://linkedin.com/posts/... — I want to add a thoughtful take."
  • Network accessline 137
    > "Comment on this post: https://linkedin.com/posts/... — I want to add a thoughtful take."
  • Network accessline 142
    **Reverse-engineer a viral post:** > "What hook formula does this post use? https://linkedin.com/posts/..."
  • Network accessline 143
    > "What hook formula does this post use? https://linkedin.com/posts/..."
  • Network accessline 148
    **Rewrite your profile:** > "Optimize my LinkedIn profile for inbound leads: https://linkedin.com/in/yourname"
  • Network accessline 149
    > "Optimize my LinkedIn profile for inbound leads: https://linkedin.com/in/yourname"
  • Network accessline 187
    - [linkedin-outreach](https://github.com/smfardeen7/linkedin-skills/tree/add-linkedin-outreach-skill/skills/linkedin-outreach) by [@smfardeen7](https://github.com/smfardeen7) - drafts 300-character connection-request notes (10 scenario temp
  • Network accessline 195
    [Apify](https://console.apify.com/sign-up) 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:
  • Network accessline 212
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 215
    Sign in with OAuth on first use; no key on disk. Keep the `?actors=` filter: the bare `https://mcp.apify.com` also hands the agent `search-actors` and `call-actor`, which can
  • Network accessline 216
    `https://mcp.apify.com` also hands the agent `search-actors` and `call-actor`, which can
  • Network accessline 231
    [Publora](https://publora.com/?utm_source=github&utm_medium=readme&utm_campaign=linkedin-skills) is a publishing API that handles LinkedIn's quirks (3 different URL formats, reaction type mismatches, thread flattening bugs). The free tier g
  • Network accessline 233
    Publora also ships [official MCP skills](https://github.com/publora/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 craf
  • Network accessline 255
    **Step 1.** Sign up at https://app.publora.com/signup?utm_source=github&utm_medium=readme&utm_campaign=linkedin-skills (free)
  • Access to secretsline 266
    [Credential-related source omitted]
  • Access to secretsline 273
    [Credential-related source omitted]
  • Network accessline 294
    [Pixfaro](https://pixfaro.com) 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 s
  • Network accessline 296
    [Credential-related source omitted]
  • Network accessline 374
    parsed = parse_linkedin_url("https://www.linkedin.com/posts/slug-activity-7448808898326654978-iW20")
  • Network accessline 377
    # Read side (Apify) apify = ApifyClient()  # reads APIFY_TOKEN from env post = apify.fetch_post(post_url="https://www.linkedin.com/posts/...")
  • Network accessline 378
    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)
  • Network accessline 379
    post = apify.fetch_post(post_url="https://www.linkedin.com/posts/...")
  • Network accessline 380
    engagers = apify.fetch_post_engagers(post_url="https://www.linkedin.com/posts/...", max_items=50)
  • Access to secretsline 383
    [Credential-related source omitted]
  • Network accessline 411
    python lib/url_parser.py "https://www.linkedin.com/posts/<author-handle>_activity-<id>"
  • Network accessline 418
    - [Publora API docs](https://docs.publora.com/?utm_source=github&utm_medium=readme&utm_campaign=linkedin-skills) — endpoint reference for the publishing layer
  • Network accessline 419
    - [Apify console](https://console.apify.com) — manage actors, tokens, and usage for the read layer
  • Network accessline 420
    - [360Brew paper](https://arxiv.org/abs/2501.16450) — LinkedIn's ranking foundation model
  • Network accessline 421
    - [AuthoredUp 2026 reach data](https://authoredup.com/) — format-level reach benchmarks
  • Network accessline 425
    These skills come out of [Creative Content Crafts](https://cccrafts.ai), an engineering company. We build the machinery underneath a company's public voice: ICP parsing, engagement systems, content guardrails, and posting infrastructure. We
  • Network accessline 435
    MIT. Powered by [Publora](https://publora.com/?utm_source=github&utm_medium=readme&utm_campaign=linkedin-skills).
  • Network accessline 441
    - **linkedin-skills - LinkedIn (this repo)** - [x-skills](https://github.com/sergebulaev/x-skills) - X (Twitter)
  • Network accessline 442
    - [x-skills](https://github.com/sergebulaev/x-skills) - X (Twitter)
  • Network accessline 443
    - [instagram-skills](https://github.com/sergebulaev/instagram-skills) - Instagram
  • Network accessline 444
    - [youtube-skills](https://github.com/sergebulaev/youtube-skills) - YouTube
  • Network accessline 445
    - [threads-skills](https://github.com/sergebulaev/threads-skills) - Threads
  • Network accessline 446
    - [tiktok-skills](https://github.com/sergebulaev/tiktok-skills) - TikTok
  • Network accessline 447
    - [facebook-skills](https://github.com/sergebulaev/facebook-skills) - Facebook Pages
  • Network accessline 449
    Also: [Anthropic Skills repo](https://github.com/anthropics/skills), the `awesome-claude-skills` directory.

SECURITY.md

  • Network accessline 20
    - **Preferred:** open a private report via   [GitHub Security Advisories](https://github.com/sergebulaev/linkedin-skills/security/advisories/new)
  • Network accessline 21
    [GitHub Security Advisories](https://github.com/sergebulaev/linkedin-skills/security/advisories/new)

SKILL.md

  • Network accessline 8
    A bundle of 12 focused skills for LinkedIn content ops in 2026, built for Claude Code and Codex. Each skill is single-purpose, follows the draft → approval → publish pattern, and uses the [Publora API](https://publora.com/?utm_source=github
  • Network accessline 53
    On approval, skills auto-publish to LinkedIn (and optionally X, Threads) via the [Publora API](https://publora.com/?utm_source=github&utm_medium=skill&utm_campaign=linkedin-skills). Free tier includes 15 LinkedIn posts/month — more than mos
  • Network accessline 57
    1. Sign up free: **https://app.publora.com/signup?utm_source=github&utm_medium=skill&utm_campaign=linkedin-skills**
  • Access to secretsline 62
    [Credential-related source omitted]
  • Network accessline 77
    1. Sign up free: **https://console.apify.com/sign-up** (free tier ships with $5/month of credit, enough for ~1,000 post fetches or ~1,000 comment-thread fetches).
  • Network accessline 171
    - [Publora API docs](https://docs.publora.com/?utm_source=github&utm_medium=skill&utm_campaign=linkedin-skills) — full endpoint reference for the publishing layer
  • Network accessline 172
    - [Apify console](https://console.apify.com) — manage actors, tokens, and usage for the read layer
  • Network accessline 178
    Publishing powered by the [Publora REST API](https://publora.com/?utm_source=github&utm_medium=skill&utm_campaign=linkedin-skills). Algorithm insights via arXiv 2501.16450 (360Brew) and AuthoredUp 2026 reach data.
  • Network accessline 184
    > If this saved you time, a star on https://github.com/sergebulaev/linkedin-skills helps other people find it.

assets/icon.svg

  • Network accessline 1
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512">

evals/run_evals.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 48
    comments = load("apify_comments.json")     threaded = next(c for c in comments if c.get("replies"))     lines = [f"POST: https://www.linkedin.com/feed/update/urn:li:activity:7320867199693246465/", ""]
  • Network accessline 49
    threaded = next(c for c in comments if c.get("replies"))     lines = [f"POST: https://www.linkedin.com/feed/update/urn:li:activity:7320867199693246465/", ""]     lines.append(f"Top-level comment by {threaded['author']['name']} "
  • Network accessline 50
    lines = [f"POST: https://www.linkedin.com/feed/update/urn:li:activity:7320867199693246465/", ""]
  • Network accessline 169
    "truly a game changer.\n\n"         "Here's the thing: we cut deploy time from 47 minutes to 6. "         "Read the full story at https://example.com/report"
  • Network accessline 170
    "Here's the thing: we cut deploy time from 47 minutes to 6. "         "Read the full story at https://example.com/report"     )
  • Network accessline 171
    "Read the full story at https://example.com/report"

lib/__init__.py

  • Executable scriptline 1
    Executable file

lib/_env.py

  • Executable scriptline 1
    [Credential-related source omitted]
  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]
  • Access to secretsline 11
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]
  • Access to secretsline 30
    [Credential-related source omitted]
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 39
    [Credential-related source omitted]
  • Access to secretsline 43
    [Credential-related source omitted]
  • Access to secretsline 44
    [Credential-related source omitted]
  • Access to secretsline 67
    [Credential-related source omitted]
  • Access to secretsline 89
    [Credential-related source omitted]

lib/apify_client.py

  • Executable scriptline 1
    Executable file
  • Network accessline 80
    class ApifyClient:     BASE_URL = "https://api.apify.com/v2"
  • Network accessline 81
    BASE_URL = "https://api.apify.com/v2"
  • Access to secretsline 94
    [Credential-related source omitted]
  • Network accessline 99
    )         self.timeout = timeout         self._session = requests.Session()
  • Network accessline 100
    self.timeout = timeout         self._session = requests.Session()         self._cache: OrderedDict[str, tuple[float, Any]] = OrderedDict()
  • Network accessline 101
    self._session = requests.Session()

lib/approval.py

  • Executable scriptline 1
    Executable file

lib/backend_selector.py

  • Executable scriptline 1
    Executable file
  • Network accessline 10
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]
  • Network accessline 12
    Sign up: https://app.publora.com/signup
  • Network accessline 44
    PUBLORA_SIGNUP_URL = "https://app.publora.com/signup?utm_source=github&utm_medium=agent&utm_campaign=linkedin-skills"
  • Access to secretsline 82
    [Credential-related source omitted]
  • Access to secretsline 93
    [Credential-related source omitted]
  • Access to secretsline 107
    [Credential-related source omitted]
  • Access to secretsline 110
    [Credential-related source omitted]
  • Access to secretsline 115
    [Credential-related source omitted]
  • Access to secretsline 151
    [Credential-related source omitted]
  • Network accessline 200
    if backend == "manual":         target = kwargs.get("target_url") or "https://www.linkedin.com/in/me/recent-activity/all/"
  • Network accessline 201
    target = kwargs.get("target_url") or "https://www.linkedin.com/in/me/recent-activity/all/"
  • Access to secretsline 391
    [Credential-related source omitted]
  • Network accessline 461
    PIXFARO_SIGNUP_URL = "https://api.pixfaro.com/signup?ref=linkedin-skills"
  • Access to secretsline 488
    [Credential-related source omitted]
  • Access to secretsline 489
    [Credential-related source omitted]
  • Access to secretsline 495
    [Credential-related source omitted]
  • Access to secretsline 532
    [Credential-related source omitted]
  • Access to secretsline 536
    [Credential-related source omitted]
  • Network accessline 877
    print(manual_mode_message(             draft_text="This is a great draft for LinkedIn.",             target_url="https://www.linkedin.com/posts/someone-activity-123",
  • Network accessline 878
    draft_text="This is a great draft for LinkedIn.",             target_url="https://www.linkedin.com/posts/someone-activity-123",             kind="comment",
  • Network accessline 879
    target_url="https://www.linkedin.com/posts/someone-activity-123",

lib/pixfaro_client.py

  • Executable scriptline 1
    Executable file
  • Network accessline 12
    Endpoints (OpenAI-SDK-compatible):   POST https://api.pixfaro.com/v1/images/generations
  • Network accessline 13
    POST https://api.pixfaro.com/v1/images/generations
  • Network accessline 62
    BASE_URL = "https://api.pixfaro.com/v1"
  • Access to secretsline 98
    [Credential-related source omitted]
  • Access to secretsline 100
    [Credential-related source omitted]
  • Access to secretsline 101
    [Credential-related source omitted]
  • Network accessline 102
    raise PixfaroError(                 "No Pixfaro API key. Set PIXFARO_TOKEN (pf_live_...) or pass api_key. "                 "Sign up at https://api.pixfaro.com/signup?ref=linkedin-skills."
  • Network accessline 103
    [Credential-related source omitted]
  • Access to secretsline 103
    [Credential-related source omitted]
  • Network accessline 104
    "Sign up at https://api.pixfaro.com/signup?ref=linkedin-skills."
  • Network accessline 105
    )         self.timeout = timeout         self._session = requests.Session()
  • Network accessline 106
    self.timeout = timeout         self._session = requests.Session()         self._cache: "OrderedDict[str, tuple[float, dict]]" = OrderedDict()
  • Network accessline 107
    self._session = requests.Session()
  • Access to secretsline 355
    [Credential-related source omitted]

lib/publora_client.py

  • Executable scriptline 1
    Executable file
  • Network accessline 72
    class PubloraClient:     BASE_URL = "https://api.publora.com/api/v1"
  • Network accessline 73
    BASE_URL = "https://api.publora.com/api/v1"
  • Access to secretsline 75
    [Credential-related source omitted]
  • Access to secretsline 77
    [Credential-related source omitted]
  • Access to secretsline 79
    [Credential-related source omitted]
  • Access to secretsline 81
    [Credential-related source omitted]
  • Network accessline 82
    )         self.timeout = timeout         self._session = requests.Session()
  • Network accessline 83
    self.timeout = timeout         self._session = requests.Session()         self._session.headers.update(
  • Network accessline 84
    self._session = requests.Session()
  • Access to secretsline 87
    [Credential-related source omitted]

lib/url_parser.py

  • Executable scriptline 1
    Executable file
  • Network accessline 5
    1. Post URL (from "Copy link to post"):    https://www.linkedin.com/posts/SLUG-activity-ACTIVITY_ID-XX
  • Network accessline 6
    https://www.linkedin.com/posts/SLUG-activity-ACTIVITY_ID-XX
  • Network accessline 8
    2. Comment URL (from "Copy link to comment"):    https://www.linkedin.com/feed/update/urn:li:activity:ACTIVITY_ID?commentUrn=urn%3Ali%3Acomment%3A%28activity%3AACTIVITY_ID%2CCOMMENT_ID%29
  • Network accessline 9
    https://www.linkedin.com/feed/update/urn:li:activity:ACTIVITY_ID?commentUrn=urn%3Ali%3Acomment%3A%28activity%3AACTIVITY_ID%2CCOMMENT_ID%29
  • Network accessline 11
    3. Share/ugcPost URL:    https://www.linkedin.com/posts/SLUG-share-SHARE_ID-XX
  • Network accessline 12
    https://www.linkedin.com/posts/SLUG-share-SHARE_ID-XX
  • Network accessline 54
    >>> p = parse_linkedin_url("https://www.linkedin.com/posts/<author-handle>_activity-<id>")
  • Network accessline 118
    examples = sys.argv[1:] or [         "https://www.linkedin.com/posts/<author-handle>_activity-<id>",
  • Network accessline 119
    "https://www.linkedin.com/posts/<author-handle>_activity-<id>",
  • Network accessline 120
    "https://www.linkedin.com/feed/update/urn:li:activity:7448387840113184768?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7448387840113184768%2C7449095071892672512%29",
  • Network accessline 121
    "https://www.linkedin.com/posts/ivantsybaev_one-broker-share-7449499107418669056-ZYt7",

references/mcp-read-layer.md

  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 17
    https://mcp.apify.com?actors=apimaestro/linkedin-post-detail,apimaestro/linkedin-post-comments-replies-engagements-scraper-no-cookies,apimaestro/linkedin-profile-comments,scraping_solutions/linkedin-posts-engagers-likers-and-commenters-no-c
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12
  • Network accessline 25
    **Use the filtered URL, not the bare one.** `https://mcp.apify.com` exposes 12

scripts/check_actor_inputs.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 31
    USER_AGENT = "linkedin-skills-actor-check/1 (+https://github.com/sergebulaev/linkedin-skills)"
  • Network accessline 32
    SCHEMA_URL = "https://api.apify.com/v2/acts/{actor}/builds/default"
  • Network accessline 35
    def fetch_schema(actor: str) -> dict:     request = urllib.request.Request(
  • Network accessline 36
    request = urllib.request.Request(
  • Network accessline 37
    SCHEMA_URL.format(actor=actor), headers={"User-Agent": USER_AGENT}     )     with urllib.request.urlopen(request, timeout=30) as response:
  • Network accessline 38
    )     with urllib.request.urlopen(request, timeout=30) as response:         build = json.load(response).get("data", {})
  • Network accessline 39
    with urllib.request.urlopen(request, timeout=30) as response:
  • Network accessline 63
    client = ApifyClient.__new__(ApifyClient)          # no token, never runs         calls = [             ("fetch_post", lambda: client.fetch_post("https://example.invalid/post")),
  • Network accessline 64
    calls = [             ("fetch_post", lambda: client.fetch_post("https://example.invalid/post")),             ("fetch_post_comments", lambda: client.fetch_post_comments(post_id="1")),
  • Network accessline 65
    ("fetch_post", lambda: client.fetch_post("https://example.invalid/post")),
  • Network accessline 68
    lambda: client.fetch_user_recent_comments(username="someone")),             ("fetch_post_engagers",              lambda: client.fetch_post_engagers(post_url="https://example.invalid/post")),
  • Network accessline 69
    ("fetch_post_engagers",              lambda: client.fetch_post_engagers(post_url="https://example.invalid/post")),         ]
  • Network accessline 70
    lambda: client.fetch_post_engagers(post_url="https://example.invalid/post")),

scripts/check_config.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 11
    [Credential-related source omitted]
  • Access to secretsline 80
    [Credential-related source omitted]
  • Access to secretsline 81
    [Credential-related source omitted]
  • Access to secretsline 99
    [Credential-related source omitted]
  • Access to secretsline 100
    [Credential-related source omitted]
  • Access to secretsline 103
    [Credential-related source omitted]
  • Access to secretsline 105
    [Credential-related source omitted]
  • Access to secretsline 107
    [Credential-related source omitted]
  • Access to secretsline 120
    [Credential-related source omitted]
  • Network accessline 136
    r = requests.get(
  • Network accessline 137
    "https://api.apify.com/v2/users/me",
  • Access to secretsline 153
    [Credential-related source omitted]
  • Access to secretsline 157
    [Credential-related source omitted]
  • Access to secretsline 162
    [Credential-related source omitted]
  • Access to secretsline 165
    [Credential-related source omitted]
  • Access to secretsline 168
    [Credential-related source omitted]
  • Network accessline 190
    r = requests.get(
  • Network accessline 191
    "https://api.publora.com/api/v1/platform-connections",
  • Access to secretsline 223
    [Credential-related source omitted]
  • Access to secretsline 224
    [Credential-related source omitted]
  • Access to secretsline 237
    [Credential-related source omitted]
  • Network accessline 250
    r = requests.get(
  • Network accessline 251
    "https://api.pixfaro.com/v1/key",
  • Network accessline 268
    except Exception:                 pass             report.add(BAD, "  live check", f"HTTP 401: {msg or 'token rejected'} - keys are shown once; copy the whole pf_live_ string or mint a new one at https://api.pixfaro.com/dashboard")
  • Network accessline 269
    pass             report.add(BAD, "  live check", f"HTTP 401: {msg or 'token rejected'} - keys are shown once; copy the whole pf_live_ string or mint a new one at https://api.pixfaro.com/dashboard")         elif r.status_code == 403:
  • Network accessline 270
    report.add(BAD, "  live check", f"HTTP 401: {msg or 'token rejected'} - keys are shown once; copy the whole pf_live_ string or mint a new one at https://api.pixfaro.com/dashboard")
  • Access to secretsline 301
    [Credential-related source omitted]
  • Access to secretsline 317
    [Credential-related source omitted]
  • Access to secretsline 336
    [Credential-related source omitted]

scripts/check_frontmatter.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/check_markdown_references.py

  • Executable scriptline 1
    #!/usr/bin/env python3

scripts/check_no_secrets.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 32
    [Credential-related source omitted]
  • Access to secretsline 44
    [Credential-related source omitted]
  • Access to secretsline 67
    [Credential-related source omitted]
  • Dangerous shell operationline 68
    [Credential-related source omitted]
  • Access to secretsline 108
    [Credential-related source omitted]

scripts/post_comment.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 45
    [Credential-related source omitted]

scripts/schedule_post.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 90
    [Credential-related source omitted]
  • Access to secretsline 91
    [Credential-related source omitted]
  • Network accessline 96
    "post",             text,             "https://www.linkedin.com/feed/",
  • Network accessline 97
    text,             "https://www.linkedin.com/feed/",             scheduled_time=scheduled_utc,
  • Network accessline 98
    "https://www.linkedin.com/feed/",

scripts/selftest.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 52
    [Credential-related source omitted]
  • Access to secretsline 78
    [Credential-related source omitted]
  • Network accessline 146
    try:         r = requests.get(url, headers={"User-Agent": USER_AGENT, **headers},
  • Network accessline 147
    r = requests.get(url, headers={"User-Agent": USER_AGENT, **headers},
  • Access to secretsline 164
    [Credential-related source omitted]
  • Network accessline 168
    [Credential-related source omitted]
  • Network accessline 169
    [Credential-related source omitted]
  • Network accessline 170
    [Credential-related source omitted]
  • Network accessline 173
    plan = (user.get("plan") or {}).get("id", "?")             headroom = ""             code, limits = probe("https://api.apify.com/v2/users/me/limits",
  • Network accessline 174
    [Credential-related source omitted]
  • Network accessline 175
    code, limits = probe("https://api.apify.com/v2/users/me/limits",
  • Access to secretsline 190
    [Credential-related source omitted]
  • Access to secretsline 192
    [Credential-related source omitted]
  • Network accessline 194
    phase.add(PASS, "Publora", "key present, not verified offline")     else:         status, _ = probe("https://api.publora.com/api/v1/platform-limits", {"x-publora-key": key})
  • Network accessline 195
    else:         status, _ = probe("https://api.publora.com/api/v1/platform-limits", {"x-publora-key": key})         if status == 200:
  • Network accessline 196
    status, _ = probe("https://api.publora.com/api/v1/platform-limits", {"x-publora-key": key})
  • Network accessline 206
    code, conns = probe("https://api.publora.com/api/v1/platform-connections",
  • Access to secretsline 214
    [Credential-related source omitted]
  • Access to secretsline 224
    [Credential-related source omitted]
  • Network accessline 234
    [Credential-related source omitted]
  • Network accessline 235
    [Credential-related source omitted]
  • Network accessline 236
    [Credential-related source omitted]
  • Network accessline 338
    sys.path.insert(0, str(ROOT))     post = "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-" \
  • Network accessline 339
    post = "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-" \
  • Access to secretsline 395
    [Credential-related source omitted]
  • Access to secretsline 506
    [Credential-related source omitted]

scripts/sync_codex_marketplace.py

  • Executable scriptline 1
    #!/usr/bin/env python3

skills/linkedin-comment-drafter/SKILL.md

  • Network accessline 95
    > User: "Comment on this: https://www.linkedin.com/posts/<author-handle>_activity-<id>"

skills/linkedin-comment-drafter/references/examples.md

  • Network accessline 5
    > User: "Comment on this: https://www.linkedin.com/posts/<author-handle>_activity-<id>"

skills/linkedin-employee-advocacy/references/advocacy-principles.md

  • Network accessline 3
    Source: https://co.actor/use-cases/marketing-teams + 2026 practitioner research

skills/linkedin-engager-analytics/references/output-spec.md

  • Network accessline 30
    > Input: analyze engagers on https://www.linkedin.com/posts/<author>_..., max 100

skills/linkedin-hook-extractor/references/examples.md

  • Network accessline 5
    > **Input:** `https://www.linkedin.com/posts/dharmesh_every-b2b-software-company-is-or-should-activity-7448808898326654978-iW20`

skills/linkedin-humanizer/references/detector-list.md

  • Network accessline 22
    - **Web**: https://gptzero.me
  • Network accessline 23
    - **API docs**: https://api.gptzero.me/v2/predict/text
  • Network accessline 32
    **Citation**: Liang, W., Yuksekgonul, M., Mao, Y., Wu, E., & Zou, J. (2023). "GPT detectors are biased against non-native English writers." *Patterns*, 4(7). https://doi.org/10.1016/j.patter.2023.100779
  • Network accessline 38
    - **Web**: https://originality.ai
  • Network accessline 39
    - **API docs**: https://docs.originality.ai/
  • Network accessline 54
    - **Web**: https://www.zerogpt.com - **API docs**: https://api.zerogpt.com/api/detect/detectText - **Auth**: `ApiKey` header. Free tier: 5 requests/min. Paid plans available.
  • Network accessline 55
    - **API docs**: https://api.zerogpt.com/api/detect/detectText - **Auth**: `ApiKey` header. Free tier: 5 requests/min. Paid plans available. - **Returns**: `data.fakePercentage` (0-100 integer), `data.isHuman` boolean.
  • Network accessline 64
    **Citation**: Multiple replicated demos on Twitter/X 2023-2024; Vanderbilt University communication on disabling Turnitin (Aug 2023) cited similar instability across the detector category. https://www.vanderbilt.edu/brightspace/2023/08/16/g
  • Network accessline 70
    - **Web**: https://sapling.ai/ai-content-detector - **API docs**: https://sapling.ai/docs/api/aidetect - **Auth**: `key` field in JSON body. Free tier: 50 requests/day.
  • Network accessline 71
    - **API docs**: https://sapling.ai/docs/api/aidetect - **Auth**: `key` field in JSON body. Free tier: 50 requests/day. - **Returns**: `score` (0.0-1.0), per-sentence `sentence_scores`.
  • Network accessline 80
    **Citation**: Sapling's own published benchmarks (https://sapling.ai/ai-content-detector/benchmark) acknowledge ~3-5% false positive rate even in their best-case dataset.
  • Network accessline 86
    - **Web**: https://copyleaks.com/ai-content-detector
  • Network accessline 87
    - **API docs**: https://api.copyleaks.com/documentation/v3/writer-detector/submit
  • Network accessline 107
    - **Turnitin AI Writing** — disabled by Vanderbilt, Cambridge, others. No public API; institutional only. - **Winston AI** — https://gowinston.ai. Paid only.
  • Network accessline 108
    - **Winston AI** — https://gowinston.ai. Paid only.
  • Network accessline 109
    - **Crossplag AI** — https://crossplag.com. Paid only.

skills/linkedin-humanizer/references/rules-explainer.md

  • Network accessline 28
    - **Famous human user:** none. Zero recorded cases. - **Defense strength:** zero - **Citation:** Wikipedia, "Signs of AI writing" - https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 30
    - **Citation:** Wikipedia, "Signs of AI writing" - https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 36
    - **Famous human user:** none. - **Defense strength:** zero - **Citation:** Wikipedia "Signs of AI writing"; TechCrunch on OpenAI's discontinued classifier - https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-over-lo
  • Network accessline 38
    - **Citation:** Wikipedia "Signs of AI writing"; TechCrunch on OpenAI's discontinued classifier - https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-over-low-rate-of-accuracy/
  • Network accessline 119
    - **Joan Didion**, *The Year of Magical Thinking* (2005) - em dashes for parenthetical grief. - **Defense strength:** high (single use). The overuse threshold (3+ in a short post) flips to forensic - see rule 5. - **Citation:** Stanford HAI
  • Network accessline 121
    - **Citation:** Stanford HAI / Liang et al. (2023) on detector bias - https://hai.stanford.edu/news/ai-detectors-biased-against-non-native-english-writers ; TechCrunch on OpenAI classifier shutdown for low accuracy - https://techcrunch.com/
  • Network accessline 165
    - **Every traditionally typeset book since the invention of moveable type** - curly quotes are correct typography. Straight quotes are an ASCII compromise. - **Defense strength:** high. Flagging curly quotes as AI is detector incompetence -
  • Network accessline 167
    - **Citation:** *The Chicago Manual of Style*, 17th ed., §6.115 on quotation marks; Adelphi University lawsuit illustrating cost of false positives - https://www.plagiarismtoday.com/2025/10/14/adelphi-university-sued-over-ai-allegation/
  • Network accessline 195
    - **Stanford HAI / Liang et al. (2023)** - AI detectors are biased against non-native English writers. Single most-cited paper for "detectors over-fire on aesthetic patterns." https://hai.stanford.edu/news/ai-detectors-biased-against-non-na
  • Network accessline 196
    - **TechCrunch (25 July 2023)** - OpenAI shut down its own AI-text classifier, citing low rate of accuracy. The company that built GPT couldn't reliably detect GPT. https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-
  • Network accessline 197
    - **Wikipedia, "Signs of AI writing"** - community-maintained taxonomy. Source for forensic markers (oaicite, knowledge-cutoff) and the strict vocabulary list. https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 198
    - **Adelphi University lawsuit (Oct 2025)** - student sued the university after a false-positive AI accusation. The legal cost of trusting detectors on aesthetic signals. https://www.plagiarismtoday.com/2025/10/14/adelphi-university-sued-ov

skills/linkedin-humanizer/references/tier-rationale.md

  • Network accessline 38
    - Wikipedia "Signs of AI writing" forensic-rule section: https://en.wikipedia.org/wiki/Wikipedia:Signs_of_AI_writing
  • Network accessline 61
    - Juzek & Ward (2025) "Why Does ChatGPT 'Delve' So Much?": https://arxiv.org/abs/2412.11385
  • Network accessline 99
    - Stanford HAI / Liang et al. 2023 "AI detectors biased against non-native English writers": https://hai.stanford.edu/news/ai-detectors-biased-against-non-native-english-writers
  • Network accessline 100
    - TechCrunch on OpenAI killing its own classifier at 26% accuracy: https://techcrunch.com/2023/07/25/openai-scuttles-ai-written-text-detector-over-low-rate-of-accuracy/
  • Network accessline 101
    - Newby v. Adelphi University (Oct 2025): https://www.plagiarismtoday.com/2025/10/14/adelphi-university-sued-over-ai-allegation/

skills/linkedin-humanizer/scripts/detectors.env.example

  • Access to secretsline 1
    [Credential-related source omitted]
  • Access to secretsline 7
    [Credential-related source omitted]
  • Access to secretsline 8
    [Credential-related source omitted]
  • Access to secretsline 9
    [Credential-related source omitted]
  • Access to secretsline 10
    [Credential-related source omitted]
  • Access to secretsline 13
    [Credential-related source omitted]

skills/linkedin-humanizer/scripts/test_detectors.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 58
    [Credential-related source omitted]
  • Network accessline 60
    [Credential-related source omitted]
  • Access to secretsline 60
    [Credential-related source omitted]
  • Network accessline 61
    try:         r = requests.post(             "https://api.gptzero.me/v2/predict/text",
  • Network accessline 62
    r = requests.post(
  • Network accessline 63
    "https://api.gptzero.me/v2/predict/text",
  • Access to secretsline 77
    [Credential-related source omitted]
  • Network accessline 79
    [Credential-related source omitted]
  • Access to secretsline 79
    [Credential-related source omitted]
  • Network accessline 80
    try:         r = requests.post(             "https://api.originality.ai/api/v1/scan/ai",
  • Network accessline 81
    r = requests.post(
  • Network accessline 82
    "https://api.originality.ai/api/v1/scan/ai",
  • Access to secretsline 96
    [Credential-related source omitted]
  • Network accessline 98
    [Credential-related source omitted]
  • Access to secretsline 98
    [Credential-related source omitted]
  • Network accessline 99
    try:         r = requests.post(             "https://api.zerogpt.com/api/detect/detectText",
  • Network accessline 100
    r = requests.post(
  • Network accessline 101
    "https://api.zerogpt.com/api/detect/detectText",
  • Access to secretsline 115
    [Credential-related source omitted]
  • Network accessline 117
    [Credential-related source omitted]
  • Access to secretsline 117
    [Credential-related source omitted]
  • Network accessline 118
    try:         r = requests.post(             "https://api.sapling.ai/api/v1/aidetect",
  • Network accessline 119
    r = requests.post(
  • Network accessline 120
    "https://api.sapling.ai/api/v1/aidetect",
  • Access to secretsline 133
    [Credential-related source omitted]
  • Access to secretsline 138
    [Credential-related source omitted]
  • Network accessline 142
    login = requests.post(
  • Network accessline 143
    "https://id.copyleaks.com/v3/account/login/api",
  • Access to secretsline 148
    [Credential-related source omitted]
  • Network accessline 151
    scan_id = f"detector-test-{abs(hash(text)) % 10**8}"         r = requests.post(
  • Network accessline 152
    r = requests.post(
  • Network accessline 153
    f"https://api.copyleaks.com/v2/writer-detector/{scan_id}/check",
  • Network accessline 186
    MANUAL_DETECTORS = {     "Writer.com":  "https://writer.com/ai-content-detector/",
  • Network accessline 187
    "Writer.com":  "https://writer.com/ai-content-detector/",
  • Network accessline 188
    "Scribbr":     "https://www.scribbr.com/ai-detector/",
  • Network accessline 189
    "QuillBot":    "https://quillbot.com/ai-content-detector",
  • Network accessline 190
    "Hive Moderation": "https://hivemoderation.com/ai-generated-content-detection",
  • Access to secretsline 291
    [Credential-related source omitted]

skills/linkedin-humanizer/sub-skills/detector-tester.md

  • Access to secretsline 95
    [Credential-related source omitted]

skills/linkedin-post-writer/SKILL.md

  • Network accessline 92
    6. **Optional illustration.** If the post would land better with a visual (or the user asks), offer one: draft an image and generate it with `lib.illustrate(prompt, kind="wide")`, pulling brand handle/color from Voice & Brand Profile §6 for
  • Network accessline 94
    8. **On approval.** Call `lib.publish(kind="post", draft_text=<approved>, target_url="https://www.linkedin.com/post/new/", platforms=[{"platform":"linkedin","platformId":<id>}], scheduled_time=<iso_or_None>, media_urls=<list_or_None>)`. The

skills/linkedin-reply-handler/references/examples.md

  • Network accessline 5
    > User: "Reply to this: https://www.linkedin.com/feed/update/urn:li:activity:7449018753880834048?commentUrn=urn%3Ali%3Acomment%3A%28activity%3A7449018753880834048%2C7449758545140453376%29"
  • Network accessline 15
    > User: "Reply to everyone on this post: https://www.linkedin.com/posts/<author>_activity-<id>"

skills/linkedin-reply-handler/references/threading-rules.md

  • Network accessline 58
    https://www.linkedin.com/feed/update/urn:li:activity:P?commentUrn=urn%3Ali%3Acomment%3A%28activity%3AP%2C111%29
  • Network accessline 63
    https://www.linkedin.com/feed/update/urn:li:activity:P?commentUrn=urn%3Ali%3Acomment%3A%28activity%3AP%2C111%29&replyUrn=urn%3Ali%3Acomment%3A%28activity%3AP%2C222%29

skills/linkedin-repurposer/SKILL.md

  • Network accessline 31
    7. **Humanizer pass.** Run the scrub: 2026 AI vocab by density, em dashes above the cap (about one per 100 words), stacked rule-of-three triads, generic openers and reveal bridges. Keep the user's real numbers and named entities from the so
  • Network accessline 33
    9. **On approval.** Publish via `lib.publish(kind="post", draft_text=<approved>, target_url="https://www.linkedin.com/post/new/", platforms=[{"platform":"linkedin","platformId":<id>}], scheduled_time=<iso_or_None>)`. The wrapper handles Pub

tests/fixtures/apify_comments.json

  • Network accessline 10
    "is_edited": false,   "is_pinned": false,   "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 11
    "is_pinned": false,   "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",   "author": {
  • Network accessline 12
    "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 15
    "headline": "Registered Professional Engineer",    "profile_id": "ACoAAAHLClwBEX8fbbD8B2Aab98xRCYDJ6ZI1ZQ",    "profile_url": "https://www.linkedin.com/in/jim-pazaris-6500a9a",
  • Network accessline 16
    "profile_id": "ACoAAAHLClwBEX8fbbD8B2Aab98xRCYDJ6ZI1ZQ",    "profile_url": "https://www.linkedin.com/in/jim-pazaris-6500a9a",    "profile_picture": "https://media.licdn.com/dms/image/v2/C4E03AQHh_fCbxadbaQ/profile-displayphoto-shrink_400_4…
  • Network accessline 17
    "profile_url": "https://www.linkedin.com/in/jim-pazaris-6500a9a",
  • Network accessline 18
    "profile_picture": "https://media.licdn.com/dms/image/v2/C4E03AQHh_fCbxadbaQ/profile-displayphoto-shrink_400_4…"
  • Network accessline 40
    "is_edited": false,     "is_pinned": false,     "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 41
    "is_pinned": false,     "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",     "author": {
  • Network accessline 42
    "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 45
    "headline": "Sr. Cybersecurity Solutions Architect",      "profile_id": "ACoAAAA1U7kB_gqU6zdqTgw6zg1nA0izWd_l-3E",      "profile_url": "https://www.linkedin.com/in/patrickstevens",
  • Network accessline 46
    "profile_id": "ACoAAAA1U7kB_gqU6zdqTgw6zg1nA0izWd_l-3E",      "profile_url": "https://www.linkedin.com/in/patrickstevens",      "profile_picture": null
  • Network accessline 47
    "profile_url": "https://www.linkedin.com/in/patrickstevens",
  • Network accessline 59
    "comments": 0     },     "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 60
    },     "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",     "totalComments": 488
  • Network accessline 61
    "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 72
    "is_edited": false,     "is_pinned": false,     "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 73
    "is_pinned": false,     "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",     "author": {
  • Network accessline 74
    "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 77
    "headline": "Registered Professional Engineer",      "profile_id": "ACoAAAHLClwBEX8fbbD8B2Aab98xRCYDJ6ZI1ZQ",      "profile_url": "https://www.linkedin.com/in/jim-pazaris-6500a9a",
  • Network accessline 78
    "profile_id": "ACoAAAHLClwBEX8fbbD8B2Aab98xRCYDJ6ZI1ZQ",      "profile_url": "https://www.linkedin.com/in/jim-pazaris-6500a9a",      "profile_picture": "https://media.licdn.com/dms/image/v2/C4E03AQHh_fCbxadbaQ/profile-displayphoto-shrink_40
  • Network accessline 79
    "profile_url": "https://www.linkedin.com/in/jim-pazaris-6500a9a",
  • Network accessline 80
    "profile_picture": "https://media.licdn.com/dms/image/v2/C4E03AQHh_fCbxadbaQ/profile-displayphoto-shrink_400_4…"
  • Network accessline 91
    "comments": 0     },     "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 92
    },     "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",     "totalComments": 488
  • Network accessline 93
    "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 104
    "is_edited": false,     "is_pinned": false,     "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 105
    "is_pinned": false,     "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",     "author": {
  • Network accessline 106
    "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 109
    "headline": "Turning your $20K/month in missed calls into captured customers | AI answers 100% of calls…",      "profile_id": "ACoAAA3cs6UBXNLqa3LpFCH4TRc7P8sYyw__Dvc",      "profile_url": "https://www.linkedin.com/in/robertsandiego",
  • Network accessline 110
    "profile_id": "ACoAAA3cs6UBXNLqa3LpFCH4TRc7P8sYyw__Dvc",      "profile_url": "https://www.linkedin.com/in/robertsandiego",      "profile_picture": null
  • Network accessline 111
    "profile_url": "https://www.linkedin.com/in/robertsandiego",
  • Network accessline 123
    "comments": 0     },     "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 124
    },     "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",     "totalComments": 488
  • Network accessline 125
    "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 127
    }   ],   "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 128
    ],   "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",   "totalComments": 488
  • Network accessline 129
    "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 140
    "is_edited": false,   "is_pinned": false,   "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 141
    "is_pinned": false,   "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",   "author": {
  • Network accessline 142
    "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 145
    "headline": "Top LinkedIn Voice | Healthcare & Regulated Sectors | Databricks | Palantir | AI Value Cre…",    "profile_id": "ACoAAAGzgNABNwCHr8ULTYn_NdL0rArNqV1tkXs",    "profile_url": "https://www.linkedin.com/in/babitaevanskumar",
  • Network accessline 146
    "profile_id": "ACoAAAGzgNABNwCHr8ULTYn_NdL0rArNqV1tkXs",    "profile_url": "https://www.linkedin.com/in/babitaevanskumar",    "profile_picture": "https://media.licdn.com/dms/image/v2/D4D03AQEGUZaxs4PiXQ/profile-displayphoto-crop_800_800…"
  • Network accessline 147
    "profile_url": "https://www.linkedin.com/in/babitaevanskumar",
  • Network accessline 148
    "profile_picture": "https://media.licdn.com/dms/image/v2/D4D03AQEGUZaxs4PiXQ/profile-displayphoto-crop_800_800…"
  • Network accessline 170
    "is_edited": false,     "is_pinned": false,     "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 171
    "is_pinned": false,     "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",     "author": {
  • Network accessline 172
    "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 175
    "headline": "Top LinkedIn Voice | Healthcare & Regulated Sectors | Databricks | Palantir | AI Value Cre…",      "profile_id": "ACoAAAGzgNABNwCHr8ULTYn_NdL0rArNqV1tkXs",      "profile_url": "https://www.linkedin.com/in/babitaevanskumar",
  • Network accessline 176
    "profile_id": "ACoAAAGzgNABNwCHr8ULTYn_NdL0rArNqV1tkXs",      "profile_url": "https://www.linkedin.com/in/babitaevanskumar",      "profile_picture": "https://media.licdn.com/dms/image/v2/D4D03AQEGUZaxs4PiXQ/profile-displayphoto-crop_800_800
  • Network accessline 177
    "profile_url": "https://www.linkedin.com/in/babitaevanskumar",
  • Network accessline 178
    "profile_picture": "https://media.licdn.com/dms/image/v2/D4D03AQEGUZaxs4PiXQ/profile-displayphoto-crop_800_800…"
  • Network accessline 189
    "comments": 0     },     "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 190
    },     "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",     "totalComments": 488
  • Network accessline 191
    "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 193
    }   ],   "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 194
    ],   "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",   "totalComments": 488
  • Network accessline 195
    "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 206
    "is_edited": false,   "is_pinned": false,   "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 207
    "is_pinned": false,   "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",   "author": {
  • Network accessline 208
    "comment_url": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7320867198548279298?commentUrn=urn%3Al…",
  • Network accessline 211
    "headline": "AI Hype → Business Impact | AI Transformation | Anthropic & Microsoft",    "profile_id": "ACoAAApArCoB8Ncl1DtHJ8yVhHBmpnRBHI1pRBA",    "profile_url": "https://www.linkedin.com/in/victorwaenerlund",
  • Network accessline 212
    "profile_id": "ACoAAApArCoB8Ncl1DtHJ8yVhHBmpnRBHI1pRBA",    "profile_url": "https://www.linkedin.com/in/victorwaenerlund",    "profile_picture": "https://media.licdn.com/dms/image/v2/D4D03AQHFarn4VpSpTA/profile-displayphoto-crop_800_800…"
  • Network accessline 213
    "profile_url": "https://www.linkedin.com/in/victorwaenerlund",
  • Network accessline 214
    "profile_picture": "https://media.licdn.com/dms/image/v2/D4D03AQHFarn4VpSpTA/profile-displayphoto-crop_800_800…"
  • Network accessline 226
    },   "replies": [],   "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 227
    "replies": [],   "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",   "totalComments": 488
  • Network accessline 228
    "post_input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",

tests/fixtures/apify_engagers.json

  • Network accessline 2
    {   "type": "likers",   "url_profile": "https://www.linkedin.com/in/ACoAACcFXzkBrrXlZ52KAFOwj4k-0cbnMAPC83E",
  • Network accessline 3
    "type": "likers",   "url_profile": "https://www.linkedin.com/in/ACoAACcFXzkBrrXlZ52KAFOwj4k-0cbnMAPC83E",   "name": "Brigham Wimmer",
  • Network accessline 4
    "url_profile": "https://www.linkedin.com/in/ACoAACcFXzkBrrXlZ52KAFOwj4k-0cbnMAPC83E",
  • Network accessline 5
    "name": "Brigham Wimmer",   "subtitle": "Senior Technology Advisor | Connectivity · Cybersecurity · Cloud · CX · AI · Networking",   "post_Link": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…"
  • Network accessline 6
    "subtitle": "Senior Technology Advisor | Connectivity · Cybersecurity · Cloud · CX · AI · Networking",   "post_Link": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…"  },
  • Network accessline 7
    "post_Link": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…"
  • Network accessline 9
    {   "type": "likers",   "url_profile": "https://www.linkedin.com/in/ACoAADjJ7YUBawKrPdA-hCHhYe1QKGc2MqxnDFI",
  • Network accessline 10
    "type": "likers",   "url_profile": "https://www.linkedin.com/in/ACoAADjJ7YUBawKrPdA-hCHhYe1QKGc2MqxnDFI",   "name": "Matteo DeCaire",
  • Network accessline 11
    "url_profile": "https://www.linkedin.com/in/ACoAADjJ7YUBawKrPdA-hCHhYe1QKGc2MqxnDFI",
  • Network accessline 12
    "name": "Matteo DeCaire",   "subtitle": "Co-Founder @ BeMultilingual & Talentted | The Royalty Family, KSI, Veritasium, Bryson DeCh…",   "post_Link": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-a
  • Network accessline 13
    "subtitle": "Co-Founder @ BeMultilingual & Talentted | The Royalty Family, KSI, Veritasium, Bryson DeCh…",   "post_Link": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…"  },
  • Network accessline 14
    "post_Link": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…"
  • Network accessline 16
    {   "type": "likers",   "url_profile": "https://www.linkedin.com/in/ACoAAEjvLB0BvUy0w68IQhqoz1vreFLHT4oyRt0",
  • Network accessline 17
    "type": "likers",   "url_profile": "https://www.linkedin.com/in/ACoAAEjvLB0BvUy0w68IQhqoz1vreFLHT4oyRt0",   "name": "Aradhya Srivastava",
  • Network accessline 18
    "url_profile": "https://www.linkedin.com/in/ACoAAEjvLB0BvUy0w68IQhqoz1vreFLHT4oyRt0",
  • Network accessline 19
    "name": "Aradhya Srivastava",   "subtitle": "UX Design Student | B.Des | Passionate about Human-Centered Design, Wireframes, Prototypin…",   "post_Link": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-real
  • Network accessline 20
    "subtitle": "UX Design Student | B.Des | Passionate about Human-Centered Design, Wireframes, Prototypin…",   "post_Link": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…"  }
  • Network accessline 21
    "post_Link": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…"

tests/fixtures/apify_post.json

  • Network accessline 4
    "shareUrn": "urn:li:ugcPost:7320867198548279298",  "canShare": null,  "url": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 5
    "canShare": null,  "url": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",  "type": "image",
  • Network accessline 6
    "url": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 8
    "authorName": "Satya Nadella",  "authorHeadline": "Chairman and CEO at Microsoft",  "authorProfileUrl": "https://www.linkedin.com/in/satyanadella?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAAEkw…",
  • Network accessline 9
    "authorHeadline": "Chairman and CEO at Microsoft",  "authorProfileUrl": "https://www.linkedin.com/in/satyanadella?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAAEkw…",  "authorFollowers": null,
  • Network accessline 10
    "authorProfileUrl": "https://www.linkedin.com/in/satyanadella?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAAEkw…",
  • Network accessline 31
    "post": {    "id": "7320867199693246465",    "url": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 32
    "id": "7320867199693246465",    "url": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",    "created_at": {
  • Network accessline 33
    "url": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…",
  • Network accessline 48
    "name": "Satya Nadella",    "headline": "Chairman and CEO at Microsoft",    "profile_url": "https://www.linkedin.com/in/satyanadella?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAAEkw…",
  • Network accessline 49
    "headline": "Chairman and CEO at Microsoft",    "profile_url": "https://www.linkedin.com/in/satyanadella?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAAEkw…",    "profile_picture": "https://media.licdn.com/dms/image/v2/C5603AQHHUuOSlRVA1w/pr
  • Network accessline 50
    "profile_url": "https://www.linkedin.com/in/satyanadella?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAAEkw…",
  • Network accessline 51
    "profile_picture": "https://media.licdn.com/dms/image/v2/C5603AQHHUuOSlRVA1w/profile-displayphoto-shrink_800_8…",
  • Network accessline 56
    {     "type": "image",     "url": "https://media.licdn.com/dms/image/v2/D5622AQF8TJLzl8em_g/feedshare-image-high-res/B56ZZjx6…"
  • Network accessline 57
    "type": "image",     "url": "https://media.licdn.com/dms/image/v2/D5622AQF8TJLzl8em_g/feedshare-image-high-res/B56ZZjx6…"    },
  • Network accessline 58
    "url": "https://media.licdn.com/dms/image/v2/D5622AQF8TJLzl8em_g/feedshare-image-high-res/B56ZZjx6…"
  • Network accessline 60
    {     "type": "image",     "url": "https://media.licdn.com/dms/image/v2/D5622AQGsFMQA8dvo2Q/feedshare-image-high-res/B56ZZjx6…"
  • Network accessline 61
    "type": "image",     "url": "https://media.licdn.com/dms/image/v2/D5622AQGsFMQA8dvo2Q/feedshare-image-high-res/B56ZZjx6…"    },
  • Network accessline 62
    "url": "https://media.licdn.com/dms/image/v2/D5622AQGsFMQA8dvo2Q/feedshare-image-high-res/B56ZZjx6…"
  • Network accessline 64
    {     "type": "image",     "url": "https://media.licdn.com/dms/image/v2/D5622AQHu8hhBXTISnQ/feedshare-image-high-res/B56ZZjx6…"
  • Network accessline 65
    "type": "image",     "url": "https://media.licdn.com/dms/image/v2/D5622AQHu8hhBXTISnQ/feedshare-image-high-res/B56ZZjx6…"    }
  • Network accessline 66
    "url": "https://media.licdn.com/dms/image/v2/D5622AQHu8hhBXTISnQ/feedshare-image-high-res/B56ZZjx6…"
  • Network accessline 84
    "input": "https://www.linkedin.com/posts/satyanadella_big-day-for-microsoft-365-copilot-im-really-ac…"

tests/fixtures/apify_profile_comments.json

  • Network accessline 8
    "last_name": "Nadella",    "subtitle": "Chairman and CEO at Microsoft",    "linkedin_url": "https://www.linkedin.com/in/satyanadella",
  • Network accessline 9
    "subtitle": "Chairman and CEO at Microsoft",    "linkedin_url": "https://www.linkedin.com/in/satyanadella",    "profile_picture": "https://media.licdn.com/dms/image/v2/C5603AQHHUuOSlRVA1w/profile-displayphoto-shrink_800_8…"
  • Network accessline 10
    "linkedin_url": "https://www.linkedin.com/in/satyanadella",
  • Network accessline 11
    "profile_picture": "https://media.licdn.com/dms/image/v2/C5603AQHHUuOSlRVA1w/profile-displayphoto-shrink_800_8…"
  • Network accessline 30
    "post": {    "post_text": "one of the privileges of teaching cs153 (Frontier Systems) at Stanford Online is getting t…",    "post_url": "https://www.linkedin.com/posts/michaelabbott_one-of-the-privileges-of-teaching-cs153-activ…",
  • Network accessline 31
    "post_text": "one of the privileges of teaching cs153 (Frontier Systems) at Stanford Online is getting t…",    "post_url": "https://www.linkedin.com/posts/michaelabbott_one-of-the-privileges-of-teaching-cs153-activ…",    "post_urn": "748105
  • Network accessline 32
    "post_url": "https://www.linkedin.com/posts/michaelabbott_one-of-the-privileges-of-teaching-cs153-activ…",
  • Network accessline 38
    "headline": "curious",     "title": "curious",     "linkedin_url": "https://www.linkedin.com/in/michaelabbott?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAAAA…",
  • Network accessline 39
    "title": "curious",     "linkedin_url": "https://www.linkedin.com/in/michaelabbott?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAAAA…",     "profile_picture": "https://media.licdn.com/dms/image/v2/D5603AQFEn9lyMIxU_g/profile-displayphoto-cro
  • Network accessline 40
    "linkedin_url": "https://www.linkedin.com/in/michaelabbott?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAAAA…",
  • Network accessline 41
    "profile_picture": "https://media.licdn.com/dms/image/v2/D5603AQFEn9lyMIxU_g/profile-displayphoto-crop_800_800…"
  • Network accessline 59
    }   },   "comment_link": "https://www.linkedin.com/feed/update/urn:li:activity:7477760679408599040?commentUrn=urn%3A…",
  • Network accessline 60
    },   "comment_link": "https://www.linkedin.com/feed/update/urn:li:activity:7477760679408599040?commentUrn=urn%3A…",   "source_profile": "satyanadella",
  • Network accessline 61
    "comment_link": "https://www.linkedin.com/feed/update/urn:li:activity:7477760679408599040?commentUrn=urn%3A…",
  • Network accessline 71
    "last_name": "Nadella",    "subtitle": "Chairman and CEO at Microsoft",    "linkedin_url": "https://www.linkedin.com/in/satyanadella",
  • Network accessline 72
    "subtitle": "Chairman and CEO at Microsoft",    "linkedin_url": "https://www.linkedin.com/in/satyanadella",    "profile_picture": "https://media.licdn.com/dms/image/v2/C5603AQHHUuOSlRVA1w/profile-displayphoto-shrink_800_8…"
  • Network accessline 73
    "linkedin_url": "https://www.linkedin.com/in/satyanadella",
  • Network accessline 74
    "profile_picture": "https://media.licdn.com/dms/image/v2/C5603AQHHUuOSlRVA1w/profile-displayphoto-shrink_800_8…"
  • Network accessline 93
    "post": {    "post_text": "Excited to sit down with my friend Satya Nadella to talk about AI, the future of humanity,…",    "post_url": "https://www.linkedin.com/posts/reidhoffman_excited-to-sit-down-with-my-friend-satya-ugcPos…",
  • Network accessline 94
    "post_text": "Excited to sit down with my friend Satya Nadella to talk about AI, the future of humanity,…",    "post_url": "https://www.linkedin.com/posts/reidhoffman_excited-to-sit-down-with-my-friend-satya-ugcPos…",    "post_urn": "746867
  • Network accessline 95
    "post_url": "https://www.linkedin.com/posts/reidhoffman_excited-to-sit-down-with-my-friend-satya-ugcPos…",
  • Network accessline 101
    "headline": "Co-Founder, LinkedIn, Manas AI & Inflection AI. Founding Team, PayPal. Author of Superagen…",     "title": "Co-Founder, LinkedIn, Manas AI & Inflection AI. Founding Team, PayPal. Author of Superagen…",     "linkedin_url": "http
  • Network accessline 102
    "title": "Co-Founder, LinkedIn, Manas AI & Inflection AI. Founding Team, PayPal. Author of Superagen…",     "linkedin_url": "https://www.linkedin.com/in/reidhoffman?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAAAABL…",     "profile_picture"
  • Network accessline 103
    "linkedin_url": "https://www.linkedin.com/in/reidhoffman?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAAAAABL…",
  • Network accessline 104
    "profile_picture": "https://media.licdn.com/dms/image/v2/D5603AQHW7wKzPb3DAg/profile-displayphoto-shrink_800_8…"
  • Network accessline 122
    },    "video": {     "url": "https://dms.licdn.com/playlist/vid/v2/D4E05AQHrNGvH8srMLw/mp4-720p-30fp-crf28/B4EZ6YIosXK0…",
  • Network accessline 123
    "video": {     "url": "https://dms.licdn.com/playlist/vid/v2/D4E05AQHrNGvH8srMLw/mp4-720p-30fp-crf28/B4EZ6YIosXK0…",     "duration": 94166,
  • Network accessline 124
    "url": "https://dms.licdn.com/playlist/vid/v2/D4E05AQHrNGvH8srMLw/mp4-720p-30fp-crf28/B4EZ6YIosXK0…",
  • Network accessline 125
    "duration": 94166,     "thumbnail": "https://media.licdn.com/dms/image/v2/D4E05AQHrNGvH8srMLw/videocover-high/B4EZ6YIosXK0BQ-/0…"    }
  • Network accessline 126
    "thumbnail": "https://media.licdn.com/dms/image/v2/D4E05AQHrNGvH8srMLw/videocover-high/B4EZ6YIosXK0BQ-/0…"
  • Network accessline 127
    }   },   "comment_link": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7468666345426042881?commentUrn=urn%3Al…",
  • Network accessline 128
    },   "comment_link": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7468666345426042881?commentUrn=urn%3Al…",   "source_profile": "satyanadella",
  • Network accessline 129
    "comment_link": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7468666345426042881?commentUrn=urn%3Al…",
  • Network accessline 139
    "last_name": "Nadella",    "subtitle": "Chairman and CEO at Microsoft",    "linkedin_url": "https://www.linkedin.com/in/satyanadella",
  • Network accessline 140
    "subtitle": "Chairman and CEO at Microsoft",    "linkedin_url": "https://www.linkedin.com/in/satyanadella",    "profile_picture": "https://media.licdn.com/dms/image/v2/C5603AQHHUuOSlRVA1w/profile-displayphoto-shrink_800_8…"
  • Network accessline 141
    "linkedin_url": "https://www.linkedin.com/in/satyanadella",
  • Network accessline 142
    "profile_picture": "https://media.licdn.com/dms/image/v2/C5603AQHHUuOSlRVA1w/profile-displayphoto-shrink_800_8…"
  • Network accessline 161
    "post": {    "post_text": "I’ve said it before and I’ll say it again. If you’re getting into tech, conferences are th…",    "post_url": "https://www.linkedin.com/posts/imtomshaw_ive-said-it-before-and-ill-say-it-again-ugcPost-7…",
  • Network accessline 162
    "post_text": "I’ve said it before and I’ll say it again. If you’re getting into tech, conferences are th…",    "post_url": "https://www.linkedin.com/posts/imtomshaw_ive-said-it-before-and-ill-say-it-again-ugcPost-7…",    "post_urn": "746846
  • Network accessline 163
    "post_url": "https://www.linkedin.com/posts/imtomshaw_ive-said-it-before-and-ill-say-it-again-ugcPost-7…",
  • Network accessline 169
    "headline": "The “F1 Programmer Tech Guy” - their words, not mine 🏎<U+FE0F>👨<U+200D>💻",     "title": "The “F1 Programmer Tech Guy” - their words, not mine 🏎<U+FE0F>👨<U+200D>💻",     "linkedin_url": "https://www.linkedin.com/in/imtomshaw?miniProfileUrn=urn%3Ali%3Afsd_pr
  • Network accessline 170
    "title": "The “F1 Programmer Tech Guy” - their words, not mine 🏎<U+FE0F>👨<U+200D>💻",     "linkedin_url": "https://www.linkedin.com/in/imtomshaw?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAACEkG80B…",     "profile_picture": "https://media.licdn.com/dms/im
  • Network accessline 171
    "linkedin_url": "https://www.linkedin.com/in/imtomshaw?miniProfileUrn=urn%3Ali%3Afsd_profile%3AACoAACEkG80B…",
  • Network accessline 172
    "profile_picture": "https://media.licdn.com/dms/image/v2/D4E03AQGnppQ7ltcXog/profile-displayphoto-crop_800_800…"
  • Network accessline 191
    "images": [     {      "url": "https://media.licdn.com/dms/image/v2/D4E22AQGvkHLQMu9PLw/feedshare-shrink_1280/B4EZ6TNKAjJ…",
  • Network accessline 192
    {      "url": "https://media.licdn.com/dms/image/v2/D4E22AQGvkHLQMu9PLw/feedshare-shrink_1280/B4EZ6TNKAjJ…",      "width": 1280,
  • Network accessline 193
    "url": "https://media.licdn.com/dms/image/v2/D4E22AQGvkHLQMu9PLw/feedshare-shrink_1280/B4EZ6TNKAjJ…",
  • Network accessline 196
    },     {      "url": "https://media.licdn.com/dms/image/v2/D4E22AQGPZJfb4ao1xg/feedshare-image-high-res/B4EZ6TNJ…",
  • Network accessline 197
    {      "url": "https://media.licdn.com/dms/image/v2/D4E22AQGPZJfb4ao1xg/feedshare-image-high-res/B4EZ6TNJ…",      "width": 1919,
  • Network accessline 198
    "url": "https://media.licdn.com/dms/image/v2/D4E22AQGPZJfb4ao1xg/feedshare-image-high-res/B4EZ6TNJ…",
  • Network accessline 201
    },     {      "url": "https://media.licdn.com/dms/image/v2/D4E22AQGnq9X0yKSDtA/feedshare-image-high-res/B4EZ6TNJ…",
  • Network accessline 202
    {      "url": "https://media.licdn.com/dms/image/v2/D4E22AQGnq9X0yKSDtA/feedshare-image-high-res/B4EZ6TNJ…",      "width": 1920,
  • Network accessline 203
    "url": "https://media.licdn.com/dms/image/v2/D4E22AQGnq9X0yKSDtA/feedshare-image-high-res/B4EZ6TNJ…",
  • Network accessline 207
    ]   },   "comment_link": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7468319662364192769?commentUrn=urn%3Al…",
  • Network accessline 208
    },   "comment_link": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7468319662364192769?commentUrn=urn%3Al…",   "source_profile": "satyanadella",
  • Network accessline 209
    "comment_link": "https://www.linkedin.com/feed/update/urn:li:ugcPost:7468319662364192769?commentUrn=urn%3Al…",

tests/fixtures/publora_get_post.json

  • Network accessline 70
    "status": "ready",    "failureReason": null,    "url": "https://media.publora.com/images/1700000000000-0-abcdef12-img_7a60be5136290e927163.png"
  • Network accessline 71
    "failureReason": null,    "url": "https://media.publora.com/images/1700000000000-0-abcdef12-img_7a60be5136290e927163.png"   }
  • Network accessline 72
    "url": "https://media.publora.com/images/1700000000000-0-abcdef12-img_7a60be5136290e927163.png"

tests/test_client_behaviour.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 160
    [Credential-related source omitted]
  • Access to secretsline 167
    [Credential-related source omitted]
  • Access to secretsline 175
    [Credential-related source omitted]
  • Network accessline 181
    [Credential-related source omitted]
  • Access to secretsline 181
    [Credential-related source omitted]
  • Network accessline 182
    message = backend_selector.manual_mode_message(                 "post", "a drafted post", "https://www.linkedin.com/post/new/"             )
  • Network accessline 183
    "post", "a drafted post", "https://www.linkedin.com/post/new/"
  • Network accessline 204
    client = PubloraClient.__new__(PubloraClient)         client.get_post = lambda *, post_group_id: {"postGroup": {"status": status}}         client.BASE_URL = "https://example.invalid"
  • Network accessline 205
    client.get_post = lambda *, post_group_id: {"postGroup": {"status": status}}         client.BASE_URL = "https://example.invalid"         client.timeout = 1
  • Network accessline 206
    client.BASE_URL = "https://example.invalid"
  • Access to secretsline 368
    [Credential-related source omitted]
  • Access to secretsline 369
    [Credential-related source omitted]
  • Access to secretsline 379
    [Credential-related source omitted]
  • Access to secretsline 380
    [Credential-related source omitted]
  • Access to secretsline 389
    [Credential-related source omitted]
  • Network accessline 445
    client = PubloraClient.__new__(PubloraClient)         client.BASE_URL = "https://example.invalid"
  • Network accessline 446
    client.BASE_URL = "https://example.invalid"
  • Network accessline 451
    success.json.return_value = {"id": "post-123"}         client._session.post.side_effect = [             requests.Timeout("simulated timeout"),
  • Network accessline 452
    client._session.post.side_effect = [             requests.Timeout("simulated timeout"),             success,
  • Network accessline 453
    requests.Timeout("simulated timeout"),
  • Network accessline 470
    self.assertTrue(first_key)         self.assertEqual(first_key, second_key)         self.assertEqual(first_call.args[0], "https://example.invalid/create-post")
  • Network accessline 471
    self.assertEqual(first_key, second_key)         self.assertEqual(first_call.args[0], "https://example.invalid/create-post")         self.assertEqual(second_call.args[0], "https://example.invalid/create-post")
  • Network accessline 472
    self.assertEqual(first_call.args[0], "https://example.invalid/create-post")
  • Network accessline 473
    self.assertEqual(second_call.args[0], "https://example.invalid/create-post")

tests/test_detector_tool.py

  • Executable scriptline 1
    Executable file

tests/test_eval_runner.py

  • Executable scriptline 1
    Executable file

tests/test_instruction_integrity.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 294
    [Credential-related source omitted]
  • Access to secretsline 295
    [Credential-related source omitted]
  • Access to secretsline 322
    [Credential-related source omitted]

tests/test_mcp_read_layer.py

  • Executable scriptline 1
    Executable file
  • Network accessline 109
    self.assertIn("https://mcp.apify.com?actors=", self.doc)

tests/test_pixfaro_client.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 20
    [Credential-related source omitted]
  • Network accessline 50
    self.response = {             "id": "img_123",             "url": "https://media.example/image.png",
  • Network accessline 51
    "id": "img_123",             "url": "https://media.example/image.png",             "cost": 0.08,
  • Network accessline 52
    "url": "https://media.example/image.png",
  • Network accessline 97
    with self.assertRaises(PixfaroError):             self.client.edit(                 "https://media.example/image.png",
  • Network accessline 98
    self.client.edit(                 "https://media.example/image.png",                 "Make the sky darker",
  • Network accessline 99
    "https://media.example/image.png",
  • Network accessline 128
    {                 "id": "img_123",                 "url": "https://media.example/image.png",
  • Network accessline 129
    "id": "img_123",                 "url": "https://media.example/image.png",             },
  • Network accessline 130
    "url": "https://media.example/image.png",

tests/test_publora_shapes.py

  • Executable scriptline 1
    Executable file
  • Network accessline 67
    item = POST["media"][0]         self.assertTrue(item["url"].startswith("https://media.publora.com/"), item["url"])
  • Network accessline 68
    self.assertTrue(item["url"].startswith("https://media.publora.com/"), item["url"])
  • Network accessline 96
    def test_a_url_can_be_built_from_the_id(self):         url = f"https://www.linkedin.com/feed/update/{self.child['postedId']}/"
  • Network accessline 97
    url = f"https://www.linkedin.com/feed/update/{self.child['postedId']}/"

tests/test_response_shapes.py

  • Executable scriptline 1
    Executable file
  • Network accessline 246
    parsed = parse_linkedin_url(             "https://www.linkedin.com/feed/update/urn:li:activity:7500000000000000000"
  • Network accessline 247
    "https://www.linkedin.com/feed/update/urn:li:activity:7500000000000000000"

tests/test_security_boundaries.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 16
    [Credential-related source omitted]
  • Access to secretsline 24
    [Credential-related source omitted]
  • Network accessline 25
    path.write_text(                 "LINKEDIN_SKILLS_CUSTOM_POSTER=python attacker.py\n"                 "HTTPS_PROXY=https://attacker.invalid\n"
  • Network accessline 26
    [Credential-related source omitted]
  • Network accessline 27
    "HTTPS_PROXY=https://attacker.invalid\n"
  • Access to secretsline 28
    [Credential-related source omitted]
  • Access to secretsline 29
    [Credential-related source omitted]
  • Access to secretsline 33
    [Credential-related source omitted]
  • Access to secretsline 34
    [Credential-related source omitted]
  • Access to secretsline 35
    [Credential-related source omitted]
  • Access to secretsline 40
    [Credential-related source omitted]
  • Access to secretsline 43
    [Credential-related source omitted]
  • Access to secretsline 49
    [Credential-related source omitted]
  • Network accessline 60
    def send(self, request, **kwargs):         self.sent.append(request)         response = requests.Response()
  • Network accessline 61
    self.sent.append(request)         response = requests.Response()         response.request = request
  • Network accessline 62
    response = requests.Response()
  • Network accessline 64
    response.url = request.url         response.status_code = self.status if len(self.sent) == 1 else 200         response.headers["Location"] = "https://attacker.invalid/collect"
  • Network accessline 65
    response.status_code = self.status if len(self.sent) == 1 else 200         response.headers["Location"] = "https://attacker.invalid/collect"         response._content = b'{"success": true}'
  • Network accessline 66
    response.headers["Location"] = "https://attacker.invalid/collect"
  • Access to secretsline 78
    [Credential-related source omitted]
  • Network accessline 80
    check_config.check_publora(check_config.Report(), offline=False)             self.assertFalse(get.call_args.kwargs.get("allow_redirects", True))             selftest.probe("https://api.publora.com/api/v1/platform-connections",
  • Network accessline 81
    self.assertFalse(get.call_args.kwargs.get("allow_redirects", True))             selftest.probe("https://api.publora.com/api/v1/platform-connections",                            {"x-publora-key": REVIEW_KEY})
  • Network accessline 82
    selftest.probe("https://api.publora.com/api/v1/platform-connections",
  • Access to secretsline 97
    [Credential-related source omitted]
  • Access to secretsline 109
    [Credential-related source omitted]

tests/test_skill_contracts.py

  • Executable scriptline 1
    Executable file

tests/test_text_encoding.py

  • Executable scriptline 1
    Executable file
  • Access to secretsline 68
    [Credential-related source omitted]
  • Network accessline 81
    def test_importing_lib_lets_a_cp1252_pipe_print_an_approval_message(self):         code = ("import lib; print(lib.manual_mode_message("                 "'Fair point \\u2014 we saw the same', 'https://www.linkedin.com/posts/x'))")
  • Network accessline 82
    code = ("import lib; print(lib.manual_mode_message("                 "'Fair point \\u2014 we saw the same', 'https://www.linkedin.com/posts/x'))")         run = run_with_cp1252_pipes(["-c", code])
  • Network accessline 83
    "'Fair point \\u2014 we saw the same', 'https://www.linkedin.com/posts/x'))")

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Signal confidence: 500 facts

and 450 more

Only the first 500 facts are listed.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexNativeManifest AGENTS.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.

Explore alternatives and comparisons

Add this badge to your README

It updates every night and links to this page.

sergebulaev/linkedin-skills: #261 on hotskills, 5.7k stars

[![sergebulaev/linkedin-skills on hotskills](https://hotskills.dev/badge/sergebulaev-linkedin-skills.svg)](https://hotskills.dev/skill/sergebulaev-linkedin-skills/)