Files
bewerb/docs/superpowers/plans/2026-06-12-bewerb-umgebung.md
2026-06-12 11:04:16 +02:00

381 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# bewerb-Umgebung Implementierungsplan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Eine versionierte Claude-Code-Umgebung unter `/home/tlg/mkt/bewerb` aufbauen, die Freiberufler-Projekte im EspoCRM erfasst und KI-gestützte Bewerbungen mit persistentem Gedächtnis schreibt.
**Architecture:** Reine Struktur-/Inhaltsumgebung: Verzeichnisbaum + Markdown-Dateien + zwei Claude-Code-Skills. Das Gedächtnis liegt versioniert in `gedaechtnis/`. Kein Code/Build, daher ersetzen konkrete Verifikationsschritte (Datei-, Git- und Skill-Erkennbarkeitsprüfungen) klassische Tests. Zwei Tasks sind Übergabepunkte, an denen der Nutzer Bestandsdateien beisteuert.
**Tech Stack:** Git (sha256, Remote auf DesTEngS-Gitea), Markdown, Claude-Code-Skills (`.claude/skills/<name>/SKILL.md`), EspoCRM REST-API (Zugang in `.secrets/espocrm-api.md`).
**Referenz-Spec:** `docs/superpowers/specs/2026-06-12-bewerb-umgebung-design.md`
---
## Dateistruktur (Überblick)
Neu anzulegen in diesem Plan:
```
bewerb/
├── CLAUDE.md # Task 2
├── vorgaben/.gitkeep # Task 1 (Inhalt vom Nutzer: Task 5)
├── bewerbungen/index.md # Task 1
├── gedaechtnis/stil.md # Task 1
├── gedaechtnis/inhalte.md # Task 1
├── gedaechtnis/schwerpunkte.md # Task 1
├── gedaechtnis/log.md # Task 1
├── .claude/skills/bewerbung-schreiben/SKILL.md # Task 3
└── .claude/skills/projekt-anlegen/SKILL.md # Task 5 (Inhalt vom Nutzer)
```
Bereits vorhanden: `.git/`, `.gitignore`, `.secrets/espocrm-api.md`, `.claude/settings.local.json`, die beiden Doku-Dateien unter `docs/superpowers/`.
Alle Befehle gehen davon aus, dass das Arbeitsverzeichnis `/home/tlg/mkt/bewerb` ist.
---
## Task 1: Verzeichnisgerüst + Gedächtnis-Seeds + Register
**Files:**
- Create: `vorgaben/.gitkeep`
- Create: `bewerbungen/index.md`
- Create: `gedaechtnis/stil.md`
- Create: `gedaechtnis/inhalte.md`
- Create: `gedaechtnis/schwerpunkte.md`
- Create: `gedaechtnis/log.md`
- [ ] **Step 1: Verzeichnisse anlegen**
```bash
mkdir -p vorgaben bewerbungen gedaechtnis .claude/skills/bewerbung-schreiben .claude/skills/projekt-anlegen
touch vorgaben/.gitkeep
```
- [ ] **Step 2: `bewerbungen/index.md` schreiben**
```markdown
# Bewerbungs-Register
Eine Zeile je Bewerbung. **Schwerpunkte** ausschließlich aus
`gedaechtnis/schwerpunkte.md` verwenden. Beim Schreiben einer neuen Bewerbung
hier nach überlappenden Schwerpunkten suchen und nur die **finale Fassung**
passender Einträge als Vorlage nutzen.
| Datum | Käufer | Projekttitel | Einsatzort | Schwerpunkte | finale Fassung | Status |
|---|---|---|---|---|---|---|
```
- [ ] **Step 3: `gedaechtnis/schwerpunkte.md` schreiben**
```markdown
# Schwerpunkte (kontrolliertes Vokabular)
Erlaubte Schlagworte zur Klassifikation von Projekten und Bewerbungen.
Beim Schreiben einer Bewerbung **nur** Schlagworte aus dieser Liste verwenden.
Fehlt ein passendes Schlagwort, hier ergänzen (mit Kurzdefinition) und im
Commit begründen. Ziel: gleiche Schwerpunkte immer gleich benennen
(kein „ML" vs. „Machine Learning" vs. „KI").
| Schlagwort | Definition |
|---|---|
| _(wächst mit der Zeit)_ | |
```
- [ ] **Step 4: `gedaechtnis/stil.md` schreiben**
```markdown
# Schreibstil (gelernt)
Übertragbare Regeln für Bewerbungstexte. Wird am Ende jeder Bewerbungssession
aktualisiert. Nur **übertragbares** Wissen, keine projektspezifischen Einmaligkeiten.
## Tonalität
_(noch keine Einträge)_
## Anrede & Form
_(noch keine Einträge)_
## Formulierungen bevorzugt
_(noch keine Einträge)_
## Formulierungen vermeiden
_(noch keine Einträge)_
```
- [ ] **Step 5: `gedaechtnis/inhalte.md` schreiben**
```markdown
# Inhaltliche Bausteine (geprüft)
Bewährte, faktisch korrekte Inhalte und Formulierungen zu Erfahrungen/Skills.
Was hier steht, ist verifiziert richtig. Wird am Ende jeder Session aktualisiert.
## Korrekte Fakten
_(noch keine Einträge)_
## Bewährte Bausteine
_(noch keine Einträge)_
## Nicht zutreffend / nicht behaupten
_(noch keine Einträge)_
```
- [ ] **Step 6: `gedaechtnis/log.md` schreiben**
```markdown
# Gedächtnis-Chronik
Datierte Einträge: was wurde am Gedächtnis geändert und **warum**.
## 2026-06-12 — Initialisierung
- Gedächtnisstruktur angelegt (`stil.md`, `inhalte.md`, `schwerpunkte.md`, `log.md`)
und Register `bewerbungen/index.md`. Noch keine inhaltlichen Lerneinträge.
```
- [ ] **Step 7: Verifizieren**
Run: `ls -1 vorgaben/.gitkeep bewerbungen/index.md gedaechtnis/*.md && echo OK`
Expected: alle sechs Pfade werden gelistet, danach `OK`.
- [ ] **Step 8: Commit**
```bash
git add vorgaben/.gitkeep bewerbungen/index.md gedaechtnis/
git commit -m "Verzeichnisgerüst, Gedächtnis-Seeds und Bewerbungs-Register anlegen"
```
---
## Task 2: `CLAUDE.md` (operative Projekt-Anleitung)
**Files:**
- Create: `CLAUDE.md`
- [ ] **Step 1: `CLAUDE.md` schreiben**
```markdown
# bewerb — Projekt-Anleitung
Diese Umgebung unterstützt zwei Arbeitsabläufe:
1. **Freiberufler-Projekte bewerten und im EspoCRM erfassen** → Skill `projekt-anlegen`.
2. **Bewerbungen mit KI-Unterstützung schreiben** → Skill `bewerbung-schreiben`.
Sprache: **Deutsch** (Texte, Gedächtnis, Commits).
## Verzeichnisse
- `vorgaben/` — feste Quellen: `lebenslauf.md`, `marketing.md`. Referenz; nicht ohne Auftrag ändern.
- `bewerbungen/` — je Bewerbung ein Ordner; `bewerbungen/index.md` ist das zentrale Register.
- `gedaechtnis/` — versioniertes Gedächtnis: `stil.md`, `inhalte.md`, `schwerpunkte.md`, `log.md`.
- `.claude/skills/` — die beiden Skills.
- `.secrets/espocrm-api.md` — CRM-Zugang (NICHT versioniert, NICHT teilen, nur bei konkretem CRM-Auftrag lesen).
## Gedächtnis-Regeln (verbindlich)
**Vor** Arbeit an einer Bewerbung lesen: `gedaechtnis/stil.md`, `gedaechtnis/inhalte.md`,
`gedaechtnis/schwerpunkte.md` sowie `vorgaben/lebenslauf.md` und `vorgaben/marketing.md`.
**Am Ende** einer Bewerbungssession (Text versandreif):
1. Übertragbare Stil-Erkenntnisse → `gedaechtnis/stil.md`
2. Geprüfte inhaltliche Fakten/Bausteine → `gedaechtnis/inhalte.md`
3. Neue Schwerpunkt-Schlagworte → `gedaechtnis/schwerpunkte.md`
4. Datierter Eintrag (was/warum) → `gedaechtnis/log.md`
5. Register `bewerbungen/index.md` aktualisieren
6. Alles committen (und pushen)
Nur **übertragbares** Wissen ins Gedächtnis — keine projektspezifischen Einmaligkeiten.
## Git
- Branch `main`, Remote `origin` (DesTEngS-Gitea, `ssh://git@git.destengs.com:8085/tlg/bewerb.git`, Objektformat sha256).
- Inhaltliche Änderungen committen; `.secrets/` bleibt durch `.gitignore` ausgeschlossen.
```
- [ ] **Step 2: Verifizieren**
Run: `test -f CLAUDE.md && grep -q "Gedächtnis-Regeln" CLAUDE.md && echo OK`
Expected: `OK`
- [ ] **Step 3: Commit**
```bash
git add CLAUDE.md
git commit -m "CLAUDE.md mit Workflow- und Gedächtnis-Regeln anlegen"
```
---
## Task 3: Skill `bewerbung-schreiben`
**Files:**
- Create: `.claude/skills/bewerbung-schreiben/SKILL.md`
- [ ] **Step 1: `SKILL.md` schreiben**
```markdown
---
name: bewerbung-schreiben
description: Use when writing or revising a job application (Bewerbung/Anschreiben) for a freelance project. Loads CV, marketing, style memory and matching past applications, drafts and iterates the text with the user, then updates the memory. Trigger on "Bewerbung schreiben", "Anschreiben", "bewirb mich".
---
# Bewerbung schreiben
Wiederholbarer Workflow für eine KI-gestützte Bewerbung mit Gedächtnis.
## 1. Kontext laden
Lies zwingend:
- `vorgaben/lebenslauf.md`, `vorgaben/marketing.md`
- `gedaechtnis/stil.md`, `gedaechtnis/inhalte.md`, `gedaechtnis/schwerpunkte.md`
## 2. Schwerpunkte bestimmen
Bestimme die Schwerpunkte des aktuellen Projekts als Schlagworte aus
`gedaechtnis/schwerpunkte.md`. Fehlt ein passendes Schlagwort, ergänze es dort
mit Kurzdefinition (und begründe es später im Commit).
## 3. Vorlage wählen (Matching)
Öffne `bewerbungen/index.md`. Suche Zeilen mit **überlappenden** Schwerpunkten.
Nutze nur die **finale Fassung** passender Einträge als Vorlage. Kein Treffer →
ohne Vorlage schreiben (nur Vorgaben + Gedächtnis).
## 4. Ordner anlegen
Schema: `bewerbungen/YYYY-MM-DD_<Käufer>_<Projekttitel>_<Einsatzort>/`
- **Käufer:** Agentur (verkauft die Leistung weiter) oder bei Direktbeauftragung der Endkunde.
- **Projekttitel:** Titel aus der Projektbeschreibung.
- **Einsatzort:** `Remote`, `Hybrid-<Stadt>` oder `<Stadt>`.
- **Normalisierung:** Leerzeichen → Bindestrich; Slashes, Klammern und Zusätze wie
`(m/w/d)` entfernen; sonstiger Wortlaut bleibt erhalten.
- Beispiel: `2026-06-10_Aristo-Recruitment_AI-Engineer-Medical-Imaging_Remote`
Lege darin den Entwurf `entwurf.md` an.
## 5. Iterieren
Schreibe gemäß Stil-Gedächtnis und Vorgaben. Iteriere mit dem Nutzer bis
versandreif. Speichere die finale Fassung als `bewerbung.md` im Ordner.
## 6. Gedächtnis aktualisieren (Session-Ende)
- Stil-Erkenntnisse → `gedaechtnis/stil.md`
- geprüfte Inhalte → `gedaechtnis/inhalte.md`
- neue Schlagworte → `gedaechtnis/schwerpunkte.md`
- datierter Eintrag (was/warum) → `gedaechtnis/log.md`
- neue Zeile → `bewerbungen/index.md` (Datum, Käufer, Projekttitel, Einsatzort,
Schwerpunkte, finale Fassung, Status)
- committen (und pushen)
```
- [ ] **Step 2: Verifizieren, dass die Skill-Datei valide Frontmatter hat**
Run: `head -4 .claude/skills/bewerbung-schreiben/SKILL.md`
Expected: erste Zeile `---`, dann `name: bewerbung-schreiben`, eine `description:`-Zeile, dann `---`.
- [ ] **Step 3: Verifizieren, dass Claude Code den Skill erkennt**
In einer Claude-Code-Session aus `/home/tlg/mkt/bewerb`: prüfen, ob `bewerbung-schreiben` in der Liste verfügbarer Skills erscheint (bzw. `/bewerbung-schreiben` aufrufbar ist).
Expected: Skill ist gelistet/aufrufbar. (Hinweis: ggf. ist ein Neustart der Session nötig, damit neue Projekt-Skills geladen werden.)
- [ ] **Step 4: Commit**
```bash
git add .claude/skills/bewerbung-schreiben/SKILL.md
git commit -m "Skill bewerbung-schreiben anlegen (Workflow inkl. Gedächtnis-Update)"
```
---
## Task 4: Übergabe — Vorgaben & Cowork-Skill vom Nutzer (Checkpoint)
Dies ist ein **Übergabepunkt**: Der Nutzer legt jetzt die Bestandsdateien an den vorgesehenen Orten ab. Keine Code-Schritte; Ausführung pausiert hier bis die Dateien vorliegen.
- [ ] **Step 1: Nutzer ablegen lassen**
- `vorgaben/lebenslauf.md` (Lebenslauf, Markdown)
- `vorgaben/marketing.md` (Marketing-Beschreibung, Markdown)
- Inhalt des bestehenden Cowork-Skills nach `.claude/skills/projekt-anlegen/SKILL.md`
- [ ] **Step 2: Vorhandensein prüfen**
Run: `ls -1 vorgaben/lebenslauf.md vorgaben/marketing.md .claude/skills/projekt-anlegen/SKILL.md && echo VORHANDEN`
Expected: alle drei Pfade gelistet, danach `VORHANDEN`. Fehlt etwas → beim Nutzer nachfordern, bevor Task 5 startet.
---
## Task 5: Skill `projekt-anlegen` integrieren & kompatibel machen
Der vom Nutzer beigesteuerte Cowork-Skill wird als Claude-Code-Skill nutzbar gemacht. Cowork- und Claude-Code-Skills verwenden beide YAML-Frontmatter mit `name`/`description`; ggf. ist nur eine Anpassung der Frontmatter nötig.
**Files:**
- Modify: `.claude/skills/projekt-anlegen/SKILL.md`
- [ ] **Step 1: Frontmatter prüfen/setzen**
Sicherstellen, dass die Datei mit gültiger Frontmatter beginnt. Falls `name`/`description` fehlen oder unpassend sind, an den Anfang setzen bzw. anpassen:
```markdown
---
name: projekt-anlegen
description: Use when evaluating a freelance project and recording it in the EspoCRM (Opportunity, Contact, Account). Reads CRM access from .secrets/espocrm-api.md, does a Must/Nice-to-have match against the CV, and creates/updates the CRM records. Trigger on "Projekt bewerten", "Projekt anlegen", "ins CRM".
---
```
Den fachlichen Body (Bewertungslogik, CRM-Felder) aus dem Cowork-Skill unverändert übernehmen.
- [ ] **Step 2: CRM-Bezug prüfen**
Run: `grep -n "espocrm-api.md\|Opportunity\|X-Api-Key" .claude/skills/projekt-anlegen/SKILL.md || echo "Hinweis: kein CRM-Bezug gefunden — Body prüfen"`
Expected: mindestens ein Treffer auf den CRM-Zugang/Entitäten; sonst Body mit dem Nutzer abgleichen.
- [ ] **Step 3: Frontmatter-Validität prüfen**
Run: `head -4 .claude/skills/projekt-anlegen/SKILL.md`
Expected: gültige Frontmatter (`---`, `name: projekt-anlegen`, `description:`, `---`).
- [ ] **Step 4: Commit**
```bash
git add .claude/skills/projekt-anlegen/SKILL.md
git commit -m "Skill projekt-anlegen aus Cowork übernehmen und für Claude Code anpassen"
```
---
## Task 6: Abschlussverifikation & Push
- [ ] **Step 1: Gesamtstruktur prüfen**
Run:
```bash
test -f CLAUDE.md \
&& test -f bewerbungen/index.md \
&& test -f gedaechtnis/stil.md && test -f gedaechtnis/inhalte.md \
&& test -f gedaechtnis/schwerpunkte.md && test -f gedaechtnis/log.md \
&& test -f .claude/skills/bewerbung-schreiben/SKILL.md \
&& test -f .claude/skills/projekt-anlegen/SKILL.md \
&& test -f vorgaben/Lebenslauf_Dr-Ing_Thomas_Langer.md && test -f vorgaben/marketing.md \
&& echo "STRUKTUR VOLLSTÄNDIG"
```
Expected: `STRUKTUR VOLLSTÄNDIG`
- [ ] **Step 2: `.secrets`-Ausschluss erneut prüfen**
Run: `git check-ignore -q .secrets/espocrm-api.md && echo "secrets ignoriert" || echo "WARNUNG"`
Expected: `secrets ignoriert`
- [ ] **Step 3: Sauberer Arbeitsbaum & Push**
```bash
git status --short
git push origin main
git rev-list --left-right --count HEAD...@{u}
```
Expected: keine ungetrackten inhaltlichen Änderungen; Push erfolgreich; Zähler `0 0` (in Sync).
---
## Selbstreview (gegen die Spec)
- **Spec §2 Verzeichnisstruktur** → Tasks 13, 5 (alle Ordner/Dateien). ✓
- **Spec §3 Gedächtnis** (stil/inhalte/schwerpunkte/log + Lebenszyklus) → Task 1 (Seeds), Task 2 (Regeln in CLAUDE.md), Task 3 (Update-Schritt im Skill). ✓
- **Spec §4.1 projekt-anlegen** → Tasks 45 (Übernahme + Kompatibilität). ✓
- **Spec §4.2 bewerbung-schreiben** → Task 3 (vollständiger Workflow). ✓
- **Spec §5 Register & Namensschema** → Task 1 (index.md), Task 3 (Schema + Normalisierung im Skill). ✓
- **Spec §6 Git** → Task 6 (Push), Commits in jedem Task. ✓
- **Spec §8 offene Punkte** (Bestandsdateien, Cowork-Skill) → Task 4 (Übergabe). ✓
Keine Platzhalter; Datei- und Skill-Namen über alle Tasks konsistent (`bewerbung-schreiben`, `projekt-anlegen`, `gedaechtnis/*`, `bewerbungen/index.md`).