Vom Tippen zum Super-Assistenten
Wir haben bereits gelernt, Claude Code für Projekte zu nutzen, und du hast vielleicht die Kraft der KI-Programmierung erlebt. Aber hast du ein Problem bemerkt:
Jedes Mal, wenn du etwas Ähnliches tust, musst du die Anforderungen von neuem beschreiben.
Zum Beispiel möchtest du, dass die KI dir hilft:
- Git-Commit-Nachrichten zu schreiben
- Code zu überprüfen
- Projektdokumentation zu generieren
- Dateien zu synchronisieren
Diese Aufgaben erledigst du vielleicht mehrmals am Tag, aber jedes Mal musst du einen langen Absatz tippen, um der KI zu sagen, was sie tun soll. Das ist anstrengend!
Es ist, als ob du jedes Mal, wenn du Essen bestellst, dem Restaurant sagen müsstest:
„Ich möchte eine Schüssel Rindfleischnudeln, kein Koriander, extra scharf, die Nudeln sollen bissfest sein, weniger Brühe …“
Gibt es eine Möglichkeit, diese häufigen Vorgänge in Ein-Klick-Befehle zu verwandeln?
Ja, genau darum geht es heute: Skill.
Was ist Skill?
Erklärung in einem Satz
Skill = KI-Kurzbefehl
Genau wie die Kurzbefehle-App auf deinem Handy kapselt Skill komplexe Vorgänge in einen einfachen Befehl.
Offizielle Definition
Skill bezeichnet ein wiederverwendbares „Fähigkeitsmodul“, das Werkzeuge/APIs/Skripte und Prompts in eine standardisierte Schnittstelle kapselt, sodass die KI sie bei Bedarf aufrufen kann, um bestimmte Aufgaben zu erledigen.
Es betont:
- Klare Ein- und Ausgabe
- Abhängigkeits- und Versionsverwaltung
- Testbar und aktualisierbar
- Verwandlung einer allgemeinen KI in einen geschäftsorientierten professionellen Assistenten
Intuitives Verständnis
Ohne Skill:
You: Please review this code and check the following:
1. Are there any performance issues?
2. Are there any security vulnerabilities?
3. Does the code style follow the conventions?
4. Is there any duplicate code?
5. Are variable names clear?
6. Are comments complete?
……(continue describing for 10 more lines)
Mit Skill:
You: /review
Die KI überprüft den Code automatisch nach voreingestellten Standards und erstellt einen detaillierten Bericht.
Siehst du den Unterschied? Von Hunderten von Wörtern zu einem Befehl – das ist die Kraft von Skill.
Unterschiede zwischen Skill, Prompt und MCP
Viele fragen: Was sind die Unterschiede zwischen Skill, Prompt und MCP?
Konzeptvergleich
| Aspekt | Prompt | Skill | MCP |
|---|---|---|---|
| Wesen | Textanweisung | Gekapseltes Fähigkeitsmodul | Protokoll zur Verbindung externer Werkzeuge |
| Wiederverwendbarkeit | Niedrig, muss jedes Mal neu eingegeben werden | Hoch, einmal definieren und wiederverwenden | Hoch, einmal konfigurieren und dauerhaft nutzen |
| Komplexität | Einfach | Mittel | Komplex |
| Fähigkeitsumfang | Nur Textverarbeitung | Text + einfache Skripte | Text + Interaktion mit externen Systemen |
| Lernkurve | Niedrigste | Niedrig | Relativ hoch |
Analogien
Prompt = Mündliche Anweisung
- Du musst der KI jedes Mal mündlich sagen, was zu tun ist
- Geeignet für einmalige, Ad-hoc-Aufgaben
- Zum Beispiel: „Übersetze diesen Absatz“
Skill = Arbeitsablauf
- Häufige Anweisungen in einen standardisierten Arbeitsablauf festschreiben
- Geeignet für wiederholte, standardisierte Aufgaben
- Zum Beispiel:
/commiterstellt automatisch Git-Commit-Nachrichten
MCP = Externes System
- Lässt die KI mit externen Werkzeugen und Datenquellen verbinden
- Geeignet für Aufgaben, die auf externe Systeme zugreifen müssen
- Zum Beispiel: Verbindung zu Obsidian zum Lesen/Schreiben von Notizen, Verbindung zur Datenbank zum Abfragen von Daten
Beziehung zwischen den drei
Prompt → The most basic interaction method
↓
Skill → Encapsulates prompt + simple logic
↓
MCP → Skill + external system capabilities
Bildlich gesprochen:
- Prompt = Du kochst selbst
- Skill = Fertiggericht in der Mikrowelle aufwärmen
- MCP = Essenslieferplattform bestellen
Wann verwendet man was?
Verwende Prompt, wenn:
- Aufgabe ist einfach, einmalig
- Anforderungen sind flexibel und änderbar
- Keine Wiederverwendung nötig
Verwende Skill, wenn:
- Aufgabe ist stark wiederholend
- Hat einen standardisierten Arbeitsablauf
- Effizienz steigern möchtest
Verwende MCP, wenn:
- Zugriff auf externe Daten benötigst (Datenbank, API, Dateisystem usw.)
- Interaktion mit anderer Software benötigst (Obsidian, Browser usw.)
- Echtzeitinformationen benötigst
Praktischer Fallvergleich:
Szenario 1: Einen Absatz übersetzen
- Verwende Prompt: „Übersetze diesen Absatz“ (am einfachsten)
Szenario 2: Täglich viele Dokumente übersetzen
- Verwende Skill:
/translate(standardisierter Übersetzungsablauf)
Szenario 3: Obsidian-Notizen automatisch übersetzen und speichern
- Verwende MCP: Verbindung zu Obsidian, automatisch lesen, übersetzen, speichern (am leistungsstärksten)
Grundlegende Nutzung von Skill
Wie sehe ich vorhandene Skills?
In Claude Code oder Codex gib ein:
/skill
Es listet alle verfügbaren Skills auf.

