#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
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.
.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
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.
.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
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.
.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
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.
.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
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.
.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
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.
.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
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.
.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
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.
.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
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.
.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
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.
.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
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.
.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
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.
.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
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.
.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
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.
skills/linkedin-comment-drafter/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
8f8bc4b40a2d → 8f8bc4b40a2d
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.
skills/linkedin-content-planner/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
8f8bc4b40a2d → 8f8bc4b40a2d
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.
skills/linkedin-employee-advocacy/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
8f8bc4b40a2d → 8f8bc4b40a2d
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.
skills/linkedin-engager-analytics/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
8f8bc4b40a2d → 8f8bc4b40a2d
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.
skills/linkedin-hook-extractor/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Network or broad shell
8f8bc4b40a2d → 8f8bc4b40a2d
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.
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
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.
skills/linkedin-interviewer/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
8f8bc4b40a2d → 8f8bc4b40a2d
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.
skills/linkedin-post-writer/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
8f8bc4b40a2d → 8f8bc4b40a2d
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.
skills/linkedin-profile-optimizer/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
8f8bc4b40a2d → 8f8bc4b40a2d
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.
skills/linkedin-reply-handler/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
8f8bc4b40a2d → 8f8bc4b40a2d
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.
skills/linkedin-repurposer/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Network or broad shell
8f8bc4b40a2d → 8f8bc4b40a2d
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.
skills/linkedin-thread-monitor/SKILL.md
Week of Nov 2, 2026 · +0 / −0 lines
Before Instructions only → After Instructions only
8f8bc4b40a2d → 8f8bc4b40a2d
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.
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>/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
Individual skills in this repository
- linkedin-marketing
/ - linkedin-marketing
.codex-marketplace/linkedin-skills - linkedin-comment-drafter
.codex-marketplace/linkedin-skills/skills/linkedin-comment-drafter - linkedin-content-planner
.codex-marketplace/linkedin-skills/skills/linkedin-content-planner - linkedin-employee-advocacy
.codex-marketplace/linkedin-skills/skills/linkedin-employee-advocacy - linkedin-engager-analytics
.codex-marketplace/linkedin-skills/skills/linkedin-engager-analytics - linkedin-hook-extractor
.codex-marketplace/linkedin-skills/skills/linkedin-hook-extractor - linkedin-humanizer
.codex-marketplace/linkedin-skills/skills/linkedin-humanizer - linkedin-interviewer
.codex-marketplace/linkedin-skills/skills/linkedin-interviewer - linkedin-post-writer
.codex-marketplace/linkedin-skills/skills/linkedin-post-writer - linkedin-profile-optimizer
.codex-marketplace/linkedin-skills/skills/linkedin-profile-optimizer - linkedin-reply-handler
.codex-marketplace/linkedin-skills/skills/linkedin-reply-handler - linkedin-repurposer
.codex-marketplace/linkedin-skills/skills/linkedin-repurposer - linkedin-thread-monitor
.codex-marketplace/linkedin-skills/skills/linkedin-thread-monitor - linkedin-comment-drafter
skills/linkedin-comment-drafter - linkedin-content-planner
skills/linkedin-content-planner - linkedin-employee-advocacy
skills/linkedin-employee-advocacy - linkedin-engager-analytics
skills/linkedin-engager-analytics - linkedin-hook-extractor
skills/linkedin-hook-extractor - linkedin-humanizer
skills/linkedin-humanizer - linkedin-interviewer
skills/linkedin-interviewer - linkedin-post-writer
skills/linkedin-post-writer - linkedin-profile-optimizer
skills/linkedin-profile-optimizer - linkedin-reply-handler
skills/linkedin-reply-handler - linkedin-repurposer
skills/linkedin-repurposer - linkedin-thread-monitor
skills/linkedin-thread-monitor
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 tokensAlways available to the agent
SKILL.md
3,449 tokensWhen the skill is activated
Reference documents
115,979 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use this bundle
- Founders edition
- Core pattern
- Prerequisites
- Telling the user what they are missing
- Untrusted content
- Voice rules (baked into every skill)
- How URLs map to URNs
- Known gotchas
- Resources
- Acknowledgments
- After a successful run
Scripts executed separately
.claude/skills/linkedin-humanizer/scripts/test_detectors.pyevals/run_evals.pylib/__init__.pylib/_env.pylib/apify_client.pylib/approval.pylib/backend_selector.pylib/pixfaro_client.pylib/publora_client.pylib/url_parser.pyscripts/check_actor_inputs.pyscripts/check_config.pyscripts/check_frontmatter.pyscripts/check_markdown_references.pyscripts/check_no_secrets.pyscripts/post_comment.pyscripts/schedule_post.pyscripts/selftest.pyscripts/sync_codex_marketplace.pytests/test_client_behaviour.pytests/test_detector_tool.pytests/test_eval_runner.pytests/test_instruction_integrity.pytests/test_mcp_read_layer.pytests/test_pixfaro_client.pytests/test_publora_shapes.pytests/test_response_shapes.pytests/test_security_boundaries.pytests/test_skill_contracts.pytests/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 bytesAGENTS.mddoc9,043 bytesCLAUDE.mddoc11,450 bytesLICENSEasset1,070 bytesREADME.mddoc27,980 bytesSECURITY.mddoc2,707 bytesSKILL.mdcore14,012 bytesassets/icon.svgasset768 bytesassets/linkedin-skills-hero.pngasset812,604 bytesevals/run_evals.pyruns17,556 byteslib/__init__.pyruns2,035 byteslib/_env.pyruns4,188 byteslib/apify_client.pyruns15,839 byteslib/approval.pyruns1,736 byteslib/backend_selector.pyruns35,899 byteslib/pixfaro_client.pyruns15,837 byteslib/publora_client.pyruns14,443 byteslib/url_parser.pyruns4,473 bytesreferences/algorithm-heuristics.mddoc8,627 bytesreferences/engagement-metrics-taxonomy.mddoc2,680 bytesreferences/founder-topics.mddoc14,536 bytesreferences/hook-formulas.mddoc40,431 bytesreferences/industry-benchmarks.mddoc4,327 bytesreferences/mcp-read-layer.mddoc8,009 bytesreferences/precedence.mddoc3,362 bytesreferences/story-bank.mddoc3,681 bytesreferences/untrusted-content.mddoc3,101 bytesreferences/voice-profile.mddoc2,990 bytesreferences/voice-rules.mddoc2,403 bytesrequirements-dev.txtdoc443 bytesrequirements-lock.txtdoc238 bytesrequirements.txtdoc38 bytesscripts/check_actor_inputs.pyruns5,936 bytesscripts/check_config.pyruns15,162 bytesscripts/check_frontmatter.pyruns3,856 bytesscripts/check_markdown_references.pyruns1,743 bytesscripts/check_no_secrets.pyruns4,899 bytesscripts/post_comment.pyruns3,015 bytesscripts/schedule_post.pyruns4,459 bytesscripts/selftest.pyruns24,655 bytesscripts/sync_codex_marketplace.pyruns3,188 bytestests/fixtures/apify_comments.jsonasset7,788 bytestests/fixtures/apify_engagers.jsonasset1,100 bytestests/fixtures/apify_post.jsonasset2,659 bytestests/fixtures/apify_profile_comments.jsonasset7,230 bytestests/fixtures/publora_get_post.jsonasset1,850 bytestests/fixtures/publora_platform_limits.jsonasset965 bytestests/test_client_behaviour.pyruns20,132 bytestests/test_detector_tool.pyruns6,245 bytestests/test_eval_runner.pyruns2,312 bytestests/test_instruction_integrity.pyruns19,019 bytestests/test_mcp_read_layer.pyruns6,543 bytestests/test_pixfaro_client.pyruns4,630 bytestests/test_publora_shapes.pyruns4,680 bytestests/test_response_shapes.pyruns11,841 bytestests/test_security_boundaries.pyruns7,147 bytestests/test_skill_contracts.pyruns5,182 bytestests/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 GitHublinkedin-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 tokensAlways available to the agent
SKILL.md
3,449 tokensWhen the skill is activated
Reference documents
31,261 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use this bundle
- Founders edition
- Core pattern
- Prerequisites
- Telling the user what they are missing
- Untrusted content
- Voice rules (baked into every skill)
- How URLs map to URNs
- Known gotchas
- Resources
- Acknowledgments
- After a successful run
Scripts executed separately
lib/__init__.pylib/_env.pylib/apify_client.pylib/approval.pylib/backend_selector.pylib/pixfaro_client.pylib/publora_client.pylib/url_parser.pyscripts/check_actor_inputs.pyscripts/check_config.pyscripts/check_frontmatter.pyscripts/check_no_secrets.pyscripts/post_comment.pyscripts/schedule_post.pyscripts/selftest.py
Files
.codex-plugin/plugin.jsonasset1,785 bytes.codexignoreasset100 bytes.env.exampleasset3,703 bytesLICENSEasset1,070 bytesREADME.mddoc27,980 bytesSECURITY.mddoc2,707 bytesSKILL.mdcore14,012 bytesassets/icon.svgasset768 bytesassets/linkedin-skills-hero.pngasset812,604 byteslib/__init__.pyruns2,035 byteslib/_env.pyruns4,188 byteslib/apify_client.pyruns15,839 byteslib/approval.pyruns1,736 byteslib/backend_selector.pyruns35,899 byteslib/pixfaro_client.pyruns15,837 byteslib/publora_client.pyruns14,443 byteslib/url_parser.pyruns4,473 bytesreferences/algorithm-heuristics.mddoc8,627 bytesreferences/engagement-metrics-taxonomy.mddoc2,680 bytesreferences/founder-topics.mddoc14,536 bytesreferences/hook-formulas.mddoc40,431 bytesreferences/industry-benchmarks.mddoc4,327 bytesreferences/mcp-read-layer.mddoc8,009 bytesreferences/precedence.mddoc3,362 bytesreferences/story-bank.mddoc3,681 bytesreferences/untrusted-content.mddoc3,101 bytesreferences/voice-profile.mddoc2,990 bytesreferences/voice-rules.mddoc2,403 bytesrequirements-lock.txtdoc238 bytesrequirements.txtdoc38 bytesscripts/check_actor_inputs.pyruns5,936 bytesscripts/check_config.pyruns15,162 bytesscripts/check_frontmatter.pyruns3,856 bytesscripts/check_no_secrets.pyruns4,899 bytesscripts/post_comment.pyruns3,015 bytesscripts/schedule_post.pyruns4,459 bytesscripts/selftest.pyruns24,655 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 GitHublinkedin-comment-drafter
When your agent uses it
Draft a LinkedIn comment on someone else's post from its URL, or reshare (repost) it to your feed with optional commentary. Use when the user pastes a post URL and asks to comment, engage, be first commenter, or repost with their thoughts. Produces 1-3 variants in the user's voice, picks a reaction, and publishes via Publora on approval. Not for replying to existing comments (use linkedin-reply-handler).
What it loads into context
Frontmatter
102 tokensAlways available to the agent
SKILL.md
2,251 tokensWhen the skill is activated
Reference documents
7,027 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps
- Reshare mode (repost with your thoughts)
- Templates (see `references/comment-templates.md` for full list)
- Hard rules
- Example invocation
- Files in this skill
- Untrusted content
- Related skills
Files
../../references/mcp-read-layer.mddoc8,009 bytes../../references/story-bank.mddoc3,681 bytes../../references/untrusted-content.mddoc3,101 bytes../../references/voice-profile.mddoc2,990 bytes../../references/voice-rules.mddoc2,403 bytesSKILL.mdcore9,157 bytesreferences/comment-templates.mddoc7,855 bytesreferences/examples.mddoc433 bytesreferences/voice-rules.mddoc96 bytes
Read SKILL.md
# LinkedIn Comment Drafter
Produce conversation-provoking comments on any LinkedIn post from a URL. The skill targets the patterns that actually got author replies in 2026 testing and avoids the thesis-restatement patterns that die with zero engagement.
## When to use
- User pastes a LinkedIn post URL and says "comment on this", "draft me a comment", "engage with this post"
- User wants to be among the first 3 commenters on a viral post
- User wants to reply to a closing question the author asked
- User wants to **reshare/repost** a post to their own feed, with or without a one-line take ("repost this with my thoughts", "reshare this")
## Input
A LinkedIn post URL in any of the standard shapes (see the top-level `SKILL.md` URL table).View the complete source on GitHublinkedin-content-planner
When your agent uses it
Generate a 7-day LinkedIn content plan from a theme, audience, and pillars. Produces per-day post pillar, format, hook type, CTA, posting time, daily comment targets, and a weekly inbound-readiness check. Use when the user wants to plan a week or month of content, not draft a single post (use linkedin-post-writer).
What it loads into context
Frontmatter
83 tokensAlways available to the agent
SKILL.md
2,195 tokensWhen the skill is activated
Reference documents
19,143 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Rules
- Formula → pillar mapping
- Founders edition (alternative pillar set)
- Goal mix (balance the week, not just the pillars)
- Steps
- Example
- Files
- Related skills
Files
../../references/founder-topics.mddoc14,536 bytes../../references/hook-formulas.mddoc40,431 bytes../../references/story-bank.mddoc3,681 bytes../../references/voice-profile.mddoc2,990 bytesSKILL.mdcore8,281 bytesreferences/example-plan-week.mddoc5,166 bytesreferences/pillars-framework.mddoc9,676 bytes
Read SKILL.md
# LinkedIn Content Planner
Produce a 7-day LinkedIn plan built around the 3-pillar discipline (Authority 40-50%, Personal Narrative 30-40%, Community 20-30%). Optionally adds a Product/Offer pillar at 10-15%.
## When to use
- User asks "plan my week" or "what should I post this week"
- User wants to escape ad-hoc shipping and establish rhythm
- Before a launch week (user needs product-pillar alignment)
## Input
- **Theme** (optional): e.g., "AI agents shipping in production", "first 6 months of Co.Actor"
- **Audience description:** e.g., "B2B founders, AI ops leaders, marketing VPs"View the complete source on GitHublinkedin-employee-advocacy
When your agent uses it
Stand up and run a LinkedIn employee advocacy program for a marketing or sales team. Covers 14-day launch playbook, brand-guideline governance, per-post time budget, cadence benchmarks, and team ROI (reach, engagement, pipeline). Triggers on "employee advocacy", "get the team posting", "scale LinkedIn across team", "advocacy ROI". Not for planning one person's own calendar (use linkedin-content-planner).
What it loads into context
Frontmatter
102 tokensAlways available to the agent
SKILL.md
1,387 tokensWhen the skill is activated
Reference documents
3,197 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Four operating principles
- Benchmarks
- 14-day launch playbook
- Governance: brand-safe without being blocked
- ROI measurement
- Anti-patterns
- Resources
- Related skills
Files
SKILL.mdcore6,181 bytesreferences/advocacy-principles.mddoc3,462 bytesreferences/governance-playbook.mddoc5,482 bytesreferences/team-cadence-matrix.mddoc3,788 bytes
Read SKILL.md
# LinkedIn Employee Advocacy
Stand up a marketing-team LinkedIn advocacy program that scales without killing authenticity. Employee posts get **8x more engagement** than brand-page posts — this skill operationalizes that advantage.
## When to use
- Marketing leader wants to get their team posting on LinkedIn
- User is planning an advocacy program launch
- Team is posting but output is inconsistent / off-brand / low-engagement
- Need ROI measurement framework for an existing program
- Requests: "how do I get the team posting", "launch advocacy", "scale LinkedIn across 10 people"
## Input
View the complete source on GitHublinkedin-engager-analytics
When your agent uses it
Pull the people who liked or commented on any LinkedIn post and segment them by ICP fit (peer / aspirational / prospect / other). Produces an engager roster, tier breakdown, and outbound action lists (follow back, comment-drop, DM-able with one-line openers). Powered by Apify, no LinkedIn login. Triggers on "who liked my post", "who engaged", "engagers report", "audience analytics". Not for tracking author replies to your comments (use linkedin-thread-monitor).
What it loads into context
Frontmatter
115 tokensAlways available to the agent
SKILL.md
1,422 tokensWhen the skill is activated
Reference documents
3,214 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps
- Inbound-quality signals
- Hard rules
- Cost accounting
- Untrusted content
- Files
- Related skills
Files
../../references/mcp-read-layer.mddoc8,009 bytes../../references/untrusted-content.mddoc3,101 bytesSKILL.mdcore6,122 bytesreferences/output-spec.mddoc1,464 bytes
Read SKILL.md
# LinkedIn Engager Analytics
Pull every liker and commenter on a LinkedIn post and bucket them by ICP fit. Outputs a roster + action list you can feed into your DM or outreach queue.
Needs a read credential: `APIFY_TOKEN`, or the Apify MCP connector (the only option on claude.ai). With neither, falls back to user-paste of the engager list.
## When to use
- After publishing a post: "Who actually engaged? Are they ICP?"
- Before a campaign: "Pull the last 5 viral posts in my niche, group their commenters by company size"
- Reviewing competitor engagement: which prospects show up across multiple authors
## Input
View the complete source on GitHublinkedin-hook-extractor
When your agent uses it
Reverse-engineer the hook formula from a viral LinkedIn post URL. Returns which of the 20 canonical 2026 formulas it uses (anaphora, R.I.P., year-pivot, time-anchor, curiosity-gap, contrarian, comment-gate, emotional cold-open, named-gratitude, and 11 more), why it worked, and a blank template. Use to learn from a competitor's post, not to write your own (use linkedin-post-writer).
What it loads into context
Frontmatter
107 tokensAlways available to the agent
SKILL.md
1,156 tokensWhen the skill is activated
Reference documents
14,218 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps
- Example
- Formulas reference
- Untrusted content
- Files
- Related skills
Files
../../references/hook-formulas.mddoc40,431 bytes../../references/mcp-read-layer.mddoc8,009 bytes../../references/untrusted-content.mddoc3,101 bytesSKILL.mdcore4,807 bytesSKILL.mdcore4,807 bytesreferences/classification-rules.mddoc3,381 bytesreferences/examples.mddoc959 bytes
Read SKILL.md
# LinkedIn Hook Extractor
Paste a viral LinkedIn post URL. Get back: which hook formula it uses, the exact structure, why it worked, and a blank template mapped to your topic.
## When to use
- User finds a viral post they want to study
- User wants to replicate a specific creator's pattern
- Before `linkedin-post-writer` to seed a draft with a proven structure
## Input
A LinkedIn post URL (any type: activity, share, ugcPost).
View the complete source on GitHublinkedin-humanizer
When your agent uses it
Remove AI tells from LinkedIn posts/comments: 2026 vocabulary density, reveal bridges, staccato fragments, stacked triads, performed sincerity. Tiered rewriter plus `--mode audit` LinkedIn post auditor and `--mode profile` voice builder. Not for drafting from scratch (use linkedin-post-writer) or beating AI detectors. Keywords: humanize, de-AI, post audit, post auditor, audit before posting.
What it loads into context
Frontmatter
98 tokensAlways available to the agent
SKILL.md
4,746 tokensWhen the skill is activated
Reference documents
33,269 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What changed in V3
- When to use
- Input
- Output
- Modes
- The four passes
- Non-negotiable rules
- Tier rationale (short version)
- Example
- Files
- Related skills
Scripts executed separately
scripts/test_detectors.py
Files
../../references/voice-profile.mddoc2,990 bytesSKILL.mdcore19,882 bytesSKILL.mdcore19,882 bytesreferences/audit-ai-tells.mddoc11,884 bytesreferences/audit-checklist.mddoc4,183 bytesreferences/audit-examples.mddoc452 bytesreferences/detector-list.mddoc6,284 bytesreferences/emoji-patterns.mddoc3,845 bytesreferences/examples.mddoc1,441 bytesreferences/rules-explainer.mddoc15,137 bytesreferences/scrub-rules.mddoc27,676 bytesreferences/tier-rationale.mddoc17,700 bytesreferences/voice-fingerprint.mddoc5,434 bytesscripts/detectors.env.exampleasset428 bytesscripts/test_detectors.pyruns13,315 bytessub-skills/detector-tester.mddoc6,148 bytessub-skills/emoji-detector.mddoc3,993 bytessub-skills/illustration.mddoc7,606 bytessub-skills/post-audit.mddoc4,974 bytessub-skills/rules-explainer.mddoc5,371 bytessub-skills/voice-profile.mddoc3,065 bytes
Read SKILL.md
# LinkedIn Humanizer V3
Rewrites any text to remove the AI tells that human readers notice and that LinkedIn's "AI slop" filter reacts to. Based on Wikipedia's "Signs of AI writing" taxonomy, the 2025-2026 stylometry literature, and our own length-controlled corpus. **V3 (2026-09):** recalibrated on 2026 evidence. Vocabulary is scored by density, em dashes are capped instead of banned, forced rhythm is now a tell instead of a fix, and there is an over-correction guard.
**What this skill does not do:** it does not make text "pass" GPTZero, Pangram, Turnitin or Originality. Those are trained classifiers keyed on the instruction-tuning style signature; prompt-style "sound like a real person" rewrites are caught 92-95% of the time (VUB IJEI 2026, Russell 2025), and light mechanical rewriting raises detectability (arXiv 2603.17522). No post-hoc edit reliably beats a Pangram-class detector, and detector scores on LinkedIn-length text (100-300 words) are noise. The real value is elsewhere: expert human readers cite vocabulary (53%) and sentence structure (36%) as what gives AI text away, and LinkedIn's July 2026 slop-report button costs a flagged post roughly 40% of its views. This skill removes what those readers and that filter react to.
## What changed in V3
Evidence tier in brackets: [strong] = replicated across 2+ independent 2025-2026 studies or our own length-controlled corpus; [vendor] = single platform or vendor dataset; [weak] = one study or expert-panel report.
- **Vocabulary moved from a delete-list to density scoring.** The 2023-24 words (delve, tapestry, realm, journey) are decaying as humans avoid them [strong: Geng & Trotta 2025]. The durable 2026 markers are common words (significant, crucial, notably, comprehensive, insights, robust, leverage, foster, landscape, nuanced, streamline, elevate) plus grammar: nominalisations and "-ing" clause openers at 5.3x human rate [strong: Kobak Sci Adv 2025; Wu et al 2026; PNAS 2025]. AI vocabulary is also the one marker consistently reach-negative on LinkedIn in our own corpus (0.74-0.84 author-relative) [strong]. One marker in a paragraph is not a verdict. Three or more is.
- **Em dash is no longer a tell.** GPT-5.4 emits 1.43 per 1,000 words, below the 3.23 human baseline; 29% of human captions and 23% of top-creator LinkedIn posts in our corpus use one (author-relative ratio 1.09) [strong]. Zero em dashes is now its own tell (the writer is trying to look human). New rule: cap at about 1 per 100 words, replace excess with comma, colon, parentheses or a rewrite. Never a period.
- **Forced burstiness is the #1 2026 tell, not the fix.** LLM sentence-length variance is half of human [strong], but detectors do not score it, mechanical long/short alternation is a learnable humanizer fingerprint [weak: DAMAGE 2025], and on LinkedIn sentence-length variance is not an engagement lever in either direction (our corpus, n=397, within-creator: null to slightly negative) [strong]. "Short. Punchy. Done.", "No X. No Y. Just Z.", one-word paragraphs and "The result?" reveals are the current top tells. Pass 2 is now RHYTHM, not BREAK: fix machine-flat rhythm, never manufacture variance.
- **Rule of three is still a tell, at density.** Tricolon runs at 2x expert-human rate across 2026 frontier models [strong: arXiv 2604.19768]. Stacked, perfectly parallel triads and 3+ per post get scrubbed. One natural triple stays (26% of top human tweets have one).View the complete source on GitHublinkedin-interviewer
When your agent uses it
Interview the user for the raw material their posts are made of. Builds a lasting Story Bank of roles, numbers, turning points, scars and positions, or runs a focused interview that turns one topic into a post spine. Use when a draft has nothing concrete to draw on, or the user says interview me. Not for learning how they write (use linkedin-humanizer --mode profile).
What it loads into context
Frontmatter
86 tokensAlways available to the agent
SKILL.md
1,970 tokensWhen the skill is activated
Reference documents
3,436 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The two things it fills
- When to use
- Modes
- Steps, bank mode
- Steps, post mode
- Hard rules
- Anti-patterns (skill will refuse)
- Untrusted content
- Resources
- Related skills
Files
../../references/story-bank.mddoc3,681 bytes../../references/untrusted-content.mddoc3,101 bytes../../references/voice-profile.mddoc2,990 bytesSKILL.mdcore8,263 bytesreferences/question-bank.mddoc4,433 bytes
Read SKILL.md
# LinkedIn Interviewer
Every writing skill here demands specifics: one odd-precision number with a named
referent, a dated moment, a position someone would argue with. When the input has
none, the rule is to ask the user rather than invent. That ask happens on every
request, unstructured, and the answers are thrown away when the session ends.
This skill does the asking properly, once, and keeps the answers.
## The two things it fills
| | `references/voice-profile.md` | `references/story-bank.md` |
|---|---|---|
| Holds | how you sound | what you have to say |View the complete source on GitHublinkedin-post-writer
When your agent uses it
Draft a new LinkedIn post from scratch using one of 20 2026 hook formulas (anaphora, R.I.P., time-anchor, curiosity-gap, contrarian, controlled A/B, false-binary, and more) plus a founders-edition angle library, picked by engagement goal (comments, reposts, likes, saves). Runs the humanizer pass and schedules via Publora on approval. Use to write a post, find a hook or proven format, or get founder-specific angles. Not for reviewing existing drafts (use linkedin-humanizer --mode audit).
What it loads into context
Frontmatter
125 tokensAlways available to the agent
SKILL.md
3,706 tokensWhen the skill is activated
Reference documents
21,380 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Formulas this skill can use
- Steps
- Hard rules (from user feedback)
- Anti-patterns (skill will refuse)
- Resources
- Related skills
Files
../../references/algorithm-heuristics.mddoc8,627 bytes../../references/founder-topics.mddoc14,536 bytes../../references/hook-formulas.mddoc40,431 bytes../../references/story-bank.mddoc3,681 bytes../../references/voice-profile.mddoc2,990 bytes../linkedin-humanizer/sub-skills/illustration.mddoc7,606 bytesSKILL.mdcore14,489 bytesreferences/algorithm-heuristics.mddoc114 bytesreferences/hook-formulas.mddoc100 bytesreferences/humanizer-checklist.mddoc6,504 bytes
Read SKILL.md
# LinkedIn Post Writer
Ship long-form LinkedIn posts using hook formulas that actually performed in 2025-2026 (verified engagement multipliers).
## When to use
- User says "write me a LinkedIn post about X"
- User has a topic + a rough angle and needs a hook + structure
- User wants to pick from known-winning formats and fill in their voice
- User wants to audit + schedule in one flow
## Formulas this skill can use
| Code | Formula | Reference eng | Best for |View the complete source on GitHublinkedin-profile-optimizer
When your agent uses it
Audit and rewrite a LinkedIn profile end-to-end for 2026: headline, About 7-step, Featured, banner, photo, Experience metrics, Skills, custom URL, recommendations. Triggers on "review my profile", "rewrite my headline", "fix my About", "optimize banner", "profile audit", "LinkedIn bio". Converts resume-style profiles to ones that convert 3-5x better. Not for writing feed content (use linkedin-post-writer).
What it loads into context
Frontmatter
108 tokensAlways available to the agent
SKILL.md
1,433 tokensWhen the skill is activated
Reference documents
3,570 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps
- Nine-component scorecard
- Key benchmarks (from co.actor research)
- Hard rules
- Reference files
- Related skills
Files
SKILL.mdcore5,856 bytesreferences/about-section-templates.mddoc2,717 bytesreferences/banner-photo-specs.mddoc2,245 bytesreferences/experience-skills-rules.mddoc4,045 bytesreferences/featured-section-playbook.mddoc3,125 bytesreferences/profile-headline-formulas.mddoc2,296 bytes
Read SKILL.md
# LinkedIn Profile Optimizer
Audit the nine components of a LinkedIn profile (photo, banner, headline, About, Featured, Experience, Skills, custom URL, recommendations) against 2026 best practices, then rewrite each section that needs it. Optimized profiles get ~3.9x more views and convert visitors 3-5x better than default/resume-style profiles.
## When to use
- User asks for an audit and pastes their profile text (a bare URL is not readable, see Input)
- User wants to rewrite their headline, About section, or Featured section
- User is launching a content strategy and needs the profile to match
- Any of: "review my profile", "fix my headline", "optimize bio", "profile audit", "LinkedIn optimization"
## Input
**Paste the profile, do not just link it.** The read layer covers posts, comments and engagers; there is no profile actor, so a profile URL cannot be fetched, with an APIFY_TOKEN or without one. Open the profile, copy the sections, paste them in. Screenshots of the visual parts work too.View the complete source on GitHublinkedin-reply-handler
When your agent uses it
Draft a reply to one LinkedIn comment from its URL, or sweep a whole thread from just the post URL and draft a reply to every comment worth answering, in one batch. Use for replying to a comment, following an author reply, or clearing all comments on a post. Resolves the correct parentComment (LinkedIn flattens threads to 2 levels), filters low-value comments before a sweep, and posts via Publora on approval. Not for top-level comments (use linkedin-comment-drafter).
What it loads into context
Frontmatter
113 tokensAlways available to the agent
SKILL.md
3,403 tokensWhen the skill is activated
Reference documents
9,062 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps — single comment
- Steps — whole thread
- The flattening gotcha (both modes)
- Reshare gotcha (whole-thread mode)
- Templates (`references/reply-templates.md`)
- Hard rules
- Examples
- Untrusted content
- Files
- Related skills
Files
../../references/algorithm-heuristics.mddoc8,627 bytes../../references/mcp-read-layer.mddoc8,009 bytes../../references/story-bank.mddoc3,681 bytes../../references/untrusted-content.mddoc3,101 bytes../../references/voice-profile.mddoc2,990 bytesSKILL.mdcore14,649 bytesreferences/examples.mddoc1,322 bytesreferences/filtering-rules.mddoc2,666 bytesreferences/reply-templates.mddoc2,297 bytesreferences/threading-rules.mddoc2,930 bytes
Read SKILL.md
# LinkedIn Reply Handler
Drafts a reply to a specific LinkedIn comment, or sweeps an entire comment thread (every top-level comment and its replies) from just the post URL and drafts a reply to each one worth answering. Both modes correctly handle LinkedIn's 2-level thread flattening: if you're replying to a reply, the Publora API needs the TOP-level comment URN as `parentComment`, not the reply's URN.
## When to use
**Single comment:**
- User pastes a LinkedIn comment URL (contains `?commentUrn=...`) and says "reply to this"
- An author replied to the user's comment and the user wants to continue the thread
- User wants to re-engage a conversation that's gone dormant
**Whole thread (just a post URL, no comment URLs):**
- User pastes a post URL and says "reply to all the comments", "clear my inbox on this post", "draft replies for everyone who commented", "sweep the comments on this post"
- User wants to catch up on a post that has accumulated comments over several daysView the complete source on GitHublinkedin-repurposer
When your agent uses it
Repurpose existing content into a native LinkedIn post. Take a tweet, thread, YouTube video, blog, or newsletter and rebuild it for LinkedIn: re-hook before the fold, expand to the 900 to 1300 char sweet spot, add whitespace and a CTA, move links to the first comment, run the humanizer, publish via Publora on approval. Not for writing from scratch (use linkedin-post-writer), not for auditing a draft (use linkedin-humanizer --mode audit).
What it loads into context
Frontmatter
112 tokensAlways available to the agent
SKILL.md
1,588 tokensWhen the skill is activated
Reference documents
14,191 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- How it works
- Native-fit rules (source -> LinkedIn)
- Hard rules
- Anti-patterns (skill will refuse)
- Resources
- Related skills
Files
../../references/algorithm-heuristics.mddoc8,627 bytes../../references/hook-formulas.mddoc40,431 bytes../../references/story-bank.mddoc3,681 bytes../../references/voice-profile.mddoc2,990 bytesSKILL.mdcore6,647 bytesSKILL.mdcore6,647 bytesSKILL.mdcore6,647 bytesSKILL.mdcore6,647 bytesSKILL.mdcore6,647 bytesSKILL.mdcore6,647 bytes
Read SKILL.md
# LinkedIn Repurposer
Turn something you already made into a post that reads like it was written for LinkedIn. Repurposing is not copy-paste. A tweet that flew on X will flop pasted into LinkedIn: too short, no whitespace, wrong rhythm, and a link in the body that tanks your reach.
This skill transforms, it does not generate. It reads your source, keeps the idea, and rebuilds the delivery for LinkedIn's 2026 algorithm.
## When to use
- "Turn this tweet / thread into a LinkedIn post"
- "Repurpose my YouTube video / blog / newsletter for LinkedIn"
- "This worked on Threads, adapt it for LinkedIn"
- "I have a rough idea in another format, make it native here"
Not for a blank-page draft (use `linkedin-post-writer`) and not for reviewing a finished LinkedIn draft (use `linkedin-humanizer --mode audit`).View the complete source on GitHublinkedin-thread-monitor
When your agent uses it
Track which of your LinkedIn comments earned author replies. Flags the 6-24h warm-reply window where thread momentum peaks, classifies threads as hot/warm/cool/dormant, and routes warm ones to linkedin-reply-handler for follow-up drafts. Powered by Apify, no LinkedIn login. Triggers on "what threads need follow-up", "author replied", "monitor my comments". Not for analyzing likers on a post (use linkedin-engager-analytics).
What it loads into context
Frontmatter
109 tokensAlways available to the agent
SKILL.md
1,400 tokensWhen the skill is activated
Reference documents
4,105 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps
- Warm-reply window
- Inbound-quality signals
- Hard rules
- Cost accounting
- Untrusted content
- Files
- Related skills
Files
../../references/mcp-read-layer.mddoc8,009 bytes../../references/untrusted-content.mddoc3,101 bytesSKILL.mdcore5,916 bytesreferences/output-spec.mddoc1,219 bytesreferences/thread-timing.mddoc3,770 bytes
Read SKILL.md
# LinkedIn Thread Monitor
Track which of your comments earned author replies. The author-reply signal is the highest-value inbound LinkedIn produces; this skill ensures you respond inside the window where momentum compounds.
Needs a read credential: `APIFY_TOKEN`, or the Apify MCP connector (the only option on claude.ai). With neither, falls back to user-paste of recent comment URLs.
## When to use
- Daily: "What threads need follow-up today?"
- After posting a batch of comments: "Check back in 6 hours"
- When an author replied personally: "Draft the response"
## Input
View the complete source on GitHublinkedin-comment-drafter
When your agent uses it
Draft a LinkedIn comment on someone else's post from its URL, or reshare (repost) it to your feed with optional commentary. Use when the user pastes a post URL and asks to comment, engage, be first commenter, or repost with their thoughts. Produces 1-3 variants in the user's voice, picks a reaction, and publishes via Publora on approval. Not for replying to existing comments (use linkedin-reply-handler).
What it loads into context
Frontmatter
102 tokensAlways available to the agent
SKILL.md
2,251 tokensWhen the skill is activated
Reference documents
7,027 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps
- Reshare mode (repost with your thoughts)
- Templates (see `references/comment-templates.md` for full list)
- Hard rules
- Example invocation
- Files in this skill
- Untrusted content
- Related skills
Files
../../references/mcp-read-layer.mddoc8,009 bytes../../references/story-bank.mddoc3,681 bytes../../references/untrusted-content.mddoc3,101 bytes../../references/voice-profile.mddoc2,990 bytes../../references/voice-rules.mddoc2,403 bytesSKILL.mdcore9,157 bytesreferences/comment-templates.mddoc7,855 bytesreferences/examples.mddoc433 bytesreferences/voice-rules.mddoc96 bytes
Read SKILL.md
# LinkedIn Comment Drafter
Produce conversation-provoking comments on any LinkedIn post from a URL. The skill targets the patterns that actually got author replies in 2026 testing and avoids the thesis-restatement patterns that die with zero engagement.
## When to use
- User pastes a LinkedIn post URL and says "comment on this", "draft me a comment", "engage with this post"
- User wants to be among the first 3 commenters on a viral post
- User wants to reply to a closing question the author asked
- User wants to **reshare/repost** a post to their own feed, with or without a one-line take ("repost this with my thoughts", "reshare this")
## Input
A LinkedIn post URL in any of the standard shapes (see the top-level `SKILL.md` URL table).View the complete source on GitHublinkedin-content-planner
When your agent uses it
Generate a 7-day LinkedIn content plan from a theme, audience, and pillars. Produces per-day post pillar, format, hook type, CTA, posting time, daily comment targets, and a weekly inbound-readiness check. Use when the user wants to plan a week or month of content, not draft a single post (use linkedin-post-writer).
What it loads into context
Frontmatter
83 tokensAlways available to the agent
SKILL.md
2,195 tokensWhen the skill is activated
Reference documents
19,143 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Rules
- Formula → pillar mapping
- Founders edition (alternative pillar set)
- Goal mix (balance the week, not just the pillars)
- Steps
- Example
- Files
- Related skills
Files
../../references/founder-topics.mddoc14,536 bytes../../references/hook-formulas.mddoc40,431 bytes../../references/story-bank.mddoc3,681 bytes../../references/voice-profile.mddoc2,990 bytesSKILL.mdcore8,281 bytesreferences/example-plan-week.mddoc5,166 bytesreferences/pillars-framework.mddoc9,676 bytes
Read SKILL.md
# LinkedIn Content Planner
Produce a 7-day LinkedIn plan built around the 3-pillar discipline (Authority 40-50%, Personal Narrative 30-40%, Community 20-30%). Optionally adds a Product/Offer pillar at 10-15%.
## When to use
- User asks "plan my week" or "what should I post this week"
- User wants to escape ad-hoc shipping and establish rhythm
- Before a launch week (user needs product-pillar alignment)
## Input
- **Theme** (optional): e.g., "AI agents shipping in production", "first 6 months of Co.Actor"
- **Audience description:** e.g., "B2B founders, AI ops leaders, marketing VPs"View the complete source on GitHublinkedin-employee-advocacy
When your agent uses it
Stand up and run a LinkedIn employee advocacy program for a marketing or sales team. Covers 14-day launch playbook, brand-guideline governance, per-post time budget, cadence benchmarks, and team ROI (reach, engagement, pipeline). Triggers on "employee advocacy", "get the team posting", "scale LinkedIn across team", "advocacy ROI". Not for planning one person's own calendar (use linkedin-content-planner).
What it loads into context
Frontmatter
102 tokensAlways available to the agent
SKILL.md
1,387 tokensWhen the skill is activated
Reference documents
3,197 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Four operating principles
- Benchmarks
- 14-day launch playbook
- Governance: brand-safe without being blocked
- ROI measurement
- Anti-patterns
- Resources
- Related skills
Files
SKILL.mdcore6,181 bytesreferences/advocacy-principles.mddoc3,462 bytesreferences/governance-playbook.mddoc5,482 bytesreferences/team-cadence-matrix.mddoc3,788 bytes
Read SKILL.md
# LinkedIn Employee Advocacy
Stand up a marketing-team LinkedIn advocacy program that scales without killing authenticity. Employee posts get **8x more engagement** than brand-page posts — this skill operationalizes that advantage.
## When to use
- Marketing leader wants to get their team posting on LinkedIn
- User is planning an advocacy program launch
- Team is posting but output is inconsistent / off-brand / low-engagement
- Need ROI measurement framework for an existing program
- Requests: "how do I get the team posting", "launch advocacy", "scale LinkedIn across 10 people"
## Input
View the complete source on GitHublinkedin-engager-analytics
When your agent uses it
Pull the people who liked or commented on any LinkedIn post and segment them by ICP fit (peer / aspirational / prospect / other). Produces an engager roster, tier breakdown, and outbound action lists (follow back, comment-drop, DM-able with one-line openers). Powered by Apify, no LinkedIn login. Triggers on "who liked my post", "who engaged", "engagers report", "audience analytics". Not for tracking author replies to your comments (use linkedin-thread-monitor).
What it loads into context
Frontmatter
115 tokensAlways available to the agent
SKILL.md
1,422 tokensWhen the skill is activated
Reference documents
3,214 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps
- Inbound-quality signals
- Hard rules
- Cost accounting
- Untrusted content
- Files
- Related skills
Files
../../references/mcp-read-layer.mddoc8,009 bytes../../references/untrusted-content.mddoc3,101 bytesSKILL.mdcore6,122 bytesreferences/output-spec.mddoc1,464 bytes
Read SKILL.md
# LinkedIn Engager Analytics
Pull every liker and commenter on a LinkedIn post and bucket them by ICP fit. Outputs a roster + action list you can feed into your DM or outreach queue.
Needs a read credential: `APIFY_TOKEN`, or the Apify MCP connector (the only option on claude.ai). With neither, falls back to user-paste of the engager list.
## When to use
- After publishing a post: "Who actually engaged? Are they ICP?"
- Before a campaign: "Pull the last 5 viral posts in my niche, group their commenters by company size"
- Reviewing competitor engagement: which prospects show up across multiple authors
## Input
View the complete source on GitHublinkedin-hook-extractor
When your agent uses it
Reverse-engineer the hook formula from a viral LinkedIn post URL. Returns which of the 20 canonical 2026 formulas it uses (anaphora, R.I.P., year-pivot, time-anchor, curiosity-gap, contrarian, comment-gate, emotional cold-open, named-gratitude, and 11 more), why it worked, and a blank template. Use to learn from a competitor's post, not to write your own (use linkedin-post-writer).
What it loads into context
Frontmatter
107 tokensAlways available to the agent
SKILL.md
1,156 tokensWhen the skill is activated
Reference documents
14,218 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps
- Example
- Formulas reference
- Untrusted content
- Files
- Related skills
Files
../../references/hook-formulas.mddoc40,431 bytes../../references/mcp-read-layer.mddoc8,009 bytes../../references/untrusted-content.mddoc3,101 bytesSKILL.mdcore4,807 bytesSKILL.mdcore4,807 bytesreferences/classification-rules.mddoc3,381 bytesreferences/examples.mddoc959 bytes
Read SKILL.md
# LinkedIn Hook Extractor
Paste a viral LinkedIn post URL. Get back: which hook formula it uses, the exact structure, why it worked, and a blank template mapped to your topic.
## When to use
- User finds a viral post they want to study
- User wants to replicate a specific creator's pattern
- Before `linkedin-post-writer` to seed a draft with a proven structure
## Input
A LinkedIn post URL (any type: activity, share, ugcPost).
View the complete source on GitHublinkedin-humanizer
When your agent uses it
Remove AI tells from LinkedIn posts/comments: 2026 vocabulary density, reveal bridges, staccato fragments, stacked triads, performed sincerity. Tiered rewriter plus `--mode audit` LinkedIn post auditor and `--mode profile` voice builder. Not for drafting from scratch (use linkedin-post-writer) or beating AI detectors. Keywords: humanize, de-AI, post audit, post auditor, audit before posting.
What it loads into context
Frontmatter
98 tokensAlways available to the agent
SKILL.md
4,746 tokensWhen the skill is activated
Reference documents
33,269 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- What changed in V3
- When to use
- Input
- Output
- Modes
- The four passes
- Non-negotiable rules
- Tier rationale (short version)
- Example
- Files
- Related skills
Scripts executed separately
scripts/test_detectors.py
Files
../../references/voice-profile.mddoc2,990 bytesSKILL.mdcore19,882 bytesSKILL.mdcore19,882 bytesreferences/audit-ai-tells.mddoc11,884 bytesreferences/audit-checklist.mddoc4,183 bytesreferences/audit-examples.mddoc452 bytesreferences/detector-list.mddoc6,284 bytesreferences/emoji-patterns.mddoc3,845 bytesreferences/examples.mddoc1,441 bytesreferences/rules-explainer.mddoc15,137 bytesreferences/scrub-rules.mddoc27,676 bytesreferences/tier-rationale.mddoc17,700 bytesreferences/voice-fingerprint.mddoc5,434 bytesscripts/detectors.env.exampleasset428 bytesscripts/test_detectors.pyruns13,315 bytessub-skills/detector-tester.mddoc6,148 bytessub-skills/emoji-detector.mddoc3,993 bytessub-skills/illustration.mddoc7,606 bytessub-skills/post-audit.mddoc4,974 bytessub-skills/rules-explainer.mddoc5,371 bytessub-skills/voice-profile.mddoc3,065 bytes
Read SKILL.md
# LinkedIn Humanizer V3
Rewrites any text to remove the AI tells that human readers notice and that LinkedIn's "AI slop" filter reacts to. Based on Wikipedia's "Signs of AI writing" taxonomy, the 2025-2026 stylometry literature, and our own length-controlled corpus. **V3 (2026-09):** recalibrated on 2026 evidence. Vocabulary is scored by density, em dashes are capped instead of banned, forced rhythm is now a tell instead of a fix, and there is an over-correction guard.
**What this skill does not do:** it does not make text "pass" GPTZero, Pangram, Turnitin or Originality. Those are trained classifiers keyed on the instruction-tuning style signature; prompt-style "sound like a real person" rewrites are caught 92-95% of the time (VUB IJEI 2026, Russell 2025), and light mechanical rewriting raises detectability (arXiv 2603.17522). No post-hoc edit reliably beats a Pangram-class detector, and detector scores on LinkedIn-length text (100-300 words) are noise. The real value is elsewhere: expert human readers cite vocabulary (53%) and sentence structure (36%) as what gives AI text away, and LinkedIn's July 2026 slop-report button costs a flagged post roughly 40% of its views. This skill removes what those readers and that filter react to.
## What changed in V3
Evidence tier in brackets: [strong] = replicated across 2+ independent 2025-2026 studies or our own length-controlled corpus; [vendor] = single platform or vendor dataset; [weak] = one study or expert-panel report.
- **Vocabulary moved from a delete-list to density scoring.** The 2023-24 words (delve, tapestry, realm, journey) are decaying as humans avoid them [strong: Geng & Trotta 2025]. The durable 2026 markers are common words (significant, crucial, notably, comprehensive, insights, robust, leverage, foster, landscape, nuanced, streamline, elevate) plus grammar: nominalisations and "-ing" clause openers at 5.3x human rate [strong: Kobak Sci Adv 2025; Wu et al 2026; PNAS 2025]. AI vocabulary is also the one marker consistently reach-negative on LinkedIn in our own corpus (0.74-0.84 author-relative) [strong]. One marker in a paragraph is not a verdict. Three or more is.
- **Em dash is no longer a tell.** GPT-5.4 emits 1.43 per 1,000 words, below the 3.23 human baseline; 29% of human captions and 23% of top-creator LinkedIn posts in our corpus use one (author-relative ratio 1.09) [strong]. Zero em dashes is now its own tell (the writer is trying to look human). New rule: cap at about 1 per 100 words, replace excess with comma, colon, parentheses or a rewrite. Never a period.
- **Forced burstiness is the #1 2026 tell, not the fix.** LLM sentence-length variance is half of human [strong], but detectors do not score it, mechanical long/short alternation is a learnable humanizer fingerprint [weak: DAMAGE 2025], and on LinkedIn sentence-length variance is not an engagement lever in either direction (our corpus, n=397, within-creator: null to slightly negative) [strong]. "Short. Punchy. Done.", "No X. No Y. Just Z.", one-word paragraphs and "The result?" reveals are the current top tells. Pass 2 is now RHYTHM, not BREAK: fix machine-flat rhythm, never manufacture variance.
- **Rule of three is still a tell, at density.** Tricolon runs at 2x expert-human rate across 2026 frontier models [strong: arXiv 2604.19768]. Stacked, perfectly parallel triads and 3+ per post get scrubbed. One natural triple stays (26% of top human tweets have one).View the complete source on GitHublinkedin-interviewer
When your agent uses it
Interview the user for the raw material their posts are made of. Builds a lasting Story Bank of roles, numbers, turning points, scars and positions, or runs a focused interview that turns one topic into a post spine. Use when a draft has nothing concrete to draw on, or the user says interview me. Not for learning how they write (use linkedin-humanizer --mode profile).
What it loads into context
Frontmatter
86 tokensAlways available to the agent
SKILL.md
1,970 tokensWhen the skill is activated
Reference documents
3,436 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- The two things it fills
- When to use
- Modes
- Steps, bank mode
- Steps, post mode
- Hard rules
- Anti-patterns (skill will refuse)
- Untrusted content
- Resources
- Related skills
Files
../../references/story-bank.mddoc3,681 bytes../../references/untrusted-content.mddoc3,101 bytes../../references/voice-profile.mddoc2,990 bytesSKILL.mdcore8,263 bytesreferences/question-bank.mddoc4,433 bytes
Read SKILL.md
# LinkedIn Interviewer
Every writing skill here demands specifics: one odd-precision number with a named
referent, a dated moment, a position someone would argue with. When the input has
none, the rule is to ask the user rather than invent. That ask happens on every
request, unstructured, and the answers are thrown away when the session ends.
This skill does the asking properly, once, and keeps the answers.
## The two things it fills
| | `references/voice-profile.md` | `references/story-bank.md` |
|---|---|---|
| Holds | how you sound | what you have to say |View the complete source on GitHublinkedin-post-writer
When your agent uses it
Draft a new LinkedIn post from scratch using one of 20 2026 hook formulas (anaphora, R.I.P., time-anchor, curiosity-gap, contrarian, controlled A/B, false-binary, and more) plus a founders-edition angle library, picked by engagement goal (comments, reposts, likes, saves). Runs the humanizer pass and schedules via Publora on approval. Use to write a post, find a hook or proven format, or get founder-specific angles. Not for reviewing existing drafts (use linkedin-humanizer --mode audit).
What it loads into context
Frontmatter
125 tokensAlways available to the agent
SKILL.md
3,706 tokensWhen the skill is activated
Reference documents
21,380 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Formulas this skill can use
- Steps
- Hard rules (from user feedback)
- Anti-patterns (skill will refuse)
- Resources
- Related skills
Files
../../references/algorithm-heuristics.mddoc8,627 bytes../../references/founder-topics.mddoc14,536 bytes../../references/hook-formulas.mddoc40,431 bytes../../references/story-bank.mddoc3,681 bytes../../references/voice-profile.mddoc2,990 bytes../linkedin-humanizer/sub-skills/illustration.mddoc7,606 bytesSKILL.mdcore14,489 bytesreferences/algorithm-heuristics.mddoc114 bytesreferences/hook-formulas.mddoc100 bytesreferences/humanizer-checklist.mddoc6,504 bytes
Read SKILL.md
# LinkedIn Post Writer
Ship long-form LinkedIn posts using hook formulas that actually performed in 2025-2026 (verified engagement multipliers).
## When to use
- User says "write me a LinkedIn post about X"
- User has a topic + a rough angle and needs a hook + structure
- User wants to pick from known-winning formats and fill in their voice
- User wants to audit + schedule in one flow
## Formulas this skill can use
| Code | Formula | Reference eng | Best for |View the complete source on GitHublinkedin-profile-optimizer
When your agent uses it
Audit and rewrite a LinkedIn profile end-to-end for 2026: headline, About 7-step, Featured, banner, photo, Experience metrics, Skills, custom URL, recommendations. Triggers on "review my profile", "rewrite my headline", "fix my About", "optimize banner", "profile audit", "LinkedIn bio". Converts resume-style profiles to ones that convert 3-5x better. Not for writing feed content (use linkedin-post-writer).
What it loads into context
Frontmatter
108 tokensAlways available to the agent
SKILL.md
1,433 tokensWhen the skill is activated
Reference documents
3,570 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps
- Nine-component scorecard
- Key benchmarks (from co.actor research)
- Hard rules
- Reference files
- Related skills
Files
SKILL.mdcore5,856 bytesreferences/about-section-templates.mddoc2,717 bytesreferences/banner-photo-specs.mddoc2,245 bytesreferences/experience-skills-rules.mddoc4,045 bytesreferences/featured-section-playbook.mddoc3,125 bytesreferences/profile-headline-formulas.mddoc2,296 bytes
Read SKILL.md
# LinkedIn Profile Optimizer
Audit the nine components of a LinkedIn profile (photo, banner, headline, About, Featured, Experience, Skills, custom URL, recommendations) against 2026 best practices, then rewrite each section that needs it. Optimized profiles get ~3.9x more views and convert visitors 3-5x better than default/resume-style profiles.
## When to use
- User asks for an audit and pastes their profile text (a bare URL is not readable, see Input)
- User wants to rewrite their headline, About section, or Featured section
- User is launching a content strategy and needs the profile to match
- Any of: "review my profile", "fix my headline", "optimize bio", "profile audit", "LinkedIn optimization"
## Input
**Paste the profile, do not just link it.** The read layer covers posts, comments and engagers; there is no profile actor, so a profile URL cannot be fetched, with an APIFY_TOKEN or without one. Open the profile, copy the sections, paste them in. Screenshots of the visual parts work too.View the complete source on GitHublinkedin-reply-handler
When your agent uses it
Draft a reply to one LinkedIn comment from its URL, or sweep a whole thread from just the post URL and draft a reply to every comment worth answering, in one batch. Use for replying to a comment, following an author reply, or clearing all comments on a post. Resolves the correct parentComment (LinkedIn flattens threads to 2 levels), filters low-value comments before a sweep, and posts via Publora on approval. Not for top-level comments (use linkedin-comment-drafter).
What it loads into context
Frontmatter
113 tokensAlways available to the agent
SKILL.md
3,403 tokensWhen the skill is activated
Reference documents
9,062 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps — single comment
- Steps — whole thread
- The flattening gotcha (both modes)
- Reshare gotcha (whole-thread mode)
- Templates (`references/reply-templates.md`)
- Hard rules
- Examples
- Untrusted content
- Files
- Related skills
Files
../../references/algorithm-heuristics.mddoc8,627 bytes../../references/mcp-read-layer.mddoc8,009 bytes../../references/story-bank.mddoc3,681 bytes../../references/untrusted-content.mddoc3,101 bytes../../references/voice-profile.mddoc2,990 bytesSKILL.mdcore14,649 bytesreferences/examples.mddoc1,322 bytesreferences/filtering-rules.mddoc2,666 bytesreferences/reply-templates.mddoc2,297 bytesreferences/threading-rules.mddoc2,930 bytes
Read SKILL.md
# LinkedIn Reply Handler
Drafts a reply to a specific LinkedIn comment, or sweeps an entire comment thread (every top-level comment and its replies) from just the post URL and drafts a reply to each one worth answering. Both modes correctly handle LinkedIn's 2-level thread flattening: if you're replying to a reply, the Publora API needs the TOP-level comment URN as `parentComment`, not the reply's URN.
## When to use
**Single comment:**
- User pastes a LinkedIn comment URL (contains `?commentUrn=...`) and says "reply to this"
- An author replied to the user's comment and the user wants to continue the thread
- User wants to re-engage a conversation that's gone dormant
**Whole thread (just a post URL, no comment URLs):**
- User pastes a post URL and says "reply to all the comments", "clear my inbox on this post", "draft replies for everyone who commented", "sweep the comments on this post"
- User wants to catch up on a post that has accumulated comments over several daysView the complete source on GitHublinkedin-repurposer
When your agent uses it
Repurpose existing content into a native LinkedIn post. Take a tweet, thread, YouTube video, blog, or newsletter and rebuild it for LinkedIn: re-hook before the fold, expand to the 900 to 1300 char sweet spot, add whitespace and a CTA, move links to the first comment, run the humanizer, publish via Publora on approval. Not for writing from scratch (use linkedin-post-writer), not for auditing a draft (use linkedin-humanizer --mode audit).
What it loads into context
Frontmatter
112 tokensAlways available to the agent
SKILL.md
1,588 tokensWhen the skill is activated
Reference documents
14,191 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- How it works
- Native-fit rules (source -> LinkedIn)
- Hard rules
- Anti-patterns (skill will refuse)
- Resources
- Related skills
Files
../../references/algorithm-heuristics.mddoc8,627 bytes../../references/hook-formulas.mddoc40,431 bytes../../references/story-bank.mddoc3,681 bytes../../references/voice-profile.mddoc2,990 bytesSKILL.mdcore6,647 bytesSKILL.mdcore6,647 bytesSKILL.mdcore6,647 bytesSKILL.mdcore6,647 bytesSKILL.mdcore6,647 bytesSKILL.mdcore6,647 bytes
Read SKILL.md
# LinkedIn Repurposer
Turn something you already made into a post that reads like it was written for LinkedIn. Repurposing is not copy-paste. A tweet that flew on X will flop pasted into LinkedIn: too short, no whitespace, wrong rhythm, and a link in the body that tanks your reach.
This skill transforms, it does not generate. It reads your source, keeps the idea, and rebuilds the delivery for LinkedIn's 2026 algorithm.
## When to use
- "Turn this tweet / thread into a LinkedIn post"
- "Repurpose my YouTube video / blog / newsletter for LinkedIn"
- "This worked on Threads, adapt it for LinkedIn"
- "I have a rough idea in another format, make it native here"
Not for a blank-page draft (use `linkedin-post-writer`) and not for reviewing a finished LinkedIn draft (use `linkedin-humanizer --mode audit`).View the complete source on GitHublinkedin-thread-monitor
When your agent uses it
Track which of your LinkedIn comments earned author replies. Flags the 6-24h warm-reply window where thread momentum peaks, classifies threads as hot/warm/cool/dormant, and routes warm ones to linkedin-reply-handler for follow-up drafts. Powered by Apify, no LinkedIn login. Triggers on "what threads need follow-up", "author replied", "monitor my comments". Not for analyzing likers on a post (use linkedin-engager-analytics).
What it loads into context
Frontmatter
109 tokensAlways available to the agent
SKILL.md
1,400 tokensWhen the skill is activated
Reference documents
4,105 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- When to use
- Input
- Output
- Steps
- Warm-reply window
- Inbound-quality signals
- Hard rules
- Cost accounting
- Untrusted content
- Files
- Related skills
Files
../../references/mcp-read-layer.mddoc8,009 bytes../../references/untrusted-content.mddoc3,101 bytesSKILL.mdcore5,916 bytesreferences/output-spec.mddoc1,219 bytesreferences/thread-timing.mddoc3,770 bytes
Read SKILL.md
# LinkedIn Thread Monitor
Track which of your comments earned author replies. The author-reply signal is the highest-value inbound LinkedIn produces; this skill ensures you respond inside the window where momentum compounds.
Needs a read credential: `APIFY_TOKEN`, or the Apify MCP connector (the only option on claude.ai). With neither, falls back to user-paste of recent comment URLs.
## When to use
- Daily: "What threads need follow-up today?"
- After posting a batch of comments: "Check back in 6 hours"
- When an author replied personally: "Draft the response"
## Input
View the complete source on GitHubSkills 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
- #258 on Nov 1
- #259 from Nov 2 to Nov 3
- #258 on Nov 4
- #256 on Nov 5
- #259 on Nov 6
- #261 since Nov 7
78 earlier periods
- #806 on Aug 2
- #797 on Aug 8
- #807 on Aug 9
- #839 on Aug 10
- #840 on Aug 11
- #833 on Aug 12
- #837 on Aug 13
- #820 on Aug 14
- #796 on Aug 15
- #815 on Aug 16
- #818 on Aug 17
- #839 on Aug 18
- #829 on Aug 19
- #821 on Aug 20
- #825 on Aug 21
- #776 on Aug 22
- #832 on Aug 23
- #844 on Aug 24
- #846 on Aug 25
- #832 on Aug 26
- #845 on Aug 27
- #878 on Aug 28
- #796 on Aug 29
- #800 on Aug 30
- #837 on Aug 31
- #857 on Sep 1
- #795 on Sep 2
- #707 on Sep 3
- #657 on Sep 4
- #560 on Sep 5
- #538 on Sep 6
- #528 on Sep 7
- #530 on Sep 8
- #488 on Sep 9
- #457 on Sep 10
- #442 on Sep 11
- #413 on Sep 12
- #393 on Sep 13
- #383 on Sep 14
- #375 on Sep 15
- #368 on Sep 16
- #357 on Sep 17
- #345 on Sep 18
- #327 on Sep 19
- #332 on Sep 20
- #323 on Sep 21
- #306 on Sep 22
- #299 on Sep 23
- #294 on Sep 24
- #287 on Sep 25
- #281 on Sep 26
- #286 on Sep 27
- #285 on Sep 28
- #283 on Sep 29
- #278 on Sep 30
- #271 on Oct 1
- #273 on Oct 2
- #267 on Oct 3
- #261 from Oct 4 to Oct 6
- #263 on Oct 7
- #262 on Oct 8
- #263 on Oct 9
- #260 on Oct 10
- #262 on Oct 11
- #263 on Oct 12
- #261 on Oct 13
- #258 from Oct 14 to Oct 15
- #255 on Oct 16
- #257 on Oct 17
- #258 from Oct 18 to Oct 19
- #257 on Oct 20
- #258 from Oct 21 to Oct 22
- #255 on Oct 23
- #256 from Oct 24 to Oct 25
- #258 on Oct 28
- #259 on Oct 29
- #262 on Oct 30
- #260 on Oct 31
Before you install
Network or broad shellAutomated 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:1Analysis incomplete: Referenced executable target unavailable; not analyzed.codex-marketplace/linkedin-skills/skills/linkedin-humanizer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed.codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed.codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed.codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed.codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed.codex-marketplace/linkedin-skills/skills/linkedin-repurposer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/linkedin-hook-extractor/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/linkedin-humanizer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/linkedin-repurposer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/linkedin-repurposer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/linkedin-repurposer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/linkedin-repurposer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedskills/linkedin-repurposer/SKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- 2 dangerous shell commandsin 2 files: linkedin-skills/scripts/check_no_secrets.py:68 scripts/check_no_secrets.py:68
- 798 network referencesin 86 files: tests/fixtures/apify_comments.json:10 tests/fixtures/apify_profile_comments.json:8 linkedin-skills/README.md:7 and 83 more
- No hidden or obfuscated text
- No instruction overrides
- 47 executable scriptsin 47 files: .claude/skills/linkedin-humanizer/scripts/test_detectors.py:1 linkedin-skills/lib/__init__.py:1 linkedin-skills/lib/_env.py:1 and 44 more
- 243 references to secretsin 43 files: linkedin-skills/scripts/check_config.py:11 scripts/check_config.py:11 linkedin-skills/lib/backend_selector.py:10 and 40 more
- No requests to vote in Hot
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
.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
.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
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
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
tests/test_mcp_read_layer.py
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
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
- Network access in prose of documentationlinkedin-skills/README.md:7Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:8Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:9Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:10Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:11Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:12Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:13Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:14Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:15Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:20Low confidence
- Network access in code of documentationlinkedin-skills/README.md:36Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:44Low confidence
- Network access in code of documentationlinkedin-skills/README.md:72Low confidence
- Network access in code of documentationlinkedin-skills/README.md:94Low confidence
- Network access in code of documentationlinkedin-skills/README.md:114Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:127Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:136Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:137Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:142Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:143Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:148Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:149Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:187Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:195Low confidence
- Network access in code of documentationlinkedin-skills/README.md:212Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:215Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:216Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:231Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:233Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:255Low confidence
- Access to secrets in code of documentationlinkedin-skills/README.md:266Low confidence
- Access to secrets in code of documentationlinkedin-skills/README.md:273Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:294Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:296Low confidence
- Network access in code of documentationlinkedin-skills/README.md:374Low confidence
- Network access in code of documentationlinkedin-skills/README.md:377Low confidence
- Network access in code of documentationlinkedin-skills/README.md:378Low confidence
- Network access in code of documentationlinkedin-skills/README.md:379Low confidence
- Network access in code of documentationlinkedin-skills/README.md:380Low confidence
- Access to secrets in code of documentation: a variable, placeholder or call, not a stored valuelinkedin-skills/README.md:383Low confidence
- Network access in code of documentationlinkedin-skills/README.md:411Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:418Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:419Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:420Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:421Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:425Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:435Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:441Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:442Low confidence
- Network access in prose of documentationlinkedin-skills/README.md:443Low confidence
and 450 more
Only the first 500 facts are listed.
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Native | Manifest AGENTS.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard 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.
[](https://hotskills.dev/skill/sergebulaev-linkedin-skills/)