Communityライティング&編集github.com

alexis-morain/verbatim-linkedin

The LinkedIn post skill for Claude that interviews you first. It cannot write anything you did not say.

verbatim-linkedin とは?

verbatim-linkedin is a Claude Code agent skill that the LinkedIn post skill for Claude that interviews you first. It cannot write anything you did not say.

対応Claude Code~Codex CLI~Cursor
npx skills add alexis-morain/verbatim-linkedin

Installed? Explore more ライティング&編集 skills: steipete/notion, affaan-m/seo, affaan-m/brand-voice · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Verbatim

An engine and a profile. The engine ships in this repository. The profile is one person's material and never leaves their machine.

The promise, and the constraint that produces it: it cannot write anything you did not say. Every fact in a generated post is traceable to the profile, to the corpus, or to a sentence spoken in the interview that produced it. When nothing traces, nothing gets written.

Route

The person wantsSkillPrecondition
To write a postskills/linkedin-postA filled profile. Without one, it offers setup first.
To set up, or to redo their pillarsskills/linkedin-setupNone. This is the entry point.
To rework their public LinkedIn pageskills/linkedin-profileA filled profile. The page only ever claims what the profile can prove.

Read references/ on demand, not up front. Each skill names the files it needs.

First thing, every time: the status flag

Find the profile directory, then read the ## Status block at the top of its profile.md:

## Status
- filled: no
- source: template
- updated: --
- interface_language: --
- output_language_default: --

While filled: no, no skill pretends to know the person. Fall back to generic rules, say so in one line, and offer linkedin-setup. This three line block is the whole seam between the engine and a profile.

The profile directory is whatever the person points at. linkedin-setup creates it and writes its path into the conversation. There is no default path in this repository, on purpose: a hard coded path is how an engine stops being portable.

The three language axes

Independent, and this is what multilingual projects usually get wrong.

AxisWho decidesWhere it lives
Engine languagethe maintainer, once, Englishthis repository
Interview languagethe profileinterface_language
Output languageper post, defaults to the interview languageoutput_language_default

The last two really are independent. Plenty of people want to be interviewed in their own language and publish in English.

Language leak is the failure mode to watch. If a template in this engine carries a label like FIRST LINE, a model will echo it in English inside a French post. Two guards, both mandatory:

  1. No user-facing string lives in the engine. Wording lives in locales/<lang>/interview.md. The engine holds intents, never sentences to say.
  2. Every generation opens with an explicit output-language directive. State it, in one line, before writing anything.

If the pack has no wording for an intent, generate one and announce it: degradation is visible, never silent.

Language packs

locales/en and locales/fr ship. locales/_template is the contract, and its README carries the acceptance criteria for a new one.

A pack is never a translation of another pack. The ten categories in references/style-taxonomy.md are shared; the lists that fill them are not.

Layout

SKILL.md                    this router
skills/linkedin-post/       interview, sheet, draft, check, publish, measure
skills/linkedin-setup/      onboarding, pillars, idea bank
skills/linkedin-profile/    the public page, nine sections, audit then rewrite
references/                 mechanism, shared across languages
locales/<lang>/             wording, style lists, market rules
lib/lint.py                 deterministic style pass, no model
lib/publish.py              the three publishing tiers
examples/                   a fictional persona, to read before running this

What this bundle will not do

  • No hook formulas calibrated on a viral corpus. They invert the mechanism: the angle would descend from a template instead of from something the person said. See references/formats.md.
  • No writing against an AI detector. Optimising for a classifier is writing for the classifier. The deterministic pass in lib/lint.py is the whole of it.
  • No engagement pods, no comment gates by default. See references/platform.md.
  • No invented facts, ever, including in a revision. That is the promise.

関連スキル

steipete/notion

Notion CLI/API for pages, Markdown content, data sources, files, comments, search, Workers, and raw API calls.

community

affaan-m/seo

Audit, plan, and implement SEO improvements across technical SEO, on-page optimization, structured data, Core Web Vitals, and content strategy. Use when the user wants better search visibility, SEO remediation, schema markup, sitemap/robots work, or keyword mapping.

community

affaan-m/brand-voice

Build a source-derived writing style profile from real posts, essays, launch notes, docs, or site copy, then reuse that profile across content, outreach, and social workflows. Use when the user wants voice consistency without generic AI writing tropes.

community

affaan-m/crosspost

Multi-platform content distribution across X, LinkedIn, Threads, and Bluesky. Adapts content per platform using content-engine patterns. Never posts identical content cross-platform. Use when the user wants to distribute content across social platforms.

community

affaan-m/x-api

X/Twitter API integration for posting tweets, threads, reading timelines, search, and analytics. Covers OAuth auth patterns, rate limits, and platform-native content posting. Use when the user wants to interact with X programmatically.

community

affaan-m/content-engine

Create platform-native content systems for X, LinkedIn, TikTok, YouTube, newsletters, and repurposed multi-platform campaigns. Use when the user wants social posts, threads, scripts, content calendars, or one source asset adapted cleanly across platforms.

community