Wie verwende ich Skill?
Methode 1: Direkte Ausführung
Gib /skill ein, dann verwende Tab, um den gewünschten Skill auszuwählen, und drücke Enter zur Ausführung.

Methode 2: Mit Parametern ausführen
Nach Auswahl eines Skills tippe deine spezifische Anfrage weiter:
/translate translate the comments in this code to English
Häufige integrierte Skills
Die meisten KI-Programmierwerkzeuge enthalten einige häufig verwendete integrierte Skills:
| Skill | Funktion | Beispiel |
|---|---|---|
/commit |
Automatisch Git-Commit-Nachricht erstellen | /commit |
/review |
Codequalität überprüfen | /review |
/fix |
Codefehler beheben | /fix |
/test |
Testfälle generieren | /test |
/doc |
Dokumentation generieren | /doc |
/refactor |
Code umstrukturieren | /refactor |
Diese integrierten Skills können bereits 80% der täglichen Anforderungen lösen.
Eigene Skills erstellen
Wenn die integrierten Skills nicht ausreichen, kannst du deinen eigenen Skill erstellen.
Zwei Erstellungsmethoden
Methode 1: Von der KI erstellen lassen (empfohlen)
Codex enthält einen Skill zum Erstellen von Skills (klingt verwirrend, ist aber leistungsstark).
Schritte:
- Gib
/skillein - Finde die Option zum „Skill erstellen“
- Sage der KI nach der Auswahl, welchen Skill du möchtest
Beispiel:
/create-skill
I want a translation Skill with the following features:
1. Automatically detect Chinese comments in code
2. Translate them into English
3. Keep the code format unchanged

