LinkedIn speak
Quick answer
- 01What is it?
- Translate ordinary text into gloriously overcaffeinated LinkedIn-speak, or strip a bloated post back down to plain English. The value is a focused slice of social content judgment, useful when several similar skills cover the same ground.
- 02Inputs
- Context for social content: your goals, audience, constraints, and any source material the skill asks for.
- 03Output
- A ready-to-use result for social content: the analysis, copy, or recommendations the agent produces.
Add this skill
Install as a package
Installs this one skill package for your coding agent, including any supporting files that skill ships with — not every skill in the repository. Read the tutorial.
$ npx skills add jpcaparas/skills --skill linkedin-speakSkill instructions
The instruction file for this skill. The skill also includes other files you need to install to use it.
LinkedIn Speak
Translate ordinary text into gloriously overcaffeinated LinkedIn-speak, or strip a bloated post back down to plain English.
Verified against the observable Kagi Translate rollout and press examples published in March and April 2026.
Decision Tree
- If the user wants a deterministic parody of LinkedIn announcement culture, run
scripts/linkedin_speak.py --mode translate. - If the user pasted a breathless growth-journey post and wants the actual meaning, run
scripts/linkedin_speak.py --mode reverse. - If they want both versions for comparison, run
scripts/linkedin_speak.py --mode both --format json. - If they want a side-by-side check against Kagi's public web translator, add
--compare-kagi-url. - If they want tasteful professional editing instead of satire, stop and use
{{ skill:better-writing }}instead.
Quick Reference
| Task | Command | Why |
|---|---|---|
| Translate plain text into LinkedIn-speak | python3 scripts/linkedin_speak.py "I finished the project." | Fast happy path with deterministic output |
| Reverse a corporate-cringe post into plain English | python3 scripts/linkedin_speak.py --mode reverse "Thrilled to announce..." | Removes hype, hashtags, and filler |
| Compare both directions as JSON | python3 scripts/linkedin_speak.py --mode both --format json "I got a new job." | Easier to feed another tool |
| Dial the cringe up or down | python3 scripts/linkedin_speak.py --intensity 5 "We shipped the feature." | Controls sentence count, hype, and hashtags |
| Drop hashtags and emoji | python3 scripts/linkedin_speak.py --no-hashtags --no-emoji "I fixed the bug." | Keeps the parody cleaner |
| Build a Kagi comparison URL | python3 scripts/linkedin_speak.py --compare-kagi-url "I built a dashboard." | Opens the same input in Kagi's public web UI |
| Run the local probe suite | python3 scripts/probe_linkedin_speak.py | Verifies core translation behavior |
Scope
Positive triggers
- "translate this into linkedin speak"
- "make this sound like a linkedin influencer"
- "turn this into a corporate announcement"
- "reverse this linkedin post into plain english"
- "add hashtags and fake gratitude"
- "give me the full growth mindset cringe version"
Negative triggers
- actual multilingual translation
- subtle resume polish
- sober launch notes
- legal, HR, or investor communications
- real executive ghostwriting
Working Rule
Default to the deterministic local translator first. It is reproducible, fast, and does not depend on external APIs. Use the Kagi comparison link only when the user wants to compare the local parody against the public LinkedIn Speak translator.
What The Script Actually Does
- expands a plain statement into a short announcement arc
- chooses an opener, reflection sentence, gratitude sentence, emoji, and hashtags deterministically from the input text
- maps common actions like shipping, learning, hiring, speaking, leading, fixing, and launching onto predictable corporate phrasing
- reverses inflated posts by stripping hashtags, emoji, boilerplate hype, and vague self-congratulation
Reading Guide
| Need | Read |
|---|---|
| CLI flags, input methods, and Kagi comparison links | references/configuration.md |
| Output patterns, intensity rules, and deterministic heuristics | references/patterns.md |
| Full command catalog and JSON output shape | references/commands.md |
| Failure modes, limits, and where the parody can get too repetitive | references/gotchas.md |
Gotchas
- The translator is intentionally satirical, not subtle. If the user wants "better LinkedIn copy," this skill is the wrong tool.
- The reverse translator removes hype heuristically. It will simplify the message well, but it cannot perfectly recover every omitted fact if the original post never stated them plainly.
- Deterministic output means the same input stays stable across runs. That is useful for tests and memes, but it also means the phrasing can feel formulaic on repeated use.
- Kagi's public LinkedIn Speak implementation is not a documented API. This skill uses a local engine by default and only emits a comparison URL for the web UI.
- Hashtag selection is keyword-driven. If the input is too vague, the fallback tags will lean generic on purpose.
Supporting file: AGENTS.md
linkedin-speak
Canonical instructions live in SKILL.md.
Use this skill when the user wants parody LinkedIn language, overblown corporate-announcement voice, deterministic hashtag-heavy rewrites, or reverse translation from thought-leader fluff back into plain English.
This skill is intentionally comedic and reproducible. It is not a substitute for tasteful editing or real translation.
Supporting file: README.md
linkedin-speak
Installable parody skill for translating plain English into deterministic LinkedIn-speak and back again.
linkedin-speak is a fun, reproducible wrapper around a local heuristic engine that mimics the viral "LinkedIn Speak" style popularized by Kagi Translate's novelty language launch in March 2026.
What it covers
- deterministic plain-English to LinkedIn-speak translation
- reverse translation from bloated post to blunt English
- adjustable cringe intensity
- optional emoji and hashtag control
- Kagi web-UI comparison links for side-by-side checking
Key files
SKILL.md— authoritative instructionsscripts/linkedin_speak.py— translator and reverse-translator CLIscripts/probe_linkedin_speak.py— lightweight behavior probereferences/patterns.md— transformation rules and examplesreferences/gotchas.md— limits, edge cases, and anti-patterns
Supporting file: agents/openai.yaml
interface:
display_name: "linkedin-speak"
short_description: "Translate plain English into deterministic LinkedIn-speak parody or reverse inflated posts back into blunt English"
default_prompt: "Turn this text into LinkedIn-speak or decode a bloated LinkedIn post back into plain English"
Supporting file: evals/evals.json
{
"skill_name": "linkedin-speak",
"created_by": "skill-creator-advanced",
"evals": [
{
"id": 1,
"name": "translate-basic-update",
"prompt": "Translate 'I got a new job.' into LinkedIn-speak with deterministic hashtags.",
"expected_output": "A hype-heavy announcement with a career-change framing, an emoji, and relevant hashtags.",
"assertions": [
{
"text": "Output includes a celebratory opener",
"type": "functional"
},
{
"text": "Output includes hashtags related to career growth",
"type": "functional"
}
],
"files": [
"scripts/linkedin_speak.py",
"references/patterns.md"
],
"tags": [
"smoke",
"translate"
]
},
{
"id": 2,
"name": "reverse-bloated-post",
"prompt": "Reverse 'Thrilled to announce...' into plain English.",
"expected_output": "A much shorter statement with hype, emoji, and hashtags removed.",
"assertions": [
{
"text": "Reverse output removes emoji and hashtags",
"type": "functional"
}
],
"files": [
"scripts/linkedin_speak.py",
"references/gotchas.md"
],
"tags": [
"edge-case",
"reverse"
]
},
{
"id": 3,
"name": "negative-not-for-subtle-editing",
"prompt": "Help me gently polish this executive update without sounding silly.",
"expected_output": "The skill should not be the first choice because the user wants tasteful editing, not parody.",
"assertions": [
{
"text": "Description and scope clearly mark subtle editing as a negative trigger",
"type": "policy"
}
],
"files": [
"SKILL.md"
],
"tags": [
"negative"
]
},
{
"id": 4,
"name": "disclosure-kagi-comparison-flow",
"prompt": "Show me how to compare the local translator against Kagi Translate's web UI.",
"expected_output": "The response should point to the configuration reference and the compare URL flag.",
"assertions": [
{
"text": "Configuration docs mention compare mode and the Kagi URL shape",
"type": "disclosure"
}
],
"files": [
"references/configuration.md"
],
"tags": [
"disclosure"
]
}
]
}
Supporting file: metadata.json
{
"version": "1.0.0",
"organization": "JP Caparas",
"date": "April 2026",
"abstract": "Fun installable skill that deterministically translates plain English into exaggerated LinkedIn-speak and reverses corporate-thought-leader posts back into blunt English. Ships a local Python CLI, probe script, evals, and reference docs, with optional comparison links to Kagi Translate's public LinkedIn Speak web UI.",
"references": [
"https://www.xda-developers.com/tool-translates-your-thoughts-into-linkedin-speak/",
"https://kagifeedback.org/d/10140-march-19th-2026-small-web-expansion-and-translate-goes-viral",
"https://alternativeto.net/news/2026/3/kagi-translate-introduces-linkedin-speak-for-satirical-corporate-style-announcements/"
]
}
Supporting file: references/commands.md
Commands
Use scripts/linkedin_speak.py for the actual translation work and scripts/probe_linkedin_speak.py for verification.
Main CLI
Translate
python3 scripts/linkedin_speak.py "I got a new job."
Reverse
python3 scripts/linkedin_speak.py \
--mode reverse \
"Thrilled to announce that I’m starting a new chapter today! Grateful for everyone who made this possible. 🚀 #GrowthMindset #Leadership"
JSON
python3 scripts/linkedin_speak.py \
--mode both \
--format json \
--intensity 4 \
"We launched the dashboard."
Example JSON shape:
{
"mode": "both",
"input": "We launched the dashboard.",
"translation": "Excited to share ...",
"reverse": "We launched the dashboard.",
"metadata": {
"intensity": 4,
"hashtags_included": true,
"emoji_included": true,
"kagi_compare_url": "https://translate.kagi.com/?from=en&to=linkedin&text=We%20launched..."
}
}
Stdin
cat ./draft.txt | python3 scripts/linkedin_speak.py --mode translate --format text
File Input
python3 scripts/linkedin_speak.py --input-file ./draft.txt --mode reverse
Probe
Run the built-in behavior probe:
python3 scripts/probe_linkedin_speak.py
The probe checks that:
- translate mode produces a hype-style opener
- reverse mode removes hashtags and emoji
- JSON mode returns the expected keys
- the Kagi comparison URL is generated correctly
Validator And Test Commands
python3 scripts/validate.py skills/linkedin-speak
python3 scripts/test_skill.py skills/linkedin-speak
Read Next
references/configuration.mdfor setup and input rulesreferences/patterns.mdfor the translation heuristicsreferences/gotchas.mdfor limits and edge cases
Supporting file: references/configuration.md
Configuration
Use scripts/linkedin_speak.py as the deterministic engine. It reads text from a positional argument, stdin, or --input-file.
Prerequisites
python3- plain UTF-8 text input
No external API key is required.
Input Sources
| Source | Example |
|---|---|
| Positional argument | python3 scripts/linkedin_speak.py "I got a new job." |
| Stdin | printf '%s' "I shipped the feature." | python3 scripts/linkedin_speak.py |
| File | python3 scripts/linkedin_speak.py --input-file ./status.txt |
Core Flags
| Flag | Meaning |
|---|---|
--mode translate | Plain English to LinkedIn-speak |
--mode reverse | LinkedIn-speak to plain English |
--mode both | Returns both directions in one response |
--format text | Human-readable output |
--format json | Structured output with metadata |
--intensity 1..5 | Controls hype, sentence count, and default hashtag volume |
--no-hashtags | Suppress trailing hashtags |
--no-emoji | Suppress the celebratory emoji |
--compare-kagi-url | Include a prefilled Kagi Translate URL for manual comparison |
Kagi Comparison Mode
Kagi's LinkedIn Speak feature is publicly visible through the web translator, but no documented public API surfaced during research. Use --compare-kagi-url when the user wants a manual side-by-side check:
python3 scripts/linkedin_speak.py \
--compare-kagi-url \
"Today, I've completed an interesting project!"
That prints a URL like:
https://translate.kagi.com/?from=en&to=linkedin&text=...
Open it in a browser to compare the local deterministic output against Kagi's live web UI.
Read Next
references/commands.mdfor exact command shapes and output structurereferences/patterns.mdfor the transformation rulesreferences/gotchas.mdfor the parody limits and edge cases
Supporting file: references/gotchas.md
Gotchas
1. Vague Inputs Produce Generic Cringe
If the input is something like good day or it worked, the engine will fall back to generic growth-and-gratitude language because it has no specific nouns to map onto better hashtags or action phrases.
Fix:
- include the actual action, project, role, or topic
- use
--intensity 1if the user wants a smaller joke
2. Reverse Mode Removes The Joke, Not Just The Noise
Reverse mode strips hype aggressively. That is the point. If a user actually wants a polished but still warm tone, use {{ skill:better-writing }} instead of this skill.
3. Deterministic Means Repeatable Patterns
The translator uses hash-based selection so the same input stays stable. That helps tests, but heavy reuse can expose the same sentence shapes repeatedly.
Fix:
- change the input wording slightly
- change
--intensity - turn hashtags or emoji off for a different feel
4. Kagi Comparison Is Web-Only
Research found public web routing for LinkedIn Speak but no documented public API contract. This skill therefore treats Kagi as a comparison target, not a hard dependency.
5. Satire Can Overshoot
Do not use this skill for press releases, performance reviews, layoffs, legal notices, or other contexts where parody can backfire.
Read Next
references/patterns.mdfor how the parody engine decides what to sayreferences/configuration.mdfor the safe invocation patterns
Supporting file: references/patterns.md
Patterns
The translator is deterministic by design. It should feel playful, not random.
Translation Pattern
The forward translator turns a plain statement into an announcement arc with these stages:
- opener
- accomplishment restatement
- reflection on growth, collaboration, or momentum
- gratitude or forward-looking sentence
- emoji and hashtags, unless disabled
The exact wording is chosen by hashing the normalized input. That keeps identical inputs stable across runs.
Intensity Levels
| Intensity | Behavior |
|---|---|
1 | One short opener plus one grounded summary sentence |
2 | Adds a gratitude or reflection sentence |
3 | Default. Adds both reflection and gratitude plus 3-4 hashtags |
4 | Adds stronger hype and 4-5 hashtags |
5 | Maximum cringe: bigger opener, extra framing, and the most flamboyant closer |
Action Detection
The engine scans for action verbs and nouns, then reframes them:
| Signal | Typical framing |
|---|---|
shipped, launched, released | "brought something into the world" |
finished, completed, wrapped | "crossed the finish line" |
learned, studied | "invested in growth" |
hired, joined, new job | "starting a new chapter" |
spoke, presented | "shared ideas with an incredible room" |
fixed, debugged | "turned a challenge into momentum" |
built, created | "built something meaningful" |
Hashtag Selection
Hashtags are derived from topic keywords first, then padded with generic LinkedIn staples.
Topic-aware tags include:
- product work:
#Innovation,#ProductManagement - shipping or launch work:
#Launch,#Execution - leadership work:
#Leadership,#Teamwork - learning work:
#GrowthMindset,#ContinuousLearning - hiring or career change:
#CareerGrowth,#NewBeginnings - data or dashboards:
#Analytics,#DataStrategy
Generic fallback tags:
#GrowthMindset#Leadership#Collaboration#Innovation#LearningInPublic#CareerDevelopment
Reverse Pattern
The reverse translator does not attempt perfect semantic parsing. It follows a reliable simplification path:
- strip emojis and hashtags
- delete stock hype phrases like "thrilled to announce" and "grateful for the opportunity"
- collapse extra whitespace and repeated punctuation
- shorten inflated framing to a plain action sentence
- trim the output to the most factual clauses
Example Pairs
| Plain input | LinkedIn-speak |
|---|---|
I got a new job. | Thrilled to share that I'm starting a new chapter with a new role. Moments like this are a reminder that growth compounds when great people invest in you. Grateful for everyone who helped me get here, and excited for what comes next. 🚀 #CareerGrowth #NewBeginnings #GrowthMindset #Leadership |
We launched the dashboard. | Excited to announce that we officially brought a new dashboard into the world today. This was a strong lesson in alignment, execution, and building with intention. Proud of the team for turning momentum into something real. 🚀 #Launch #Analytics #Collaboration #Innovation |
Read Next
references/commands.mdfor exact invocation patternsreferences/gotchas.mdfor the rough edges and comedy limitsscripts/linkedin_speak.pyfor the authoritative implementation
Supporting file: skill-card.prompt.md
Nano Banana 2 image generation prompt for the linkedin-speak README skill badge.
Create a polished rectangular raster badge for a GitHub README. Aspect ratio: 16:9. Style: consistent side-scrolling 16-bit pixel game art, crisp pixel edges, low-noise, premium editorial composition, layered parallax background, simple geometric props, restrained detail. Subject: a megaphone transforming a small plain block into an overbright beam of geometric confetti. Composition: one central readable illustration, a few supporting environmental elements, generous negative space, no crowded UI, no poster collage, no photorealism, no mockup frame. Forbidden objects unless unavoidable: pages, documents, signs, posters, terminal windows, dashboard windows, browser windows, charts with axes, speech bubbles, calendars with grids, spreadsheets, tickets with markings, maps with markings, and social media post mockups. Blank-surface rule: any paper, book, ticket, screen, terminal, dashboard, chart, browser, sign, speech bubble, social post, calendar, spreadsheet, map, or interface surface must be visually blank or represented only by solid unlabeled rectangles, bars, dots, connectors, and simple icons. Do not draw interior strokes that resemble writing. Palette: deep midnight navy background, cool teal and blue shadows, one warm amber accent, limited saturated highlights, cohesive with the rest of the README skill-card collection. Lighting: soft game-like glow, clear silhouette separation, no blur, no grain, no lens effects. No visible text, no letters, no numbers, no typography, no captions, no labels, no logos, no watermarks, no pseudo-text, no glyph-like marks, no UI copy, no code characters, no punctuation, no checkmarks, no question marks. Return only the image.
Supporting file: templates/input-examples.md
Example Inputs
Plain To LinkedIn
I got a new job.We launched the dashboard.I fixed the production bug.I spoke at a meetup about observability.I finished the migration today.
LinkedIn To Plain English
Thrilled to announce that I’m stepping into a new chapter today! Grateful for every conversation that shaped this journey. 🚀 #CareerGrowth #LeadershipHonored to share that our incredible team officially shipped a meaningful update for customers this week. So proud of what collaborative execution can unlock. #Innovation #Teamwork
Common questions
How do I install LinkedIn speak in Cursor, Claude Code, or Codex?
Run npx skills add jpcaparas/skills --skill linkedin-speak in the project where you want it, then ask your agent for the skill by name. The --skill flag installs only LinkedIn speak, not every skill in the repository.
Where does LinkedIn speak come from and what license is it under?
LinkedIn speak comes from the jpcaparas/skills repository on GitHub. That repository has 14 GitHub stars. No license was detected on the source repository, so check with the author before redistributing it.
Prefer plain text? Read the LinkedIn speak guide as markdown.