Approfondisci l’architettura di estensione di Laravel Boost e crea un agente personalizzato implementando i contract SupportsGuidelines, SupportsMcp e SupportsSkills.
Laravel Boost supporta di default i principali strumenti di AI coding come Claude Code, Cursor, Codex, GitHub Copilot (VS Code). Per adattarsi a strumenti interni, agenti AI emergenti o flussi di lavoro proprietari, però, devi implementare un agente personalizzato tramite l’estensione di Boost.Casi in cui un agente custom è utile:
Stai usando un IDE o uno strumento AI non supportato da Boost
Vuoi integrare Boost in un flusso di sviluppo interno o in una pipeline CI/CD proprietaria
L’agente richiede un formato di file di configurazione o una procedura di installazione specifica
interface SupportsGuidelines{ // path del file in cui scrivere le linee guida AI public function guidelinesPath(): string; // se il file richiede un frontmatter public function frontmatter(): bool; // post-elaborazione del Markdown generato public function transformGuidelines(string $markdown): string;}
guidelinesPath() restituisce il path del file in cui scrivere le linee guida generate. Per Claude Code è CLAUDE.md, per Cursor .cursor/rules/laravel-boost.mdc, adattandosi al formato che l’agente carica.transformGuidelines() è un hook per elaborare il Markdown dopo la generazione. Puoi aggiungere un header specifico dell’agente o convertirlo in un formato speciale. Il default nella classe base restituisce la stringa così com’è.
interface SupportsMcp{ // se usare path assoluti nei comandi MCP public function useAbsolutePathForMcp(): bool; // restituisce il path dell'eseguibile PHP public function getPhpPath(bool $forceAbsolutePath = false): string; // restituisce il path di artisan public function getArtisanPath(bool $forceAbsolutePath = false): string; // installa la configurazione del server MCP public function installMcp(string $key, string $command, array $args = [], array $env = []): bool; // installa la configurazione del server MCP tramite HTTP public function installHttpMcp(string $key, string $url): bool;}
La classe base Agent ha già implementazioni di default per installMcp() e installHttpMcp(): nella maggior parte dei casi basta fare override di mcpInstallationStrategy() e mcpConfigPath().Ci sono due strategie di installazione.
McpInstallationStrategy
Comportamento
FILE
Scrive la configurazione in un file JSON/TOML (default)
Implementiamo concretamente una classe di agente custom. Come esempio, un ipotetico “MyAgent” integrato in un flusso CI/CD proprietario.
1
Creare la classe dell'agente
Crea 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() usa il default della classe base Agent (false) // anche transformGuidelines() usa il default (restituisce la stringa) // --- SupportsMcp --- // useAbsolutePathForMcp(), getPhpPath(), getArtisanPath(), // installMcp(), installHttpMcp() sono già implementati nella classe base public function mcpInstallationStrategy(): McpInstallationStrategy { return McpInstallationStrategy::FILE; } public function mcpConfigPath(): string { return '.myagent.json'; } // --- SupportsSkills --- public function skillsPath(): string { return '.myagent/skills'; }}
systemDetectionConfig() e projectDetectionConfig() servono a Boost per rilevare automaticamente l’agente a livello di sistema e di progetto. All’esecuzione di boost:install l’agente compare fra i candidati.
2
Registrare l'agente
Nel metodo boot di App\Providers\AppServiceProvider registri l’agente custom.
<?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); }}
Dopo la registrazione, con php artisan boost:install MyAgent compare tra le scelte.
3
Verifica del funzionamento
php artisan boost:install
Nella schermata di selezione dell’agente MyAgent viene mostrato. Selezionandolo vengono generati MYAGENT.md, .myagent.json e .myagent/skills/.
Con transformGuidelines() puoi elaborare il Markdown dopo la generazione.
public function transformGuidelines(string $markdown): string{ // aggiunge un header specifico dell'agente $header = "<!-- Generated by Laravel Boost for MyAgent -->\n\n"; return $header . $markdown;}
## Regole specifiche del progettoIn questo progetto segui queste convenzioni:- Colloca sempre i modelli nel namespace `App\Models\`- Crea tutti gli endpoint API sotto `App\Http\Controllers\Api\`- Racchiudi le transazioni DB con `DB::transaction()` all'interno delle service class@verbatim<code-snippet name="Esempio di transazione in una service class" lang="php">DB::transaction(function () use ($data) { $order = Order::create($data); $order->items()->createMany($data['items']); event(new OrderCreated($order));});</code-snippet>@endverbatim
Eseguendo boost:install queste linee guida vengono unite automaticamente a quelle integrate in Boost.
SKILL.md è composto da un frontmatter YAML e da istruzioni Markdown.
---name: creating-invoicesdescription: Skill da usare quando implementi la creazione, l'aggiornamento e l'invio di fatture (Invoice).---# Skill di creazione fatture## Quando usare questa skillQuando implementi il modello Invoice, la generazione PDF e l'invio email di una fattura.## Struttura dei file- `app/Models/Invoice.php` — modello Invoice- `app/Services/InvoiceService.php` — logica di business- `app/Jobs/SendInvoiceEmail.php` — job di invio email## Pattern di implementazione### Creare una fattura```php// $items è l'array passato dal controller o da un altro 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());
Le skill sono progettate per essere “caricate solo quando servono”. Metti in linee guida le informazioni sempre necessarie e nelle skill i pattern dettagliati specifici del task: ottimizzi l’uso della context dell’AI.
## MyPackageQuesto pacchetto fornisce [panoramica delle funzionalità].### Uso di base@verbatim<code-snippet name="Inizializzazione di MyPackage" lang="php">$result = MyPackage::create([ 'option' => 'value',]);</code-snippet>@endverbatim
---name: mypackage-developmentdescription: Skill per implementare funzionalità con MyPackage.---# MyPackage Development## Quando usare questa skillQuando implementi funzionalità che usano MyPackage.## Funzionalità principali- Funzionalità 1: ...- Funzionalità 2: ...
Quando gli utenti del pacchetto eseguono php artisan boost:install, queste linee guida e skill vengono rilevate automaticamente e proposte per l’installazione.
Esempio completo di “PipelineAgent”, un agente virtuale integrato in una pipeline CI/CD interna. L’agente supporta solo le linee guida, non MCP e non skill.
<?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 { // rileva la presenza tramite variabili d'ambiente di CI return [ 'command' => match ($platform) { Platform::Windows => 'cmd /c echo %CI_AGENT_VERSION% 2>nul', default => 'echo $CI_AGENT_VERSION', }, ]; } public function projectDetectionConfig(): array { // rileva tramite un file di configurazione nella root del progetto return [ 'files' => ['.pipeline-agent.yml'], ]; } public function guidelinesPath(): string { // path delle regole che l'agente CI/CD legge return '.pipeline/CODING_GUIDELINES.md'; } public function frontmatter(): bool { return false; } public function transformGuidelines(string $markdown): string { // aggiunge un header di metadati per la pipeline $timestamp = now()->toIso8601String(); return "<!-- Generated by Laravel Boost at {$timestamp} -->\n\n{$markdown}"; }}
Registrazione in AppServiceProvider:
use App\Boost\PipelineAgent;use Laravel\Boost\Boost;public function boot(): void{ Boost::registerAgent('pipeline_agent', PipelineAgent::class);}
In ambiente CI puoi generare solo le linee guida con: