---
type: skill
agent_ready: true
schema_version: 1
bundle_version: "0.28.0"
name: linkedin-ideen
description: "Generiert drei LinkedIn-Post-Ideen basierend auf dem Vault-Wissen und der LinkedIn-Strategie des Nutzers. Analysiert Profil, aktuelle Projekte, Daily Notes und Wissensbereiche, um werthaltige, authentische Post-Ideen zu finden. Legt die gewählte Idee als Datei ab (status: idee). Der eigentliche Entwurf wird von linkedin-entwurf geschrieben. Aufruf: über Skill-Tool oder Slash-Command, mit optionalem Fokus-Thema. Trigger: wenn der Nutzer nach LinkedIn-Post-Ideen fragt, Content-Vorschläge oder Posting-Inspiration braucht, Sichtbarkeit erhöhen will, fragt 'worüber soll ich posten', 'was soll ich auf LinkedIn schreiben', Content-Strategie besprechen möchte, oder nach Ideen für Fachbeiträge, Erfahrungsberichte oder Meinungsposts sucht."
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-ideen

Jeder Vorschlag muss den „So what?"-Test bestehen: entweder ein Reframe, der eine gewohnte Sicht kippt, oder ein Wiedererkennungsmoment, in dem sich der Leser erkennt. Reine Solo-Erfahrung ohne verallgemeinerbares Muster fliegt raus, egal wie gut sie klingt.

Im Bundle wird der Skill via Claude-Tool-Aufruf `Skill('linkedin-ideen')` getriggert, nicht über einen Vault-Slash-Command. Das `/linkedin-ideen`-Kommando steht bei einem aktivierten `content`-Profil aber zur Verfügung.

Pfade für Vault-Inhalte kommen aus `skill.config.yaml` (via `config_loader`). Fehlt die Datei, verwendet der Skill die Default-Pfade aus `bundle.json.vault_layout`. Fehlt auch dieses, greifen die Defaults aus `DEFAULT_LAYOUT` in `_lib/config_loader.py`.

**Hinweis für Anwender:** Dieser Skill erwartet folgende Vault-Inhalte:

- `{context}/Über mich` — Profil, Expertise, USP
- `{context}/Schreibstil` — Tonalität und Stilregeln
- `{context}/ICP` — Zielgruppe
- `{context}/Zwölf Lieblingsprobleme` — Thematische Leitplanken
- `{context}/Branding` — Positionierung
- `{context}/Glossar` — Korrekte Schreibweisen
- `{areas}/Content & Positionierung/LinkedIn-Strategie` — Grundhaltung + Qualitätsanforderungen
- `{areas}/Content & Positionierung/LinkedIn Analytics/Performance-Brief` — eigene Post-Historie (optional)
- `{areas}/Content & Positionierung/LinkedIn Analytics/Trend-Brief` — externe Signale (optional)
- `{areas}/Content & Positionierung/LinkedIn Best Practices/00-Übersicht` — Vorbilder für Hook-Pattern
- `{logbuch}/B Daily Notes/` — letzte Daily Notes
- `{projects}/` — aktive Projektsteckbriefe
- `{areas}/` — Bereichs-Übersichten

Default-Templates wurden vom Setup-Agent angelegt — bitte mit eigenen Inhalten befüllen.

## Konfiguration

Vollständige Konfigurations-Vorlage: `skill.config.example.yaml`. Pfad-Schlüssel und Feature-Flags:

```yaml
paths:
  posts_root: "{areas}/Content & Positionierung/LinkedIn Posts"
  daily_notes_root: "{logbuch}/B Daily Notes"
  performance_brief: "{areas}/Content & Positionierung/LinkedIn Analytics/Performance-Brief.md"
  trend_brief: "{areas}/Content & Positionierung/LinkedIn Analytics/Trend-Brief.md"
features:
  enable_ideenspeicher: true          # Phase 0 — Ideenspeicher-Frage aktivieren
  enable_perplexity_zahlen: false     # Phase 0b — Zahlenmaterial aus Perplexity (Default OFF)
  enable_freshness_check: true        # Freshness-Prüfung für Performance/Trend-Brief
  enable_duplicate_check: true        # Duplikat-Prüfung über LinkedIn-Posts-Glob
freshness_max_age_days: 14            # Schwellwert für Freshness-Check (Tage)
locale: de
```

