---
type: skill
agent_ready: true
schema_version: 1
bundle_version: "0.28.0"
name: linkedin-kommentar
description: "Erzeugt substanzielle LinkedIn-Kommentar-Entwürfe zu Posts, deren URLs der Anwender liefert. Holt Post-Inhalt via WebFetch, prüft Ausschlussregeln, wendet Schreibstil-Filter intern an und zeigt pro Post einen Kommentar im Codeblock mit Link und Kurz-Argumentation. Kein Scraping, kein automatisches Absenden. Trigger: 'linkedin kommentieren', 'Kommentarvorschläge', 'kommentier mir das', 'kommentiere diese Posts', 'LinkedIn-Kommentar schreiben'."
tags:
  - skill
  - linkedin
  - content
scope: vault
bundle_skill: true
default_active:
  allgemein: true
  content: true
depends_on: []
conflicts_with: []
created: 2026-05-17
updated: 2026-05-17
---

# LinkedIn Kommentar-Assistent

Copy-Paste ist eine bewusste Designentscheidung, kein Notbehelf. Kein Scraping, kein automatisches Absenden, keine Speicherung fremder Inhalte: der Anwender behält die Kontrolle über jeden Schritt. Der Skill holt den Post-Inhalt via WebFetch, prüft Ausschlussregeln und liefert einen fertig geprüften Entwurf im Codeblock.

Im Bundle wird der Skill via Claude-Tool-Aufruf `Skill('linkedin-kommentar')` getriggert, nicht über einen Vault-Slash-Command. Bei aktiviertem `content`-Profil steht das `/linkedin-kommentar`-Kommando zur Verfügung.

**MVP-Scope: kein DB-Ingest in `dim_comment`, kein Inbox-Modus (Modus B), kein Inbound-KI-Check (Schritt 3c und 6.5 entfallen). Phase-2 in Folge-Welle nach v0.13.0.**

## Konfiguration

Vollständige Konfigurations-Vorlage: `skill.config.example.yaml`. Pfade und Feature-Flags:

```yaml
paths:
  ausschlussregeln: "{projects}/LinkedIn Kommentar-Assistent/LinkedIn Kommentar-Assistent.md"

features:
  enable_glossar_check: true           # Glossar.md laden und Eigennamen prüfen
  enable_themen_passung_check: true    # Schritt 4a — AskUserQuestion bei Graufall
  enable_freshness_check: true         # Performance-/Trend-Brief Freshness prüfen

freshness_max_age_days: 14
locale: de
```

`enable_glossar_check`: Wenn `true`, wird `{context}/Glossar.md` in Schritt 1 geladen und bei Eigennamen abgeglichen.

`enable_themen_passung_check`: Wenn `true`, wird bei Posts, die thematisch nicht klar zur Positionierung des Anwenders passen, in Schritt 4a eine AskUserQuestion-Abfrage gestellt (drei Optionen: Überspringen, trotzdem Entwurf, Freie Antwort). Kann auf `false` gesetzt werden, wenn der Anwender alle URLs ohne Graufall-Check bearbeiten möchte.

`enable_freshness_check`: Wenn `true`, wird in Schritt 1 geprüft, ob Performance-Brief und Trend-Brief aktuell sind (jünger als `freshness_max_age_days` Tage). Bei veralteten oder fehlenden Briefen: kurz melden, Kommentar trotzdem schreiben.

Der `paths.ausschlussregeln`-Eintrag verweist auf die Projekt-Steckbrief-Datei, die Ausschlussregeln und das Security-Profil enthält.

## Modus A — Direktmodus (einziger Modus im MVP)

Der Anwender liefert eine oder mehrere LinkedIn-URLs direkt im Chat-Verlauf, kombiniert mit „kommentier mir das", „bitte kommentieren" oder ähnlichem.

Ablauf: Schritt 1 (Kontext laden) → Schritt 2 (URLs einsammeln) → Schritt 3–5 pro URL (Inhalt holen, Ausschluss prüfen, Entwurf erstellen) → Schritt 6 (Freigabe) → Schritt 7 (Abschluss).

## Modus B — Inbox-Modus (nicht in MVP)

Inbox-basierte Stapelverarbeitung mit JSON-Dateien unter `{inbox}/LinkedIn-Kommentare/` ist Phase-2-Material. Kommt in einer eigenen Folge-Welle nach v0.13.0.

## Eiserne Regeln

