Zum Hauptinhalt springen
Systemaufforderungen definieren Claudes Verhalten, Fähigkeiten und Antwortstil. Beginnen Sie mit der claude_code-Voreinstellung für CLI- oder IDE-ähnliche Codierungswerkzeuge, bei denen ein Mensch die Arbeit beobachtet und steuert. Schreiben Sie Ihre eigene Aufforderung für Agenten mit einer anderen Oberfläche, Identität oder einem anderen Berechtigungsmodell. Diese Seite behandelt:

Wie Systemaufforderungen funktionieren

Eine Systemaufforderung ist der anfängliche Anweisungssatz, der definiert, wie sich Claude während eines Gesprächs verhält. Das Agent SDK hat drei Ausgangspunkte dafür:
  • Minimale Standardeinstellung: Wenn Sie systemPrompt in TypeScript oder system_prompt in Python nicht festlegen, verwendet das SDK eine minimale Aufforderung, die Werkzeugaufrufe abdeckt, aber Claude Code’s Codierungsrichtlinien, Antwortstil und Projektkontext auslässt. Dies unterscheidet sich von claude -p, das standardmäßig die vollständige Claude Code-Aufforderung verwendet. Wenn Sie von der CLI migrieren und ein übereinstimmendes Verhalten wünschen, legen Sie die claude_code-Voreinstellung fest.
  • claude_code-Voreinstellung: die vollständige Systemaufforderung, die die Claude Code CLI verwendet, mit Werkzeugnutzungsanweisungen, Code-Stil- und Formatierungsrichtlinien, Antworttone und Ausführlichkeitsregeln, Sicherheits- und Sicherheitsanweisungen sowie Kontext zum Arbeitsverzeichnis und zur Umgebung. Legen Sie systemPrompt: { type: "preset", preset: "claude_code" } in TypeScript oder system_prompt={"type": "preset", "preset": "claude_code"} in Python fest, optional mit append, um Ihre eigenen Anweisungen am Ende hinzuzufügen.
  • Benutzerdefinierte Zeichenkette: eine Aufforderung, die Sie selbst schreiben. Das SDK sendet nur das, was Sie bereitstellen.

Entscheiden Sie sich für einen Ausgangspunkt