### Feature-Flags

**`enable_ideenspeicher`** (Default `true`): Aktiviert Phase 0. Wenn `true`, prüft der Skill ob `{paths.posts_root}/00-Ideenspeicher.md` existiert und fragt via `AskUserQuestion`, ob der Ideenspeicher als Quelle einbezogen werden soll.

**`enable_perplexity_zahlen`** (Default `false`): Aktiviert Phase 0b. Wenn `true`, fragt der Skill via `AskUserQuestion`, ob aktuelles Zahlenmaterial aus dem Internet hinzugezogen werden soll. **Externe Abhängigkeit:** Dieser Modus benötigt das Skript `external-ai.py` aus dem global installierten `cross-check`-Skill (ein separater User- oder Plugin-Skill, nicht im Bundle enthalten — analog dem `notebooklm`-CLI-Pattern in `notebooklm-kurator`). Unter Claude Code liegt es unter `~/.claude/skills/cross-check/external-ai.py`, unter Codex am dortigen globalen Skill-Ablageort. Ohne installierten Wrapper zeigt der Skill eine klare Fehlermeldung. Anwender richten das Skript im globalen `cross-check`-Verzeichnis ihres Tools ein, bevor sie das Flag aktivieren.

**`enable_freshness_check`** (Default `true`): Wenn `true`, prüft der Skill das `run_date`-Frontmatter-Feld in Performance-Brief und Trend-Brief. Ist ein Brief älter als `freshness_max_age_days` Tage oder fehlt das Feld, wird eine kurze Warnung ausgegeben und der Prozess läuft weiter.

**`enable_duplicate_check`** (Default `true`): Wenn `true`, scannt der Skill via Glob alle Post-Dateien unter `{paths.posts_root}/**/*.md` und vergleicht die `description`-Frontmatter-Felder. Bereits behandelte Themen werden nicht nochmal vorgeschlagen.

**`codex_subagent_fallback`** (Default `false`): Wenn `true`, steht kein paralleler Subagent-Dispatch zur Verfügung (z. B. unter Codex). Der Hauptagent ruft `external-ai.py` für die drei Vorschlagsthemen dann seriell nacheinander selbst auf, statt drei `Agent`-Tool-Calls parallel zu starten. Ergebnis und Quellen bleiben unverändert.

**`freshness_max_age_days`** (Default `14`): Ganzzahliger Schwellwert in Tagen für den Freshness-Check. Überschreitet das Alter eines Briefs diesen Wert, wird eine Warnung ausgegeben.

## Ablauf

Der Skill hat zwei Phasen. Phase 2 wird nur ausgelöst, wenn der Nutzer einen Vorschlag auswählt.

### Phase 0: Ideenspeicher-Frage (vor allem anderen)

Aktiv wenn `enable_ideenspeicher: true`.

Bevor irgendetwas geladen oder analysiert wird, prüfen ob `{paths.posts_root}/00-Ideenspeicher.md` existiert. Wenn ja, mit `AskUserQuestion` fragen, ob der Ideenspeicher als Quelle einbezogen werden soll. Drei Optionen:

- **Nein, ohne Speicher (Standard)** — der Skill arbeitet rein aus Vault-Analyse, Daily Notes und Projekten.
- **Ja, pro Idee** — der Skill liest den Ideenspeicher, wählt die offenen Ideen heraus und entwickelt aus jeder einzelnen offenen Idee Vorschläge (mindestens einen pro Idee, ergänzt um Vault-Kontext).
- **Ja, als Mix** — der Skill liest die offenen Ideen und kombiniert mehrere zu neuen Vorschlägen, zusätzlich zur Vault-Analyse. Querverbindungen und ungewöhnliche Mischungen sind hier ausdrücklich gewollt.

Wenn der Ideenspeicher nicht existiert, Phase 0 still überspringen und direkt in Phase 0b.

Die in Phase 0 gewählte Quelle bleibt für die ganze Session gültig und beeinflusst Schritt 6 in Phase 1.