Die KI erstellt automatisch die Skill-Datei und platziert sie am richtigen Ort.
Methode 2: Manuelle Erstellung
Wenn du die Struktur von Skill tiefer verstehen möchtest, kannst du ihn manuell erstellen.
Skill-Dateistruktur:
Jeder Skill ist ein Ordner, der eine SKILL.md-Datei enthalten muss:
my-skill/
├── SKILL.md # Skill description and configuration
└── scripts/ # Optional: helper scripts
└── helper.py
Grundformat von SKILL.md:
---
name: Skill name
description: Skill description
---
# Detailed description
Write detailed usage instructions and implementation logic here.
## Parameters
- `--param1`: Description of parameter 1
- `--param2`: Description of parameter 2
## Example
Example usage code
Der Abschnitt „Praktischer Fall“ später in diesem Kapitel wird detailliert beschreiben, wie man einen vollständigen Skill erstellt.
Skills von anderen installieren
Es gibt viele fertige Skills auf GitHub, die du direkt herunterladen und verwenden kannst.
Den Skill-Ordner finden
Codex Skill-Speicherort:
- Mac/Linux:
~/.codex/skills/ - Windows:
%USERPROFILE%\.codex\skills\
Claude Code Skill-Speicherort:
- Mac/Linux:
~/.claude/skills/ - Windows:
%USERPROFILE%\.claude\skills\
Installationsschritte
- Öffne den Skill-Ordner
Wenn der Ordner nicht existiert, kannst du ihn manuell erstellen:
# Mac/Linux
mkdir -p ~/.codex/skills
# Windows (PowerShell)
New-Item -Path "$env:USERPROFILE\.codex\skills" -ItemType Directory -Force

- Lade die Skill-Datei herunter
Lade den Skill-Ordner von GitHub oder anderen Quellen herunter.
- In das Skill-Verzeichnis kopieren
Kopiere den gesamten Skill-Ordner in das entsprechende Skills-Verzeichnis.

- Starte das Werkzeug neu
Hinweis: Codex unterstützt derzeit kein Hot Reload; du musst das Programm beenden und neu starten, um den neuen Skill zu sehen. Claude Code erkennt ihn normalerweise automatisch.
Installation überprüfen
Nach dem Neustart gib /skill ein, um die Liste anzuzeigen und zu bestätigen, dass der neue Skill erschienen ist.
Praktischer Fall: Erstellen eines Sync-Skills
Problemszenario
Wenn du sowohl Codex als auch Claude Code verwendest (viele tun das), wirst du auf ein Problem stoßen:
Skills für die beiden Werkzeuge müssen separat verwaltet werden, was sehr unpraktisch ist.
- Codex Skills sind in
~/.codex/skills/ - Claude Code Skills sind in
~/.claude/skills/
Jedes Mal, wenn du einen nützlichen Skill in Codex erstellst, musst du ihn manuell in Claudes Ordner kopieren. Zu mühsam!
An diesem Punkt können wir einen Skill erstellen, der die Inhalte der beiden Ordner automatisch synchronisiert – einen Skill zur Verwaltung von Skills.
Dieser Skill wird:
- Die Unterschiede zwischen den beiden Skill-Ordnern prüfen
- Melden, welche Skills synchronisiert werden müssen
- Nach deiner Bestätigung automatisch synchronisieren
Wir müssen der KI nur die Anforderungen mitteilen.

Im Folgenden siehst du, was die KI für dich tut. Beachte, dass diese Schritte alle automatisch ablaufen; du musst nichts tun! Es wird hier nur zur Veranschaulichung gezeigt.
Schritt 1: Skill-Ordner erstellen
Erstelle im Skills-Verzeichnis von Codex oder Claude Code einen neuen Ordner:
mkdir ~/.codex/skills/codex-claude-skill-sync
Schritt 2: SKILL.md erstellen
Erstelle eine SKILL.md-Datei im Ordner:
name: codex-claude-skill-sync
description: Sync Codex and Claude Skills
---
# Codex/Claude Skill Sync
## Overview
Used to check and sync the Skill directories of Codex and Claude, keeping both sides consistent. By default, only reports differences; executes sync after user confirmation.
## Workflow
1. Run difference report (no modification):
`python3 scripts/sync_skills.py`
2. Report differences to the user in English and wait for explicit consent before proceeding.
3. After consent, execute sync:
`python3 scripts/sync_skills.py --apply`
4. When encountering a conflict (same modification time but different content), pause and ask the user which side to keep.
## Rules
- Default directories:
- Codex: `/Users/yourusername/.codex/skills`
- Claude: `/Users/yourusername/.claude/skills`
- Only process top-level directories that contain `SKILL.md`, skip hidden directories and `.system`
- Determine which side is newer based on the latest modification time in the directory
- When syncing, delete the target Skill directory first, then copy the entire source directory
## Parameters
- `--apply` Execute sync (default is report only)
- `--codex <path>` Override Codex directory
- `--claude <path>` Override Claude directory
- `--prefer codex|claude` When modification time is the same but content differs, use the specified side to overwrite (requires explicit user authorization)
Wichtig: Ändere die obigen Pfade in deine tatsächlichen Pfade!
Schritt 3: Skriptdatei erstellen
Erstelle ein scripts-Verzeichnis unter dem Skill-Ordner, dann erstelle sync_skills.py:
mkdir ~/.codex/skills/codex-claude-skill-sync/scripts