- **Schreibstil-Check ist PFLICHT, nicht Empfehlung.** Jeder Entwurf wird vor der Anzeige intern gegen `{context}/Schreibstil.md` geprüft. Kein „mental geprüft", kein Überspringen. Kein externer `Skill('natur-sprech-check')`-Tool-Aufruf im MVP — der Skill liest die Schreibstil-Datei selbst und wendet die Regeln an.
- **Kein Scraping** in keiner Form. Kein Playwright, kein Apify, keine Chrome-Extension. Einzige Wege: `WebFetch` auf öffentlich erreichbare Detailseiten plus Copy-Paste-Fallback durch den Anwender.
- **Kein Absenden.** Du zeigst Vorschläge am Bildschirm. Der Anwender kopiert.
- **Privacy.** Fremde Post-Texte bleiben in der Session, werden nicht ins Vault geschrieben.

## Ablauf

### Schritt 1: Kontext laden (einmal pro Session)

Ziel: Der Kommentar muss nach dem Anwender klingen — aus seiner Erfahrung, seinen Projekten, seinem Branding. Nicht generisch. Deshalb folgenden Kontext-Stack laden:

1. `{context}/Über mich.md` — Profil, Expertise, USP.
2. `{context}/Persönlichkeit und Arbeitsweise.md` — wie der Anwender denkt und auftritt.
3. `{context}/Schreibstil.md` — Tonalität, höchste Priorität für den Text.
4. `{context}/Angebot.md` — fachliche Schwerpunkte.
5. `{context}/Zwölf Lieblingsprobleme.md` — Hebel für Inhalte.
6. `{context}/ICP.md` — Zielgruppen.
7. `{context}/Branding.md` — Positionierung.
8. `{context}/Glossar.md` — korrekte Schreibweisen (wenn `enable_glossar_check: true`).
9. `{areas}/Content & Positionierung/LinkedIn-Strategie.md` — Grundhaltung und Qualitätsanforderungen.
10. `{areas}/Content & Positionierung/LinkedIn Analytics/Performance-Brief.md` (optional, wenn `enable_freshness_check: true`) — was bei eigenen Posts gezogen hat.
11. `{areas}/Content & Positionierung/LinkedIn Analytics/Trend-Brief.md` (optional, wenn `enable_freshness_check: true`) — externe Bubble-Signale.
12. `{paths.ausschlussregeln}` — **Ausschlussregeln** und **Security-Profil**.

**Freshness-Check (wenn `enable_freshness_check: true`):** Wenn Performance-Brief oder Trend-Brief fehlt oder `run_date` älter als `freshness_max_age_days` Tage: kurz melden, Kommentar trotzdem schreiben, aber Trend-/Performance-Signale nicht überbewerten.

**Projekt-/Erfahrungsbezug:** Wenn ein Post inhaltlich an eine konkrete Erfahrung des Anwenders andockt (z.B. laufende Projekte unter `{projects}/`), darf diese Erfahrung als Substanz eingebracht werden. Keine Projekt-Interna verraten, aber das Erfahrungswissen nutzen. Im Zweifel den betreffenden Projektsteckbrief gezielt nachladen.

### Schritt 2: URLs einsammeln

**Modus A (URLs im Chat):** URLs aus der Anwender-Nachricht extrahieren. Wenn er nur „kommentier mir was" ohne URL geschrieben hat, einmal nachfragen:

> Gib mir die URLs der Posts, die du kommentieren möchtest — eine pro Zeile. Akzeptiert werden `/feed/update/urn:li:activity:...`, `/posts/...` und `/pulse/...`.

URLs grob validieren (`linkedin.com` plus eines der drei Muster). Bei Unfug: einmal nachfragen.

### Schritt 3: Pro URL — Post-Inhalt holen

Für jede URL in Reihenfolge:

