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

# Custom agents

> Uitleg over het definiëren van subagents per taak met customAgents in SessionConfig.

## Custom agents

Door custom agents te definiëren, maak je een opzet met subagents die elk hun eigen rol per taak hebben.\
In de Laravel-versie configureer je dit met `customAgents` in `SessionConfig`.

Zie [Fleet Mode](/nl/packages/laravel-copilot-sdk/fleet-mode) voor orkestratie waarbij meerdere subagents parallel draaien.

## Basisgebruik

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

Copilot::start(function (CopilotSession $session) {
    $response = $session->sendAndWait(prompt: 'Onderzoek het authenticatieontwerp en stel verbeteringen voor');

    dump($response->content());
}, config: new SessionConfig(
    customAgents: [
        [
            'name' => 'researcher',
            'displayName' => 'Research Agent',
            'description' => 'Onderzoekt de codebase en vat de belangrijkste punten samen',
            'tools' => ['grep', 'glob', 'view'],
            'prompt' => 'You are a research assistant. Analyze code and summarize findings.',
        ],
        [
            'name' => 'editor',
            'displayName' => 'Editor Agent',
            'description' => 'Voert minimale codewijzigingen door',
            'tools' => ['view', 'edit', 'bash'],
            'prompt' => 'You are a code editor. Make minimal, surgical changes only.',
        ],
    ],
));
```

Je kunt het ook in arrayvorm opgeven.

```php theme={null}
Copilot::run(
    prompt: 'Verbeter de README',
    config: [
        'customAgents' => [
            [
                'name' => 'docs-writer',
                'description' => 'Verantwoordelijk voor het schrijven van documentatie',
                'prompt' => 'Write clear technical documentation.',
            ],
        ],
    ],
);
```

## Configuratieopties

| Property      | Type     | Verplicht | Beschrijving                                                                  |
| ------------- | -------- | --------- | ----------------------------------------------------------------------------- |
| `name`        | `string` | ✅         | De identifier van de agent                                                    |
| `displayName` | `string` |           | Weergavenaam                                                                  |
| `description` | `string` |           | Beschrijving die de runtime gebruikt om de delegatiebestemming te kiezen      |
| `tools`       | `?array` |           | Beschikbare tools. Bij `null` of weglaten is alles beschikbaar                |
| `prompt`      | `string` | ✅         | De agent-specifieke system prompt                                             |
| `mcpServers`  | `array`  |           | MCP-serverconfiguratie exclusief voor deze agent                              |
| `infer`       | `bool`   |           | Of de agent in aanmerking komt voor automatische selectie (standaard: `true`) |
| `skills`      | `array`  |           | Lijst met skillnamen die bij het starten worden geladen                       |

> Hoe concreter je de `description` schrijft, hoe nauwkeuriger de automatische selectie wordt.

## Een specifieke agent kiezen bij de start van een sessie

Met `agent` activeer je vanaf de eerste turn een specifieke custom agent.

```php theme={null}
use Revolution\Copilot\Types\SessionConfig;

$config = new SessionConfig(
    customAgents: [
        [
            'name' => 'researcher',
            'prompt' => 'You analyze code and answer questions.',
        ],
        [
            'name' => 'editor',
            'prompt' => 'You edit code with minimal changes.',
        ],
    ],
    agent: 'researcher',
);
```

## Automatische selectie uitschakelen (`infer: false`)

Voor agents die risicovolle bewerkingen uitvoeren, is het veiliger om de automatische selectie uit te schakelen en ze alleen expliciet te gebruiken.

```php theme={null}
$config = new SessionConfig(
    customAgents: [
        [
            'name' => 'dangerous-cleanup',
            'description' => 'Verwijdert onnodige bestanden',
            'tools' => ['bash', 'edit', 'view'],
            'prompt' => 'Remove dead code and unused files carefully.',
            'infer' => false,
        ],
    ],
);
```

## Tools verbergen voor de standaardagent

Met `defaultAgent.excludedTools` verberg je specifieke tools alleen voor de hoofdagent.\
Zo delegeer je makkelijker naar een custom agent die die tool wel mag gebruiken.

```php theme={null}
$config = new SessionConfig(
    tools: [...],
    defaultAgent: [
        'excludedTools' => ['analyze-codebase'],
    ],
    customAgents: [
        [
            'name' => 'researcher',
            'tools' => ['analyze-codebase'],
            'prompt' => 'You perform deep codebase analysis.',
        ],
    ],
);
```

## Subagent-events monitoren

Tijdens de uitvoering van subagents stromen er `subagent.*`-events binnen.\
Je kunt ze monitoren met `onEvent` of `$session->on()`.

```php theme={null}
use Revolution\Copilot\Contracts\CopilotSession;
use Revolution\Copilot\Enums\SessionEventType;
use Revolution\Copilot\Facades\Copilot;
use Revolution\Copilot\Types\SessionEvent;

Copilot::start(function (CopilotSession $session) {
    $session->on(function (SessionEvent $event): void {
        if ($event->is(SessionEventType::SUBAGENT_STARTED)) {
            info('Sub-agent started', $event->toArray());
        }

        if ($event->is(SessionEventType::SUBAGENT_COMPLETED)) {
            info('Sub-agent completed', $event->toArray());
        }

        if ($event->is(SessionEventType::SUBAGENT_FAILED)) {
            info('Sub-agent failed', $event->toArray());
        }
    });

    $session->sendAndWait(prompt: 'Onderzoek de authenticatie-implementatie in deze repository');
});
```

## Best practices

* Scheid een `researcher` (voornamelijk lezen) en een `editor` (verantwoordelijk voor wijzigingen)
* Houd `tools` zo minimaal mogelijk en beperk de rechten
* Schrijf een concrete `description` om de precisie van automatische delegatie te verhogen
* Vang `subagent.failed` op en zorg voor een retry- of fallbackstrategie

## Referenties

* [SessionConfig](/nl/packages/laravel-copilot-sdk/session-config)
* [SessionEvent](/nl/packages/laravel-copilot-sdk/session-event)
* [Fleet Mode](/nl/packages/laravel-copilot-sdk/fleet-mode)
* [MCP](/nl/packages/laravel-copilot-sdk/mcp)
* [Tools](/nl/packages/laravel-copilot-sdk/tools)


## Related topics

- [Een custom agent voor Boost maken](/nl/advanced/boost-custom-agent.md)
- [Laravel Boost custom agent voor GitHub Copilot CLI](/nl/packages/laravel-boost-copilot-cli.md)
- [Laravel Agent Detector — pakket voor het detecteren van AI-agents](/nl/blog/agent-detector-introduction.md)
- [Laravel Boost custom agent voor PhpStorm met GitHub Copilot](/nl/packages/laravel-boost-phpstorm-copilot.md)
- [Skills](/nl/packages/laravel-copilot-sdk/skills.md)