Der entscheidende Faktor ist, wie sehr Ihr Agent Claude Code ähnelt: ein Codierungs-Agent, der in einem Repository arbeitet, mit einem Menschen, der die Streaming-Ausgabe beobachtet und die Arbeit lenkt. Je weiter Ihr Produkt davon entfernt ist, desto mehr werden Sie Ihre eigene Aufforderung schreiben wollen.
Sie bauenVerwenden SieWas Sie erhalten
Ein CLI- oder IDE-ähnliches Codierungswerkzeug, bei dem ein Mensch beobachtet und lenkt, und Claude Code’s Standardeinstellungen sind das, was Sie wünschenclaude_code-VoreinstellungDie vollständige Claude Code-Aufforderung: Werkzeuganleitung, Sicherheitsregeln, terminalfreundliche Antworten, Bewusstsein für Repository-Konventionen
Das gleiche Werkzeug plus produktspezifische Regeln wie Codierungsstandards, Ausgabeformat oder Domänenkontextclaude_code-Voreinstellung mit appendAlles oben Genannte, mit Ihren Anweisungen nach der Voreinstellung hinzugefügt. Nichts wird entfernt, daher ist dies die Anpassung mit dem niedrigsten Risiko
Ein Agent mit einer anderen Oberfläche, Identität oder Berechtigungsmodell, oder ein Nicht-Codierungs-AgentBenutzerdefinierte AufforderungszeichenketteNur das, was Sie schreiben. Sie tragen die Verantwortung für das Ersetzen der Werkzeuganleitung und Sicherheitsanweisungen, die Ihr Agent noch benötigt
Eine dünne Werkzeugaufrufs-Schleife ohne Agent-Persona, bei der Sie alles Verhalten in der Benutzeraufforderung bereitstellenKeine systemPrompt-OptionDie minimale Standardeinstellung: Werkzeugaufrufs-Unterstützung und nichts anderes
„Unterschiedlich von Claude Code” bedeutet normalerweise eines der folgenden:
  • Andere Oberfläche: Die Ausgabe wird nicht in einem Terminal von der Person gelesen, die sie ausgelöst hat. Chat-UIs, Strukturierte-Ausgabe-Consumer und Nicht-Codierungs-Automatisierung benötigen jeweils eine Aufforderung, die damit übereinstimmt, wie ihre Ausgabe gerendert und überprüft wird. Unbeaufsichtigte Codierungs-Automatisierung, wie ein CI-Job, der Lint-Fehler behebt oder Diffs überprüft, passt immer noch zur Voreinstellung, da die Arbeit selbst das ist, wofür die Voreinstellung geschrieben wurde.
  • Andere Identität: Der Agent sollte sich nicht als Claude Code präsentieren. Ein Support-Bot, ein Datenanalyse-Assistent oder ein domänenspezifischer Agent benötigt seinen eigenen Namen, Umfang und eine eigene Persona.
  • Anderes Berechtigungsmodell: Der Agent läuft autonom ohne menschliche Genehmigung bei jedem Schritt, oder arbeitet mit einem engen Satz von Ressourcen. Claude Code’s Aufforderung geht davon aus, dass ein Mensch in der Schleife ist und Zugriff auf einen vollständigen Werkzeugsatz hat.
  • Nicht-Codierungs-Aufgaben: Der Großteil von Claude Code’s Aufforderung ist Codierungs-Anleitung. Für Forschungs-, Inhalts- oder Operations-Agenten konkurriert diese Anleitung mit den Anweisungen, die Sie tatsächlich benötigen.
Die Vergleichstabelle zeigt, was jede Anpassungsmethode bewahrt.

Verhalten des Agenten anpassen

Ausgabestile, append und eine benutzerdefinierte Eingabeaufforderung ändern jeweils die Systemaufforderung direkt. CLAUDE.md geht einen anderen Weg: Das SDK liest sie und injiziert ihren Inhalt als Projektkontext in die Konversation, nicht in die Systemaufforderung, sodass sie das Verhalten neben jeder Systemaufforderung, die Sie wählen, prägt. Skills, hooks und permissions prägen das Verhalten auch außerhalb der Systemaufforderung und werden auf eigenen Seiten behandelt.

CLAUDE.md-Dateien für projektspezifische Anweisungen

CLAUDE.md-Dateien geben Claude persistenten Projektkontext und Anweisungen. Das SDK injiziert ihren Inhalt in die Konversation, nicht in die Systemaufforderung, sodass sie mit jeder Systemaufforderungskonfiguration funktionieren. Informationen darüber, was in CLAUDE.md eingefügt werden soll, wo es platziert werden soll und wie effektive Anweisungen geschrieben werden, finden Sie unter How Claude remembers your project. Dieser Abschnitt behandelt, was für das SDK spezifisch ist: wie CLAUDE.md geladen wird. Das SDK liest CLAUDE.md, wenn die entsprechende Einstellungsquelle aktiviert ist: 'project' lädt CLAUDE.md oder .claude/CLAUDE.md aus dem Arbeitsverzeichnis, und 'user' lädt ~/.claude/CLAUDE.md. Standard-query()-Optionen aktivieren beide Quellen, sodass CLAUDE.md automatisch geladen wird. Wenn Sie settingSources in TypeScript oder setting_sources in Python explizit festlegen, beziehen Sie die benötigten Quellen ein. Das Laden von CLAUDE.md wird durch Einstellungsquellen gesteuert, nicht durch die claude_code-Voreinstellung.

CLAUDE.md mit dem SDK laden

