> ## 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

> Configureer tools, MCP, hooks, agents en lifecycle-events met de SessionConfig van de Laravel Copilot SDK.

## SessionConfig

Met de klasse `SessionConfig` zijn allerlei instellingen mogelijk.

Je gebruikt deze als `Copilot::run(prompt: '...', config: $config)` of `Copilot::start(function (CopilotSession $session) { ... }, config: $config)`.
Wanneer je bijvoorbeeld alleen een model wilt opgeven en de klasse `SessionConfig` overbodig is, kun je ook een array gebruiken: `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(
    // Het te gebruiken model opgeven
    model: 'auto',

    // Een vaste session-ID opgeven bij het aanmaken van een nieuwe session
    sessionId: 'session-123',

    clientName: 'my-app',

    // Redeneerniveau. Alleen instelbaar bij modellen die dit ondersteunen.
    reasoningEffort: ReasoningEffort::HIGH,

    // De capabilities van het model overschrijven. Wordt deep-merged met de standaardwaarden van de runtime.
    // modelCapabilities: new ModelCapabilitiesOverride(
    //     supports: new ModelCapabilitiesOverrideSupports(vision: true, reasoningEffort: true),
    //     limits: new ModelCapabilitiesOverrideLimits(max_prompt_tokens: 200000),
    // ),
    // Kan ook als array worden opgegeven
    // modelCapabilities: ['supports' => ['vision' => true]],

    // De config-directory overschrijven
    configDirectory: '',

    // Automatische detectie van MCP-configuratie en skill-directories inschakelen
    // Detecteert .mcp.json en .vscode/mcp.json automatisch vanuit de werkdirectory
    // en merget deze met expliciet opgegeven mcpServers en skillDirectories (bij naamconflicten heeft de expliciete opgave voorrang)
    enableConfigDiscovery: true,

    // Custom tools
    tools: [...],

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

    // Systeembericht: replace-modus (vervangt de systeemprompt volledig)
    // systemMessage: new SystemMessageConfig(
    //     mode: 'replace',
    //     content: 'De volledige custom systeemprompt',
    // ),

    // Systeembericht: customize-modus (per sectie overschrijven)
    // 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: 'Aanvullende content zoals in de append-modus (optioneel)',
    // ),

    // Custom provider
    provider: new ProviderConfig(),

    // GitHub-token per session (voor multi-tenant scenario's)
    // Los van het github_token op clientniveau kun je per session een token opgeven
    gitHubToken: $user->github_token,

    // Werkingsmodus van remote sessions
    // 'off' - alleen lokaal (standaard)
    // 'export' - session-events naar GitHub exporteren (zonder remote steering)
    // 'on' - zowel export als remote steering inschakelen
    remoteSession: \Revolution\Copilot\Enums\RemoteSessionMode::Export,

    // Cloud sessions (de session in de cloud aanmaken in plaats van lokaal)
    // Optioneel kun je repository-informatie koppelen
    cloud: new \Revolution\Copilot\Types\CloudSessionOptions(
        repository: new \Revolution\Copilot\Types\CloudSessionRepository(
            owner: 'myorg',
            name: 'myrepo',
            branch: 'main',
        ),
    ),

    onPermissionRequest: function (array $request) {
        // Permission requests verwerken
    },

    onUserInputRequest: function (UserInputRequest $request) {
        // User input requests verwerken. ask_user
    },

    // Handler voor elicitatierequests
    // Als deze is ingesteld, kun je formuliergebaseerde UI-dialoogrequests van de agent ontvangen
    onElicitationRequest: function (ElicitationContext $context) {
        // Elicitatierequests verwerken
        return ['action' => 'accept', 'content' => ['field' => 'value']];
    },

    // Handler voor requests om de plan-modus te verlaten
    // Als deze is ingesteld, ontvang je de request wanneer de agent de plan-modus wil verlaten
    onExitPlanModeRequest: function (ExitPlanModeRequest $request) {
        // De planinhoud controleren en goedkeuren of afwijzen
        return new ExitPlanModeResult(approved: true, selectedAction: $request->recommendedAction);
    },

    // Handler voor requests voor automatische moduswissel
    // Je kunt kiezen of het overschakelen naar de auto-modus is toegestaan bij het bereiken van een rate limit
    onAutoModeSwitchRequest: function (AutoModeSwitchRequest $request) {
        // Retourneer "yes", "yes_always" of "no"
        return 'yes';
    },

    // Session hooks
    hooks: [],

    // Werkdirectory
    workingDirectory: '',

    // Streaming inschakelen
    streaming: true,

    // Of streaming-events van subagents in de hoofdstream worden opgenomen (standaard: true)
    includeSubAgentStreamingEvents: true,

    // Beschikbare ingebouwde tools
    availableTools: ['read_file', 'write_file'],

    // Of juist uit te sluiten tools
    excludedTools: ['shell'],

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

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

    // Configuratie van de default agent. Configuratie van de ingebouwde agent die wordt gebruikt als er geen custom agent is geselecteerd.
    // excludedTools: lijst met tools die van de default agent worden uitgesloten.
    // Blijft wel beschikbaar voor custom subagents.
    defaultAgent: ['excludedTools' => ['tool_name']],

    // De agent die bij de start van de session actief wordt. Moet overeenkomen met een name in customAgents.
    agent: 'reviewer',

    // Skill-directories
    skillDirectories: [],

    // Uitgeschakelde skills
    disabledSkills: [],

    // Configuratie van infinite sessions. Standaard ingeschakeld.
    infiniteSessions: new InfiniteSessionConfig(
        enabled: true,
        backgroundCompactionThreshold: 0.80, // Start compaction bij 80% contextgebruik
        bufferExhaustionThreshold: 0.95,     // Blokkeer op 95% totdat de compaction is voltooid
    ),

    // Infinite sessions uitschakelen
    // infiniteSessions: new InfiniteSessionConfig(enabled: false),

    // Registreer een event-handler vóór de session-create-RPC.
    // Gebruik dit om vroege events zoals session.start niet te missen.
    // Gelijk aan het later aanroepen van $session->on($handler), maar de registratie vindt eerder in de lifecycle plaats.
    onEvent: function (SessionEvent $event) {
        // Ontvangt alle session-events
    },
);

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

Bij het hervatten van een session gebruik je de klasse `ResumeSessionConfig`. Deze is grotendeels gelijk aan `SessionConfig`, maar wijkt op enkele punten af. In ResumeSessionConfig geef je alleen de instellingen op die je wilt wijzigen. De rest wordt overgenomen van de configuratie bij het starten van de nieuwe session.

Zie [Cloud sessions](/nl/packages/laravel-copilot-sdk/cloud-sessions) voor uitvoering in de cloud en [Plugin directories](/nl/packages/laravel-copilot-sdk/plugin-directories) voor plugin directories.

<Info>
  Raadpleeg de [GitHub-repository](https://github.com/invokable/laravel-copilot-sdk) voor de meest actuele informatie.
</Info>


## Related topics

- [Cloud Sessions](/nl/packages/laravel-copilot-sdk/cloud-sessions.md)
- [Sessions hervatten](/nl/packages/laravel-copilot-sdk/resume.md)
- [Custom agents](/nl/packages/laravel-copilot-sdk/custom-agents.md)
- [Aan de slag - GitHub Copilot SDK voor Laravel](/nl/packages/laravel-copilot-sdk/getting-started.md)
- [Skills](/nl/packages/laravel-copilot-sdk/skills.md)
