linkedin-post
Skill7 starsChanged 20 days agoMITView on GitHub
Write a LinkedIn post in the founder's voice. Trigger on "write a LinkedIn post", "draft a post", "post about this", "make this a LinkedIn post", "turn this into a post", "I want to share this on LinkedIn", or any mention of "LinkedIn" in the context of creating content. Also fires when the user shares an idea, insight, or experience and wants it shaped into a post. Covers founder stories, leadership insights, hiring perspectives, AI commentary, systems thinking, and business-related content. Reads `core/voice-profile.yml`.
41 other projects use a version of this.
Adopted by
Most recently taken up by
- dmccreary/claude-skillstheir own version, first seen Nov 9, 2026
- dmccreary/ibook-skillstheir own version, first seen Nov 8, 2026
- kristian-presso/claude-marketing-skillstheir own version, first seen Nov 8, 2026
- olivMertens/copilot-skillstheir own version, first seen Nov 8, 2026
- markbaindesign/bain-studiotheir own version, first seen Nov 1, 2026
- sophonfinance-wq/finance-automation-portfoliotheir own version, first seen Nov 1, 2026
Used with
Projects with it also use youtube-upload, brainstorming and 1 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
BlackLotus1974Skillyoutube-upload
Upload videos to Atchalta's YouTube channel (office@atchalta.com). Use when the user asks to upload a video to YouTube, list YouTube videos, manage playlists, or update video metadata. Trigger phrases: 'upload to youtube', 'youtube video', 'publish video', 'post to youtube', 'list my videos', 'youtube playlists'.
Also in 3 projects that use this
OpenAISkillbrainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation.
Also in 3 projects that use this
GoogleSkillgrill-me
A relentless interview to sharpen a plan or design.
Also in 3 projects that use this
Other versions41 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 41
- langchain-ai/langgraph-101★ 708same name
- hamzafarooq/claude-code-starter★ 145same name
- dmccreary/claude-skills★ 110same name
- dmccreary/ibook-skills★ 110same name
- kevinbadi/ai-os-skills★ 69same name
- publora/skills★ 68same name
- az9713/ai-co-writing-claude-skills★ 61same name
- JamsusMaximus/growth-agents★ 21same name
- langchain-ai/langgraph-101-ts★ 19same name
- duncan-buildroom/profit-room-skills★ 18same name
31 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository100 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- notion-package/CLAUDE.mdCLAUDE.md
- llms.txtllms.txt
- add-handsSkill
- add-mouthSkill
- add-voiceSkill
- approval-gatesSkill
- auditSkill
- backupSkill
- blind-spot-reviewSkill
- bottleneck-diagnosticSkill
- brain-logSkill
- brain-passSkill
- brain-snapshotSkill
- brand-interviewSkill
- brand-voice-interviewSkill
- business-context-loaderSkill
- campaign-from-themeSkill
- capture-sweepSkill
- catch-upSkill
- client-updateSkill
- connectSkill
- content-repurposerSkill
- content-startSkill
- context-persistenceSkill
- cross-linkSkill
- data-securitySkill
- decision-frameworkSkill
- decisions-startSkill
- delivery-startSkill
- email-drafterSkill
- employee-reviewSkill
- finance-importSkill
- forcing-questionsSkill
- founder-coachingSkill
- founder-next-moveSkill
- founder-os-setupSkill
- founder-reviewSkill
- founder-scope-challengeSkill
- github-opsSkill
- handoff-protocolSkill
- hireSkill
- historySkill
- housekeepingSkill
- ingestSkill
- knowledge-captureSkill
- legal-complianceSkill
- linkedin-brand-directionSkill
- linkedin-network-scanSkill
- linkedin-power-auditSkill
- linkedin-startSkill
- linkedin-warm-revivalSkill
- lintSkill
- list-prunerSkill
- log-archiveSkill
- log-replySkill
- meeting-prepSkill
- memory-passSkill
- menuSkill
- The first 60 shown.
The file
Show its rules and text
We split this skill into the rules it gives an agent
30 rules. 0 are common, 10 are distinctive, and 20 are very specific to this project.
0
Common
Most of the 36 edited versions we read keep these.
10
Distinctive
This author's own choices. Worth a look.
20
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 19
Before any gate or draft, decide which voice this post uses.
- Very specific: line 21
If the user asked for a personal LinkedIn post (default for this skill), use operator voice from core/voice-profile.yml.
- Very specific: line 22
If the user named a brand they run (e.g.
- Very specific: line 24
If brands/ does not exist or has no entries, this section is a no-op and the skill proceeds as today.
- Very specific: line 28
If using operator voice, run: python scripts/check-voice-ready.py
- Very specific: line 30
If using brand voice, run: python scripts/check-brand-voice-ready.py --brand <slug>
- Distinctive: line 32
If exit code is 1, read the output line and surface it to the user verbatim.
- Very specific: line 34
If the user explicitly chooses to proceed with defaults after seeing that message, draft the post using the universal anti-AI baseline from …
- Distinctive: line 38
After producing a draft and before returning it, run the anti-examples filter:
- Very specific: line 40
Read the anti_examples.pairs block in core/voice-profile.yml.
- Very specific: line 42
If a line matches, rewrite it using the good: pattern as the model and the rule: line as the constraint.
- Distinctive: line 46
Do not surface this filter to the user as a separate step.
- Very specific: line 52
If brain/.snapshot.md does not exist: check whether scripts/brain-snapshot.py exists.
- Very specific: line 62
Before drafting, also read core/identity.md and the buyer_language: block in core/voice-profile.yml if present.
- Very specific: line 64
Use core/identity.md ## Positioning to understand who the founder sells to, what they sell, and the visible buyer pain.
- Very specific: line 68
Before invoking brain-pass, run: python scripts/check-log-has-history.py
- Distinctive: line 70
If exit code is 1, skip brain-pass entirely and proceed directly to drafting.
- Very specific: line 72
If exit code is 0, invoke the brain-pass skill (skills/brain-pass/SKILL.md) with this question:
- Distinctive: line 76
Read the structured Answer / Evidence / Confidence / Gaps block the pass returns.
- Very specific: line 82
If skills/brain-pass/SKILL.md is missing (older install), fall back to python scripts/query.py "linkedin" and reason from those raw matches.
- Very specific: line 89
Use goal to keep the post aimed at clients, hiring, or category recognition.
- Very specific: line 94
Use first_three_posts when the user has not supplied a specific idea.
- Very specific: line 95
Use evidence to support factual notes and cut any claim it cannot support.
- Very specific: line 97
Algorithm reference (format and structure): Read skills/linkedin-pack-references/linkedin-algorithm.md if present.
- Distinctive: line 99
Use documents/carousels for explainers, images for reliable engagement, and text when the writing carries the idea.
- Distinctive: line 101
Avoid unsupported fixed link-penalty percentages.
- Distinctive: line 114
Run the full anti-AI self-check:
- Distinctive: line 120
"See More" test: Read ONLY the first two lines.
- Distinctive: line 123
Count check: If the post says "three things" or any specific number, count the list.
- Very specific: line 126
Lane check (additive): If a brand-direction.json was in hand, does the draft stay in its evidence-backed topic_lane?
“Common” is measured: kept by at least 6 in 10 of the 36 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
LinkedIn Post
Runs on: reasoning - reads your files and reasons; any capable agent can run this.
Every post must apply the voice profile in core/voice-profile.yml. Before drafting, read skills/your-voice/SKILL.md and apply its universal rules in full. The post format, the five post structures, hook priority, closings, the brain-dump workflow, and posting strategy live in references/post-craft.md - load it at draft time (after the routing and brain steps below). Then pass the LinkedIn-specific self-check at the bottom of this file.
Voice routing (operator or brand?)
Before any gate or draft, decide which voice this post uses. Apply the routing rules in skills/your-voice/SKILL.md "Voice routing - operator or brand?" section.
- If the user asked for a personal LinkedIn post (default for this skill), use operator voice from
core/voice-profile.yml. - If the user named a brand they run (e.g. "post for
<brand>on LinkedIn"), use brand voice frombrands/<slug>/voice.yml.
If brands/ does not exist or has no entries, this section is a no-op and the skill proceeds as today.
Before you write
If using operator voice, run: python scripts/check-voice-ready.py
If using brand voice, run: python scripts/check-brand-voice-ready.py --brand <slug>
If exit code is 1, read the output line and surface it to the user verbatim. Do not produce any draft. Stop.
If the user explicitly chooses to proceed with defaults after seeing that message, draft the post using the universal anti-AI baseline from your-voice and clearly label that the voice profile was not applied. Do not pretend the post is voice-coupled.
Then read the chosen voice profile (core/voice-profile.yml for operator, brands/<slug>/voice.yml + brands/<slug>/positioning.yml for brand) so the rest of this skill can apply it.
After producing a draft and before returning it, run the anti-examples filter:
- Read the
anti_examples.pairsblock incore/voice-profile.yml. - For each line in your draft, scan for matches against any
bad:pattern (literal substrings, structural markers like negation-contrast, or rule-of-three lists). - If a line matches, rewrite it using the
good:pattern as the model and therule:line as the constraint. - Also reject any line that uses an
aesthetic_crimesphrase or ared_flagspattern. - Return the cleaned draft.
Do not surface this filter to the user as a separate step. The user sees only the cleaned draft.
Brain context (default)
Before producing output, read brain/.snapshot.md. If it is missing, or its date: line is more than 3 days old, run python scripts/brain-snapshot.py --write first and read the fresh one - a stale snapshot read as current presents last week's flags and must-dos as today's, which is worse than no memory at all. If Python is unavailable, proceed without it and say so.
If brain/.snapshot.md does not exist: check whether scripts/brain-snapshot.py exists. If it does, run:
python scripts/brain-snapshot.py --writeThen read brain/.snapshot.md. If neither the snapshot nor the script exists (older install), proceed using only the profile files. Do not block.
The snapshot tells you what flags are open, what the user is working on this week, and what the latest staleness state is. Apply this context to your output where it is relevant. Do not surface every snapshot field in every output - use judgment. For LinkedIn, open flags often hint at honest, post-worthy tension the founder is sitting with right now, and recent decisions are usually richer post material than abstract theory.
Positioning and buyer language
Before drafting, also read core/identity.md and the buyer_language: block in core/voice-profile.yml if present.
Use core/identity.md ## Positioning to understand who the founder sells to, what they sell, and the visible buyer pain. Use buyer_language for the buyer's actual words. If these fields exist, the post should speak to that buyer instead of a generic founder audience.
Brain pass (auto)
Before invoking brain-pass, run: python scripts/check-log-has-history.py
If exit code is 1, skip brain-pass entirely and proceed directly to drafting. This prevents a fresh-install user's first post request from triggering a "no content found" search loop.
If exit code is 0, invoke the brain-pass skill (skills/brain-pass/SKILL.md) with this question:
What has the user posted on LinkedIn recently? What themes are stale? What recent decisions or knowledge entries would make a fresh post?
Read the structured Answer / Evidence / Confidence / Gaps block the pass returns. Use it to:
- Suggest two or three angles the user has not posted recently.
- Flag any theme repetition risk before drafting (so the post does not echo something from last week).
- Tie the draft to a recent decision or knowledge entry when one fits, citing the entry ID at the bottom of the draft as a P.S. or pinned note for the user.
If skills/brain-pass/SKILL.md is missing (older install), fall back to python scripts/query.py "linkedin" and reason from those raw matches. Do not block.
Algorithm-aware input (additive - does not replace anything above)
This section adds personalisation and algorithm-awareness on top of the existing voice flow. It never removes or weakens the voice routing, the preflight gates, or the anti-AI self-check. If both inputs below are absent (older install, no LinkedIn pack), this section is a no-op and the skill drafts exactly as before.
- Brand direction (personalisation). First read
~/.founder-os/linkedin-pack-state.jsonwhen it exists and follow itsbrand_directionpath. A user-suppliedbrand-direction.jsonpath overrides the pointer. Validate the fixed contract fromskills/linkedin-brand-direction/brand-direction.schema.json, then consume every field:- Use
goalto keep the post aimed at clients, hiring, or category recognition. - Stay inside
topic_lane. - Build the argument from
positioning_angle. - Pick the requested asset from
format_mix. - Return the
cadenceas a publishing note. - Use
first_three_postswhen the user has not supplied a specific idea. - Use
evidenceto support factual notes and cut any claim it cannot support.
- Use
- Algorithm reference (format and structure). Read
skills/linkedin-pack-references/linkedin-algorithm.mdif present. If it is missing, say "algorithm reference not found, using conservative defaults" and continue with format-and-cadence basics only. When present, apply the data-backed facts to the draft:- Earn the mobile "see more" tap in the opening roughly 140 characters.
- Use documents/carousels for explainers, images for reliable engagement, and text when the writing carries the idea. Do not assume video ranks second.
- Match length to the idea. Current studies disagree on a universal ideal, so do not force every post into one character range.
- Avoid unsupported fixed link-penalty percentages. Current evidence supports caution with external video links, not a universal 60% body-link claim.
- Suggest the conservative 2 to 4 posts per week cadence and first-hour reply habit as a note, not as part of the post body.
Carry the algorithm reference's known-limitation line if you assert a specific algorithm fact: these are reverse-engineered and dated.
Draft
Read references/post-craft.md and draft the post: pick the format, build the two-line "See More" hook unit, choose a post structure (Patterns 1-5), apply the hook priority and closing rules. Use the brain-dump workflow if the user gave a raw rant. The posting strategy notes there are for the user, not the draft. When a brand-direction.json is in hand, the format and lane it names take priority over a generic pick.
Before Finalizing
The list below extends skills/your-voice/SKILL.md. When updating either file, update both to keep them in sync.
Run the full anti-AI self-check:
- Banned phrases? Kill them. (Read
skills/your-voice/SKILL.mdfor the universal banned phrase list and apply its rules in full.) - Banned words? Replace with simpler ones.
- Em dashes? Replace with simple hyphens. Max two per post.
- Rule of three? Break the pattern unless the voice profile explicitly enables triplets.
- Metronome rhythm? Vary sentence length.
- "See More" test: Read ONLY the first two lines. Would you tap? If not, rewrite the second line.
- Would the founder actually say this across a table?
- Negation-contrast check: Any "It's not X - it's Y" or "That's not X. That's Y" or "Not just X, but Y"? Rewrite as a direct statement. This is the single most common AI pattern that slips through. Catch it every time.
- Count check: If the post says "three things" or any specific number, count the list. Fix before posting.
- Compare against
voice.samplesfrom the profile. If it doesn't sound like the samples, rewrite. - Body-link check (additive). Is there an external link in the post body? Do not quote a fixed penalty. Flag that current evidence is clearest for external video links and let the user decide whether the link is worth the distribution risk.
- Lane check (additive). If a
brand-direction.jsonwas in hand, does the draft stay in its evidence-backedtopic_lane? If it drifted to a generic angle, pull it back to the lane the network rewards.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