Um CLAUDE.md zu laden, setzen Sie settingSources so, dass es die Ebene einschließt, auf der sich Ihre CLAUDE.md befindet. Das folgende Beispiel lädt eine projektspezifische CLAUDE.md zusammen mit der claude_code-Voreinstellung, sodass Claude sowohl die vollständige Coding-Agent-Eingabeaufforderung als auch die Konventionen Ihres Projekts hat:
import { query } from "@anthropic-ai/claude-agent-sdk";

const messages = [];

for await (const message of query({
  prompt: "Add a new React component for user profiles",
  options: {
    systemPrompt: {
      type: "preset",
      preset: "claude_code" // Use Claude Code's system prompt
    },
    settingSources: ["project"] // Loads CLAUDE.md from project
  }
})) {
  messages.push(message);
}

// Now Claude has access to your project guidelines from CLAUDE.md
CLAUDE.md ist persistent über alle Sitzungen in einem Projekt, wird mit Ihrem Team über Git geteilt und wird automatisch erkannt, ohne dass Codeänderungen erforderlich sind. Sie wird nicht geladen, wenn Sie ein leeres settingSources-Array übergeben.

Ausgabestile für persistente Konfigurationen

Ausgabestile sind gespeicherte Konfigurationen, die Claudes Systemaufforderung ändern. Sie werden als Markdown-Dateien gespeichert und können über Sitzungen und Projekte hinweg wiederverwendet werden.

Einen Ausgabestil erstellen

Ein Ausgabestil ist eine Markdown-Datei mit Frontmatter für Metadaten, gefolgt vom Eingabeaufforderungsinhalt. Speichern Sie ihn unter ~/.claude/output-styles/ für einen Stil auf Benutzerebene, der in jedem Projekt verfügbar ist, oder .claude/output-styles/ in Ihrem Repository für einen Stil auf Projektebene, den Sie committen und mit Ihrem Team teilen können. Standardmäßig ersetzt ein benutzerdefinierter Ausgabestil die Softwareentwicklungsanweisungen der claude_code-Voreinstellung durch Ihre eigenen. Um sie zu behalten und Ihre Anweisungen darauf zu schichten, setzen Sie keep-coding-instructions: true im Frontmatter. Behalten Sie sie, wenn Ihr Agent immer noch Softwareentwicklungsarbeit leistet. Lassen Sie sie weg, wenn Sie die Rolle vollständig ersetzen. Das folgende Beispiel definiert eine Code-Review-Persona, die die Codierungsanweisungen beibehält, da die Überprüfung von Code immer noch von Claudes Code-Sicherheits- und Code-Qualitätsleitlinien profitiert. Speichern Sie es als ~/.claude/output-styles/code-reviewer.md, um es über Projekte hinweg verfügbar zu machen:
~/.claude/output-styles/code-reviewer.md
---
name: Code Reviewer
description: Thorough code review assistant
keep-coding-instructions: true
---

You are an expert code reviewer.

For every code submission:
1. Check for bugs and security issues
2. Evaluate performance
3. Suggest improvements
4. Rate code quality (1-10)

Einen Ausgabestil aktivieren

Nach der Erstellung aktivieren Sie Ausgabestile über:
  • CLI: Führen Sie /config aus und wählen Sie einen Ausgabestil
  • Einstellungen: Setzen Sie outputStyle in .claude/settings.local.json
  • TypeScript SDK: Setzen Sie outputStyle innerhalb des Inline-settings-Objekts, das an query() übergeben wird, oder verweisen Sie settings auf eine Einstellungsdatei, die es setzt. outputStyle ist kein Feld auf oberster Ebene von Options
Das Python SDK hat keine Option, einen Ausgabestil programmgesteuert auszuwählen. Verwenden Sie für Code-only-Bereitstellungen, bei denen Sie nicht in .claude/settings.local.json schreiben können, stattdessen append oder eine benutzerdefinierte Eingabeaufforderungszeichenkette. Hinweis für SDK-Benutzer: Ausgabestile werden geladen, wenn Sie settingSources: ['user'] oder settingSources: ['project'] (TypeScript) / setting_sources=["user"] oder setting_sources=["project"] (Python) in Ihren Optionen einbeziehen.

