[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CYA6DQ6JF30M0THATAEBYH":3,"skill-same:01M6CYA6DQ6JF30M0THATAEBYH":60},{"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":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":13,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":45,"install":46,"resources":59},"01M6CYA6DQ6JF30M0THATAEBYH","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\u002Fnaysmith","The-Rabak","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F44833742?v=4","01M6CY211HB58Y8JNWWEV9FGN1","01M6CY8HJW3TE1AQW1F13PHYB2",0,"GPL-2.0","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fnaysmith\u002Fblob\u002Fmain\u002F.github\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],"laravel","conventions","laravel conventions","writing","code","coding standards","compliance","php","coding","use","standards","reference","2026-11-10 10:12:30",false,"---\nname: laravel-conventions\ndescription: Modern Laravel 11+ \u002F PHP 8.3+ coding standards reference. Use when writing or reviewing PHP\u002FLaravel code to ensure convention compliance.\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,"description":7},"main","b097d394a335a9ec3c8a02d64e111f1a9c96703d",".github\u002Fskills\u002Flaravel-conventions","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fnaysmith","https:\u002F\u002Fgithub.com\u002FThe-Rabak","2026-03-04 03:03:05",{"source":8,"skillName":5,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add The-Rabak\u002Fnaysmith --skill laravel-conventions",{"tool":52,"command":53},"bunx","bunx skills add The-Rabak\u002Fnaysmith --skill laravel-conventions",{"tool":55,"command":56},"pnpm","pnpm dlx skills add The-Rabak\u002Fnaysmith --skill laravel-conventions","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fnaysmith\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Flaravel-conventions\u002FSKILL.md",true,[],[61,73,86,98,115,129],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":67,"publishedAt":35},"01M6CYBMHFVAMC4T3J8QFYN42M","workflows-work","Execute work plans efficiently while maintaining quality and finishing features","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fnaysmith\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fworkflows-work\u002FSKILL.md",[],[68,69,70,71,72],"workflows work","work","workflows","execute","quality",{"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":79,"publishedAt":35},"01M6CYBJ1KP7W3X8HEG49KST9Q","workflows-review","Perform exhaustive code reviews using multi-agent analysis, ultra-thinking, and worktrees","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fnaysmith\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fworkflows-review\u002FSKILL.md",[],[80,70,81,82,83,84,85,27],"workflows review","review","thinking","worktrees","multi-agent","analysis",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":35},"01M6CYBEW8DDBXW62Q2CA29BPR","workflows-plan","Transform feature descriptions into well-structured project plans following conventions","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fnaysmith\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fworkflows-plan\u002FSKILL.md",[],[70,93,94,95,96,97,24],"workflows plan","plan","project","structured","following conventions",{"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":109,"publishedAt":35},"01M6CYBBKAHJJ85JC2PS380TGZ","workflows-compound","Document a recently solved problem to compound your team's knowledge","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fnaysmith\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fworkflows-compound\u002FSKILL.md",[104],{"categoryNo":105,"categoryName":106,"taxonomyType":107,"taxonomyTypeDesc":108},"01JBSEEDCAT000000000000021","资料检索与研究","SCENARIO","使用场景",[110,111,70,112,113,114],"compound","workflows compound","document","knowledge","team",{"skillNo":116,"name":117,"nameZh":6,"description":118,"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":35},"01M6CYB9062GMP8VSA7N7PB4NW","workflows-brainstorm","Explore requirements and approaches through collaborative dialogue before planning implementation","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fnaysmith\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fworkflows-brainstorm\u002FSKILL.md",[],[122,123,70,124,125,126,127,128],"workflows brainstorm","brainstorm","planning","requirements","explore","implementation","dialogue",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":35},"01M6CYB6S7GKWH62CRV3K79MHW","triage","Triage and categorize findings for the CLI todo system","https:\u002F\u002Fgithub.com\u002FThe-Rabak\u002Fnaysmith\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Ftriage\u002FSKILL.md",[],[131,136,137,138,139],"system","categorize","todo","cli"]