### Phase 0b: Zahlenmaterial-Frage (vor der Generierung)

Aktiv wenn `enable_perplexity_zahlen: true`.

Nach Phase 0 und vor jedem Laden/Analysieren per `AskUserQuestion` fragen, ob die drei Vorschläge mit **aktuellem Zahlenmaterial aus dem Internet** unterstützt werden sollen. Zwei Optionen:

- **Nein, ohne Zahlen (Standard)** — Vorschläge werden rein aus Vault-Wissen entwickelt.
- **Ja, mit aktuellen Zahlen** — für jeden der drei Vorschläge wird im Hintergrund ein Subagent losgeschickt, der über Perplexity das aktuellste und interessanteste Zahlenmaterial zum Vorschlagsthema holt.

**Wichtig:** Diese Option erfordert `external-ai.py` aus dem global installierten `cross-check`-Skill als externe Abhängigkeit (unter Claude Code `~/.claude/skills/cross-check/external-ai.py`, unter Codex der dortige globale Skill-Ablageort). Wenn die Datei fehlt, klare Fehlermeldung ausgeben und auf den manuellen Setup-Schritt hinweisen.

Die Wahl bleibt für die ganze Session gültig und beeinflusst Schritt 6 in Phase 1.

### Phase 1: Vault-Analyse und 3 Vorschläge

Phase 1 schreibt nichts ins Vault. Das ist bewusst so: der Nutzer soll Ideen unverbindlich sichten können, ohne dass bei verworfenen Vorschlägen Dateien zurückbleiben.

**Schritt 1: Kontext und Strategie laden**

Lies diese Dateien (Read-Tool, kein Agent nötig). Alle Pfade werden über `cfg.layout` aufgelöst:

1. `{context}/Über mich.md` — Profil, Expertise, USP
2. `{context}/Schreibstil.md` — Tonalität und Stilregeln
3. `{context}/ICP.md` — Zielgruppe
4. `{context}/Zwölf Lieblingsprobleme.md` — Thematische Leitplanken
5. `{context}/Branding.md` — Positionierung
6. `{context}/Glossar.md` — Korrekte Schreibweisen
7. `{areas}/Content & Positionierung/LinkedIn-Strategie.md` — Grundhaltung und Qualitätsanforderungen
8. `{paths.performance_brief}` — was bei den eigenen Posts bisher gezogen hat (Tabelle `posts`, Highlights, Constraints). Frontmatter-Felder `run_date`, `post_count`, `threshold`, `modus` auswerten. Bei Modus `qualitativ` jede Aussage mit `id` oder `datum` aus der posts-Tabelle belegen. Bei Modus `datenbasiert` nur Zahlen aus der Datei verwenden.
9. `{paths.trend_brief}` — externe LinkedIn-Signale (hashtag_performance, top_posts, co_hashtags, recurring_authors). Frontmatter-Felder `run_date`, `signal_count`, `hashtag_set` auswerten.
10. `{areas}/Content & Positionierung/LinkedIn Best Practices/00-Übersicht.md` und die verlinkten Referenzposts — Vorbilder für Hook-Pattern, Reframe, Wiedererkennung und PVL-Struktur.

**Freshness-Check für Punkt 8 und 9:** Wenn `enable_freshness_check: true` und einer der beiden Briefs fehlt oder `run_date` älter als `freshness_max_age_days` Tage ist, eine kurze Warnung ausgeben und weiterarbeiten. Der Prozess stoppt nicht. Wenn ein Brief ganz fehlt, die zugehörige Match-Zeile im Output weglassen statt zu raten.

Die LinkedIn-Strategie ist der zentrale Qualitätsfilter für alles, was dieser Skill produziert.

**Schritt 2: Aktuelle Aktivitäten scannen**

Lies die letzten 10 Daily Notes aus `{paths.daily_notes_root}/` (neueste zuerst). Daraus ergibt sich, woran der Nutzer kürzlich gearbeitet hat, was ihn beschäftigt, welche Erkenntnisse aufgetaucht sind.

**Schritt 3: Projekte und Bereiche scannen**

Lies die Projektsteckbriefe aller aktiven Projekte (Hauptdatei in jedem Ordner unter `{projects}/`). Lies die Bereichs-Übersichten unter `{areas}/`.

