[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6E5VGPRZ4EX2FE1A80HYEBB":3,"skill-same:01M6E5VGPRZ4EX2FE1A80HYEBB":71},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M6E5VGPRZ4EX2FE1A80HYEBB","akka-net-testing-patterns",null,"Write unit and integration tests for Akka.NET actors using modern Akka.Hosting.TestKit patterns. Covers dependency injection, TestProbes, persistence testing, and actor interaction verification. Includes guidance on when to use traditional TestKit.","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FAaronontheweb\u002Fdotnet-skills\u002Fakka-testing-patterns\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"akka net testing patterns","testing patterns","patterns","testing","dependency","unit","interaction","false","tests","dependency injection","guidance","hosting","use","write","injection","persistence","integration","verification","integration tests","2026-11-10 10:12:30",false,"---\nname: akka-net-testing-patterns\ndescription: Write unit and integration tests for Akka.NET actors using modern Akka.Hosting.TestKit patterns. Covers dependency injection, TestProbes, persistence testing, and actor interaction verification. Includes guidance on when to use traditional TestKit.\ninvocable: false\n---\n\n# Akka.NET Testing Patterns\n\n## When to Use This Skill\n\nUse this skill when:\n- Writing unit tests for Akka.NET actors\n- Testing persistent actors with event sourcing\n- Verifying actor interactions and message flows\n- Testing actor supervision and lifecycle\n- Mocking external dependencies in actor tests\n- Testing cluster sharding behavior locally\n- Verifying actor state recovery and persistence\n\n## Reference Files\n\n- [examples.md](examples.md): Complete code samples for all testing patterns (Patterns 1-8 plus Reminders)\n- [anti-patterns-and-reference.md](anti-patterns-and-reference.md): Anti-patterns, traditional TestKit, CI\u002FCD integration\n\n## Choosing Your Testing Approach\n\n### Use Akka.Hosting.TestKit (Recommended for 95% of Use Cases)\n\n**When:**\n- Building modern .NET applications with `Microsoft.Extensions.DependencyInjection`\n- Using Akka.Hosting for actor configuration in production\n- Need to inject services into actors (`IOptions`, `DbContext`, `ILogger`, HTTP clients, etc.)\n- Testing applications that use ASP.NET Core, Worker Services, or .NET Aspire\n- Working with modern Akka.NET projects (Akka.NET v1.5+)\n\n**Advantages:**\n- Native dependency injection support - override services with fakes in tests\n- Configuration parity with production (same extension methods work in tests)\n- Clean separation between actor logic and infrastructure\n- Type-safe actor registry for retrieving actors\n\n### Use Traditional Akka.TestKit\n\n**When:**\n- Contributing to Akka.NET core library development\n- Working in environments without `Microsoft.Extensions` (console apps, legacy systems)\n- Legacy codebases using manual `Props` creation without DI\n\nSee [anti-patterns-and-reference.md](anti-patterns-and-reference.md) for traditional TestKit patterns.\n\n---\n\n## Core Principles (Akka.Hosting.TestKit)\n\n1. **Inherit from `Akka.Hosting.TestKit.TestKit`** - This is a framework base class, not a user-defined one\n2. **Override `ConfigureServices()`** - Replace real services with fakes\u002Fmocks\n3. **Override `ConfigureAkka()`** - Configure actors using the same extension methods as production\n4. **Use `ActorRegistry`** - Type-safe retrieval of actor references\n5. **Composition over Inheritance** - Fake services as fields, not base classes\n6. **No Custom Base Classes** - Use method overrides, not inheritance hierarchies\n7. **Test One Actor at a Time** - Use TestProbes for dependencies\n8. **Match Production Patterns** - Same extension methods, different `AkkaExecutionMode`\n\n---\n\n## Required NuGet Packages\n\n```xml\n\u003CItemGroup>\n  \u003C!-- Core testing framework -->\n  \u003CPackageReference Include=\"Akka.Hosting.TestKit\" Version=\"*\" \u002F>\n\n  \u003C!-- xUnit (or your preferred test framework) -->\n  \u003CPackageReference Include=\"xunit\" Version=\"*\" \u002F>\n  \u003CPackageReference Include=\"xunit.runner.visualstudio\" Version=\"*\" \u002F>\n  \u003CPackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"*\" \u002F>\n\n  \u003C!-- Assertions (recommended) -->\n  \u003CPackageReference Include=\"FluentAssertions\" Version=\"*\" \u002F>\n\n  \u003C!-- In-memory persistence for testing -->\n  \u003CPackageReference Include=\"Akka.Persistence.Hosting\" Version=\"*\" \u002F>\n\n  \u003C!-- If testing cluster sharding -->\n  \u003CPackageReference Include=\"Akka.Cluster.Hosting\" Version=\"*\" \u002F>\n\u003C\u002FItemGroup>\n```\n\n---\n\n## CRITICAL: File Watcher Fix for Test Projects\n\nAkka.Hosting.TestKit spins up real `IHost` instances, which by default enable file watchers for configuration reload. When running many tests, this exhausts file descriptor limits on Linux (inotify watch limit).\n\n**Add this to your test project - it runs before any tests execute:**\n\n```csharp\n\u002F\u002F TestEnvironmentInitializer.cs\nusing System.Runtime.CompilerServices;\n\nnamespace YourApp.Tests;\n\ninternal static class TestEnvironmentInitializer\n{\n    [ModuleInitializer]\n    internal static void Initialize()\n    {\n        \u002F\u002F Disable config file watching in test hosts\n        \u002F\u002F Prevents file descriptor exhaustion (inotify watch limit) on Linux\n        Environment.SetEnvironmentVariable(\"DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE\", \"false\");\n    }\n}\n```\n\n**Why this matters:**\n- `[ModuleInitializer]` runs automatically before any test code\n- Sets the environment variable globally for all `IHost` instances\n- Prevents cryptic `inotify` errors when running 100+ tests\n- Also applies to Aspire integration tests that use `IHost`\n\n---\n\n## Testing Patterns Overview\n\nEach pattern below has a condensed description. See [examples.md](examples.md) for complete code samples.\n\n### Pattern 1: Basic Actor Test\n\nThe foundation pattern. Override `ConfigureServices()` to inject fakes, override `ConfigureAkka()` to register actors with the same extension methods as production.\n\n```csharp\npublic class OrderActorTests : TestKit\n{\n    private readonly FakeOrderRepository _fakeRepository = new();\n\n    protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)\n    {\n        services.AddSingleton\u003CIOrderRepository>(_fakeRepository);\n    }\n\n    protected override void ConfigureAkka(AkkaConfigurationBuilder builder, IServiceProvider provider)\n    {\n        builder.WithInMemoryJournal().WithInMemorySnapshotStore();\n        builder.WithActors((system, registry, resolver) =>\n        {\n            registry.Register\u003COrderActor>(system.ActorOf(resolver.Props\u003COrderActor>(), \"order-actor\"));\n        });\n    }\n\n    [Fact]\n    public async Task CreateOrder_Success_SavesToRepository()\n    {\n        var orderActor = ActorRegistry.Get\u003COrderActor>();\n        var response = await orderActor.Ask\u003COrderCommandResult>(\n            new CreateOrder(\"ORDER-123\", \"CUST-456\", 99.99m), RemainingOrDefault);\n        response.Status.Should().Be(CommandStatus.Success);\n        _fakeRepository.SaveCallCount.Should().Be(1);\n    }\n}\n```\n\n### Pattern 2: TestProbe for Actor Interactions\n\nRegister a `TestProbe` in the `ActorRegistry` as a stand-in for a dependency actor. Use `ExpectMsgAsync\u003CT>()` to verify messages were sent.\n\n### Pattern 3: Auto-Responding TestProbe\n\nWhen the actor under test uses `Ask` to communicate with dependencies, create an auto-responder actor that forwards messages to a probe AND replies to avoid timeouts.\n\n### Pattern 4: Testing Persistent Actors\n\nUse `WithInMemoryJournal()` and `WithInMemorySnapshotStore()`. Test recovery by killing the actor with `PoisonPill` and querying to force recovery from journal.\n\n### Pattern 5: Reuse Production Configuration\n\n**Always reuse production extension methods** in tests instead of duplicating HOCON config. This ensures tests use the exact same configuration as production.\n\n```csharp\nprotected override void ConfigureAkka(AkkaConfigurationBuilder builder, IServiceProvider provider)\n{\n    builder\n        .AddDraftSerializer()                                    \u002F\u002F Same as production\n        .AddOrderDomainActors(AkkaExecutionMode.LocalTest)      \u002F\u002F Same, but local mode\n        .WithInMemoryJournal().WithInMemorySnapshotStore();      \u002F\u002F Test-specific overrides\n}\n```\n\n### Pattern 6: Cluster Sharding Locally\n\nUse `AkkaExecutionMode.LocalTest` with `GenericChildPerEntityParent` to test sharding behavior without an actual cluster. Same extension methods, different mode.\n\n### Pattern 7: AwaitAssertAsync for Async Operations\n\nUse `AwaitAssertAsync` when actors perform async operations. It retries assertions until they pass or timeout, preventing flaky tests.\n\n```csharp\nawait AwaitAssertAsync(() =>\n{\n    _fakeReadModelService.SyncCallCount.Should().BeGreaterOrEqualTo(1);\n}, TimeSpan.FromSeconds(3));\n```\n\n### Pattern 8: Scenario-Based Integration Tests\n\nTest complete business workflows end-to-end with multiple actors and state transitions. Register all domain actors, verify state at each step.\n\n---\n\n## Common Patterns Summary\n\n| Pattern | Use Case |\n|---------|----------|\n| Basic Actor Test | Single actor with injected services |\n| TestProbe | Verify actor sends messages to dependencies |\n| Auto-Responder | Avoid `Ask` timeouts when testing |\n| Persistent Actor | Test event sourcing and recovery |\n| Cluster Sharding | Test sharding behavior locally |\n| AwaitAssertAsync | Handle async operations in actors |\n| Scenario Tests | End-to-end business workflows |\n\n---\n\n## Best Practices\n\n1. **One test class per actor** - Keep tests focused\n2. **Override ConfigureServices\u002FConfigureAkka** - Don't create base classes\n3. **Use fakes, not mocks** - Simpler, more maintainable\n4. **Test one actor at a time** - Use TestProbes for dependencies\n5. **Match production patterns** - Same extension methods, different `AkkaExecutionMode`\n6. **Use AwaitAssertAsync for async** - Prevents flaky tests\n7. **Test recovery** - Kill and restart actors to verify persistence\n8. **Scenario tests for workflows** - Test complete business flows end-to-end\n9. **Keep tests fast** - In-memory persistence, no real databases\n10. **Use meaningful names** - `Scenario_FirstTimePurchase_SuccessfulPayment`\n\n---\n\n## Debugging Tips\n\n1. **Enable debug logging** - Pass `LogLevel.Debug` to TestKit constructor\n2. **Use ITestOutputHelper** - See actor system logs in test output\n3. **Inspect TestProbe** - Check `probe.Messages` to see what was sent\n4. **Query actor state** - Add state query messages for debugging\n5. **Use AwaitAssertAsync with logging** - See why assertions fail\n6. **Check ActorRegistry** - Verify actors are registered correctly\n\n```csharp\n\u002F\u002F Constructor with debug logging\npublic OrderActorTests(ITestOutputHelper output)\n    : base(output: output, logLevel: LogLevel.Debug)\n{\n}\n```\n\n","# Akka.NET Testing Patterns\n\n## When to Use This Skill\n\nUse this skill when:\n- Writing unit tests for Akka.NET actors\n- Testing persistent actors with event sourcing\n- Verifying actor interactions and message flows\n- Testing actor supervision and lifecycle\n- Mocking external dependencies in actor tests\n- Testing cluster sharding behavior locally\n- Verifying actor state recovery and persistence\n\n## Reference Files\n\n- [examples.md](examples.md): Complete code samples for all testing patterns (Patterns 1-8 plus Reminders)\n- [anti-patterns-and-reference.md](anti-patterns-and-reference.md): Anti-patterns, traditional TestKit, CI\u002FCD integration\n\n## Choosing Your Testing Approach\n\n### Use Akka.Hosting.TestKit (Recommended for 95% of Use Cases)\n\n**When:**\n- Building modern .NET applications with `Microsoft.Extensions.DependencyInjection`\n- Using Akka.Hosting for actor configuration in production\n- Need to inject services into actors (`IOptions`, `DbContext`, `ILogger`, HTTP clients, etc.)\n- Testing applications that use ASP.NET Core, Worker Services, or .NET Aspire\n- Working with modern Akka.NET projects (Akka.NET v1.5+)\n\n**Advantages:**\n- Native dependency injection support - override services with fakes in tests\n- Configuration parity with production (same extension methods work in tests)\n- Clean separation between actor logic and infrastructure\n- Type-safe actor registry for retrieving actors\n\n### Use Traditional Akka.TestKit\n\n**When:**\n- Contributing to Akka.NET core library development\n- Working in environments without `Microsoft.Extensions` (console apps, legacy systems)\n- Legacy codebases using manual `Props` creation without DI\n\nSee [anti-patterns-and-reference.md](anti-patterns-and-reference.md) for traditional TestKit patterns.\n\n---\n\n## Core Principles (Akka.Hosting.TestKit)\n\n1. **Inherit from `Akka.Hosting.TestKit.TestKit`** - This is a framework base class, not a user-defined one\n2. **Override `ConfigureServices()`** - Replace real services with fakes\u002Fmocks\n3. **Override `ConfigureAkka()`** - Configure actors using the same extension methods as production\n4. **Use `ActorRegistry`** - Type-safe retrieval of actor references\n5. **Composition over Inheritance** - Fake services as fields, not base classes\n6. **No Custom Base Classes** - Use method overrides, not inheritance hierarchies\n7. **Test One Actor at a Time** - Use TestProbes for dependencies\n8. **Match Production Patterns** - Same extension methods, different `AkkaExecutionMode`\n\n---\n\n## Required NuGet Packages\n\n```xml\n\u003CItemGroup>\n  \u003C!-- Core testing framework -->\n  \u003CPackageReference Include=\"Akka.Hosting.TestKit\" Version=\"*\" \u002F>\n\n  \u003C!-- xUnit (or your preferred test framework) -->\n  \u003CPackageReference Include=\"xunit\" Version=\"*\" \u002F>\n  \u003CPackageReference Include=\"xunit.runner.visualstudio\" Version=\"*\" \u002F>\n  \u003CPackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"*\" \u002F>\n\n  \u003C!-- Assertions (recommended) -->\n  \u003CPackageReference Include=\"FluentAssertions\" Version=\"*\" \u002F>\n\n  \u003C!-- In-memory persistence for testing -->\n  \u003CPackageReference Include=\"Akka.Persistence.Hosting\" Version=\"*\" \u002F>\n\n  \u003C!-- If testing cluster sharding -->\n  \u003CPackageReference Include=\"Akka.Cluster.Hosting\" Version=\"*\" \u002F>\n\u003C\u002FItemGroup>\n```\n\n---\n\n## CRITICAL: File Watcher Fix for Test Projects\n\nAkka.Hosting.TestKit spins up real `IHost` instances, which by default enable file watchers for configuration reload. When running many tests, this exhausts file descriptor limits on Linux (inotify watch limit).\n\n**Add this to your test project - it runs before any tests execute:**\n\n```csharp\n\u002F\u002F TestEnvironmentInitializer.cs\nusing System.Runtime.CompilerServices;\n\nnamespace YourApp.Tests;\n\ninternal static class TestEnvironmentInitializer\n{\n    [ModuleInitializer]\n    internal static void Initialize()\n    {\n        \u002F\u002F Disable config file watching in test hosts\n        \u002F\u002F Prevents file descriptor exhaustion (inotify watch limit) on Linux\n        Environment.SetEnvironmentVariable(\"DOTNET_HOSTBUILDER__RELOADCONFIGONCHANGE\", \"false\");\n    }\n}\n```\n\n**Why this matters:**\n- `[ModuleInitializer]` runs automatically before any test code\n- Sets the environment variable globally for all `IHost` instances\n- Prevents cryptic `inotify` errors when running 100+ tests\n- Also applies to Aspire integration tests that use `IHost`\n\n---\n\n## Testing Patterns Overview\n\nEach pattern below has a condensed description. See [examples.md](examples.md) for complete code samples.\n\n### Pattern 1: Basic Actor Test\n\nThe foundation pattern. Override `ConfigureServices()` to inject fakes, override `ConfigureAkka()` to register actors with the same extension methods as production.\n\n```csharp\npublic class OrderActorTests : TestKit\n{\n    private readonly FakeOrderRepository _fakeRepository = new();\n\n    protected override void ConfigureServices(HostBuilderContext context, IServiceCollection services)\n    {\n        services.AddSingleton\u003CIOrderRepository>(_fakeRepository);\n    }\n\n    protected override void ConfigureAkka(AkkaConfigurationBuilder builder, IServiceProvider provider)\n    {\n        builder.WithInMemoryJournal().WithInMemorySnapshotStore();\n        builder.WithActors((system, registry, resolver) =>\n        {\n            registry.Register\u003COrderActor>(system.ActorOf(resolver.Props\u003COrderActor>(), \"order-actor\"));\n        });\n    }\n\n    [Fact]\n    public async Task CreateOrder_Success_SavesToRepository()\n    {\n        var orderActor = ActorRegistry.Get\u003COrderActor>();\n        var response = await orderActor.Ask\u003COrderCommandResult>(\n            new CreateOrder(\"ORDER-123\", \"CUST-456\", 99.99m), RemainingOrDefault);\n        response.Status.Should().Be(CommandStatus.Success);\n        _fakeRepository.SaveCallCount.Should().Be(1);\n    }\n}\n```\n\n### Pattern 2: TestProbe for Actor Interactions\n\nRegister a `TestProbe` in the `ActorRegistry` as a stand-in for a dependency actor. Use `ExpectMsgAsync\u003CT>()` to verify messages were sent.\n\n### Pattern 3: Auto-Responding TestProbe\n\nWhen the actor under test uses `Ask` to communicate with dependencies, create an auto-responder actor that forwards messages to a probe AND replies to avoid timeouts.\n\n### Pattern 4: Testing Persistent Actors\n\nUse `WithInMemoryJournal()` and `WithInMemorySnapshotStore()`. Test recovery by killing the actor with `PoisonPill` and querying to force recovery from journal.\n\n### Pattern 5: Reuse Production Configuration\n\n**Always reuse production extension methods** in tests instead of duplicating HOCON config. This ensures tests use the exact same configuration as production.\n\n```csharp\nprotected override void ConfigureAkka(AkkaConfigurationBuilder builder, IServiceProvider provider)\n{\n    builder\n        .AddDraftSerializer()                                    \u002F\u002F Same as production\n        .AddOrderDomainActors(AkkaExecutionMode.LocalTest)      \u002F\u002F Same, but local mode\n        .WithInMemoryJournal().WithInMemorySnapshotStore();      \u002F\u002F Test-specific overrides\n}\n```\n\n### Pattern 6: Cluster Sharding Locally\n\nUse `AkkaExecutionMode.LocalTest` with `GenericChildPerEntityParent` to test sharding behavior without an actual cluster. Same extension methods, different mode.\n\n### Pattern 7: AwaitAssertAsync for Async Operations\n\nUse `AwaitAssertAsync` when actors perform async operations. It retries assertions until they pass or timeout, preventing flaky tests.\n\n```csharp\nawait AwaitAssertAsync(() =>\n{\n    _fakeReadModelService.SyncCallCount.Should().BeGreaterOrEqualTo(1);\n}, TimeSpan.FromSeconds(3));\n```\n\n### Pattern 8: Scenario-Based Integration Tests\n\nTest complete business workflows end-to-end with multiple actors and state transitions. Register all domain actors, verify state at each step.\n\n---\n\n## Common Patterns Summary\n\n| Pattern | Use Case |\n|---------|----------|\n| Basic Actor Test | Single actor with injected services |\n| TestProbe | Verify actor sends messages to dependencies |\n| Auto-Responder | Avoid `Ask` timeouts when testing |\n| Persistent Actor | Test event sourcing and recovery |\n| Cluster Sharding | Test sharding behavior locally |\n| AwaitAssertAsync | Handle async operations in actors |\n| Scenario Tests | End-to-end business workflows |\n\n---\n\n## Best Practices\n\n1. **One test class per actor** - Keep tests focused\n2. **Override ConfigureServices\u002FConfigureAkka** - Don't create base classes\n3. **Use fakes, not mocks** - Simpler, more maintainable\n4. **Test one actor at a time** - Use TestProbes for dependencies\n5. **Match production patterns** - Same extension methods, different `AkkaExecutionMode`\n6. **Use AwaitAssertAsync for async** - Prevents flaky tests\n7. **Test recovery** - Kill and restart actors to verify persistence\n8. **Scenario tests for workflows** - Test complete business flows end-to-end\n9. **Keep tests fast** - In-memory persistence, no real databases\n10. **Use meaningful names** - `Scenario_FirstTimePurchase_SuccessfulPayment`\n\n---\n\n## Debugging Tips\n\n1. **Enable debug logging** - Pass `LogLevel.Debug` to TestKit constructor\n2. **Use ITestOutputHelper** - See actor system logs in test output\n3. **Inspect TestProbe** - Check `probe.Messages` to see what was sent\n4. **Query actor state** - Add state query messages for debugging\n5. **Use AwaitAssertAsync with logging** - See why assertions fail\n6. **Check ActorRegistry** - Verify actors are registered correctly\n\n```csharp\n\u002F\u002F Constructor with debug logging\npublic OrderActorTests(ITestOutputHelper output)\n    : base(output: output, logLevel: LogLevel.Debug)\n{\n}\n```\n\n",{"name":5,"invocable":44,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FAaronontheweb\u002Fdotnet-skills\u002Fakka-testing-patterns",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill akka-net-testing-patterns",{"tool":63,"command":64},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill akka-net-testing-patterns",{"tool":66,"command":67},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill akka-net-testing-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FAaronontheweb\u002Fdotnet-skills\u002Fakka-testing-patterns\u002FSKILL.md",true,[],[72,84,94,103,109,116],{"skillNo":73,"name":74,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":80,"publishedAt":43},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[81,82,83],"model","model hierarchy","model hierarchy skill",{"skillNo":85,"name":86,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":90,"publishedAt":43},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[89],{"categoryNo":78,"categoryName":79,"taxonomyType":21,"taxonomyTypeDesc":22},[91,92,93],"MCP","zoom","zoom mcp",{"skillNo":95,"name":96,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":43},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[100,101,102,92],"sdk","zoom apps sdk","apps",{"skillNo":104,"name":105,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":43},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[105],{"skillNo":110,"name":111,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":115,"publishedAt":43},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[114],{"categoryNo":78,"categoryName":79,"taxonomyType":21,"taxonomyTypeDesc":22},[111],{"skillNo":117,"name":118,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":43},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[118]]