An die claude_code-Voreinstellung anhängen

Sie können die Claude Code-Voreinstellung mit einer append-Eigenschaft verwenden, um Ihre benutzerdefinierten Anweisungen hinzuzufügen und gleichzeitig alle integrierten Funktionen zu bewahren.
import { query } from "@anthropic-ai/claude-agent-sdk";

const messages = [];

for await (const message of query({
  prompt: "Help me write a Python function to calculate fibonacci numbers",
  options: {
    systemPrompt: {
      type: "preset",
      preset: "claude_code",
      append: "Always include detailed docstrings and type hints in Python code."
    }
  }
})) {
  messages.push(message);
  if (message.type === "assistant") {
    console.log(message.message.content);
  }
}

Prompt-Caching über Benutzer und Maschinen verbessern

Standardmäßig können zwei Sitzungen, die die gleiche claude_code-Voreinstellung und den gleichen append-Text verwenden, keinen Prompt-Cache-Eintrag teilen, wenn sie von verschiedenen Arbeitsverzeichnissen aus ausgeführt werden. Dies liegt daran, dass die Voreinstellung sitzungsspezifischen Kontext in die Systemaufforderung vor Ihrem append-Text einbettet: das Arbeitsverzeichnis, ob es sich um ein Git-Repository handelt, die Plattform, die aktive Shell, die Betriebssystemversion und Auto-Memory-Pfade. Jeder Unterschied in diesem Kontext erzeugt eine andere Systemaufforderung und einen Cache-Miss. CLAUDE.md-Inhalt beeinflusst den Systemaufforderungs-Cache nicht, da das SDK ihn in die Konversation injiziert, nicht in die Systemaufforderung. Um die Systemaufforderung über Sitzungen hinweg identisch zu machen, setzen Sie excludeDynamicSections: true in TypeScript oder "exclude_dynamic_sections": True in Python. Der sitzungsspezifische Kontext wird in die erste Benutzernachricht verschoben, sodass nur die statische Voreinstellung und Ihr append-Text in der Systemaufforderung verbleiben, damit identische Konfigurationen einen Cache-Eintrag über Benutzer und Maschinen hinweg teilen können.
excludeDynamicSections erfordert @anthropic-ai/claude-agent-sdk v0.2.98 oder später oder claude-agent-sdk v0.1.58 oder später für Python. Es gilt nur für die Voreinstellungsobjektform und hat keine Auswirkung, wenn systemPrompt eine Zeichenkette ist.
Das folgende Beispiel kombiniert einen gemeinsamen append-Block mit excludeDynamicSections, sodass eine Flotte von Agenten, die von verschiedenen Verzeichnissen aus ausgeführt werden, die gleiche zwischengespeicherte Systemaufforderung wiederverwenden können:
import { query } from "@anthropic-ai/claude-agent-sdk";

for await (const message of query({
  prompt: "Triage the open issues in this repo",
  options: {
    systemPrompt: {
      type: "preset",
      preset: "claude_code",
      append: "You operate Acme's internal triage workflow. Label issues by component and severity.",
      excludeDynamicSections: true
    }
  }
})) {
  // ...
}
Kompromisse: Das Arbeitsverzeichnis, das Git-Repo-Flag, die Plattform, die aktive Shell, die Betriebssystemversion und Auto-Memory-Pfade erreichen Claude immer noch, aber als Teil der ersten Benutzernachricht statt der Systemaufforderung. Anweisungen in der Benutzernachricht haben etwas weniger Gewicht als der gleiche Text in der Systemaufforderung, daher kann Claude sich bei der Überlegung zum aktuellen Verzeichnis oder zu Auto-Memory-Pfaden weniger stark auf sie verlassen. Aktivieren Sie diese Option, wenn die Wiederverwendung des Cross-Session-Cache wichtiger ist als maximal autoritative Umgebungskontexte. Für das entsprechende Flag im nicht-interaktiven CLI-Modus siehe --exclude-dynamic-system-prompt-sections.