**Schritt 4: Duplikate prüfen**

Aktiv wenn `enable_duplicate_check: true`.

Der Post-Ordner ist in drei Unterordner strukturiert:
- `{paths.posts_root}/01 In Bearbeitung/` — Entwürfe
- `{paths.posts_root}/02 Bereit zur Veröffentlichung/` — finalisiert, wartet auf Slot
- `{paths.posts_root}/03 Veröffentlicht/` — bereits raus

Mit Glob `{paths.posts_root}/**/*.md` rekursiv alle Post-Dateien sammeln (die Datei `00-Ideenspeicher.md` auf der obersten Ebene ist KEIN Post und wird hier ignoriert). Lies deren Frontmatter (description-Feld reicht). Bereits behandelte Themen nicht nochmal vorschlagen.

**Schritt 5: Fokus-Thema (optional)**

Wenn der Nutzer ein Argument mitgibt (z.B. `/linkedin-ideen Buchungsassistent`), nutze zusätzlich Grep, um alle Erwähnungen dieses Themas im Vault zu finden. Die Vorschläge sollen dann primär auf diesem Thema basieren, aber Querverbindungen zu anderen Bereichen sind ausdrücklich erwünscht.

**Schritt 6: 3 Vorschläge generieren**

Falls in Phase 0 der Ideenspeicher aktiviert wurde, jetzt `{paths.posts_root}/00-Ideenspeicher.md` lesen und nur die Einträge mit Status `offen` berücksichtigen. Im Modus **pro Idee** entstehen Vorschläge je einzelner Idee, im Modus **Mix** dürfen mehrere Ideen kombiniert werden. In beiden Fällen müssen die Vorschläge weiterhin den Qualitätsfilter bestehen.

Wenn der Ideenspeicher nicht aktiviert ist, Schritt 6 rein aus Vault-Analyse fahren.