Vollständiger Code für sync_skills.py:
#!/usr/bin/env python3
"""
Compare and sync skill folders between Codex and Claude.
Default behavior is report-only. Use --apply to perform sync.
"""
from __future__ import annotations
import argparse
import hashlib
import os
from datetime import datetime
from pathlib import Path
import shutil
import sys
DEFAULT_CODEX = Path("/Users/yourusername/.codex/skills")
DEFAULT_CLAUDE = Path("/Users/yourusername/.claude/skills")
IGNORE_DIR_NAMES = {".git", ".idea", ".vscode", "__pycache__", ".pytest_cache", ".mypy_cache"}
IGNORE_FILE_NAMES = {".DS_Store"}
TIME_EPSILON = 1.0
def format_time(timestamp: float) -> str:
return datetime.fromtimestamp(timestamp).strftime("%Y-%m-%d %H:%M:%S")
def list_skill_dirs(root: Path) -> tuple[dict[str, Path], list[str]]:
if not root.exists():
raise FileNotFoundError(f"Root path does not exist: {root}")
if not root.is_dir():
raise NotADirectoryError(f"Root path is not a directory: {root}")
skills: dict[str, Path] = {}
ignored: list[str] = []
for entry in sorted(root.iterdir(), key=lambda p: p.name):
if not entry.is_dir():
continue
if entry.name.startswith("."):
ignored.append(entry.name)
continue
if not (entry / "SKILL.md").is_file():
continue
skills[entry.name] = entry
return skills, ignored
def dir_state(path: Path) -> tuple[str, float, int]:
hasher = hashlib.sha256()
latest_mtime = path.stat().st_mtime
file_count = 0
for root, dirs, files in os.walk(path):
dirs[:] = [d for d in dirs if d not in IGNORE_DIR_NAMES]
dirs.sort()
files = sorted(f for f in files if f not in IGNORE_FILE_NAMES)
rel_dir = os.path.relpath(root, path)
if rel_dir == ".":
rel_dir = ""
hasher.update(f"D|{rel_dir}\n".encode())
try:
latest_mtime = max(latest_mtime, os.stat(root).st_mtime)
except FileNotFoundError:
continue
for name in files:
file_path = Path(root) / name
rel_path = os.path.relpath(file_path, path)
if file_path.is_symlink():
try:
target = os.readlink(file_path)
except OSError:
target = ""
hasher.update(f"L|{rel_path}\n{target}\n".encode())
try:
latest_mtime = max(latest_mtime, file_path.lstat().st_mtime)
except FileNotFoundError:
pass
continue
if not file_path.is_file():
continue
stat = file_path.stat()
latest_mtime = max(latest_mtime, stat.st_mtime)
file_count += 1
hasher.update(f"F|{rel_path}\n{stat.st_size}\n".encode())
with open(file_path, "rb") as handle:
for chunk in iter(lambda: handle.read(1024 * 1024), b""):
hasher.update(chunk)
return hasher.hexdigest(), latest_mtime, file_count
def build_plan(
codex_skills: dict[str, Path],
claude_skills: dict[str, Path],
codex_root: Path,
claude_root: Path,
prefer: str | None,
) -> tuple[list[dict], list[str], list[dict]]:
actions: list[dict] = []
identical: list[str] = []
conflicts: list[dict] = []
all_names = sorted(set(codex_skills) | set(claude_skills))
for name in all_names:
codex_path = codex_skills.get(name)
claude_path = claude_skills.get(name)
if codex_path and not claude_path:
actions.append(
{
"name": name,
"src": codex_path,
"dst": claude_root / name,
"reason": "only in codex",
"direction": "codex -> claude",
}
)
continue
if claude_path and not codex_path:
actions.append(
{
"name": name,
"src": claude_path,
"dst": codex_root / name,
"reason": "only in claude",
"direction": "claude -> codex",
}
)
continue
if not codex_path or not claude_path:
continue
codex_hash, codex_mtime, _ = dir_state(codex_path)
claude_hash, claude_mtime, _ = dir_state(claude_path)
if codex_hash == claude_hash:
identical.append(name)
continue
time_delta = codex_mtime - claude_mtime
if abs(time_delta) <= TIME_EPSILON:
if prefer == "codex":
actions.append(
{
"name": name,
"src": codex_path,
"dst": claude_path,
"reason": "same mtime, prefer codex",
"direction": "codex -> claude",
"codex_mtime": codex_mtime,
"claude_mtime": claude_mtime,
}
)
elif prefer == "claude":
actions.append(
{
"name": name,
"src": claude_path,
"dst": codex_path,
"reason": "same mtime, prefer claude",
"direction": "claude -> codex",
"codex_mtime": codex_mtime,
"claude_mtime": claude_mtime,
}
)
else:
conflicts.append(
{
"name": name,
"codex_mtime": codex_mtime,
"claude_mtime": claude_mtime,
}
)
continue
if time_delta > 0:
actions.append(
{
"name": name,
"src": codex_path,
"dst": claude_path,
"reason": "codex newer",
"direction": "codex -> claude",
"codex_mtime": codex_mtime,
"claude_mtime": claude_mtime,
}
)
else:
actions.append(
{
"name": name,
"src": claude_path,
"dst": codex_path,
"reason": "claude newer",
"direction": "claude -> codex",
"codex_mtime": codex_mtime,
"claude_mtime": claude_mtime,
}
)
return actions, identical, conflicts
def print_report(
actions: list[dict],
identical: list[str],
conflicts: list[dict],
codex_root: Path,
claude_root: Path,
apply: bool,
ignored_codex: list[str],
ignored_claude: list[str],
) -> None:
print("Skill sync report")
print(f"Codex: {codex_root}")
print(f"Claude: {claude_root}")
if ignored_codex:
print(f"Ignored in Codex: {', '.join(sorted(ignored_codex))}")
if ignored_claude:
print(f"Ignored in Claude: {', '.join(sorted(ignored_claude))}")
print("\nPlanned sync actions:")
if not actions:
print("- none")
else:
for item in actions:
codex_mtime = item.get("codex_mtime")
claude_mtime = item.get("claude_mtime")
details = []
if codex_mtime is not None:
details.append(f"codex mtime: {format_time(codex_mtime)}")
if claude_mtime is not None:
details.append(f"claude mtime: {format_time(claude_mtime)}")
detail_text = f" ({', '.join(details)})" if details else ""
print(f"- {item['name']}: {item['direction']} [{item['reason']}]" + detail_text)
print("\nConflicts:")
if not conflicts:
print("- none")
else:
for item in conflicts:
print(
f"- {item['name']}: same mtime but different content "
f"(codex {format_time(item['codex_mtime'])}, claude {format_time(item['claude_mtime'])})"
)
print(f"\nUp-to-date skills: {len(identical)}")
if not apply:
print("\nDry run only. Re-run with --apply to sync.")
def apply_actions(actions: list[dict]) -> None:
for item in actions:
src = Path(item["src"])
dst = Path(item["dst"])
if dst.exists():
if dst.is_dir():
shutil.rmtree(dst)
else:
dst.unlink()
shutil.copytree(src, dst, symlinks=True)
def parse_args() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="Sync Codex and Claude skill folders")
parser.add_argument("--codex", type=Path, default=DEFAULT_CODEX, help="Codex skill root")
parser.add_argument("--claude", type=Path, default=DEFAULT_CLAUDE, help="Claude skill root")
parser.add_argument("--apply", action="store_true", help="Apply sync actions")
parser.add_argument(
"--prefer",
choices=["codex", "claude"],
help="Break ties when mtimes are equal",
)
return parser.parse_args()
def main() -> int:
args = parse_args()
try:
codex_skills, ignored_codex = list_skill_dirs(args.codex)
claude_skills, ignored_claude = list_skill_dirs(args.claude)
except (FileNotFoundError, NotADirectoryError) as exc:
print(str(exc), file=sys.stderr)
return 2
actions, identical, conflicts = build_plan(
codex_skills,
claude_skills,
args.codex,
args.claude,
args.prefer,
)
print_report(
actions,
identical,
conflicts,
args.codex,
args.claude,
args.apply,
ignored_codex,
ignored_claude,
)
if args.apply and actions:
apply_actions(actions)
print("\nSync complete.")
elif args.apply and not actions:
print("\nNo changes to apply.")
if conflicts and not args.prefer:
return 1
return 0
if __name__ == "__main__":
raise SystemExit(main())
Wichtig: Denke daran, die Pfade am Anfang zu ändern:
DEFAULT_CODEX = Path("/Users/yourusername/.codex/skills")
DEFAULT_CLAUDE = Path("/Users/yourusername/.claude/skills")
Ändere sie in deine tatsächlichen Pfade.
Den Sync-Skill verwenden
Schritt 1: Unterschiede anzeigen
In Claude Code oder Codex gib ein:
/codex-claude-skill-sync
Die KI führt das Skript automatisch aus und meldet die Unterschiede zwischen den beiden Skill-Ordnern.
Schritt 2: Synchronisation bestätigen
Wenn du mit der Synchronisation einverstanden bist, sage der KI:
Agreed, please execute sync.
Die KI führt python3 scripts/sync_skills.py --apply aus, um die Synchronisation abzuschließen.
Fertig! Von nun an, wenn du auf einer Seite einen Skill erstellst oder änderst, führe einfach diesen Sync-Skill einmal aus, und beide Seiten bleiben konsistent.
Fortgeschrittene Skill-Tipps
Tipp 1: Skills kombinieren
Mehrere Skills können nacheinander verwendet werden:
/review then /fix to fix the issues found
Die KI überprüft zuerst den Code und behebt dann automatisch basierend auf den Überprüfungsergebnissen.
Tipp 2: Skill-Parameter anpassen
Viele Skills unterstützen Parameter:
/commit --type feat --scope api
Dies erzeugt eine Commit-Nachricht in einem bestimmten Format.
Tipp 3: Skill-Vorlagen
Du kannst Skill-Vorlagen erstellen, um schnell neue Skills zu generieren:
- Kopiere einen vorhandenen Skill-Ordner
- Ändere SKILL.md
- Speichern
Tipp 4: Skills mit dem Team teilen
Lege den Skill-Ordner in ein Git-Repository, damit Teammitglieder teilen können:
git clone https://github.com/your-team/skills.git ~/.codex/skills/team-skills
Zusammenfassung
Was wir heute gelernt haben:
- Was ist Skill: Ein wiederverwendbares Fähigkeitsmodul, das komplexe Vorgänge in einfache Befehle verwandelt
- Skill vs Prompt vs MCP: Unterschiede und Anwendungsszenarien
- Wie man Skill verwendet:
/skillzum Anzeigen und Aufrufen - Wie man Skill erstellt: Von der KI helfen lassen oder manuell erstellen
- Wie man Skill installiert: In den entsprechenden Ordner kopieren
- Praktischer Fall: Erstellen eines Sync-Skills zur Lösung der Multi-Tool-Verwaltung
Wichtige Punkte:
- Skill hebt die KI von einem „Schreibkraft“ zu einem „professionellen Assistenten“
- Häufige Vorgänge sollten in Skills gekapselt werden
- Ein guter Skill kann 90% der Zeit sparen