Last updated: November 10, 2026
Short answer: Install two Laravel style skills in Claude Code and the agent gets opposite orders. Laravel Boost names controllers ArticleController, Spatie names them PostsController. Spatie says no final by default, while laravel-specialist puts final on its templates. Keep one style skill, and write the contested rules into CLAUDE.md, which is in context for every session.
We run Skillselion, an independent directory of Claude Code, Codex and Cursor extensions ranked by real installs. We are not affiliated with Anthropic or the Laravel team. This article is adapted from our guide to Laravel skills for Claude Code.
For this version we re-read the current SKILL.md of five Laravel skills on GitHub on November 10, 2026, plus the Boost rule files they point to. We looked for one thing: places where two skills tell the agent to do opposite things. Install counts are all-time figures from the live listing pages on the same day (skills.sh registry).
Which Laravel skills for Claude Code did we compare?
| Skill | Repo | Installs | Stated target |
|---|---|---|---|
| laravel-specialist | jeffallan/claude-skills | 23,827 | Laravel 10+, PHP 8.2+ |
| laravel-tdd | affaan-m/ecc | 11,734 | testing, PHPUnit and Pest |
| laravel-best-practices | laravel/boost | 2,374 | official, no version in SKILL.md |
| laravel-best-practices | asyrafhussin/agent-skills | 2,352 | Laravel 13.x, PHP 8.3+ |
| spatie-laravel-php | spatie/guidelines-skills | 1,308 | Spatie house style |
Boost's separate testing-best-practices skill and ECC's laravel-security come up below as supporting evidence.
What should win when a Laravel skill and your existing code disagree?
This is the first conflict, and it decides the others. Each skill has its own tiebreaker.
The official Laravel Boost laravel-best-practices skill (source) defers to your code:
The best choice is the one the codebase already uses, even if another pattern would be better in theory. Inconsistency is worse than a suboptimal pattern.
The Spatie Laravel PHP style skill (source) defers to the framework. Step 4 of its workflow:
If a rule conflicts with existing project conventions, follow Laravel conventions and keep changes consistent.
And jeffallan's laravel-specialist skill (source) defers to its own templates: "Use these as starting points for every implementation."
On a codebase that already exists, Boost's rule is the safe one, because it is the only one that never asks the agent to rewrite code that works. Boost's testing skill says the same about tests: "A pattern repeated throughout the project is a convention, and project conventions take precedence over this skill."
Should Claude Code mark Laravel classes final and readonly?
Spatie's "Don't" list says:
Use
finalorreadonlyby default.
laravel-specialist goes the other way. The first line of its MUST DO list is "Use PHP 8.2+ features (readonly, enums, typed properties)", and its model, API resource and queued job templates all declare final class. ECC's laravel-security skill does the same: its examples declare final class seven times.
Neither side is wrong about PHP. They differ on the default. If both are loaded, a model the agent writes on Monday can come out final and the one it writes on Tuesday can come out without it.
Is it PostController or PostsController?
Boost's style rules (rules/style.md) have a naming table. Its first row:
| Controller | Singular resource name | `ArticleController` |
Spatie's Do list:
Use plural resource names for controllers (
PostsController).
The asyrafhussin skill's example class is PostController, and the Laravel docs use php artisan make:controller UserController. So three sources go singular and one goes plural. If your team ships Spatie-style plural controllers, that is a convention to write down, because two of the skills will push the other way.
Should models use the $casts property or the casts() method?
Boost's Eloquent rules pick the method and still defer to you:
Use the
casts()method for automatic type conversion. If the project convention is the$castsproperty, follow that convention.
The User model in the Laravel 11 and 13 skeletons uses protected function casts(): array. But the model templates in laravel-specialist and in the asyrafhussin laravel-best-practices skill (source) both use the property:
protected $casts = [
'published_at' => 'datetime',
];
That snippet is from asyrafhussin, a skill that calls itself "Laravel 13 Best Practices". Both templates are also missing imports. laravel-specialist's Post model type-hints Builder in scopePublished(Builder $query) with no use line for it, and asyrafhussin's model returns Attribute::make(...) without importing Attribute. If the agent copies these as written, expect to fix the imports.
Can a Laravel unit test touch the database?
Boost's testing-best-practices skill has no listing of its own yet, so here is the Laravel Boost skills page and its source file. Its rule is short:
Write a feature test first. Write a unit test only for logic that does not use the framework.
The ECC laravel-tdd skill (source) puts its model tests under namespace Tests\Unit\Models;, with use RefreshDatabase; and factories that write rows. By Boost's rule, those belong in tests/Feature.
What coverage target should the agent aim for?
Three skills give you three different answers:
- laravel-specialist: "Write comprehensive tests (>85% coverage)".
- laravel-tdd: a table with Models at 95%+, Policies at 95%+ and Overall at 80%+, enforced with
vendor/bin/pest --coverage --min=80. - Boost testing-best-practices: no percentage. It asks the agent to "Cover every changed decision and each applicable high-value failure mode."
The test runner differs too. Boost's testing skill is a Blade template that checks whether pestphp/pest is installed and then tells the agent "This project uses Pest" or PHPUnit. laravel-tdd opens its red-green example in PHPUnit style. Its English SKILL.md no longer has the old line about preferring Pest for new tests (removed in June 2026). laravel-specialist's sample feature test is Pest.
How do you settle the conflicts in CLAUDE.md?
Two facts make CLAUDE.md the right place. The Claude Code docs say: "Unlike CLAUDE.md content, a skill's body loads only when it's used". So your conventions are in context before any Laravel skill loads. And both Boost skills say project conventions win, so a written rule is something they are built to follow.
The docs do not give a ranking between CLAUDE.md and a skill, so be explicit. Here is an example. The choices are placeholders, so swap in your own:
## Laravel conventions (these override any skill default)
- Controllers: singular resource name, e.g. ArticleController.
- Classes: no `final` or `readonly` unless the file already uses them.
- Casts: `casts()` method in new models. Keep `$casts` where it exists.
- Tests: Pest. Feature tests first. tests/Unit only for code that does not boot Laravel.
- Coverage: no percentage gate. Every changed branch, validation and policy gets a test.
- If a skill example disagrees with sibling files, copy the sibling files.
Then keep one style skill. Boost, Spatie, asyrafhussin and laravel-specialist all cover the same ground. The two ECC skills that do not overlap can sit next to any of them. One caveat: laravel-security's examples use final class, so the final line in your CLAUDE.md applies to it too. The laravel-verification pre-PR skill (source) runs Composer, Pint, PHPStan, tests, composer audit and a migrate --pretend dry run, and says "Environment and Composer checks gate everything else; stop immediately if they fail." The laravel-security skill from ECC (source) opens its production config with 'debug' => (bool) env('APP_DEBUG', false).
Does your Laravel version change which style skill you keep?
Yes. Boost's latest release, v2.10.4 (October 29, 2026), requires:
"php": "^8.2",
"illuminate/support": "^11.45.3|^12.41.1|^13.0",
The main branch has already moved to ^12.41.1|^13.0, so Laravel 11 support will probably end with the next release. Laravel 10 falls back to Boost's v1.8 line, which ships no skills.
| Your app | Style skill to keep |
|---|---|
| Laravel 11.45.3+, 12.41.1+ or 13 | Boost laravel-best-practices, via composer require laravel/boost --dev and php artisan boost:install
|
| Laravel 13 on PHP 8.3, new project | Boost or asyrafhussin |
| Laravel 10 | laravel-specialist, or Boost's skill via npx skills add, knowing that six of its rule files ship as unrendered .blade.php templates outside a Boost install |
One note on asyrafhussin: it says "31 rules across 7 categories", but two of the seven, Performance and API Design, say "No rule files exist yet for this category."
FAQ
Can I install Boost and Spatie together?
You can, but it brings in the controller-naming and final conflicts above. If you want Spatie's style, put its rules in CLAUDE.md and keep Boost for the rest.
Does laravel-tdd make Claude Code write Pest tests?
Not by default any more. Its current English SKILL.md shows both runners and starts with PHPUnit. Add "Tests: Pest" to CLAUDE.md.
Which Laravel skill has the most installs?
laravel-specialist, at 23,827 all-time installs on November 10, 2026. More installs is not a reason to load it next to Boost.
More options: our backend and data skills ranking, the security skills ranking for Claude Code, and our TDD skill guide for Claude Code for the test-first habit outside Laravel. The data comes from our live catalog, refreshed daily from skills.sh, GitHub and MCP registries, ranked by real installs.
Top comments (0)