Découvrez l’architecture extensible de Laravel Boost et apprenez à créer un agent personnalisé qui implémente les contrats SupportsGuidelines, SupportsMcp et SupportsSkills.
Laravel Boost prend en charge en standard les principaux outils de coding IA tels que Claude Code, Cursor, Codex, GitHub Copilot (VS Code). Cependant, pour prendre en charge des outils internes, des agents d’IA émergents ou des workflows propres, vous devez implémenter un agent personnalisé à l’aide des mécanismes d’extension de Boost.Situations où un agent personnalisé est utile :
Vous utilisez un IDE ou un outil d’IA non pris en charge par Boost
Vous voulez intégrer Boost dans un workflow de développement interne ou un pipeline CI/CD propre
L’agent a un format de fichier de configuration ou une procédure d’installation spécifiques
interface SupportsGuidelines{ // Chemin de fichier où écrire les guidelines d'IA public function guidelinesPath(): string; // Le fichier de guidelines nécessite-t-il un frontmatter ? public function frontmatter(): bool; // Post-traite le Markdown de guidelines généré public function transformGuidelines(string $markdown): string;}
guidelinesPath() retourne le chemin du fichier dans lequel les guidelines générées seront écrites. Adaptez-le au format lu par l’agent : CLAUDE.md pour Claude Code, .cursor/rules/laravel-boost.mdc pour Cursor, etc.transformGuidelines() est un hook pour transformer le Markdown après génération. Vous pouvez ajouter un en-tête spécifique à l’agent ou convertir vers un format particulier. L’implémentation par défaut de la classe de base Agent retourne la chaîne telle quelle.
interface SupportsMcp{ // Utiliser un chemin absolu pour la commande MCP ? public function useAbsolutePathForMcp(): bool; // Retourne le chemin de l'exécutable PHP public function getPhpPath(bool $forceAbsolutePath = false): string; // Retourne le chemin d'artisan public function getArtisanPath(bool $forceAbsolutePath = false): string; // Installe la configuration du serveur MCP public function installMcp(string $key, string $command, array $args = [], array $env = []): bool; // Installe la configuration MCP en HTTP public function installHttpMcp(string $key, string $url): bool;}
Comme la classe de base Agent fournit une implémentation par défaut de installMcp() et installHttpMcp(), il suffit dans la plupart des cas de surcharger mcpInstallationStrategy() et mcpConfigPath().Il existe deux stratégies d’installation.
McpInstallationStrategy
Comportement
FILE
Écrit la configuration dans un fichier JSON/TOML (par défaut)
SHELL
Exécute une commande shell pour enregistrer le MCP
interface SupportsSkills{ // Chemin du répertoire où écrire les Agent Skills public function skillsPath(): string;}
Retourne le chemin du répertoire de skills lu par l’agent. Adaptez-le aux spécifications de l’agent : .claude/skills pour Claude Code, .cursor/skills pour Cursor, etc.
Implémentons concrètement notre propre classe d’agent. Nous prendrons pour exemple un agent virtuel « MyAgent » intégré dans un workflow CI/CD propre.
1
Créer la classe d'agent
Créez app/Boost/MyAgent.php.
<?phpdeclare(strict_types=1);namespace App\Boost;use Laravel\Boost\Contracts\SupportsGuidelines;use Laravel\Boost\Contracts\SupportsMcp;use Laravel\Boost\Contracts\SupportsSkills;use Laravel\Boost\Install\Agents\Agent;use Laravel\Boost\Install\Enums\McpInstallationStrategy;use Laravel\Boost\Install\Enums\Platform;class MyAgent extends Agent implements SupportsGuidelines, SupportsMcp, SupportsSkills{ public function name(): string { return 'my_agent'; } public function displayName(): string { return 'MyAgent'; } public function systemDetectionConfig(Platform $platform): array { return match ($platform) { Platform::Darwin, Platform::Linux => [ 'command' => 'command -v myagent', ], Platform::Windows => [ 'command' => 'cmd /c where myagent 2>nul', ], }; } public function projectDetectionConfig(): array { return [ 'files' => ['.myagent.json'], ]; } // --- SupportsGuidelines --- public function guidelinesPath(): string { return 'MYAGENT.md'; } // frontmatter() utilise la valeur par défaut de la classe de base Agent (false) // transformGuidelines() utilise également la valeur par défaut de la classe de base (retourne tel quel) // --- SupportsMcp --- // useAbsolutePathForMcp(), getPhpPath(), getArtisanPath(), // installMcp(), installHttpMcp() sont tous déjà implémentés par la classe de base Agent public function mcpInstallationStrategy(): McpInstallationStrategy { return McpInstallationStrategy::FILE; } public function mcpConfigPath(): string { return '.myagent.json'; } // --- SupportsSkills --- public function skillsPath(): string { return '.myagent/skills'; }}
systemDetectionConfig() et projectDetectionConfig() sont utilisées par Boost pour détecter automatiquement l’agent au niveau système et projet. Lors de l’exécution de boost:install, l’agent correspondant sera automatiquement affiché comme candidat.
2
Enregistrer l'agent
Enregistrez l’agent personnalisé dans la méthode boot de App\Providers\AppServiceProvider.
<?phpnamespace App\Providers;use App\Boost\MyAgent;use Illuminate\Support\ServiceProvider;use Laravel\Boost\Boost;class AppServiceProvider extends ServiceProvider{ public function boot(): void { Boost::registerAgent('my_agent', MyAgent::class); }}
Après enregistrement, lancer php artisan boost:install fait apparaître MyAgent parmi les choix.
3
Vérifier le fonctionnement
php artisan boost:install
Sur l’écran de sélection des agents à installer, MyAgent apparaîtra. En le sélectionnant, MYAGENT.md, .myagent.json et .myagent/skills/ seront générés.
Utilisez transformGuidelines() pour transformer le Markdown après génération.
public function transformGuidelines(string $markdown): string{ // Ajouter un en-tête spécifique à l'agent $header = "<!-- Generated by Laravel Boost for MyAgent -->\n\n"; return $header . $markdown;}
## Règles spécifiques au projetDans ce projet, respectez les conventions suivantes :- Placer les modèles obligatoirement dans le namespace `App\Models\`- Créer tous les endpoints API sous `App\Http\Controllers\Api\`- Encapsuler les transactions BDD avec `DB::transaction()` à l'intérieur de la classe de service@verbatim<code-snippet name="Exemple de transaction dans une classe de service" lang="php">DB::transaction(function () use ($data) { $order = Order::create($data); $order->items()->createMany($data['items']); event(new OrderCreated($order));});</code-snippet>@endverbatim
Lors de l’exécution de boost:install, ces guidelines sont automatiquement combinées avec les guidelines intégrées de Boost et produites en sortie.
SKILL.md est composé d’un frontmatter YAML et d’instructions en Markdown.
---name: creating-invoicesdescription: Skill utilisée pour implémenter la création, la mise à jour et l'envoi des factures (Invoice).---# Skill de création de factures## Quand utiliser cette skillÀ utiliser lors de l'implémentation du modèle de facture, de la génération PDF de la facture et de l'envoi par e-mail.## Structure des fichiers- `app/Models/Invoice.php` — Modèle de facture- `app/Services/InvoiceService.php` — Logique métier- `app/Jobs/SendInvoiceEmail.php` — Job d'envoi d'e-mail## Patterns d'implémentation### Création d'une facture```php// $items est un tableau passé depuis le contrôleur ou un autre service$invoice = InvoiceService::create([ 'user_id' => $user->id, 'items' => $items, 'due_date' => now()->addDays(30),]);
use Barryvdh\DomPDF\Facade\Pdf;use Illuminate\Support\Facades\Storage;$pdf = Pdf::loadView('invoices.pdf', ['invoice' => $invoice]);Storage::put("invoices/{$invoice->id}.pdf", $pdf->output());
Les skills sont conçues pour être « chargées uniquement quand nécessaire ». En séparant les informations toujours utiles dans les guidelines et les patterns détaillés propres à une tâche dans les skills, vous optimisez la consommation de contexte de l’IA.
---name: mypackage-developmentdescription: Skill pour implémenter les fonctionnalités de MyPackage.---# MyPackage Development## Quand utiliser cette skillÀ utiliser lors de l'implémentation de fonctionnalités utilisant MyPackage.## Fonctionnalités principales- Fonctionnalité 1 : ...- Fonctionnalité 2 : ...
Lorsqu’un utilisateur du package exécute php artisan boost:install, ces guidelines et skills sont automatiquement détectées et affichées comme cibles d’installation.
Exemple pratique : agent personnalisé pour un pipeline CI/CD propre
Voici l’implémentation complète d’un agent virtuel « PipelineAgent » intégré dans un pipeline CI/CD interne. Cet agent ne prend en charge que les guidelines, pas le MCP ni les skills.
<?phpdeclare(strict_types=1);namespace App\Boost;use Laravel\Boost\Contracts\SupportsGuidelines;use Laravel\Boost\Install\Agents\Agent;use Laravel\Boost\Install\Enums\Platform;class PipelineAgent extends Agent implements SupportsGuidelines{ public function name(): string { return 'pipeline_agent'; } public function displayName(): string { return 'Pipeline Agent (CI/CD)'; } public function systemDetectionConfig(Platform $platform): array { // Détecter la présence via une variable d'environnement CI return [ 'command' => match ($platform) { Platform::Windows => 'cmd /c echo %CI_AGENT_VERSION% 2>nul', default => 'echo $CI_AGENT_VERSION', }, ]; } public function projectDetectionConfig(): array { // Détecter via un fichier de configuration à la racine du projet return [ 'files' => ['.pipeline-agent.yml'], ]; } public function guidelinesPath(): string { // Chemin des conventions lu par l'agent CI/CD return '.pipeline/CODING_GUIDELINES.md'; } public function frontmatter(): bool { return false; } public function transformGuidelines(string $markdown): string { // Ajouter un en-tête de métadonnées pour le pipeline $timestamp = now()->toIso8601String(); return "<!-- Generated by Laravel Boost at {$timestamp} -->\n\n{$markdown}"; }}
Enregistrer dans AppServiceProvider :
use App\Boost\PipelineAgent;use Laravel\Boost\Boost;public function boot(): void{ Boost::registerAgent('pipeline_agent', PipelineAgent::class);}
En environnement CI, vous pouvez générer uniquement les guidelines avec la commande suivante :