[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7ANDY0CSSSQNG0GDZJ4WRFJ":3,"skill-same:01M7ANDY0CSSSQNG0GDZJ4WRFJ":155},{"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":17,"publishedAt":18,"linkOnly":19,"markdownContent":20,"markdownBody":21,"frontMatter":22,"refName":30,"commitSha":31,"skillDirectory":5,"forksCount":13,"repositoryHtmlUrl":32,"repositoryHomepageUrl":6,"ownerHtmlUrl":33,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":34,"install":35,"resources":48},"01M7ANDY0CSSSQNG0GDZJ4WRFJ","laravel-testing",null,"Laravel 13 testing with Pest PHP 4 or PHPUnit 12. Use when writing feature tests, unit tests, or any test code in a Laravel application. Triggers on tasks involving HTTP tests, model factories, database assertions, mocking facades, authentication testing, or test organisation patterns.","davidanthonyn\u002Fclaude-skills","davidanthonyn","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F55152980?v=4","01M7AJ4MY8S5C2RJCGX6626J0G","01M7AJ7JE1K98GRPH9Z57Z0R0W",0,"MIT","https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: laravel-testing\ndescription: Laravel 13 testing with Pest PHP 4 or PHPUnit 12. Use when writing feature tests, unit tests, or any test code in a Laravel application. Triggers on tasks involving HTTP tests, model factories, database assertions, mocking facades, authentication testing, or test organisation patterns.\nlicense: MIT\nmetadata:\n  author: Laravel Community\n  version: \"1.1.0\"\n  laravelVersion: \"13.x\"\n  phpVersion: \"8.3+\"\n  pestVersion: \"4.x\"\n  phpunitVersion: \"12.x\"\n---\n\n# Laravel 13 Testing — Pest PHP 4 & PHPUnit 12\n\n> **Supports both Pest PHP 4 and PHPUnit 12.** See Framework Detection below.\n>\n> **PHPUnit version note:** Laravel 13 ships with `phpunit\u002Fphpunit: ^12.5.12` in its default `composer.json`. All patterns in this skill are compatible with PHPUnit 11, 12, and 13.\n\nComprehensive testing guide for Laravel 13 applications. Contains 24 rules across 6 categories for writing fast, readable, and reliable tests. Supports both **Pest PHP 4** and **PHPUnit 12** (Laravel 13 default).\n\n## Framework Detection\n\n**Before writing or reviewing any test code, detect which testing framework the project uses:**\n\n### Step 1 — Check composer.json\n\n```bash\n# Look for these in require-dev:\n# \"pestphp\u002Fpest\" → Pest\n# \"phpunit\u002Fphpunit\" (without pest) → PHPUnit\n```\n\n- If `pestphp\u002Fpest` is present → **use Pest syntax**\n- If only `phpunit\u002Fphpunit` is present → **use PHPUnit syntax**\n- If both are present → **Pest takes priority** (Pest runs on top of PHPUnit)\n\n### Step 2 — Check for tests\u002FPest.php\n\n- If `tests\u002FPest.php` exists → **Pest is configured**, use Pest syntax\n\n### Step 3 — If still unclear, ask the user\n\n> \"I couldn't detect the testing framework. Does this project use **Pest PHP** or **PHPUnit**?\"\n\n---\n\n## Syntax Reference\n\n### Test Declaration\n\n| | Pest | PHPUnit |\n|--|------|---------|\n| Test function | `test('...', fn() => ...)` | `public function test_...(): void` |\n| Readable name | `it('...', fn() => ...)` | `#[Test] public function it_...()` |\n| Grouping | `describe('...', fn() => ...)` | Test class name \u002F nested classes |\n| Trait application | `uses(RefreshDatabase::class)` | `use RefreshDatabase;` inside class |\n| Before each | `beforeEach(fn() => ...)` | `protected function setUp(): void` |\n| After each | `afterEach(fn() => ...)` | `protected function tearDown(): void` |\n| Parameterised | `->with([...])` | `#[DataProvider]` attribute |\n| Global setup | `uses(...)->in('Feature')` in `Pest.php` | Base `TestCase` class |\n\n### Core assertions (identical in both frameworks)\n\n`assertStatus`, `assertJson`, `assertJsonPath`, `assertDatabaseHas`, `assertModelExists`, `actingAs`, `Mail::fake()`, `Queue::fake()`, `Event::fake()`, `Notification::fake()`, `Storage::fake()` — all work the same in Pest and PHPUnit.\n\n---\n\n## When to Apply\n\nReference these guidelines when:\n- Writing feature or unit tests for Laravel\n- Testing HTTP endpoints and API responses\n- Creating factories and test data\n- Asserting database state after operations\n- Faking Mail, Queue, Notification, or Event facades\n- Testing authenticated routes and API tokens\n- Organising tests with describe blocks, datasets, or test classes\n\n## Rule Categories by Priority\n\n| Priority | Category | Impact | Prefix |\n|----------|----------|--------|--------|\n| 1 | HTTP & Feature Tests | CRITICAL | `http-` |\n| 2 | Model Factories | CRITICAL | `factory-` |\n| 3 | Database Assertions | HIGH | `db-` |\n| 4 | Faking Services | HIGH | `fake-` |\n| 5 | Authentication Testing | HIGH | `auth-` |\n| 6 | Test Organisation Patterns | MEDIUM | `pest-` |\n\n## Quick Reference\n\n### 1. HTTP & Feature Tests (CRITICAL)\n\n- `http-test-structure` - Arrange\u002FAct\u002FAssert with factories — Pest + PHPUnit examples\n- `http-assert-response` - assertStatus, assertJson, assertRedirect, assertJsonMissing\n- `http-assert-json-fluent` - Fluent assertJson with AssertableJson closure\n- `http-refresh-database` - RefreshDatabase vs DatabaseTransactions — when to use each\n\n### 2. Model Factories (CRITICAL)\n\n- `factory-define` - Define factories with typed fake data and PHP 8.3 syntax\n- `factory-states` - Factory states for distinct test scenarios\n- `factory-sequences` - sequence() for varied data across multiple records\n- `factory-relationships` - has(), for(), recycle(), afterCreating()\n\n### 3. Database Assertions (HIGH)\n\n- `db-assert-has` - assertDatabaseHas, assertModelExists for presence checks\n- `db-assert-missing` - assertDatabaseMissing, assertModelMissing for deletion\n- `db-assert-soft-deletes` - assertSoftDeleted, trashed() factory state\n\n### 4. Faking Services (HIGH)\n\n- `fake-mail` - Mail::fake(), assertSent vs assertQueued, assertNothingSent\n- `fake-queue` - Queue::fake(), assertPushed, assertPushedOn\n- `fake-notification` - Notification::fake(), assertSentTo, assertCount\n- `fake-event` - Event::fake(), assertDispatched, assertNotDispatched\n- `fake-storage` - Storage::fake(), UploadedFile::fake(), assertExists\n- `fake-ai-agent` - Agent::fake(), assertPrompted, preventStrayPrompts (Laravel 13+)\n- `fake-ai-media` - Image::fake(), Audio::fake(), Transcription::fake() (Laravel 13+)\n- `fake-ai-data` - Embeddings::fake(), Reranking::fake(), Files::fake(), Stores::fake() (Laravel 13+)\n\n### 5. Authentication Testing (HIGH)\n\n- `auth-acting-as` - actingAs() for session\u002Fweb authenticated tests\n- `auth-sanctum` - Sanctum::actingAs() for API token authentication\n\n### 6. Test Organisation Patterns (MEDIUM)\n\n- `pest-describe-it` - describe()\u002Fit() (Pest) or test class organisation (PHPUnit)\n- `pest-datasets` - with() datasets (Pest) or #[DataProvider] (PHPUnit)\n- `pest-hooks` - beforeEach\u002FafterEach (Pest) or setUp\u002FtearDown (PHPUnit)\n\n## Essential Patterns\n\n### Pest\n\n```php\n\u003C?php\n\nuse App\\Models\\User;\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\n\nuses(RefreshDatabase::class);\n\ntest('authenticated user can create a post', function () {\n    $user = User::factory()->create();\n\n    $this->actingAs($user)\n        ->postJson('\u002Fapi\u002Fposts', ['title' => 'Hello World', 'body' => 'Content.'])\n        ->assertStatus(201)\n        ->assertJsonPath('data.title', 'Hello World');\n\n    $this->assertDatabaseHas('posts', ['title' => 'Hello World', 'user_id' => $user->id]);\n});\n```\n\n### PHPUnit\n\n```php\n\u003C?php\n\nnamespace Tests\\Feature;\n\nuse App\\Models\\User;\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\nuse Tests\\TestCase;\n\nclass PostControllerTest extends TestCase\n{\n    use RefreshDatabase;\n\n    public function test_authenticated_user_can_create_a_post(): void\n    {\n        $user = User::factory()->create();\n\n        $this->actingAs($user)\n            ->postJson('\u002Fapi\u002Fposts', ['title' => 'Hello World', 'body' => 'Content.'])\n            ->assertStatus(201)\n            ->assertJsonPath('data.title', 'Hello World');\n\n        $this->assertDatabaseHas('posts', ['title' => 'Hello World', 'user_id' => $user->id]);\n    }\n}\n```\n\n## How to Use\n\nRead individual rule files for detailed explanations and code examples.\n\nEach rule file contains:\n- YAML frontmatter with metadata (title, impact, tags)\n- Brief explanation of why it matters\n- Bad Example with explanation\n- Good Example with both Pest and PHPUnit where syntax differs\n- Laravel 13 specific context and references\n\n## Full Compiled Document\n\nFor the complete guide with all rules expanded: `AGENTS.md`\n","# Laravel 13 Testing — Pest PHP 4 & PHPUnit 12\n\n> **Supports both Pest PHP 4 and PHPUnit 12.** See Framework Detection below.\n>\n> **PHPUnit version note:** Laravel 13 ships with `phpunit\u002Fphpunit: ^12.5.12` in its default `composer.json`. All patterns in this skill are compatible with PHPUnit 11, 12, and 13.\n\nComprehensive testing guide for Laravel 13 applications. Contains 24 rules across 6 categories for writing fast, readable, and reliable tests. Supports both **Pest PHP 4** and **PHPUnit 12** (Laravel 13 default).\n\n## Framework Detection\n\n**Before writing or reviewing any test code, detect which testing framework the project uses:**\n\n### Step 1 — Check composer.json\n\n```bash\n# Look for these in require-dev:\n# \"pestphp\u002Fpest\" → Pest\n# \"phpunit\u002Fphpunit\" (without pest) → PHPUnit\n```\n\n- If `pestphp\u002Fpest` is present → **use Pest syntax**\n- If only `phpunit\u002Fphpunit` is present → **use PHPUnit syntax**\n- If both are present → **Pest takes priority** (Pest runs on top of PHPUnit)\n\n### Step 2 — Check for tests\u002FPest.php\n\n- If `tests\u002FPest.php` exists → **Pest is configured**, use Pest syntax\n\n### Step 3 — If still unclear, ask the user\n\n> \"I couldn't detect the testing framework. Does this project use **Pest PHP** or **PHPUnit**?\"\n\n---\n\n## Syntax Reference\n\n### Test Declaration\n\n| | Pest | PHPUnit |\n|--|------|---------|\n| Test function | `test('...', fn() => ...)` | `public function test_...(): void` |\n| Readable name | `it('...', fn() => ...)` | `#[Test] public function it_...()` |\n| Grouping | `describe('...', fn() => ...)` | Test class name \u002F nested classes |\n| Trait application | `uses(RefreshDatabase::class)` | `use RefreshDatabase;` inside class |\n| Before each | `beforeEach(fn() => ...)` | `protected function setUp(): void` |\n| After each | `afterEach(fn() => ...)` | `protected function tearDown(): void` |\n| Parameterised | `->with([...])` | `#[DataProvider]` attribute |\n| Global setup | `uses(...)->in('Feature')` in `Pest.php` | Base `TestCase` class |\n\n### Core assertions (identical in both frameworks)\n\n`assertStatus`, `assertJson`, `assertJsonPath`, `assertDatabaseHas`, `assertModelExists`, `actingAs`, `Mail::fake()`, `Queue::fake()`, `Event::fake()`, `Notification::fake()`, `Storage::fake()` — all work the same in Pest and PHPUnit.\n\n---\n\n## When to Apply\n\nReference these guidelines when:\n- Writing feature or unit tests for Laravel\n- Testing HTTP endpoints and API responses\n- Creating factories and test data\n- Asserting database state after operations\n- Faking Mail, Queue, Notification, or Event facades\n- Testing authenticated routes and API tokens\n- Organising tests with describe blocks, datasets, or test classes\n\n## Rule Categories by Priority\n\n| Priority | Category | Impact | Prefix |\n|----------|----------|--------|--------|\n| 1 | HTTP & Feature Tests | CRITICAL | `http-` |\n| 2 | Model Factories | CRITICAL | `factory-` |\n| 3 | Database Assertions | HIGH | `db-` |\n| 4 | Faking Services | HIGH | `fake-` |\n| 5 | Authentication Testing | HIGH | `auth-` |\n| 6 | Test Organisation Patterns | MEDIUM | `pest-` |\n\n## Quick Reference\n\n### 1. HTTP & Feature Tests (CRITICAL)\n\n- `http-test-structure` - Arrange\u002FAct\u002FAssert with factories — Pest + PHPUnit examples\n- `http-assert-response` - assertStatus, assertJson, assertRedirect, assertJsonMissing\n- `http-assert-json-fluent` - Fluent assertJson with AssertableJson closure\n- `http-refresh-database` - RefreshDatabase vs DatabaseTransactions — when to use each\n\n### 2. Model Factories (CRITICAL)\n\n- `factory-define` - Define factories with typed fake data and PHP 8.3 syntax\n- `factory-states` - Factory states for distinct test scenarios\n- `factory-sequences` - sequence() for varied data across multiple records\n- `factory-relationships` - has(), for(), recycle(), afterCreating()\n\n### 3. Database Assertions (HIGH)\n\n- `db-assert-has` - assertDatabaseHas, assertModelExists for presence checks\n- `db-assert-missing` - assertDatabaseMissing, assertModelMissing for deletion\n- `db-assert-soft-deletes` - assertSoftDeleted, trashed() factory state\n\n### 4. Faking Services (HIGH)\n\n- `fake-mail` - Mail::fake(), assertSent vs assertQueued, assertNothingSent\n- `fake-queue` - Queue::fake(), assertPushed, assertPushedOn\n- `fake-notification` - Notification::fake(), assertSentTo, assertCount\n- `fake-event` - Event::fake(), assertDispatched, assertNotDispatched\n- `fake-storage` - Storage::fake(), UploadedFile::fake(), assertExists\n- `fake-ai-agent` - Agent::fake(), assertPrompted, preventStrayPrompts (Laravel 13+)\n- `fake-ai-media` - Image::fake(), Audio::fake(), Transcription::fake() (Laravel 13+)\n- `fake-ai-data` - Embeddings::fake(), Reranking::fake(), Files::fake(), Stores::fake() (Laravel 13+)\n\n### 5. Authentication Testing (HIGH)\n\n- `auth-acting-as` - actingAs() for session\u002Fweb authenticated tests\n- `auth-sanctum` - Sanctum::actingAs() for API token authentication\n\n### 6. Test Organisation Patterns (MEDIUM)\n\n- `pest-describe-it` - describe()\u002Fit() (Pest) or test class organisation (PHPUnit)\n- `pest-datasets` - with() datasets (Pest) or #[DataProvider] (PHPUnit)\n- `pest-hooks` - beforeEach\u002FafterEach (Pest) or setUp\u002FtearDown (PHPUnit)\n\n## Essential Patterns\n\n### Pest\n\n```php\n\u003C?php\n\nuse App\\Models\\User;\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\n\nuses(RefreshDatabase::class);\n\ntest('authenticated user can create a post', function () {\n    $user = User::factory()->create();\n\n    $this->actingAs($user)\n        ->postJson('\u002Fapi\u002Fposts', ['title' => 'Hello World', 'body' => 'Content.'])\n        ->assertStatus(201)\n        ->assertJsonPath('data.title', 'Hello World');\n\n    $this->assertDatabaseHas('posts', ['title' => 'Hello World', 'user_id' => $user->id]);\n});\n```\n\n### PHPUnit\n\n```php\n\u003C?php\n\nnamespace Tests\\Feature;\n\nuse App\\Models\\User;\nuse Illuminate\\Foundation\\Testing\\RefreshDatabase;\nuse Tests\\TestCase;\n\nclass PostControllerTest extends TestCase\n{\n    use RefreshDatabase;\n\n    public function test_authenticated_user_can_create_a_post(): void\n    {\n        $user = User::factory()->create();\n\n        $this->actingAs($user)\n            ->postJson('\u002Fapi\u002Fposts', ['title' => 'Hello World', 'body' => 'Content.'])\n            ->assertStatus(201)\n            ->assertJsonPath('data.title', 'Hello World');\n\n        $this->assertDatabaseHas('posts', ['title' => 'Hello World', 'user_id' => $user->id]);\n    }\n}\n```\n\n## How to Use\n\nRead individual rule files for detailed explanations and code examples.\n\nEach rule file contains:\n- YAML frontmatter with metadata (title, impact, tags)\n- Brief explanation of why it matters\n- Bad Example with explanation\n- Good Example with both Pest and PHPUnit where syntax differs\n- Laravel 13 specific context and references\n\n## Full Compiled Document\n\nFor the complete guide with all rules expanded: `AGENTS.md`\n",{"name":5,"license":14,"metadata":23,"description":7},{"author":24,"version":25,"phpVersion":26,"pestVersion":27,"laravelVersion":28,"phpunitVersion":29},"Laravel Community","1.1.0","8.3+","4.x","13.x","12.x","main","45d5ac830c3e238eeba6d0b4e6fd7cf6b56bf380","https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills","https:\u002F\u002Fgithub.com\u002Fdavidanthonyn","2026-09-09 16:05:56",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add davidanthonyn\u002Fclaude-skills --skill laravel-testing",{"tool":41,"command":42},"bunx","bunx skills add davidanthonyn\u002Fclaude-skills --skill laravel-testing",{"tool":44,"command":45},"pnpm","pnpm dlx skills add davidanthonyn\u002Fclaude-skills --skill laravel-testing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002FSKILL.md",true,[49,55,59,63,67,71,75,79,83,87,91,95,99,103,107,111,115,119,123,127,131,135,139,143,147,151],{"path":50,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":53,"sourceHtmlUrl":54},"AGENTS.md","REFERENCE","参考文档",36410,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002FAGENTS.md",{"path":56,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":57,"sourceHtmlUrl":58},"README.md",3040,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002FREADME.md",{"path":60,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":61,"sourceHtmlUrl":62},"rules\u002Fauth-acting-as.md",3345,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fauth-acting-as.md",{"path":64,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":65,"sourceHtmlUrl":66},"rules\u002Fauth-sanctum.md",3695,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fauth-sanctum.md",{"path":68,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":69,"sourceHtmlUrl":70},"rules\u002Fdb-assert-has.md",3482,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fdb-assert-has.md",{"path":72,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":73,"sourceHtmlUrl":74},"rules\u002Fdb-assert-missing.md",3251,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fdb-assert-missing.md",{"path":76,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":77,"sourceHtmlUrl":78},"rules\u002Fdb-assert-soft-deletes.md",3461,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fdb-assert-soft-deletes.md",{"path":80,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":81,"sourceHtmlUrl":82},"rules\u002Ffactory-define.md",3514,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffactory-define.md",{"path":84,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":85,"sourceHtmlUrl":86},"rules\u002Ffactory-relationships.md",3920,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffactory-relationships.md",{"path":88,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":89,"sourceHtmlUrl":90},"rules\u002Ffactory-sequences.md",3530,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffactory-sequences.md",{"path":92,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":93,"sourceHtmlUrl":94},"rules\u002Ffactory-states.md",3635,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffactory-states.md",{"path":96,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":97,"sourceHtmlUrl":98},"rules\u002Ffake-ai-agent.md",2995,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffake-ai-agent.md",{"path":100,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":101,"sourceHtmlUrl":102},"rules\u002Ffake-ai-data.md",3354,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffake-ai-data.md",{"path":104,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":105,"sourceHtmlUrl":106},"rules\u002Ffake-ai-media.md",3113,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffake-ai-media.md",{"path":108,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":109,"sourceHtmlUrl":110},"rules\u002Ffake-event.md",4186,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffake-event.md",{"path":112,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":113,"sourceHtmlUrl":114},"rules\u002Ffake-mail.md",4822,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffake-mail.md",{"path":116,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":117,"sourceHtmlUrl":118},"rules\u002Ffake-notification.md",4609,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffake-notification.md",{"path":120,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":121,"sourceHtmlUrl":122},"rules\u002Ffake-queue.md",4170,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffake-queue.md",{"path":124,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":125,"sourceHtmlUrl":126},"rules\u002Ffake-storage.md",4414,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Ffake-storage.md",{"path":128,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":129,"sourceHtmlUrl":130},"rules\u002Fhttp-assert-json-fluent.md",3995,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fhttp-assert-json-fluent.md",{"path":132,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":133,"sourceHtmlUrl":134},"rules\u002Fhttp-assert-response.md",3989,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fhttp-assert-response.md",{"path":136,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":137,"sourceHtmlUrl":138},"rules\u002Fhttp-refresh-database.md",4630,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fhttp-refresh-database.md",{"path":140,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":141,"sourceHtmlUrl":142},"rules\u002Fhttp-test-structure.md",4285,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fhttp-test-structure.md",{"path":144,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":145,"sourceHtmlUrl":146},"rules\u002Fpest-datasets.md",5134,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fpest-datasets.md",{"path":148,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":149,"sourceHtmlUrl":150},"rules\u002Fpest-describe-it.md",6182,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fpest-describe-it.md",{"path":152,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":153,"sourceHtmlUrl":154},"rules\u002Fpest-hooks.md",6377,"https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Flaravel-testing\u002Frules\u002Fpest-hooks.md",[156,163,171,178,185,194],{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":162,"publishedAt":18},"01M7AQPHJF528A4MD52YZEZV3R","zustand-state-management","Production-tested setup for Zustand state management in React applications with TypeScript.\nThis skill provides comprehensive patterns for building scalable, type-safe global state.\n\nUse when: setting up global state in React, migrating from Redux or Context API, implementing\nstate persistence with localStorage, configuring TypeScript with Zustand, using slices pattern\nfor modular stores, adding devtools middleware for debugging, handling Next.js SSR hydration,\nor encountering hydration errors, TypeScript inference issues, or persist middleware problems.\n\nPrevents 5 documented issues: Next.js hydration mismatches, TypeScript double parentheses\nsyntax errors, persist middleware export errors, infinite render loops, and slices pattern\ntype inference failures.\n\nKeywords: zustand, state management, React state, TypeScript state, persist middleware,\ndevtools, slices pattern, global state, React hooks, create store, useBoundStore,\nStateCreator, hydration error, text content mismatch, infinite render, localStorage,\nsessionStorage, immer middleware, shallow equality, selector pattern, zustand v5","https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fzustand-state-management\u002FSKILL.md",[],[],{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":167,"sourceHtmlUrl":168,"categories":169,"keywords":170,"publishedAt":18},"01M7AQP2XJRPNYEH323GJ81NN5","zetic-mlange","Help users integrate the ZETIC Melange (MLange) on-device AI SDK into Android (Kotlin\u002FJava) and iOS (Swift) mobile apps. Use this skill whenever the user mentions Zetic, MLange, Melange, ZeticMLangeModel, ZeticMLangeLLMModel, ZeticMLangeHFModel, on-device NPU inference for mobile, or deploying ML models to Android\u002FiOS with NPU acceleration. Also trigger when users ask about running LLMs on-device with GGUF quantization, mobile NPU model deployment, or converting PyTorch\u002FONNX models for mobile inference. Covers general model inference, LLM inference (streaming token generation), and HuggingFace model loading.","https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fzetic-mlange\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fzetic-mlange\u002FSKILL.md",[],[],{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":177,"publishedAt":18},"01M7AQNEJHD27NNF5PYQDSW8B9","youtube-downloader","Download videos, audio, playlists, and channels from YouTube and 1000+ websites using yt-dlp. Supports quality selection, format conversion, subtitle download, playlist filtering, metadata extraction, thumbnail download, and batch operations. Use when downloading YouTube videos in any quality (4K, 8K, HDR), extracting audio as MP3\u002FM4A\u002FFLAC, downloading entire playlists\u002Fchannels, getting subtitles in multiple languages, converting to specific formats, downloading live streams, archiving content, or batch processing multiple URLs. Optimized for reliability with automatic retries, rate limiting, and error handling.","https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fyoutube-downloader\u002FSKILL.md",[],[],{"skillNo":179,"name":180,"nameZh":6,"description":181,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":182,"categories":183,"keywords":184,"publishedAt":18},"01M7AQJQSD2H04EE2EPNAQ8A3M","wordpress-plugin-core","This skill provides comprehensive knowledge for WordPress plugin development, covering core patterns, security best practices, database interactions, hooks\u002Ffilters, Settings API, custom post types, REST API, and AJAX. This skill should be used when creating WordPress plugins, troubleshooting security issues, implementing custom post types\u002Ftaxonomies, building admin interfaces, or working with the WordPress database.\n\nUse when: Creating new WordPress plugins, implementing nonces\u002Fsanitization\u002Fescaping, working with $wpdb and prepared statements, building Settings API pages, registering custom post types or taxonomies, implementing REST API endpoints, handling AJAX requests, debugging plugin activation\u002Fdeactivation issues, preventing SQL injection\u002FXSS\u002FCSRF vulnerabilities.\n\nKeywords: wordpress plugin development, wordpress security, wordpress hooks, wordpress filters, wordpress database, wpdb prepare, sanitize_text_field, esc_html, wp_nonce, custom post type, register_post_type, settings api, rest api, admin-ajax, wordpress sql injection, wordpress xss, wordpress csrf, plugin header, activation hook, deactivation hook, wordpress coding standards, wordpress plugin architecture","https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fwordpress-plugin-core\u002FSKILL.md",[],[],{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":189,"licenseFileUrl":190,"sourceHtmlUrl":191,"categories":192,"keywords":193,"publishedAt":18},"01M7AQJ91T970QCFMN9R1EHZXV","webapp-testing","Test local web applications with Playwright. Use when asked to verify frontend functionality, debug UI behavior, capture browser screenshots, or inspect browser logs.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fwebapp-testing\u002FSKILL.md",[],[],{"skillNo":195,"name":196,"nameZh":6,"description":197,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":198,"categories":199,"keywords":200,"publishedAt":18},"01M7AQJ5E89MS8C5K3GZTY4B48","web-performance-audit","Audit web performance using Chrome DevTools MCP. Use when asked to audit, profile, debug, or optimize page load performance, Lighthouse scores, or site speed.","https:\u002F\u002Fgithub.com\u002Fdavidanthonyn\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fweb-performance-audit\u002FSKILL.md",[],[]]