---
type: skill
agent_ready: true
schema_version: 1
bundle_version: "0.28.0"
name: session-log
description: "Schreibt am Session-Ende ein chronologisches Protokoll als Markdown unter {logbuch}/Z Session Logs/. Unterstützt Hooks (PreCompact, SessionEnd) und manuellen Zuruf. Pfade kommen aus skill.config.yaml, Trigger-Wörter aus manifest.json."
tags:
  - skill
  - session-log
  - chronologie
scope: vault
bundle_skill: true
default_active:
  allgemein: true
  karpathy: true
depends_on: []
conflicts_with: []
created: 2026-05-12
updated: 2026-05-13
---

# session-log

Erzeugt für jede Claude-Code-Session ein Raw-Log im Markdown-Format. Der Skill ist das erste Glied in einer möglichen Verarbeitungskette: andere Skills (Reflector, Curator, Auditor) können die Logs später destillieren und in höhere Wissensschichten überführen. Im Bundle ist nur der Log-Skill selbst enthalten.

## Wann einsetzen

- **Automatisch durch den `PreCompact`-Hook:** schreibt einen Zwischen-Log vor dem Auto-Compact.
- **Automatisch durch den `SessionEnd`-Hook:** schreibt den finalen Log beim sauberen Session-Ende.
- **Manuell auf Zuruf:** der User signalisiert das Session-Ende (z.B. "Schluss für heute", "log die Session"). Claude erkennt den Intent und ruft `write_log.py` auf oder schreibt direkt mit dem Write-Tool.

Trigger-Wörter sind über `manifest.json` konfigurierbar. Default ist Deutsch.

## Ausgabe-Pfad

```
{logbuch}/Z Session Logs/{YYYY-MM}/{DD}/session-{YYYY-MM-DD}-{HHMM}-<topic-slug>.md
```

`{logbuch}` wird durch das `vault_layout` in `bundle.json` aufgelöst (Default: `05 Logbuch`). Zeit-Platzhalter löst der Skill selbst zur Laufzeit auf. Der Pfad kann in `skill.config.yaml` unter `paths.output_dir` überschrieben werden.

## Skript aufrufen

```bash
PYTHONUTF8=1 python .skills/session-log/write_log.py --trigger pre-compact
PYTHONUTF8=1 python .skills/session-log/write_log.py --trigger session-end
PYTHONUTF8=1 python .skills/session-log/write_log.py --trigger session-end --stdin-file payload.json
```

Der Hook übergibt einen JSON-Payload über stdin. Bei manuellem Aufruf kann stdin leer bleiben — der Skill schreibt trotzdem eine Datei mit Fallback-Marker.

Optionen:

- `--trigger {pre-compact,session-end}` (Pflicht): bestimmt `status` im Frontmatter (`autocompact` oder `complete`).
- `--vault PATH`: Vault-Root (Default: CWD).
- `--output-dir PATH`: überschreibt das Zielverzeichnis (höchste Priorität, für Tests).
- `--stdin-file PATH`: liest Payload aus Datei statt von stdin.

## Frontmatter der erzeugten Logs

```yaml
---
type: session-log
description: "Ein-Satz-Zusammenfassung"
tags:
  - session-log
  - raw-layer
  # plus extra_tags aus skill.config.yaml
created: YYYY-MM-DD
updated: YYYY-MM-DD
trigger: pre-compact | session-end
status: autocompact | complete
processed: false
session-id: <aus Hook-Payload, sonst leer>
message-count: <Anzahl Nachrichten, sonst 0>
---
```

`processed: false` ist das Signal für nachgelagerte Verarbeitungs-Skills. Default-Tags sind `[session-log, raw-layer]` — kein vault-spezifischer Tag im Bundle. Über `frontmatter.extra_tags` in der Config erweiterbar.

### Optionaler ISO-9001-Markersatz