Benutzerdefinierte Systemaufforderungen

Sie können eine benutzerdefinierte Zeichenkette als systemPrompt bereitstellen, um die Standardeinstellung vollständig durch Ihre eigenen Anweisungen zu ersetzen.
import { query } from "@anthropic-ai/claude-agent-sdk";

const customPrompt = `You are a Python coding specialist.
Follow these guidelines:
- Write clean, well-documented code
- Use type hints for all functions
- Include comprehensive docstrings
- Prefer functional programming patterns when appropriate
- Always explain your code choices`;

const messages = [];

for await (const message of query({
  prompt: "Create a data processing pipeline",
  options: {
    systemPrompt: customPrompt
  }
})) {
  messages.push(message);
  if (message.type === "assistant") {
    console.log(message.message.content);
  }
}

Vergleich der vier Ansätze

Die vier Anpassungsmethoden unterscheiden sich darin, wo sie sich befinden, wie sie gemeinsam genutzt werden und was sie aus der claude_code-Voreinstellung beibehalten.
FunktionCLAUDE.mdAusgabestilesystemPrompt mit AppendBenutzerdefinierte systemPrompt
PersistenzPro-Projekt-DateiAls Dateien gespeichertNur SitzungNur Sitzung
WiederverwendbarkeitPro-ProjektÜber Projekte hinwegCode-DuplizierungCode-Duplizierung
VerwaltungIm DateisystemCLI + DateienIm CodeIm Code
Standard-WerkzeugeBewahrtBewahrtBewahrtVerloren (sofern nicht enthalten)
Integrierte SicherheitBeibehaltenBeibehaltenBeibehaltenMuss hinzugefügt werden
UmgebungskontextAutomatischAutomatischAutomatischMuss bereitgestellt werden
AnpassungsebeneNur ErgänzungenStandard ersetzen oder erweiternNur ErgänzungenVollständige Kontrolle
VersionskontrolleMit ProjektJaMit CodeMit Code
UmfangProjektspezifischBenutzer oder ProjektCode-SitzungCode-Sitzung
„Mit Append” bedeutet die Verwendung von systemPrompt: { type: "preset", preset: "claude_code", append: "..." } in TypeScript oder system_prompt={"type": "preset", "preset": "claude_code", "append": "..."} in Python. CLAUDE.md ändert den System-Prompt selbst nicht: Das SDK injiziert seinen Inhalt als Projektkontext in die Konversation.

Anwendungsfälle und Best Practices

Wann CLAUDE.md verwenden

Verwenden Sie CLAUDE.md für Anweisungen, die für jede Sitzung in einem Projekt gelten sollten, unabhängig davon, welche Systemaufforderung die Sitzung verwendet: Codierungsstandards, häufige Befehle, Architekturkontext und Team-Konventionen. CLAUDE.md wird in Ihr Repository übernommen, sodass es mit dem Code, den es beschreibt, synchron bleibt. Siehe Wann zu CLAUDE.md hinzufügen für vollständige Anleitung. CLAUDE.md-Dateien werden geladen, wenn die project-Einstellungsquelle aktiviert ist, was sie für Standard-query()-Optionen ist. Wenn Sie settingSources in TypeScript oder setting_sources in Python explizit festlegen, beziehen Sie 'project' ein, um das Laden von projektspezifischen CLAUDE.md-Dateien beizubehalten.

Wann Ausgabestile verwenden

Ausgabestile sind für Personas, die Sie über die CLI und das SDK hinweg wiederverwenden möchten, ohne den Anwendungscode zu ändern. Da sie als Dateien in .claude/output-styles vorhanden sind, ist dieselbe Persona über /config in der CLI und aus jeder SDK-Sitzung verfügbar, die die entsprechende Einstellungsquelle lädt. Am besten für:
  • Persistente Verhaltensänderungen über Sitzungen hinweg
  • Team-gemeinsame Konfigurationen
  • Spezialisierte Assistenten wie ein Code-Reviewer, Datenwissenschaftler oder DevOps-Assistent
  • Komplexe Aufforderungsänderungen, die Versionierung benötigen
