write-post — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited write-post (Agent Skill) and scored it 92/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 2 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 2 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This is the most-used skill in the repo and the easiest one to do badly. Most LinkedIn AI tools produce posts that sound exactly like other LinkedIn AI tools. This skill exists to produce posts that sound like the user, on a specific angle they actually want to say, optimized for how LinkedIn ranks content in 2026.
LinkedIn ranks content on dwell time (how long readers spend before scrolling), the "see more" expand rate (whether they click past the fold), and comment quality (specific, substantive comments). None of those reward templated content. They reward content with a real point, written in a way that holds attention.
The default failure mode of LinkedIn AI writing: hook-value-CTA structure, em dashes, "the real question is," rule-of-three phrasing, generic enthusiasm, and a closing question that feels like engagement bait. LinkedIn has explicitly downranked all of these. This skill exists to not do them.
Trigger when:
Do NOT trigger when:
Do these in order:
~/.linkedin-maxxing/voice-profile.md. If present, use it. If absent, do not invent one; just ask the user one question about tone (see "voice fallback" below).LinkedIn text posts in 2026 work best at 1,000-1,300 characters. The "see more" cut is at 210 characters, so the first two lines have to earn the click.
Write the draft following these rules:
Lines 1-2 (the hook, 210 character budget). The hook is the single most important part of the post. It has to make someone scrolling at speed stop and click "see more." Hooks that work in 2026: a specific number, a confession ("I shipped X without doing Y"), a contrarian claim, a story setup that promises a payoff, an unusual fact. Hooks that fail: generic questions ("Have you ever thought about X?"), motivational openers, "Here's what I learned this week," anything starting with "Let's talk about."
The middle (the substance). This is where dwell time is earned or lost. Tell the actual story or make the actual argument. Specific details, named tools, real numbers, exact quotes. Short paragraphs, one or two sentences each. Whitespace between paragraphs (LinkedIn renders blank lines as visible breaks). Vary sentence length: a few short sentences, then a longer one, then short again.
The close. Three options, in order of preference: a single concrete sentence that lands the point, an honest question that you actually want answered (not "thoughts?"), or just stop after the strongest line. Avoid: "If this resonated...", "Agree?", "What do you think?", any CTA to subscribe or DM, any reference to "thought leadership."
Ask ONE question, then commit: "I don't have a voice profile yet. Quick: when you write at work, do you tend toward (a) short and punchy, (b) longer and more thoughtful, or (c) somewhere in between? Anything you definitely don't want in the post (emojis, hashtags, em dashes, CTAs)?"
Get the answer, draft. Suggest at the end: "Want me to run train-voice on some past posts so I match your voice better next time?"
Output must read as written by a human on the first pass. The constraints below are how you write, not a checklist to apply later. Do not narrate this process to the user. Do not show a "before humanizer / after humanizer" sequence. Just produce clean output.
Hard bans — never appear in output:
- **Speed:** ...). Write as prose.Required patterns:
Final scan before output:
— and –. Any hit means redraft.Full 33-pattern reference: see humanizer/SKILL.md in this plugin.
Return the finished post as a code block (so the user can copy cleanly) along with:
Do not produce three versions unless asked. One good version is the deliverable. If the user asks for variants, then produce them.
Input: a seed from find-ideas.
Seed 1: I shipped a script without type validation after spending a year as the loudest pro-types person on my team. Six months ago I would have blocked it in code review.
The specific thing: Almost spent half a day writing a Pydantic model for 12 fields. Shipped it untyped instead. It was better than fine.
Why it could work: Change of mind on a public position, with specific anchors.Voice profile says: mixes short and long sentences, opens often with a confession or number, never uses emojis, often closes without a question.
Output:
I shipped a script without types last week. Six months ago I would have blocked the same merge in code review.
The script reads a 12-field JSON payload and writes it to a queue. I almost spent half a day writing a Pydantic model for it. Instead I shipped it raw. It has been running for a week. It is fine.
For a year I was the loudest pro-types person on the team. I argued for static checking in every PR review. I wrote a whole RFC. I held up merges. I was probably annoying about it.
The thing I have noticed is that my arguments were about the worst case. The bug at 3am, the malformed payload from production, the schema drift between services. All real concerns. None of them have happened on this script.
I still think types are right for most things. The thing I changed my mind about is the default. The default I argued for was "type everything, justify the exceptions." The default I am moving toward is "type the things that have actually caused problems, justify the rest."
That is a smaller change than it sounds. It is also the one I would have rejected in review.Character count: 1,247. Fold preview (first 210 chars): "I shipped a script without types last week. Six months ago I would have blocked the same merge in code review. The script reads a 12-field JSON payload and writes it to a queue. I almost spent..."
Why the hook works: a confession ("I shipped without types") followed by a tension ("I would have blocked this six months ago"). It opens a question in the reader's mind (why the change?) that the post then answers.
Want a second draft with a different angle, or want this turned into a carousel?
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.