> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# SessionConfig

> Konfigurieren Sie Tools, MCP, Hooks, Agenten und Lebenszyklus-Events mit SessionConfig des Laravel Copilot SDK.

## SessionConfig

Die Klasse `SessionConfig` ermöglicht vielfältige Einstellungen.

Sie wird wie folgt verwendet: `Copilot::run(prompt: '...', config: $config)` oder `Copilot::start(function (CopilotSession $session) { ... }, config: $config)`.
Wenn Sie – etwa nur ein Modell setzen wollen – die Klasse `SessionConfig` gar nicht benötigen, ist auch die Angabe als Array möglich: `Copilot::run(prompt: '...', config: ['model' => 'auto'])`.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionConfig;
use Revolution\Copilot\Types\SystemMessageConfig;
use Revolution\Copilot\Types\InfiniteSessionConfig;
use Revolution\Copilot\Types\UserInputRequest;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverride;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverrideSupports;
use Revolution\Copilot\Types\Rpc\ModelCapabilitiesOverrideLimits;
use Revolution\Copilot\Enums\ReasoningEffort;

$config = new SessionConfig(
    // Zu verwendendes Modell
    model: 'auto',

    // Feste Session-ID beim Erstellen einer neuen Session
    sessionId: 'session-123',

    clientName: 'my-app',

    // Reasoning-Level. Nur bei unterstützten Modellen einstellbar.
    reasoningEffort: ReasoningEffort::HIGH,

    // Override der Modell-Capabilities. Wird deep-merged in die Runtime-Standardwerte.
    // modelCapabilities: new ModelCapabilitiesOverride(
    //     supports: new ModelCapabilitiesOverrideSupports(vision: true, reasoningEffort: true),
    //     limits: new ModelCapabilitiesOverrideLimits(max_prompt_tokens: 200000),
    // ),
    // Auch als Array angebbar
    // modelCapabilities: ['supports' => ['vision' => true]],

    // config-Verzeichnis überschreiben
    configDirectory: '',

    // Automatische Erkennung von MCP-Konfigurationen und Skill-Verzeichnissen aktivieren
    // Findet .mcp.json oder .vscode/mcp.json automatisch im Arbeitsverzeichnis
    // und merged sie mit explizit angegebenen mcpServers und skillDirectories
    // (bei Namenskonflikt hat die explizite Angabe Vorrang)
    enableConfigDiscovery: true,

    // Benutzerdefinierte Tools
    tools: [...],

    // System-Nachricht
    systemMessage: new SystemMessageConfig(
        content: 'You are a helpful assistant for Laravel developers.',
    ),

    // System-Nachricht: replace-Modus (System-Prompt vollständig ersetzen)
    // systemMessage: new SystemMessageConfig(
    //     mode: 'replace',
    //     content: 'カスタムシステムプロンプト全体',
    // ),

    // System-Nachricht: customize-Modus (abschnittsweise überschreiben)
    // systemMessage: new SystemMessageConfig(
    //     mode: 'customize',
    //     sections: [
    //         'tone' => new SectionOverride(action: SectionOverrideAction::REPLACE, content: 'Always respond in Japanese.'),
    //         'safety' => new SectionOverride(action: SectionOverrideAction::REMOVE),
    //         'custom_instructions' => new SectionOverride(action: SectionOverrideAction::APPEND, content: 'Additional instructions here.'),
    //     ],
    //     content: 'appendモード同様の追加コンテンツ（オプション）',
    // ),

    // Benutzerdefinierter Provider
    provider: new ProviderConfig(),

    // GitHub-Token pro Session (Multi-Tenant)
    // Unabhängig vom github_token auf Client-Ebene lässt sich das Token pro Session festlegen
    gitHubToken: $user->github_token,

    // Betriebsmodus der Remote-Session
    // 'off' - nur lokal (Standard)
    // 'export' - Session-Events an GitHub exportieren (ohne Remote-Steering)
    // 'on' - Export und Remote-Steering aktiviert
    remoteSession: \Revolution\Copilot\Enums\RemoteSessionMode::Export,

    // Cloud-Session (Session in der Cloud statt lokal erzeugen)
    // Optional Repository-Informationen verknüpfen
    cloud: new \Revolution\Copilot\Types\CloudSessionOptions(
        repository: new \Revolution\Copilot\Types\CloudSessionRepository(
            owner: 'myorg',
            name: 'myrepo',
            branch: 'main',
        ),
    ),

    onPermissionRequest: function (array $request) {
        // Berechtigungsanfrage verarbeiten
    },

    onUserInputRequest: function (UserInputRequest $request) {
        // Benutzereingabe-Anfrage verarbeiten (ask_user)
    },

    // Handler für Elicitation-Requests
    // Wenn gesetzt, können formularbasierte UI-Dialog-Requests des Agenten empfangen werden
    onElicitationRequest: function (ElicitationContext $context) {
        // Elicitation-Request verarbeiten
        return ['action' => 'accept', 'content' => ['field' => 'value']];
    },

    // Handler für den Plan-Mode-Beendigungs-Request
    // Wenn gesetzt, wird der Request empfangen, wenn der Agent den Plan-Mode verlassen möchte
    onExitPlanModeRequest: function (ExitPlanModeRequest $request) {
        // Planinhalt prüfen und genehmigen/ablehnen
        return new ExitPlanModeResult(approved: true, selectedAction: $request->recommendedAction);
    },

    // Handler für Auto-Mode-Umschaltanfragen
    // Ermöglicht, bei Erreichen der Rate-Limits das Umschalten in den Auto-Modus zu erlauben
    onAutoModeSwitchRequest: function (AutoModeSwitchRequest $request) {
        // Einen von "yes", "yes_always", "no" zurückgeben
        return 'yes';
    },

    // Session-Hooks
    hooks: [],

    // Arbeitsverzeichnis
    workingDirectory: '',

    // Streaming aktivieren
    streaming: true,

    // Ob Streaming-Events der Sub-Agenten in den Hauptstream einbezogen werden (Standard: true)
    includeSubAgentStreamingEvents: true,

    // Verfügbare Built-in-Tools
    availableTools: ['read_file', 'write_file'],

    // Alternativ: auszuschließende Tools
    excludedTools: ['shell'],

    // MCP-Server-Konfiguration
    mcpServers: [
        'github' => [
            'type' => 'http',
            'url' => 'https://api.githubcopilot.com/mcp/',
        ],
    ],

    // Benutzerdefinierte Agenten
    customAgents: [
        [
            'name' => 'reviewer',
            'displayName' => 'Code Reviewer',
            'description' => 'Reviews code for best practices',
            'prompt' => 'You are an expert code reviewer.',
        ],
    ],

    // Konfiguration des Standard-Agenten. Wird verwendet, wenn kein Custom-Agent gewählt ist.
    // excludedTools: Liste der Tools, die dem Standard-Agenten entzogen werden.
    // Für Custom-Sub-Agenten bleiben sie verfügbar.
    defaultAgent: ['excludedTools' => ['tool_name']],

    // Beim Session-Start zu aktivierender Agent. Muss mit dem name eines customAgents übereinstimmen.
    agent: 'reviewer',

    // Skill-Verzeichnisse
    skillDirectories: [],

    // Deaktivierte Skills
    disabledSkills: [],

    // Konfiguration für Infinite Sessions. Standardmäßig aktiviert.
    infiniteSessions: new InfiniteSessionConfig(
        enabled: true,
        backgroundCompactionThreshold: 0.80, // Kompaktierung startet bei 80 % Kontextauslastung
        bufferExhaustionThreshold: 0.95,     // Blockiert bei 95 %, bis die Kompaktierung abgeschlossen ist
    ),

    // Infinite Sessions deaktivieren
    // infiniteSessions: new InfiniteSessionConfig(enabled: false),

    // Event-Handler vor dem Session-Erzeugungs-RPC registrieren.
    // Wird verwendet, damit frühe Events wie session.start nicht verloren gehen.
    // Entspricht einem späteren Aufruf von $session->on($handler), wird jedoch früher im Lebenszyklus registriert.
    onEvent: function (SessionEvent $event) {
        // Alle Session-Events empfangen
    },
);

