LinkedIn speak

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.
Install-only

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.

Terminal
$ npx skills add jpcaparas/skills --skill linkedin-speak

Skill instructions

The instruction file for this skill. The skill also includes other files you need to install to use it.

SKILL.md

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

  1. If the user wants a deterministic parody of LinkedIn announcement culture, run scripts/linkedin_speak.py --mode translate.
  2. If the user pasted a breathless growth-journey post and wants the actual meaning, run scripts/linkedin_speak.py --mode reverse.
  3. If they want both versions for comparison, run scripts/linkedin_speak.py --mode both --format json.
  4. If they want a side-by-side check against Kagi's public web translator, add --compare-kagi-url.
  5. If they want tasteful professional editing instead of satire, stop and use {{ skill:better-writing }} instead.

Quick Reference

TaskCommandWhy
Translate plain text into LinkedIn-speakpython3 scripts/linkedin_speak.py "I finished the project."Fast happy path with deterministic output
Reverse a corporate-cringe post into plain Englishpython3 scripts/linkedin_speak.py --mode reverse "Thrilled to announce..."Removes hype, hashtags, and filler
Compare both directions as JSONpython3 scripts/linkedin_speak.py --mode both --format json "I got a new job."Easier to feed another tool
Dial the cringe up or downpython3 scripts/linkedin_speak.py --intensity 5 "We shipped the feature."Controls sentence count, hype, and hashtags
Drop hashtags and emojipython3 scripts/linkedin_speak.py --no-hashtags --no-emoji "I fixed the bug."Keeps the parody cleaner
Build a Kagi comparison URLpython3 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 suitepython3 scripts/probe_linkedin_speak.pyVerifies 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

NeedRead
CLI flags, input methods, and Kagi comparison linksreferences/configuration.md
Output patterns, intensity rules, and deterministic heuristicsreferences/patterns.md
Full command catalog and JSON output shapereferences/commands.md
Failure modes, limits, and where the parody can get too repetitivereferences/gotchas.md

Gotchas

  1. The translator is intentionally satirical, not subtle. If the user wants "better LinkedIn copy," this skill is the wrong tool.
  2. 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.
  3. 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.
  4. 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.
  5. 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 instructions
  • scripts/linkedin_speak.py — translator and reverse-translator CLI
  • scripts/probe_linkedin_speak.py — lightweight behavior probe
  • references/patterns.md — transformation rules and examples
  • references/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.md for setup and input rules
  • references/patterns.md for the translation heuristics
  • references/gotchas.md for 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

SourceExample
Positional argumentpython3 scripts/linkedin_speak.py "I got a new job."
Stdinprintf '%s' "I shipped the feature." | python3 scripts/linkedin_speak.py
Filepython3 scripts/linkedin_speak.py --input-file ./status.txt

Core Flags

FlagMeaning
--mode translatePlain English to LinkedIn-speak
--mode reverseLinkedIn-speak to plain English
--mode bothReturns both directions in one response
--format textHuman-readable output
--format jsonStructured output with metadata
--intensity 1..5Controls hype, sentence count, and default hashtag volume
--no-hashtagsSuppress trailing hashtags
--no-emojiSuppress the celebratory emoji
--compare-kagi-urlInclude 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.md for exact command shapes and output structure
  • references/patterns.md for the transformation rules
  • references/gotchas.md for 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 1 if 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.md for how the parody engine decides what to say
  • references/configuration.md for 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:

  1. opener
  2. accomplishment restatement
  3. reflection on growth, collaboration, or momentum
  4. gratitude or forward-looking sentence
  5. emoji and hashtags, unless disabled

The exact wording is chosen by hashing the normalized input. That keeps identical inputs stable across runs.

Intensity Levels

IntensityBehavior
1One short opener plus one grounded summary sentence
2Adds a gratitude or reflection sentence
3Default. Adds both reflection and gratitude plus 3-4 hashtags
4Adds stronger hype and 4-5 hashtags
5Maximum cringe: bigger opener, extra framing, and the most flamboyant closer

Action Detection

The engine scans for action verbs and nouns, then reframes them:

SignalTypical 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:

  1. strip emojis and hashtags
  2. delete stock hype phrases like "thrilled to announce" and "grateful for the opportunity"
  3. collapse extra whitespace and repeated punctuation
  4. shorten inflated framing to a plain action sentence
  5. trim the output to the most factual clauses

Example Pairs

Plain inputLinkedIn-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.md for exact invocation patterns
  • references/gotchas.md for the rough edges and comedy limits
  • scripts/linkedin_speak.py for 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 #Leadership
  • Honored 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

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.