---
name: skill-activate
description: "Aktiviert einen Opt-in Bundle-Skill für das installierte Profil: setzt default_active.<profil> im manifest.json und lässt sync.py --profile die Aktivierungs-Effekte schreiben (active_skills in sync-state.json für die Trigger-Ankündigung, MCP-Config-Aggregation). Die Vault-Spiegel enthalten immer alle vault-scope-Skills — Aktivierung steuert Ankündigung und MCP, nicht die Spiegelung."
---

# /skill-activate — Bundle-Skill aktivieren

Tool-neutraler Workflow für die Aktivierung eines Opt-in Bundle-Skills im installierten Profil.

## Was Aktivierung bewirkt (Code-Realität)

- `sync.py` nimmt den Skill in `.docs/sync-state.json::active_skills` auf — erst damit kündigt der `trigger_enforcer`-Hook seine Trigger-Wörter an.
- Die MCP-Konfigurationen des Skills werden aggregiert (`aggregate_mcp` filtert nach aktiven Skills).
- **Nicht** die Spiegelung: `.claude/skills/` und `.agents/skills/` enthalten immer alle Skills mit `scope: vault` — aktiv wie inaktiv. Die Spiegel-Verzeichnisse sagen nichts über den Aktivierungs-Status aus.

## Wann nutzen

Wenn ein Bundle-Skill (z.B. `migration`, `getmyinvoices`, `projekt-mentor`) im installierten Profil `default_active.<profil>: false` hat (oder dort gar nicht gelistet ist) und du ihn aktivieren willst.

## Workflow

1. **Profil bestimmen.** Lies `active_profile` aus `.docs/sync-state.json`. Fehlt die Datei (Vault wurde noch nie gesynct): frage den User nach dem Profil aus `manifest.json::theme_profiles`. Dieses Profil ist `<profil>` für alle folgenden Schritte — **niemals** stillschweigend `allgemein` annehmen.

2. **Skill-Namen erfragen** oder aus Kontext ableiten. Akzeptierte Namen: alle Einträge unter `.skills/<name>/SKILL.md`. Mit `<name>` ist der Verzeichnisname gemeint, nicht der Anzeigename. Bei Unsicherheit `ls .skills/` ausführen.

3. **Vorprüfung.**
   - `.skills/<name>/SKILL.md` existiert.
   - `.skills/manifest.json` enthält den Skill unter `skills.<name>`. Steht `default_active.<profil>` bereits auf `true`: Hinweis ausgeben „Skill ist bereits aktiv für Profil '<profil>'", ohne Änderung.
   - Skills mit `scope: anwender` (z.B. `elevenlabs-api`, `nano-banana-image`, `openai-image-gen`) landen nie im Vault-Spiegel — sie gehören auf User-Ebene nach `~/.claude/skills/` (siehe INSTALL.md Phase 9). Aktivierung im Manifest sorgt trotzdem für die Trigger-Ankündigung; weise den User auf die nötige User-Ebenen-Installation hin.
   - Bei `getmyinvoices`: zusätzlicher Hinweis auf `uv sync --extra gmi` (installiert die `requests`-Abhängigkeit).

4. **Manifest-Edit anbieten.** Dem User den geplanten Edit zeigen:

   ```json
   "<name>": {
     ...
     "default_active": {
       "<profil>": true   // war: false oder fehlte
     },
     ...
   }
   ```

   Erst nach expliziter Bestätigung den Edit durchführen. JSON-Schreibweise erhalten (Einrückung, Reihenfolge der Felder).

5. **`uv run .skills/sync.py --profile <profil>` ausführen.** Das `--profile`-Argument ist Pflicht: ohne dieses fällt `sync.py` still auf das alphabetisch erste Profil (`allgemein`) zurück und überschreibt `sync-state.json` mit der falschen Profil-Auflösung. Der Sync-Lauf liest das aktualisierte Manifest, löst Abhängigkeiten via `resolve_active_skills` auf, spiegelt vault-scope-Skills (wie immer alle) und schreibt `sync-state.json` mit `active_profile` und der neuen `active_skills`-Liste.

   - Wenn `sync.py` mit Exit ≠ 0 endet (z.B. zirkuläre Dependency, manipulierter Spiegel → Exit 2): den Manifest-Edit zurückrollen und den Fehler dem User zeigen.

6. **Bestätigen.** Drei Sätze:
   - „<name> ist jetzt für Profil '<profil>' aktiv."
   - „Trigger-Ankündigung greift ab dem nächsten Session-Start (sync-state.json aktualisiert)."
   - Wenn der Skill externe Setup-Schritte braucht (API-Key, Extra-Dependency, User-Ebenen-Installation bei anwender-Scope): explizit darauf hinweisen.

## Deaktivierung

Spiegelbildlich: `default_active.<profil>` auf `false` setzen, `uv run .skills/sync.py --profile <profil>` laufen lassen. Der Skill verschwindet aus `active_skills` (keine Trigger-Ankündigung mehr) und aus der MCP-Aggregation. **Der Spiegel unter `.claude/skills/<name>/` bleibt liegen** — `sync.py` löscht keine Spiegel-Verzeichnisse; das ist erwartetes Verhalten, kein Drift. Kein eigener Slash-Command für Deaktivierung — `/skill-activate <name>` mit anschließendem Hinweis „bereits aktiv, deaktivieren?" kann den umgekehrten Edit anbieten.

## Notfall-Workaround (ohne diesen Command)

Falls der Slash-Command nicht greift (z.B. in einer Codex-Session ohne `.commands/`-Lookup): direkter manueller Pfad:

```bash
# 1. Profil nachschlagen
cat .docs/sync-state.json   # Feld active_profile
# 2. manifest.json editieren: default_active.<profil> auf true setzen
# 3. Sync-Lauf mit Profil
uv run .skills/sync.py --profile <profil>
```

Das ist funktional identisch.