**Zahlenmaterial-Ergänzung (nur wenn in Phase 0b „Ja, mit aktuellen Zahlen" gewählt wurde und `enable_perplexity_zahlen: true`):**

1. Erst die drei Vorschlagsthemen im Kopf fertig denken (Arbeitstitel, Kernaussage, welche Art Zahl würde den Post schärfen).
2. **Pro Vorschlag eine dynamische Domain-Whitelist festlegen** (5–10 seriöse Quellen, passend zum Thema). Empfohlene Quellen-Kategorien:
   - Offizielle Statistik / Behörden: destatis.de, bundesbank.de, bmwk.de, bafin.de, ec.europa.eu, eurostat.ec.europa.eu, oecd.org, imf.org, weforum.org
   - Wirtschaft / Management: mckinsey.com, bcg.com, deloitte.com, pwc.de, kpmg.com, iwkoeln.de, ifo.de, diw.de
   - Tech / KI: bitkom.org, gartner.com, forrester.com, idc.com, stanford.edu, arxiv.org
   - Finance-Daten: statista.com, bloomberg.com, reuters.com, ft.com
   - HR / Arbeitsmarkt: iab.de, stepstone.de, linkedin.com/business, indeed.com
3. **Drei Subagents parallel** losschicken (eine Nachricht mit drei `Agent`-Tool-Calls). Jeder Subagent ruft `external-ai.py` aus dem global installierten `cross-check`-Skill (unter Claude Code `~/.claude/skills/cross-check/external-ai.py`) mit `--provider perplexity` auf. Gib das vollständige Ergebnis **unverändert** zurück.
4. Stärkste Zahl (max. 1–2 pro Vorschlag) mit hochgestellter Fußnoten-Ziffer (¹ ² ³) einbauen. Quellenblock unter dem Vorschlag.
5. Wenn Perplexity nichts liefert: ehrlich „Keine belastbaren aktuellen Zahlen gefunden" vermerken, keine Zahl erfinden.

**Serielle Degradierung (`features.codex_subagent_fallback: true`, Default `false`):** Steht kein paralleler Subagent-Dispatch zur Verfügung (z. B. unter Codex), schickt der Hauptagent keine drei `Agent`-Tool-Calls los, sondern ruft `external-ai.py` für die drei Vorschlagsthemen seriell nacheinander selbst auf. Ergebnis, Quellen und Whitelist-Regeln bleiben gleich, nur ohne Parallelität.

Suche nach diesen Mustern im gesammelten Material:
- **Frische Erkenntnisse**: Was wurde in den letzten Tagen gelernt oder gebaut?
- **Aha-Momente**: Überraschende Einsichten aus Projekten
- **Themen-Kombinationen**: Wissen aus verschiedenen Bereichen kreativ verbinden
- **Kontraste**: Wo widerspricht die eigene Erfahrung dem Mainstream auf LinkedIn?
- **Praktische Learnings**: Konkrete Beispiele statt Theorie
- **Ideenspeicher-Funken** (falls aktiviert): offene Einträge aus dem Ideenspeicher als Rohmaterial

**Qualitätsfilter 1 (aus der LinkedIn-Strategie und den Best Practices):** Bevor ein Vorschlag präsentiert wird, prüfe ihn gegen diese Fragen:
- Bringt der Post den Leser auf einen Gedanken, auf den er ohne den Post nicht so schnell gekommen wäre?
- Hat der Post echte Substanz, oder klingt er nur gut?
- Würde der Nutzer diesen Post mit gutem Gewissen veröffentlichen?
- **Reframe-Test:** Steckt im Vorschlag entweder ein **Reframe** (kippt eine gewohnte Sicht) oder ein **Wiedererkennungs-Effekt** (beschreibt ein Muster, in dem sich der Leser erkennt)? Reine Solo-Erfahrung ohne Anschluss an ein verallgemeinerbares Muster fällt durch.
- **Take-away in einem Satz:** Kann ein Leser nach dem Post in einem Satz benennen, was er mitnimmt?

**Qualitätsfilter 2a (aus dem Performance-Brief — eigene Post-Historie):** Jeden Vorschlag gegen die eigene Datenlage prüfen:
- **Bei Modus `qualitativ`** (post_count < 15): Gibt es einen konkret benennbaren eigenen Post (id oder Datum) aus der posts-Tabelle, dessen Hook/Format/Thema die Vorschlags-Richtung stützt?
- **Bei Modus `datenbasiert`** (post_count ≥ 15): Passt der Vorschlag zu den Top-3 nach `saves_per_1k`? Nur Zahlen aus der Datei verwenden.
- Wenn Performance-Brief fehlt: Filter 2a still überspringen.

**Qualitätsfilter 2b (aus dem Trend-Brief — externe Signale):** Jeden Vorschlag gegen die aktuelle externe Bubble prüfen:
- Dockt er an ein Hook-Muster aus `top_posts` an (ohne zu kopieren)?
- Nutzt er mindestens einen `co_hashtag` aus der aktuellen Top-Liste oder einen Tag aus `hashtag_set`?
- Wenn Trend-Brief fehlt: Filter 2b still überspringen.

Vorschläge, die Filter 1 nicht bestehen, werden verworfen und durch bessere ersetzt.

**Absolute Regel:** Im Output keine Content-Ratschläge erfinden, die nicht durch Performance-Brief, Trend-Brief oder die sonstigen geladenen Vault-Dateien gedeckt sind.

Präsentiere die Vorschläge in diesem Format:

```
### Vorschlag 1: [Arbeitstitel]

**Format:** [Erfahrungsbericht | Fachimpuls | Meinung | Storytelling | How-To | Kontrast | ...]
**Sprache:** [Deutsch | Englisch] — [kurze Begründung]
**Kernidee:** [2-3 Sätze: Was vermittelt der Post? Was ist der Aha-Moment für den Leser?]
**Quellen im Vault:** [[Notiz 1]], [[Notiz 2]]
**Aktuelle Zahlen (nur bei Phase 0b = Ja):**
¹ [Zahl/Statistik] — Quelle: [Name], [Jahr/Datum], [URL]
**Performance-Match:** [1 Satz mit Beleg aus dem Performance-Brief. Wenn Performance-Brief fehlt: Zeile weglassen.]
**Trend-Match:** [1 Satz mit Beleg aus dem Trend-Brief. Wenn Trend-Brief fehlt: Zeile weglassen.]

---

### Vorschlag 2: [Arbeitstitel]
[gleiche Struktur]

---

### Vorschlag 3: [Arbeitstitel]
[gleiche Struktur]
```

Danach als normalen Text fragen (kein AskUserQuestion, damit der Nutzer frei antworten kann):
**"Welchen Vorschlag willst du weiterverfolgen? Oder soll ich nochmal drei neue generieren?"**

### Phase 2: Idee ablegen

Wird nur ausgelöst, wenn der Nutzer einen Vorschlag auswählt (z.B. „Nummer 2", „die Idee mit X").

**Schritt 1: Post-Ordner und Datei anlegen**

Erstelle die Datei unter `{paths.posts_root}/01 In Bearbeitung/[Arbeitstitel]/[Arbeitstitel].md` (eigener Ordner pro Post, Ordnername = Dateiname ohne Endung). Falls der Ordner noch nicht existiert, erstelle ihn.

**Schritt 2: Idee-Datei mit Frontmatter**

```yaml
---
type: linkedin-post
description: "[Kernidee in einem Satz]"
tags:
  - linkedin-post
  - [1-2 thematische Tags passend zum Inhalt]
status: idee
format: ""
geplant: ""
veröffentlicht: ""
url: ""
thumbnail: ""
hashtags: []
created: [heutiges Datum]
updated: [heutiges Datum]
---
```

```markdown
# [Arbeitstitel]

## Idee

**Format:** [das in Phase 1 empfohlene Format]
**Sprache:** [Deutsch/Englisch — mit Begründung aus Phase 1]
**Zielgruppe:** [aus ICP abgeleitet]
**Kernidee:** [2-3 Sätze aus dem gewählten Vorschlag]
**Zahlen:** [falls Phase 0b aktiv war: Zahl + Quelle + Jahr. Sonst weglassen.]
**Performance-Match:** [1-Satz-Match aus Phase 1, falls vorhanden]
**Trend-Match:** [1-Satz-Match aus Phase 1, falls vorhanden]

**Quellen:**
- [[Link zu Quell-Notiz 1]]
- [[Link zu Quell-Notiz 2]]

## Entwurf

Wird von linkedin-entwurf ausgefüllt.

## Verknüpfungen

- [[{areas}/Content & Positionierung/Content & Positionierung]]
- [[Quell-Projekt oder -Bereich]]
```

**Wichtig:** `status: idee` (nicht `entwurf`). Die Datei enthält bewusst keinen Entwurf. Die inhaltliche Ausarbeitung übernimmt der Skill `linkedin-entwurf`.

**Schritt 3: Handoff**

Nach dem Anlegen der Datei:

> **Idee abgelegt in `[Dateipfad]`.**
> Starte `linkedin-entwurf [Arbeitstitel]` um Format zu wählen und den Entwurf zu schreiben.

NICHT automatisch `linkedin-entwurf` aufrufen.

## Hinweise zum Verhalten

- Die besten Posts entstehen, wenn Wissen aus verschiedenen Bereichen kreuz und quer verbunden wird.
- **Dynamisches Regelwerk:** Dieser Skill enthält bewusst keine duplizierten Inhaltsregeln. Anforderungen, Grundhaltung, Stilregeln und Zielgruppe werden bei jedem Aufruf frisch aus dem Vault geladen. Wenn der Nutzer seine Anforderungen ändert, ändert er die Vault-Dateien (LinkedIn-Strategie, Schreibstil, ICP etc.), und der Skill übernimmt das automatisch.
- **Stochastik:** Drei Vorschläge generieren ist erlaubte Output-Stochastik. Pfad-Auflösung, Frontmatter-Erzeugung und alle Eval-Assertions sind deterministisch.
- Locale aus `skill.config.yaml` beachten (Default: `de`). Bei deutscher Locale: echte Umlaute (ä ö ü Ä Ö Ü ß), niemals ae/oe/ue/ss als Ersatz.

## Locale

Default: `de`. Einstellbar über `locale` in `skill.config.yaml`. Dieser Skill erzeugt Dateinamen auf Basis von Arbeitstiteln — diese sollten Umlaute korrekt verwenden.

## Verknüpfungen

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