[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CY6YCDC0MX2FSM9R11ZMK4":3,"skill-same:01M6CY6YCDC0MX2FSM9R11ZMK4":72},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":52,"commitSha":53,"skillDirectory":54,"forksCount":13,"repositoryHtmlUrl":55,"repositoryHomepageUrl":6,"ownerHtmlUrl":56,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":57,"install":58,"resources":71},"01M6CY6YCDC0MX2FSM9R11ZMK4","laravel-conventions",null,"Modern Laravel 11+ \u002F PHP 8.3+ coding standards reference. Use when writing or reviewing PHP\u002FLaravel code to ensure convention compliance.","The-Rabak\u002Fcompound-engineering-plugin","The-Rabak","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F44833742?v=4","01M6CY211HB58Y8JNWWEV9FGN1","01M6CY2165MYWKS66VN01X82EB",1,"MIT","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fcompound-engineering-plugin\u002Fblob\u002Fmain\u002Fportable\u002Fcompound-engineering\u002Fskills\u002Flaravel-conventions\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"laravel","conventions","laravel conventions","writing","codex","code","coding standards","gpt","compliance","php","coding","openrouter","use","standards","kimi","reference","2026-11-10 10:12:30",false,"---\nname: laravel-conventions\ndescription: >-\n  Modern Laravel 11+ \u002F PHP 8.3+ coding standards reference. Use when writing or reviewing\n  PHP\u002FLaravel code to ensure convention compliance.\nmodel: claude-sonnet-5\nplatforms:\n  codex:\n    model: gpt-5.5\n  copilot:\n    model: gpt-5.3-codex\n  opencode:\n    model: openrouter\u002Fmoonshotai\u002Fkimi-k2.6\n\n---\n\n# Laravel Coding Conventions (Laravel 11+ \u002F PHP 8.3+)\n\nReference skill for modern Laravel coding standards and PHP 8.3+ best practices.\n\n## Architecture Pattern\n\n```\nController -> FormRequest -> Action\u002FService -> Model\n```\n\n- **Controllers**: Thin, single-responsibility. Invoke actions or services, return API resources\n- **Actions**: Single-purpose classes for discrete operations (e.g., `CreateUser`, `ProcessPayment`)\n- **Services**: Coordinate multiple actions or complex business logic\n- **Models**: Eloquent models with relationships, scopes, casts, and accessors\u002Fmutators\n- **DTOs**: Readonly data transfer objects for passing structured data between layers\n\n## PHP 8.3+ Features to Use\n\n```php\ndeclare(strict_types=1);\n\n\u002F\u002F Readonly classes for DTOs\nreadonly class CreateUserData {\n    public function __construct(\n        public string $name,\n        public string $email,\n        public ?string $phone = null,\n    ) {}\n}\n\n\u002F\u002F Enums instead of constants\nenum UserStatus: string {\n    case Active = 'active';\n    case Suspended = 'suspended';\n    case Pending = 'pending';\n}\n\n\u002F\u002F First-class callable syntax\n$users->map($this->transformUser(...));\n\n\u002F\u002F Named arguments for clarity\nCache::put(key: $cacheKey, value: $data, ttl: 3600);\n\n\u002F\u002F Match expressions over switch\n$label = match($status) {\n    UserStatus::Active => 'Active User',\n    UserStatus::Suspended => 'Account Suspended',\n    default => 'Unknown',\n};\n```\n\n## Naming Conventions\n\n| Type | Convention | Example |\n|------|------------|---------|\n| Classes | PascalCase | `UserService` |\n| Methods | camelCase | `getUserById` |\n| Properties\u002FVariables | camelCase | `$userData` |\n| Constants | UPPER_SNAKE_CASE | `MAX_RETRIES` |\n| Database tables | plural, snake_case | `user_accounts` |\n| Database columns | snake_case | `created_at` |\n| Routes | kebab-case | `\u002Fuser-profiles` |\n| Config keys | snake_case | `cache.default_ttl` |\n| Enums | PascalCase | `UserStatus::Active` |\n\n## Code Style\n\n- PSR-12 compliance, enforced via Laravel Pint\n- `declare(strict_types=1)` at the top of every PHP file\n- Single quotes for strings (unless interpolation needed)\n- Short array syntax `[]` with trailing commas\n- Type declarations on all parameters, return types, and properties\n- No `mixed` type unless absolutely necessary\n- Constructor property promotion where appropriate\n\n## Directory Structure (Laravel 11+)\n\n```\napp\u002F\n├── Actions\u002F              # Single-purpose action classes\n├── Console\u002FCommands\u002F     # Artisan commands\n├── DTOs\u002F                 # Readonly data transfer objects\n├── Enums\u002F                # PHP 8.1+ backed enums\n├── Events\u002F               # Event classes\n├── Exceptions\u002F           # Custom exceptions\n├── Http\u002F\n│   ├── Controllers\u002F      # API\u002FWeb controllers\n│   ├── Middleware\u002F        # Request middleware\n│   ├── Requests\u002F         # FormRequest validation\n│   └── Resources\u002F        # API Resources (JSON transformations)\n├── Jobs\u002F                 # Queued jobs\n├── Listeners\u002F            # Event listeners\n├── Mail\u002F                 # Mailable classes\n├── Models\u002F               # Eloquent models\n│   └── Concerns\u002F         # Model traits\n├── Notifications\u002F        # Notification classes\n├── Observers\u002F            # Model observers\n├── Policies\u002F             # Authorization policies\n├── Providers\u002F            # Service providers\n├── Rules\u002F                # Custom validation rules\n└── Services\u002F             # Business logic services\ndatabase\u002F\n├── factories\u002F            # Model factories\n├── migrations\u002F           # Database migrations\n└── seeders\u002F              # Database seeders\nroutes\u002F\n├── api.php               # API routes\n├── web.php               # Web routes\n└── console.php           # Console routes (Laravel 11+)\ntests\u002F\n├── Feature\u002F              # Feature\u002Fintegration tests\n├── Unit\u002F                 # Unit tests\n└── Pest.php              # Pest configuration\n```\n\n## Eloquent Best Practices\n\n```php\n\u002F\u002F Use $casts property (not method unless dynamic)\nprotected $casts = [\n    'email_verified_at' => 'datetime',\n    'status' => UserStatus::class,\n    'settings' => 'array',\n    'is_admin' => 'boolean',\n];\n\n\u002F\u002F Scope queries for reuse\npublic function scopeActive(Builder $query): Builder\n{\n    return $query->where('status', UserStatus::Active);\n}\n\n\u002F\u002F Prevent lazy loading in development\n\u002F\u002F In AppServiceProvider::boot()\nModel::preventLazyLoading(! app()->isProduction());\n\n\u002F\u002F Use strict mode\nModel::shouldBeStrict(! app()->isProduction());\n\n\u002F\u002F Eager load relationships\nUser::with(['posts', 'profile'])->get();\n\n\u002F\u002F Use whenLoaded in API Resources\n'posts' => PostResource::collection($this->whenLoaded('posts')),\n```\n\n## Database Migrations\n\n### Naming Convention\n\n```\nYYYY_MM_DD_HHMMSS_description.php\n```\n\n### Best Practices\n\n- One concern per migration file\n- Always include `down()` method for rollbacks\n- Never modify migrations that have been run in production\n- Use `foreignId()` and `constrained()` for foreign keys\n- Use `after()` to control column order\n\n```php\nSchema::create('posts', function (Blueprint $table) {\n    $table->id();\n    $table->foreignId('user_id')->constrained()->cascadeOnDelete();\n    $table->string('title');\n    $table->string('slug')->unique();\n    $table->text('body');\n    $table->enum('status', ['draft', 'published', 'archived'])->default('draft');\n    $table->timestamp('published_at')->nullable();\n    $table->timestamps();\n    $table->softDeletes();\n\n    $table->index(['status', 'published_at']);\n});\n```\n\n## API Resources\n\n```php\n\u002F\u002F Always use API Resources for JSON responses\nclass UserResource extends JsonResource\n{\n    public function toArray(Request $request): array\n    {\n        return [\n            'id' => $this->id,\n            'name' => $this->name,\n            'email' => $this->email,\n            'posts' => PostResource::collection($this->whenLoaded('posts')),\n            'created_at' => $this->created_at->toISOString(),\n        ];\n    }\n}\n\n\u002F\u002F In controller\nreturn UserResource::make($user);\nreturn UserResource::collection($users);\n```\n\n## Queues and Jobs\n\n```php\n\u002F\u002F Implement ShouldQueue for async processing\nclass ProcessPayment implements ShouldQueue\n{\n    use Queueable;\n\n    public int $tries = 3;\n    public int $backoff = 60;\n    public int $timeout = 120;\n\n    public function __construct(\n        private readonly Order $order,\n    ) {}\n\n    public function handle(PaymentGateway $gateway): void\n    {\n        $gateway->charge($this->order);\n    }\n\n    public function failed(\\Throwable $exception): void\n    {\n        \u002F\u002F Notify team of failure\n    }\n}\n```\n\n## Events and Listeners\n\n```php\n\u002F\u002F Use typed events\nclass OrderPlaced\n{\n    public function __construct(\n        public readonly Order $order,\n    ) {}\n}\n\n\u002F\u002F Auto-discovered listeners (Laravel 11+)\n\u002F\u002F Just type-hint the event in handle()\nclass SendOrderConfirmation\n{\n    public function handle(OrderPlaced $event): void\n    {\n        $event->order->user->notify(new OrderConfirmationNotification($event->order));\n    }\n}\n```\n\n## Routes\n\n```php\n\u002F\u002F Use controller class references\nRoute::apiResource('users', UserController::class);\n\n\u002F\u002F Group related routes\nRoute::prefix('admin')->middleware('auth:sanctum', 'admin')->group(function () {\n    Route::apiResource('users', Admin\\UserController::class);\n});\n\n\u002F\u002F Single-action controllers\nRoute::post('\u002Fwebhooks\u002Fstripe', StripeWebhookController::class);\n```\n\n## Security\n\n- Use Laravel Sanctum or Passport for API authentication\n- Always validate with FormRequest classes\n- Use Policies for authorization (not Gates in controllers)\n- Never expose internal IDs if security-sensitive -- use UUIDs or hashids\n- Use `$request->validated()` to only access validated data\n- Set rate limiting on API routes\n- Use `encrypt()`\u002F`decrypt()` for sensitive data at rest\n\n## Error Handling\n\n```php\n\u002F\u002F Custom exceptions with render method\nclass InsufficientFundsException extends Exception\n{\n    public function render(Request $request): JsonResponse\n    {\n        return response()->json([\n            'message' => 'Insufficient funds for this transaction.',\n        ], 422);\n    }\n}\n\n\u002F\u002F Use abort helpers\nabort_if(! $user->canAccess($resource), 403);\nabort_unless($order->isPending(), 422, 'Order is no longer pending.');\n```\n\n## Testing with Pest\n\n```php\n\u002F\u002F Feature test\nit('creates a user', function () {\n    $response = postJson('\u002Fapi\u002Fusers', [\n        'name' => 'Jane Doe',\n        'email' => 'jane@example.com',\n        'password' => 'secure-password',\n    ]);\n\n    $response->assertCreated()\n        ->assertJsonPath('data.name', 'Jane Doe');\n\n    $this->assertDatabaseHas('users', ['email' => 'jane@example.com']);\n});\n\n\u002F\u002F Unit test with mocking\nit('calculates order total with tax', function () {\n    $order = Order::factory()->create(['subtotal' => 10000]);\n\n    expect($order->totalWithTax())->toBe(10800);\n});\n\n\u002F\u002F Use datasets for parameterized tests\nit('validates required fields', function (string $field) {\n    $data = User::factory()->make()->toArray();\n    unset($data[$field]);\n\n    postJson('\u002Fapi\u002Fusers', $data)->assertUnprocessable()\n        ->assertJsonValidationErrors($field);\n})->with(['name', 'email', 'password']);\n```\n\n### Running Tests\n\n```bash\n# All tests\nphp artisan test\n\n# With Pest directly\n.\u002Fvendor\u002Fbin\u002Fpest\n\n# Specific test file\n.\u002Fvendor\u002Fbin\u002Fpest tests\u002FFeature\u002FUserTest.php\n\n# Filter by name\n.\u002Fvendor\u002Fbin\u002Fpest --filter \"creates a user\"\n\n# Parallel execution\nphp artisan test --parallel\n```\n\n### Running Linter\n\n```bash\n.\u002Fvendor\u002Fbin\u002Fpint\n\n# Check only (no changes)\n.\u002Fvendor\u002Fbin\u002Fpint --test\n\n# Static analysis\n.\u002Fvendor\u002Fbin\u002Fphpstan analyse\n```\n","# Laravel Coding Conventions (Laravel 11+ \u002F PHP 8.3+)\n\nReference skill for modern Laravel coding standards and PHP 8.3+ best practices.\n\n## Architecture Pattern\n\n```\nController -> FormRequest -> Action\u002FService -> Model\n```\n\n- **Controllers**: Thin, single-responsibility. Invoke actions or services, return API resources\n- **Actions**: Single-purpose classes for discrete operations (e.g., `CreateUser`, `ProcessPayment`)\n- **Services**: Coordinate multiple actions or complex business logic\n- **Models**: Eloquent models with relationships, scopes, casts, and accessors\u002Fmutators\n- **DTOs**: Readonly data transfer objects for passing structured data between layers\n\n## PHP 8.3+ Features to Use\n\n```php\ndeclare(strict_types=1);\n\n\u002F\u002F Readonly classes for DTOs\nreadonly class CreateUserData {\n    public function __construct(\n        public string $name,\n        public string $email,\n        public ?string $phone = null,\n    ) {}\n}\n\n\u002F\u002F Enums instead of constants\nenum UserStatus: string {\n    case Active = 'active';\n    case Suspended = 'suspended';\n    case Pending = 'pending';\n}\n\n\u002F\u002F First-class callable syntax\n$users->map($this->transformUser(...));\n\n\u002F\u002F Named arguments for clarity\nCache::put(key: $cacheKey, value: $data, ttl: 3600);\n\n\u002F\u002F Match expressions over switch\n$label = match($status) {\n    UserStatus::Active => 'Active User',\n    UserStatus::Suspended => 'Account Suspended',\n    default => 'Unknown',\n};\n```\n\n## Naming Conventions\n\n| Type | Convention | Example |\n|------|------------|---------|\n| Classes | PascalCase | `UserService` |\n| Methods | camelCase | `getUserById` |\n| Properties\u002FVariables | camelCase | `$userData` |\n| Constants | UPPER_SNAKE_CASE | `MAX_RETRIES` |\n| Database tables | plural, snake_case | `user_accounts` |\n| Database columns | snake_case | `created_at` |\n| Routes | kebab-case | `\u002Fuser-profiles` |\n| Config keys | snake_case | `cache.default_ttl` |\n| Enums | PascalCase | `UserStatus::Active` |\n\n## Code Style\n\n- PSR-12 compliance, enforced via Laravel Pint\n- `declare(strict_types=1)` at the top of every PHP file\n- Single quotes for strings (unless interpolation needed)\n- Short array syntax `[]` with trailing commas\n- Type declarations on all parameters, return types, and properties\n- No `mixed` type unless absolutely necessary\n- Constructor property promotion where appropriate\n\n## Directory Structure (Laravel 11+)\n\n```\napp\u002F\n├── Actions\u002F              # Single-purpose action classes\n├── Console\u002FCommands\u002F     # Artisan commands\n├── DTOs\u002F                 # Readonly data transfer objects\n├── Enums\u002F                # PHP 8.1+ backed enums\n├── Events\u002F               # Event classes\n├── Exceptions\u002F           # Custom exceptions\n├── Http\u002F\n│   ├── Controllers\u002F      # API\u002FWeb controllers\n│   ├── Middleware\u002F        # Request middleware\n│   ├── Requests\u002F         # FormRequest validation\n│   └── Resources\u002F        # API Resources (JSON transformations)\n├── Jobs\u002F                 # Queued jobs\n├── Listeners\u002F            # Event listeners\n├── Mail\u002F                 # Mailable classes\n├── Models\u002F               # Eloquent models\n│   └── Concerns\u002F         # Model traits\n├── Notifications\u002F        # Notification classes\n├── Observers\u002F            # Model observers\n├── Policies\u002F             # Authorization policies\n├── Providers\u002F            # Service providers\n├── Rules\u002F                # Custom validation rules\n└── Services\u002F             # Business logic services\ndatabase\u002F\n├── factories\u002F            # Model factories\n├── migrations\u002F           # Database migrations\n└── seeders\u002F              # Database seeders\nroutes\u002F\n├── api.php               # API routes\n├── web.php               # Web routes\n└── console.php           # Console routes (Laravel 11+)\ntests\u002F\n├── Feature\u002F              # Feature\u002Fintegration tests\n├── Unit\u002F                 # Unit tests\n└── Pest.php              # Pest configuration\n```\n\n## Eloquent Best Practices\n\n```php\n\u002F\u002F Use $casts property (not method unless dynamic)\nprotected $casts = [\n    'email_verified_at' => 'datetime',\n    'status' => UserStatus::class,\n    'settings' => 'array',\n    'is_admin' => 'boolean',\n];\n\n\u002F\u002F Scope queries for reuse\npublic function scopeActive(Builder $query): Builder\n{\n    return $query->where('status', UserStatus::Active);\n}\n\n\u002F\u002F Prevent lazy loading in development\n\u002F\u002F In AppServiceProvider::boot()\nModel::preventLazyLoading(! app()->isProduction());\n\n\u002F\u002F Use strict mode\nModel::shouldBeStrict(! app()->isProduction());\n\n\u002F\u002F Eager load relationships\nUser::with(['posts', 'profile'])->get();\n\n\u002F\u002F Use whenLoaded in API Resources\n'posts' => PostResource::collection($this->whenLoaded('posts')),\n```\n\n## Database Migrations\n\n### Naming Convention\n\n```\nYYYY_MM_DD_HHMMSS_description.php\n```\n\n### Best Practices\n\n- One concern per migration file\n- Always include `down()` method for rollbacks\n- Never modify migrations that have been run in production\n- Use `foreignId()` and `constrained()` for foreign keys\n- Use `after()` to control column order\n\n```php\nSchema::create('posts', function (Blueprint $table) {\n    $table->id();\n    $table->foreignId('user_id')->constrained()->cascadeOnDelete();\n    $table->string('title');\n    $table->string('slug')->unique();\n    $table->text('body');\n    $table->enum('status', ['draft', 'published', 'archived'])->default('draft');\n    $table->timestamp('published_at')->nullable();\n    $table->timestamps();\n    $table->softDeletes();\n\n    $table->index(['status', 'published_at']);\n});\n```\n\n## API Resources\n\n```php\n\u002F\u002F Always use API Resources for JSON responses\nclass UserResource extends JsonResource\n{\n    public function toArray(Request $request): array\n    {\n        return [\n            'id' => $this->id,\n            'name' => $this->name,\n            'email' => $this->email,\n            'posts' => PostResource::collection($this->whenLoaded('posts')),\n            'created_at' => $this->created_at->toISOString(),\n        ];\n    }\n}\n\n\u002F\u002F In controller\nreturn UserResource::make($user);\nreturn UserResource::collection($users);\n```\n\n## Queues and Jobs\n\n```php\n\u002F\u002F Implement ShouldQueue for async processing\nclass ProcessPayment implements ShouldQueue\n{\n    use Queueable;\n\n    public int $tries = 3;\n    public int $backoff = 60;\n    public int $timeout = 120;\n\n    public function __construct(\n        private readonly Order $order,\n    ) {}\n\n    public function handle(PaymentGateway $gateway): void\n    {\n        $gateway->charge($this->order);\n    }\n\n    public function failed(\\Throwable $exception): void\n    {\n        \u002F\u002F Notify team of failure\n    }\n}\n```\n\n## Events and Listeners\n\n```php\n\u002F\u002F Use typed events\nclass OrderPlaced\n{\n    public function __construct(\n        public readonly Order $order,\n    ) {}\n}\n\n\u002F\u002F Auto-discovered listeners (Laravel 11+)\n\u002F\u002F Just type-hint the event in handle()\nclass SendOrderConfirmation\n{\n    public function handle(OrderPlaced $event): void\n    {\n        $event->order->user->notify(new OrderConfirmationNotification($event->order));\n    }\n}\n```\n\n## Routes\n\n```php\n\u002F\u002F Use controller class references\nRoute::apiResource('users', UserController::class);\n\n\u002F\u002F Group related routes\nRoute::prefix('admin')->middleware('auth:sanctum', 'admin')->group(function () {\n    Route::apiResource('users', Admin\\UserController::class);\n});\n\n\u002F\u002F Single-action controllers\nRoute::post('\u002Fwebhooks\u002Fstripe', StripeWebhookController::class);\n```\n\n## Security\n\n- Use Laravel Sanctum or Passport for API authentication\n- Always validate with FormRequest classes\n- Use Policies for authorization (not Gates in controllers)\n- Never expose internal IDs if security-sensitive -- use UUIDs or hashids\n- Use `$request->validated()` to only access validated data\n- Set rate limiting on API routes\n- Use `encrypt()`\u002F`decrypt()` for sensitive data at rest\n\n## Error Handling\n\n```php\n\u002F\u002F Custom exceptions with render method\nclass InsufficientFundsException extends Exception\n{\n    public function render(Request $request): JsonResponse\n    {\n        return response()->json([\n            'message' => 'Insufficient funds for this transaction.',\n        ], 422);\n    }\n}\n\n\u002F\u002F Use abort helpers\nabort_if(! $user->canAccess($resource), 403);\nabort_unless($order->isPending(), 422, 'Order is no longer pending.');\n```\n\n## Testing with Pest\n\n```php\n\u002F\u002F Feature test\nit('creates a user', function () {\n    $response = postJson('\u002Fapi\u002Fusers', [\n        'name' => 'Jane Doe',\n        'email' => 'jane@example.com',\n        'password' => 'secure-password',\n    ]);\n\n    $response->assertCreated()\n        ->assertJsonPath('data.name', 'Jane Doe');\n\n    $this->assertDatabaseHas('users', ['email' => 'jane@example.com']);\n});\n\n\u002F\u002F Unit test with mocking\nit('calculates order total with tax', function () {\n    $order = Order::factory()->create(['subtotal' => 10000]);\n\n    expect($order->totalWithTax())->toBe(10800);\n});\n\n\u002F\u002F Use datasets for parameterized tests\nit('validates required fields', function (string $field) {\n    $data = User::factory()->make()->toArray();\n    unset($data[$field]);\n\n    postJson('\u002Fapi\u002Fusers', $data)->assertUnprocessable()\n        ->assertJsonValidationErrors($field);\n})->with(['name', 'email', 'password']);\n```\n\n### Running Tests\n\n```bash\n# All tests\nphp artisan test\n\n# With Pest directly\n.\u002Fvendor\u002Fbin\u002Fpest\n\n# Specific test file\n.\u002Fvendor\u002Fbin\u002Fpest tests\u002FFeature\u002FUserTest.php\n\n# Filter by name\n.\u002Fvendor\u002Fbin\u002Fpest --filter \"creates a user\"\n\n# Parallel execution\nphp artisan test --parallel\n```\n\n### Running Linter\n\n```bash\n.\u002Fvendor\u002Fbin\u002Fpint\n\n# Check only (no changes)\n.\u002Fvendor\u002Fbin\u002Fpint --test\n\n# Static analysis\n.\u002Fvendor\u002Fbin\u002Fphpstan analyse\n```\n",{"name":5,"model":44,"platforms":45,"description":7},"claude-sonnet-5",{"codex":46,"copilot":48,"opencode":50},{"model":47},"gpt-5.5",{"model":49},"gpt-5.3-codex",{"model":51},"openrouter\u002Fmoonshotai\u002Fkimi-k2.6","main","4c70ff7e10e692dfcc6d7877a6e57dd08df94d9b","portable\u002Fcompound-engineering\u002Fskills\u002Flaravel-conventions","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fcompound-engineering-plugin","https:\u002F\u002Fgithub.com\u002FThe-Rabak","2026-07-28 15:25:35",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add The-Rabak\u002Fcompound-engineering-plugin --skill laravel-conventions",{"tool":64,"command":65},"bunx","bunx skills add The-Rabak\u002Fcompound-engineering-plugin --skill laravel-conventions",{"tool":67,"command":68},"pnpm","pnpm dlx skills add The-Rabak\u002Fcompound-engineering-plugin --skill laravel-conventions","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fcompound-engineering-plugin\u002Fblob\u002Fmain\u002Fportable\u002Fcompound-engineering\u002Fskills\u002Flaravel-conventions\u002FSKILL.md",true,[],[73,89,98,108,116,123],{"skillNo":74,"name":75,"nameZh":6,"description":76,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":84,"publishedAt":39},"01M6CY858Z5RCC30TKAVBDJ6SZ","skill-one","Shared reusable skill.","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fcompound-engineering-plugin\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fsample-portable-plugin\u002Fskills\u002Fskill-one\u002FSKILL.md",[79],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[85,86,87,88,30],"skill one","shared","reusable","haiku",{"skillNo":90,"name":75,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":95,"publishedAt":39},"01M6CY843KQG3FQF6259420CCD","Sample skill","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fcompound-engineering-plugin\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fsample-plugin\u002Fskills\u002Fskill-one\u002FSKILL.md",[94],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[85,96,97],"sample","sample skill",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":105,"publishedAt":39},"01M6CY82607GGPWR5H25SY74H2","disabled-skill","A skill with model invocation disabled","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fcompound-engineering-plugin\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fsample-plugin\u002Fskills\u002Fdisabled-skill\u002FSKILL.md",[104],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[106,107],"disabled skill","model",{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":39},"01M6CY80RWMK81T97A2Q5KAFAF","default-skill","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fcompound-engineering-plugin\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fcustom-paths\u002Fskills\u002Fdefault-skill\u002FSKILL.md",[],[114,115],"default skill","default",{"skillNo":117,"name":118,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":39},"01M6CY7ZK2PMV75ES90W6YYD4S","custom-skill","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fcompound-engineering-plugin\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fcustom-paths\u002Fcustom-skills\u002Fcustom-skill\u002FSKILL.md",[],[122],"custom skill",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":130,"publishedAt":39},"01M6CY7V6C7HFCNJEVNFT1X00T","workflow-next-step","This skill should be used at the end of core compound-engineering workflows to inspect completed artifacts, show the workflow progress checklist, and give the exact next-session command with inputs.","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fcompound-engineering-plugin\u002Fblob\u002Fmain\u002Fportable\u002Fcompound-engineering\u002Fskills\u002Fworkflow-next-step\u002FSKILL.md",[129],{"categoryNo":80,"categoryName":81,"taxonomyType":82,"taxonomyTypeDesc":83},[131,132,133,134,135,136,137,138,139,140,141,142],"workflow","next","workflow next step","compound","show","checklist","session","command","engineering","artifacts","core","workflows"]