Beispiele:
  • Erstellen eines dedizierten SQL-Optimierungsassistenten
  • Aufbau eines sicherheitsorientierten Code-Reviewers
  • Entwicklung eines Lehrers mit spezifischer Pädagogik

Wann systemPrompt mit Append verwenden

Verwenden Sie append, wenn die claude_code-Voreinstellung bereits zu Ihrem Produkt passt und Sie nur zusätzliche Anweisungen hinzufügen müssen. Sie behalten die Werkzeuganleitung, Sicherheitsregeln und Codierungskonventionen der Voreinstellung, ohne sie neu zu implementieren. Am besten für:
  • Hinzufügen spezifischer Codierungsstandards oder Vorlieben
  • Anpassung der Ausgabeformatierung
  • Hinzufügen domänenspezifischen Wissens
  • Änderung der Antwortausführlichkeit
  • Verbesserung des Standardverhaltens von Claude Code ohne Verlust von Werkzeuganweisungen

Wann benutzerdefinierte systemPrompt verwenden

Verwenden Sie eine benutzerdefinierte Aufforderung, wenn sich die Oberfläche, Identität oder das Berechtigungsmodell Ihres Agenten von Claude Code unterscheidet, wie in Entscheiden Sie sich für einen Startpunkt beschrieben. Sie definieren den vollständigen Anweisungssatz, einschließlich aller Werkzeuganleitung und Sicherheitsregeln, die Ihr Agent benötigt. Am besten für:
  • Vollständige Kontrolle über Claudes Verhalten
  • Spezialisierte Aufgaben mit einer Sitzung
  • Testen neuer Aufforderungsstrategien
  • Situationen, in denen Standard-Werkzeuge nicht benötigt werden
  • Aufbau spezialisierter Agenten mit einzigartigem Verhalten

Ansätze kombinieren

Diese Methoden lassen sich kombinieren. Ein persistenter Ausgabestil oder CLAUDE.md legt das langfristige Verhalten fest, und append lagert sitzungsspezifische Anweisungen darauf, ohne die gespeicherte Konfiguration zu ändern.

Einen Ausgabestil mit sitzungsspezifischen Ergänzungen kombinieren

Das folgende Beispiel setzt voraus, dass ein Ausgabestil „Code Reviewer” bereits aktiv ist. Der append-Block lagert sitzungsspezifische Schwerpunkte auf die Persona, sodass eine einzelne Review-Sitzung OAuth und Token-Speicherung priorisieren kann, ohne den gespeicherten Ausgabestil zu ändern:
import { query } from "@anthropic-ai/claude-agent-sdk";

// Assuming "Code Reviewer" output style is active (via /config or settings)
// Add session-specific focus areas
const messages = [];

for await (const message of query({
  prompt: "Review this authentication module",
  options: {
    systemPrompt: {
      type: "preset",
      preset: "claude_code",
      append: `
        For this review, prioritize:
        - OAuth 2.0 compliance
        - Token storage security
        - Session management
      `
    }
  }
})) {
  messages.push(message);
}

Siehe auch

  • Ausgabestile: Erstellen, verwalten und teilen Sie Ausgabestile für die CLI, einschließlich des Dateiformats und der Speicherorte
  • Wie Claude sich Ihr Projekt merkt: Was in CLAUDE.md gehört, wo Sie es platzieren, und wie Sie effektive Projektanweisungen schreiben
  • TypeScript SDK-Referenz: Der vollständige Options-Typ, einschließlich systemPrompt, settingSources und settings
  • Python SDK-Referenz: Der vollständige ClaudeAgentOptions-Typ, einschließlich system_prompt und setting_sources
  • Einstellungen: Die settings.json-Referenz, einschließlich des Speicherorts von Ausgabestilen und anderen Konfigurationen