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

# Steering en queueing

> Het verschil tussen steering (immediate) en queueing (enqueue) in de Laravel Copilot SDK, en hoe je ze in de praktijk in Laravel inzet.

## Steering en queueing

<Info>
  In de normale flow van een Laravel-applicatie zijn er nauwelijks situaties waarin je steering direct gebruikt. Bij de synchrone uitvoeringspatronen van Laravel heb je er weinig baat bij; de standaard queueing-aanpak is meestal de juiste keuze.
</Info>

Er zijn twee patronen om berichten te sturen terwijl de agent aan het werk is: **steering** en **queueing**.

## Overzicht

`send()` / `sendAndWait()` / `sendAndStream()` / `Copilot::run()` hebben allemaal een `$mode`-parameter.

| Modus                    | Gedrag                                                                        |
| ------------------------ | ----------------------------------------------------------------------------- |
| `"enqueue"` (standaard)  | Wordt als queue verwerkt nadat de huidige turn is voltooid                    |
| `"immediate"` (steering) | Onderbreekt de turn die momenteel wordt verwerkt en wordt direct geïnjecteerd |

## Steering (`"immediate"`)

Injecteert een bericht direct in de turn die de agent aan het verwerken is. De agent ontvangt het bericht in realtime en past zijn respons aan. Gebruik dit als je wilt bijsturen zonder het lopende werk te onderbreken.

```php theme={null}
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Contracts\CopilotSession;

Copilot::start(function (CopilotSession $session) {
    // Start een langlopende taak
    $messageId = $session->send(prompt: 'Refactor the authentication module to use sessions');

    // Bijsturen terwijl de agent bezig is
    $session->send(
        prompt: 'Actually, use JWT tokens instead of sessions',
        mode: 'immediate',
    );

    // Wachten tot de idle-status is bereikt
    $response = $session->sendAndWait(prompt: 'Summarize what you did');
});
```

<Warning>
  Steering is best effort. Als de agent al een toolaanroep heeft gecommit, wordt het bericht toegepast nadat die toolaanroep is voltooid, maar wel binnen dezelfde turn. Als het steeringbericht arriveert nadat de turn is voltooid, wordt het automatisch naar de queue verplaatst.
</Warning>

## Queueing (`"enqueue"`)

Voegt berichten toe aan de queue en verwerkt ze na elkaar zodra de huidige turn is voltooid. Elk gequeued bericht wordt uitgevoerd als een aparte turn. Dit is het standaardgedrag als je `$mode` weglaat.

```php theme={null}
Copilot::start(function (CopilotSession $session) {
    // Start de eerste taak
    $session->send(prompt: 'Set up the project structure');

    // Vervolgtaken aan de queue toevoegen terwijl de agent bezig is
    $session->send(prompt: 'Add unit tests for the auth module', mode: 'enqueue');
    $session->send(prompt: 'Update the README with setup instructions', mode: 'enqueue');

    // Wachten tot de queue leeg is
});
```

## Praktische benadering in Laravel

In Laravel draait het vooral om synchrone patronen met `Copilot::run()` of `sendAndWait()`. Omdat deze een bericht versturen en wachten tot de idle-status is bereikt, **is er geen moment om in te grijpen terwijl de agent bezig is en heeft `$mode` in feite geen betekenis**.

```php theme={null}
// Copilot::run() roept intern sendAndWait() aan,
// dus het opgeven van mode heeft geen zin

$response = Copilot::run(prompt: 'Tell me something about Laravel.');

// Ook binnen een session is het niet nodig als je sendAndWait() gewoon na elkaar aanroept
Copilot::start(function (CopilotSession $session) {
    $r1 = $session->sendAndWait(prompt: 'First task');
    $r2 = $session->sendAndWait(prompt: 'Second task');
});
```

Steering (`"immediate"`) komt tot zijn recht wanneer je met `send()` asynchroon berichten verstuurt en tegelijkertijd met een ander bericht in de lopende turn kunt ingrijpen. In de synchrone verwerkingsflow van Laravel is het lastig om die gelegenheid te creëren, dus **is het meestal het beste om `$mode` niet op te geven en de standaard te laten staan**.

## Welke moet je gebruiken?

| Situatie                                   | Patroon                        |
| ------------------------------------------ | ------------------------------ |
| De agent gaat de verkeerde kant op         | Steering (`"immediate"`)       |
| Je bedenkt wat er hierna moet gebeuren     | Queueing (`"enqueue"`)         |
| Je wilt meerdere taken na elkaar uitvoeren | Queueing (`"enqueue"`)         |
| Een normale Laravel-app                    | Standaard (`$mode` niet nodig) |

## Best practices

* **Queueing als standaard** — `$mode` weglaten (of `"enqueue"` opgeven) is in vrijwel alle gevallen de juiste keuze. Het gedrag is voorspelbaar.
* **Steering voor correcties** — gebruik `"immediate"` alleen wanneer de agent duidelijk iets verkeerds aan het doen is.
* **Houd steeringberichten beknopt** — gebruik korte berichten die in de huidige context begrijpelijk zijn. Lange, complexe steeringberichten veroorzaken juist verwarring.
* **Vermijd opeenvolgende steering** — meerdere steeringberichten kort na elkaar kunnen de kwaliteit van de turn verlagen. Bij een grote koerswijziging is het soms beter de turn af te breken en opnieuw te beginnen.

## Zie ook

* [Basisgebruik](/nl/packages/laravel-copilot-sdk/bare-usage)
* [Streaming](/nl/packages/laravel-copilot-sdk/streaming)
* [send-on](/nl/packages/laravel-copilot-sdk/send-on)

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


## Related topics

- [Laravel AI SDK](/nl/ai-sdk.md)
- [send() en on()](/nl/packages/laravel-copilot-sdk/send-on.md)
- [Sessioncontext en filtering](/nl/packages/laravel-copilot-sdk/session-context.md)
- [Queues en jobs](/nl/queues.md)
- [Events en listeners](/nl/events.md)
