Use this skill when changing a Laravel package service provider: config merges, routes, views, translations, publishing, migrations, assets, Blade components, commands, console-only behavior, or package metadata.
php artisan boost:add-skill wendelladriel/laravel-expressive
Save this content to: .claude/skills/package-service-provider/SKILL.md
# Package Service Provider
## Primary Goal
Wire package capabilities through explicit Laravel service provider code without defaulting to `spatie/laravel-package-tools`.
## Workflow
1. Inspect the package service provider and keep its existing method split. If the package uses names like `registerResources`, `registerPublishing`, `registerBladeComponents`, `registerConsole`, or `registerAboutMetadata`, add new behavior to the matching concern.
2. Put container bindings and `mergeConfigFrom` calls in `register()` when the host app must be able to override configuration.
3. Put resource loading in boot-time methods with Laravel-native APIs such as `loadRoutesFrom`, `loadViewsFrom`, and `loadTranslationsFrom`.
4. Guard console-only publishing and command registration with `runningInConsole()` before calling `publishes`, `publishesMigrations`, or `commands`.
5. Add tests for the observable package behavior: merged config, loaded routes, publish tags, command registration, or about metadata.
## References
- `src/*ServiceProvider.php`
- `config/*.php`
- `routes/*.php`
- `resources/views/`
- `lang/`
- `database/migrations/`
- `src/Console/Commands/`
## Examples
- Wire a new publish tag by adding a `publishes` map inside the existing console-guarded publishing method and naming the tag with `expressive-*`.
- Add a command by creating the command class, importing it in the provider, and adding it to the `commands` array inside the `runningInConsole()` guard.
## Anti-Patterns
- Loading host app state too early during provider registration.
- Calling `env()` outside config files; avoid `env() outside config` by using config values after `mergeConfigFrom` instead.
- Registering web-only concerns unconditionally when the package can run in console contexts.
- Replacing explicit provider methods with `spatie/laravel-package-tools` by default.
Wire package capabilities through explicit Laravel service provider code without defaulting to spatie/laravel-package-tools.
registerResources, registerPublishing, registerBladeComponents, registerConsole, or registerAboutMetadata, add new behavior to the matching concern.mergeConfigFrom calls in register() when the host app must be able to override configuration.loadRoutesFrom, loadViewsFrom, and loadTranslationsFrom.runningInConsole() before calling publishes, publishesMigrations, or commands.src/*ServiceProvider.phpconfig/*.phproutes/*.phpresources/views/lang/database/migrations/src/Console/Commands/publishes map inside the existing console-guarded publishing method and naming the tag with expressive-*.commands array inside the runningInConsole() guard.env() outside config files; avoid env() outside config by using config values after mergeConfigFrom instead.spatie/laravel-package-tools by default.How can I help you explore Laravel packages today?