1. **WebFetch (Post)** mit Prompt: „Gib den vollständigen Post-Text, Autor-Namen und Headline zurück. Wenn nur Login-Wall oder Open-Graph-Snippet sichtbar, antworte nur `LOGIN-WALL`."
2. **Qualitätscheck** des Ergebnisses:
   - Autor erkennbar?
   - Body-Text ≥ 300 Zeichen und kein reiner Meta-Snippet?
   - Kein Marker wie „Join LinkedIn", „Sign in to view", „LOGIN-WALL"?
   - Kein Marker wie `404`, „Not Found", „Page not found"? Solche Marker bedeuten oft, dass der Autor den Post in seinen Sichtbarkeitseinstellungen eingeschränkt hat (z.B. „Connections only"). Als Sichtbarkeits-Fall behandeln (analog 404-Vorgehen), nicht als Login-Wall.
3. **Wenn Qualität okay:** weiter mit Schritt 3b.
4. **Wenn Login-Wall / zu dünn:** Copy-Paste- oder Screenshot-Fallback:
   > URL `<kurz>` liefert keinen Volltext (Login-Wall). Drei Wege: (a) Post-Text per Strg+A / Strg+C kopieren und hier reinpasten (Autor bitte dazuschreiben), (b) Screenshot direkt in die Konversation ziehen, ich lese ihn, (c) überspringen.
4a. **Wenn 404 / Sichtbarkeits-Einschränkung:** einmal melden, nicht still retrien:
   > URL `<kurz>` liefert 404 bzw. „Page not found". Das heißt meistens, dass der Autor den Post eingeschränkt hat. Drei Wege: (a) Post-Text direkt hier reinpasten, (b) Screenshot in die Konversation ziehen, (c) überspringen.

### Schritt 3b: Kommentare als Community-Analyse

Zusätzlicher **WebFetch (Kommentare)** mit Prompt: „Gib mir die Top-Kommentare im Wortlaut, mit Autor und Berufsbezeichnung. Maximal 10. Wenn keine sichtbar, antworte `KEINE-KOMMENTARE`."

**Zweck ist Community-Analyse, nicht Zitat-Sammlung:**
- Wer antwortet hier? Berufsgruppe, Nähe zum Thema?
- Welcher Konsens hat sich gebildet? Welche Spannungslinien?
- Gibt es einen Kommentar, an den der Anwender natürlich andocken kann?
- Ist die Community fachfremd? Dann nicht mit eigenem Fachgebiet erschlagen, sondern Brücke bauen.

Wenn `KEINE-KOMMENTARE`: weiter ohne, kein zweiter Versuch.

### Schritt 4: Ausschluss-Check

Wende die Ausschlussregeln aus `{paths.ausschlussregeln}` an. Standard-Kategorien:

- Politiker / politische Ränder
- Coach-/Guru-Motivationsposts ohne Substanz
- Stumpfe Eigenwerbung, White-Paper-Köder
- Privat-emotionale Posts (Jobverlust, Krankheit, Trauer)
- Recruiter-Stellenausschreibungen

Bei klarem Treffer: kurz melden, überspringen. Graufall → Schritt 4a.

### Schritt 4a: Themen-Passungs-Check (wenn `enable_themen_passung_check: true`)

Wenn ein Post thematisch nicht klar zur Positionierung des Anwenders passt (z.B. Post ist weit weg von Fachgebiet, Community fachfremd, Graubereich bei Ausschlussregeln): nicht still entscheiden, sondern mit `AskUserQuestion` drei Optionen vorlegen.

**AskUserQuestion-Struktur:**
- **Frage:** „Post von `<Autor>` passt nicht klar zu deiner Positionierung — wie möchtest du vorgehen?" (plus 1 Zeile Kontext)
- **Option 1 — Überspringen:** kurze Begründung.
- **Option 2 — Trotzdem Entwurf:** kurze Begründung, welcher Andock-Winkel denkbar wäre.
- **Option 3 — Freie Antwort:** damit der Anwender etwas ganz anderes vorgeben kann.

**Negativ-Beispiel (2026-04-20):** Bei einem Post (Berufswechsel Gesundheitswesen, Human Design) fragte der Skill per Fließtext „Überspringen oder trotzdem Entwurf?". Funktional korrekt, aber unkomfortabel. Ab jetzt `AskUserQuestion` mit drei Optionen, nicht Fließtext.

Wenn `enable_themen_passung_check: false`: bei thematischem Graufall direkt in Schritt 5 gehen und besten Andock-Winkel wählen.

### Schritt 5: Kommentar-Entwurf

Regeln:

- **Länge:** 2–4 Sätze, bei Social-Media-Ton oft eher 2–3. Kein Essay.
- **Substanz:** Eine fachliche Beobachtung, eine präzise Rückfrage oder eine konkrete Ergänzung aus Angebot oder Lieblingsproblemen des Anwenders. Keine Zustimmungsfloskel.
- **Social-Media-Ton:** Kurze, klare Sätze. Keine verschachtelten Konstrukte. Kein formales „Name Doppelpunkt Frage/Aussage".
- **Namensbezug höchstens 1, maximal 2.** Mehr wirkt künstlich.
- **Themen dürfen dezent mit, dürfen nicht dominieren.** Bei fachfremder Community: zuerst andocken und Brücke bauen.
- **Stimmigkeit zur Positionierung (Pflicht):** Der Kommentar muss aus dem Profil, der Erfahrung und dem Kontext des Anwenders argumentieren — nicht aus generischem Common Sense.
- **Storyteller-Element dezent (optional):** Wenn es natürlich passt, darf ein kleines narratives Element rein — eine konkrete Zahl, eine Ich-Beobachtung. Kein Arc, kein Aufbau.
- **Einstiegs-Varianz (Pflicht):** Niemals zwei Kommentare in Folge mit dem gleichen Muster starten.
- **Stil:** Strikt nach `{context}/Schreibstil.md`. Kein KI-Opener, keine Gedankenstrich-Inflation, sparsam Doppelpunkte mitten im Satz.
- **Glossar** beachten bei Eigennamen (wenn `enable_glossar_check: true`).
- **Schreibstil-Check (ZWINGEND intern):** Vor der Anzeige jeden Entwurf gegen `{context}/Schreibstil.md` prüfen. Kein externer Skill-Aufruf im MVP — intern prüfen, Befunde einarbeiten, dann erst in Schritt 6 anzeigen.

**Negativ-Beispiel (2026-04-19):** Der Skill zeigte zwei Entwürfe hintereinander, ohne die Schreibstil-Datei anzuwenden, und gab auf Rückfrage zu „nur mental geprüft". Das ist genau der Regelverstoß, der mit diesem Gate verhindert werden soll. Nie wieder.

**Beim allerersten Entwurf der Session:** einmal an den Anwender zurückspielen, ob Ton und Länge so passen. Nach Bestätigung in Flow übergehen.

### Schritt 6: Freigabe pro Post

**Darstellungsformat (verbindlich):**

1. Kurze Einordnung in Prosa (1–2 Zeilen): Autor, Kern des Posts, warum der gewählte Winkel passt.
2. **Kommentarvorschlag als Markdown-Codeblock** (Fenced Code, keine Sprache) — dadurch erscheint im Chat ein Copy-Button.
3. **Klickbarer Post-Link** in einer eigenen Zeile direkt unter dem Codeblock, Format: `**Direkt zum Post:** [<Kurzbeschreibung>](<URL>)`.
4. **Kurz-Argumentation (Pflicht, max. 3–4 Zeilen):** Erklären, auf welche Elemente des Posts der Kommentar andockt und warum.
5. Freigabe-Zeile: `**Ja** / **Nein** / **Bearbeiten: <Hinweis>**`.

Der Anwender antwortet mit **Ja** (er kopiert und postet), **Nein** (verwerfen), **Bearbeiten: <Hinweis>** (nachschärfen), **Weiter** (nächster Post).

Kein Automatismus. Der Skill wartet jedes Mal auf den Anwender.

### Schritt 7: Abschluss

Wenn alle URLs durch sind:

- Kurze Bilanz: Anzahl URLs, Anzahl Vorschläge, Anzahl „Ja".
- Kein Markdown-Log anbieten (MVP-Scope: kein DB-Ingest).

## Was du auf keinen Fall tust

- Kein zweiter Scraping-Anlauf, auch nicht „nur probeweise".
- Kein automatisches Absenden, Liken, Folgen, Vernetzen.
- Keine Speicherung fremder Post-Inhalte im Vault.
- Keine Aufweichung der Ausschlussregeln ohne explizite Anwender-Freigabe.
- Kein `Skill('natur-sprech-check')`-Tool-Aufruf im MVP — Schreibstil-Check läuft intern.

## Hinweise zum Anwender

Dieser Skill erwartet folgende Vault-Inhalte. Default-Templates wurden vom Setup-Agent in den `templates/`-Ordner des Bundles gelegt (Unterordner `Kontext` und `Projekte`), bitte mit eigenen Inhalten befüllen:

- `{context}/Über mich.md` — Profil und USP
- `{context}/Persönlichkeit und Arbeitsweise.md` — Denk- und Auftrittsweise
- `{context}/Schreibstil.md` — Tonalität (existiert als Bundle-Template)
- `{context}/Angebot.md` — fachliche Schwerpunkte
- `{context}/Zwölf Lieblingsprobleme.md` — thematische Leitplanken
- `{context}/ICP.md` — Zielgruppen
- `{context}/Branding.md` — Positionierung
- `{context}/Glossar.md` — korrekte Schreibweisen (existiert als Bundle-Template)
- `{areas}/Content & Positionierung/LinkedIn-Strategie.md` — Grundhaltung
- `{paths.ausschlussregeln}` — Ausschlussregeln + Security-Profil (Template vorhanden)

## Verknüpfungen

- [[INDEX|INDEX.md]]
- [[AGENTS|AGENTS.md]]