Wenn `features.iso9001_marker: true` in `skill.config.yaml` gesetzt ist, schreibt der Skill zusätzliche Felder ins Frontmatter:

```yaml
projekt: ""
dauer_minuten: 0
angefasste_dateien_anzahl: 0
neue_funktionale_dateien_anzahl: 0
nc_count: 0
kvp_count: 0
```

Default im Bundle: `false`. Diese Felder sind für Qualitätssicherungs-Workflows gedacht und werden vom Skill auf Basis des Transcripts befüllt, soweit ableitbar.

## Body-Schema

Drei feste Abschnitte:

```markdown
## Topic
<aus erster User-Message abgeleitete Kurzbeschreibung>

## Verlauf
<Liste der letzten bis zu 20 Exchanges als Bullets mit Rolle und Kurzfassung>

## Artefakte
<Liste aller Write-/Edit-berührten Dateipfade>
```

Bei leerem stdin stehen alle drei Sektionen mit dem Marker `Kein Session-Inhalt verfuegbar`.

Die Kennzahlen leben ausschließlich im Frontmatter (nicht im Body), wenn `iso9001_marker` aktiv ist — siehe Abschnitt „Frontmatter-Schema". Ein optionaler Spiegelungs-Block im Body lässt sich vault-seitig nachrüsten, ist aber nicht Teil des Bundle-Skills.

## Optionales Tagesabschluss-Submodul

Der Bundle-Skill kennt kein Tagesabschluss-Feature. Eine vault-spezifische Erweiterung kann unter `_optional/tagesabschluss.py` ergänzt werden:

1. `_optional/tagesabschluss.example.py` nach `_optional/tagesabschluss.py` kopieren.
2. `features.tagesabschluss_modus: true` in `skill.config.yaml` setzen.
3. Eigene Logik in `run()` implementieren.

Fehlt `_optional/tagesabschluss.py` obwohl das Feature aktiv ist, meldet der Skill es auf stderr und fährt mit dem normalen Log fort. Kein Crash, kein blockierter Hook.

## Konfiguration

Vollständige Konfigurations-Vorlage: `skill.config.example.yaml`. Beispiel für minimale Anpassung:

```yaml
paths:
  output_dir: "{logbuch}/Meine Logs/{YYYY-MM}/{DD}"
frontmatter:
  extra_tags: [mein-vault]
features:
  iso9001_marker: true
locale: en
```

## Locale

Der Skill unterstützt `de` (Default) und `en`. Das Locale steuert die Stopword-Liste und die Umlaut-Normalisierung beim Slug-Building. Weitere Locales können unter `locale_data/` ergänzt werden.

## Karpathy-Compiler-Kette (Beispiel-Workflow)

Die Logs sind Rohmaterial. Ein optionaler Workflow kann sie in höhere Schichten überführen:

```
raw (session-log) → wiki (Reflector) → index (Curator) → runtime (Auditor)
```

Alle fünf Glieder dieser Kette sind seit v0.9.0 Bundle-Skills im Karpathy-Profil. Die Kette ist komplett: session-log (raw), reflector (wiki), curator (index), vault-gap-analysis (signal) und auditor (runtime) arbeiten zusammen.

## Regeln

- **Nie in andere Vault-Bereiche schreiben.** Nur in das konfigurierte Output-Verzeichnis.
- **Nie halluzinieren.** Unbekannte Felder bleiben leer oder tragen den Fallback-Wert.
- **Fehler nicht verschlucken.** Fehler erscheinen als HTML-Kommentar im Body, der Skill beendet immer mit Exit-Code 0.
- **Daily Notes nicht anfassen.** Der Skill schreibt nur in sein Zielverzeichnis.

## Evals

```bash
PYTHONUTF8=1 python .skills/session-log/run_evals.py --verbose
```

Erwartet 10/10 Assertions grün. Die Eval-Datei liegt unter `eval/session-log.eval.json`.

## Verknüpfungen

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