$response = Copilot::run('...', config: $config);
```

Beim Fortsetzen einer Session verwenden Sie die Klasse `ResumeSessionConfig`. Sie ist fast identisch mit `SessionConfig`, weist aber geringfügige Unterschiede auf. In `ResumeSessionConfig` geben Sie nur die Optionen an, die Sie ändern möchten. Alle übrigen Einstellungen der ursprünglich gestarteten Session werden übernommen.

Details zur Cloud-Ausführung finden Sie unter [Cloud Sessions](/de/packages/laravel-copilot-sdk/cloud-sessions), zu Plugin Directories unter [Plugin Directories](/de/packages/laravel-copilot-sdk/plugin-directories).

<Info>
  Aktuelle Informationen finden Sie im [GitHub-Repository](https://github.com/invokable/laravel-copilot-sdk).
</Info>


## Related topics

- [Cloud Sessions](/de/packages/laravel-copilot-sdk/cloud-sessions.md)
- [Session fortsetzen](/de/packages/laravel-copilot-sdk/resume.md)
- [Benutzerdefinierte Agenten](/de/packages/laravel-copilot-sdk/custom-agents.md)
- [Erste Schritte - GitHub Copilot SDK für Laravel](/de/packages/laravel-copilot-sdk/getting-started.md)
- [Streaming-Ereignisse](/de/packages/laravel-copilot-sdk/streaming-events.md)
