[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CS3283JKS09XYJ8235KKCM":3,"skill-same:01M6CS3283JKS09XYJ8235KKCM":69},{"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":18,"publishedAt":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":41,"ownerHtmlUrl":42,"ownerBlogUrl":6,"ownerDescription":43,"updatedAt":44,"install":45,"resources":58},"01M6CS3283JKS09XYJ8235KKCM","azure-eventgrid-java",null,"Build event-driven applications with Azure Event Grid SDK for Java. Use when publishing events, implementing pub\u002Fsub patterns, or integrating with Azure services via events.","Sam-06060\u002Fjarvis-assistant","Sam-06060","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F208600848?v=4","01M6CRKT7C7FXD21V6HXF293S0","Samson Frank Ganta","01M6CRKTBEKYFD8YX5Z1GT99EE",6,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fazure-eventgrid-java\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29],"azure","azure eventgrid java","java","sdk","services","applications","use","publishing","build","community","patterns","2026-11-10 10:12:30",false,"---\nname: azure-eventgrid-java\ndescription: \"Build event-driven applications with Azure Event Grid SDK for Java. Use when publishing events, implementing pub\u002Fsub patterns, or integrating with Azure services via events.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Azure Event Grid SDK for Java\n\nBuild event-driven applications using the Azure Event Grid SDK for Java.\n\n## Installation\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.azure\u003C\u002FgroupId>\n    \u003CartifactId>azure-messaging-eventgrid\u003C\u002FartifactId>\n    \u003Cversion>4.27.0\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n## Client Creation\n\n### EventGridPublisherClient\n\n```java\nimport com.azure.messaging.eventgrid.EventGridPublisherClient;\nimport com.azure.messaging.eventgrid.EventGridPublisherClientBuilder;\nimport com.azure.core.credential.AzureKeyCredential;\n\n\u002F\u002F With API Key\nEventGridPublisherClient\u003CEventGridEvent> client = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Caccess-key>\"))\n    .buildEventGridEventPublisherClient();\n\n\u002F\u002F For CloudEvents\nEventGridPublisherClient\u003CCloudEvent> cloudClient = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Caccess-key>\"))\n    .buildCloudEventPublisherClient();\n```\n\n### With DefaultAzureCredential\n\n```java\nimport com.azure.identity.DefaultAzureCredentialBuilder;\n\nEventGridPublisherClient\u003CEventGridEvent> client = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new DefaultAzureCredentialBuilder().build())\n    .buildEventGridEventPublisherClient();\n```\n\n### Async Client\n\n```java\nimport com.azure.messaging.eventgrid.EventGridPublisherAsyncClient;\n\nEventGridPublisherAsyncClient\u003CEventGridEvent> asyncClient = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Caccess-key>\"))\n    .buildEventGridEventPublisherAsyncClient();\n```\n\n## Event Types\n\n| Type | Description |\n|------|-------------|\n| `EventGridEvent` | Azure Event Grid native schema |\n| `CloudEvent` | CNCF CloudEvents 1.0 specification |\n| `BinaryData` | Custom schema events |\n\n## Core Patterns\n\n### Publish EventGridEvent\n\n```java\nimport com.azure.messaging.eventgrid.EventGridEvent;\nimport com.azure.core.util.BinaryData;\n\nEventGridEvent event = new EventGridEvent(\n    \"resource\u002Fpath\",           \u002F\u002F subject\n    \"MyApp.Events.OrderCreated\", \u002F\u002F eventType\n    BinaryData.fromObject(new OrderData(\"order-123\", 99.99)), \u002F\u002F data\n    \"1.0\"                      \u002F\u002F dataVersion\n);\n\nclient.sendEvent(event);\n```\n\n### Publish Multiple Events\n\n```java\nList\u003CEventGridEvent> events = Arrays.asList(\n    new EventGridEvent(\"orders\u002F1\", \"Order.Created\", \n        BinaryData.fromObject(order1), \"1.0\"),\n    new EventGridEvent(\"orders\u002F2\", \"Order.Created\", \n        BinaryData.fromObject(order2), \"1.0\")\n);\n\nclient.sendEvents(events);\n```\n\n### Publish CloudEvent\n\n```java\nimport com.azure.core.models.CloudEvent;\nimport com.azure.core.models.CloudEventDataFormat;\n\nCloudEvent cloudEvent = new CloudEvent(\n    \"\u002Fmyapp\u002Forders\",           \u002F\u002F source\n    \"order.created\",           \u002F\u002F type\n    BinaryData.fromObject(orderData), \u002F\u002F data\n    CloudEventDataFormat.JSON  \u002F\u002F dataFormat\n);\ncloudEvent.setSubject(\"orders\u002F12345\");\ncloudEvent.setId(UUID.randomUUID().toString());\n\ncloudClient.sendEvent(cloudEvent);\n```\n\n### Publish CloudEvents Batch\n\n```java\nList\u003CCloudEvent> cloudEvents = Arrays.asList(\n    new CloudEvent(\"\u002Fapp\", \"event.type1\", BinaryData.fromString(\"data1\"), CloudEventDataFormat.JSON),\n    new CloudEvent(\"\u002Fapp\", \"event.type2\", BinaryData.fromString(\"data2\"), CloudEventDataFormat.JSON)\n);\n\ncloudClient.sendEvents(cloudEvents);\n```\n\n### Async Publishing\n\n```java\nasyncClient.sendEvent(event)\n    .subscribe(\n        unused -> System.out.println(\"Event sent successfully\"),\n        error -> System.err.println(\"Error: \" + error.getMessage())\n    );\n\n\u002F\u002F With multiple events\nasyncClient.sendEvents(events)\n    .doOnSuccess(unused -> System.out.println(\"All events sent\"))\n    .doOnError(error -> System.err.println(\"Failed: \" + error))\n    .block(); \u002F\u002F Block if needed\n```\n\n### Custom Event Data Class\n\n```java\npublic class OrderData {\n    private String orderId;\n    private double amount;\n    private String customerId;\n    \n    public OrderData(String orderId, double amount) {\n        this.orderId = orderId;\n        this.amount = amount;\n    }\n    \n    \u002F\u002F Getters and setters\n}\n\n\u002F\u002F Usage\nOrderData order = new OrderData(\"ORD-123\", 150.00);\nEventGridEvent event = new EventGridEvent(\n    \"orders\u002F\" + order.getOrderId(),\n    \"MyApp.Order.Created\",\n    BinaryData.fromObject(order),\n    \"1.0\"\n);\n```\n\n## Receiving Events\n\n### Parse EventGridEvent\n\n```java\nimport com.azure.messaging.eventgrid.EventGridEvent;\n\n\u002F\u002F From JSON string (e.g., webhook payload)\nString jsonPayload = \"[{\\\"id\\\": \\\"...\\\", ...}]\";\nList\u003CEventGridEvent> events = EventGridEvent.fromString(jsonPayload);\n\nfor (EventGridEvent event : events) {\n    System.out.println(\"Event Type: \" + event.getEventType());\n    System.out.println(\"Subject: \" + event.getSubject());\n    System.out.println(\"Event Time: \" + event.getEventTime());\n    \n    \u002F\u002F Get data\n    BinaryData data = event.getData();\n    OrderData orderData = data.toObject(OrderData.class);\n}\n```\n\n### Parse CloudEvent\n\n```java\nimport com.azure.core.models.CloudEvent;\n\nString cloudEventJson = \"[{\\\"specversion\\\": \\\"1.0\\\", ...}]\";\nList\u003CCloudEvent> cloudEvents = CloudEvent.fromString(cloudEventJson);\n\nfor (CloudEvent event : cloudEvents) {\n    System.out.println(\"Type: \" + event.getType());\n    System.out.println(\"Source: \" + event.getSource());\n    System.out.println(\"ID: \" + event.getId());\n    \n    MyEventData data = event.getData().toObject(MyEventData.class);\n}\n```\n\n### Handle System Events\n\n```java\nimport com.azure.messaging.eventgrid.systemevents.*;\n\nfor (EventGridEvent event : events) {\n    if (event.getEventType().equals(\"Microsoft.Storage.BlobCreated\")) {\n        StorageBlobCreatedEventData blobData = \n            event.getData().toObject(StorageBlobCreatedEventData.class);\n        System.out.println(\"Blob URL: \" + blobData.getUrl());\n    }\n}\n```\n\n## Event Grid Namespaces (MQTT\u002FPull)\n\n### Receive from Namespace Topic\n\n```java\nimport com.azure.messaging.eventgrid.namespaces.EventGridReceiverClient;\nimport com.azure.messaging.eventgrid.namespaces.EventGridReceiverClientBuilder;\nimport com.azure.messaging.eventgrid.namespaces.models.*;\n\nEventGridReceiverClient receiverClient = new EventGridReceiverClientBuilder()\n    .endpoint(\"\u003Cnamespace-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Ckey>\"))\n    .topicName(\"my-topic\")\n    .subscriptionName(\"my-subscription\")\n    .buildClient();\n\n\u002F\u002F Receive events\nReceiveResult result = receiverClient.receive(10, Duration.ofSeconds(30));\n\nfor (ReceiveDetails detail : result.getValue()) {\n    CloudEvent event = detail.getEvent();\n    System.out.println(\"Event: \" + event.getType());\n    \n    \u002F\u002F Acknowledge the event\n    receiverClient.acknowledge(Arrays.asList(detail.getBrokerProperties().getLockToken()));\n}\n```\n\n### Reject or Release Events\n\n```java\n\u002F\u002F Reject (don't retry)\nreceiverClient.reject(Arrays.asList(lockToken));\n\n\u002F\u002F Release (retry later)\nreceiverClient.release(Arrays.asList(lockToken));\n\n\u002F\u002F Release with delay\nreceiverClient.release(Arrays.asList(lockToken), \n    new ReleaseOptions().setDelay(ReleaseDelay.BY_60_SECONDS));\n```\n\n## Error Handling\n\n```java\nimport com.azure.core.exception.HttpResponseException;\n\ntry {\n    client.sendEvent(event);\n} catch (HttpResponseException e) {\n    System.out.println(\"Status: \" + e.getResponse().getStatusCode());\n    System.out.println(\"Error: \" + e.getMessage());\n}\n```\n\n## Environment Variables\n\n```bash\nEVENT_GRID_TOPIC_ENDPOINT=https:\u002F\u002F\u003Ctopic-name>.\u003Cregion>.eventgrid.azure.net\u002Fapi\u002Fevents\nEVENT_GRID_ACCESS_KEY=\u003Cyour-access-key>\n```\n\n## Best Practices\n\n1. **Batch Events**: Send multiple events in one call when possible\n2. **Idempotency**: Include unique event IDs for deduplication\n3. **Schema Validation**: Use strongly-typed event data classes\n4. **Retry Logic**: Built-in, but consider dead-letter for failures\n5. **Event Size**: Keep events under 1MB (64KB for basic tier)\n\n## Trigger Phrases\n\n- \"Event Grid Java\"\n- \"publish events Azure\"\n- \"CloudEvent SDK\"\n- \"event-driven messaging\"\n- \"pub\u002Fsub Azure\"\n- \"webhook events\"\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Azure Event Grid SDK for Java\n\nBuild event-driven applications using the Azure Event Grid SDK for Java.\n\n## Installation\n\n```xml\n\u003Cdependency>\n    \u003CgroupId>com.azure\u003C\u002FgroupId>\n    \u003CartifactId>azure-messaging-eventgrid\u003C\u002FartifactId>\n    \u003Cversion>4.27.0\u003C\u002Fversion>\n\u003C\u002Fdependency>\n```\n\n## Client Creation\n\n### EventGridPublisherClient\n\n```java\nimport com.azure.messaging.eventgrid.EventGridPublisherClient;\nimport com.azure.messaging.eventgrid.EventGridPublisherClientBuilder;\nimport com.azure.core.credential.AzureKeyCredential;\n\n\u002F\u002F With API Key\nEventGridPublisherClient\u003CEventGridEvent> client = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Caccess-key>\"))\n    .buildEventGridEventPublisherClient();\n\n\u002F\u002F For CloudEvents\nEventGridPublisherClient\u003CCloudEvent> cloudClient = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Caccess-key>\"))\n    .buildCloudEventPublisherClient();\n```\n\n### With DefaultAzureCredential\n\n```java\nimport com.azure.identity.DefaultAzureCredentialBuilder;\n\nEventGridPublisherClient\u003CEventGridEvent> client = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new DefaultAzureCredentialBuilder().build())\n    .buildEventGridEventPublisherClient();\n```\n\n### Async Client\n\n```java\nimport com.azure.messaging.eventgrid.EventGridPublisherAsyncClient;\n\nEventGridPublisherAsyncClient\u003CEventGridEvent> asyncClient = new EventGridPublisherClientBuilder()\n    .endpoint(\"\u003Ctopic-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Caccess-key>\"))\n    .buildEventGridEventPublisherAsyncClient();\n```\n\n## Event Types\n\n| Type | Description |\n|------|-------------|\n| `EventGridEvent` | Azure Event Grid native schema |\n| `CloudEvent` | CNCF CloudEvents 1.0 specification |\n| `BinaryData` | Custom schema events |\n\n## Core Patterns\n\n### Publish EventGridEvent\n\n```java\nimport com.azure.messaging.eventgrid.EventGridEvent;\nimport com.azure.core.util.BinaryData;\n\nEventGridEvent event = new EventGridEvent(\n    \"resource\u002Fpath\",           \u002F\u002F subject\n    \"MyApp.Events.OrderCreated\", \u002F\u002F eventType\n    BinaryData.fromObject(new OrderData(\"order-123\", 99.99)), \u002F\u002F data\n    \"1.0\"                      \u002F\u002F dataVersion\n);\n\nclient.sendEvent(event);\n```\n\n### Publish Multiple Events\n\n```java\nList\u003CEventGridEvent> events = Arrays.asList(\n    new EventGridEvent(\"orders\u002F1\", \"Order.Created\", \n        BinaryData.fromObject(order1), \"1.0\"),\n    new EventGridEvent(\"orders\u002F2\", \"Order.Created\", \n        BinaryData.fromObject(order2), \"1.0\")\n);\n\nclient.sendEvents(events);\n```\n\n### Publish CloudEvent\n\n```java\nimport com.azure.core.models.CloudEvent;\nimport com.azure.core.models.CloudEventDataFormat;\n\nCloudEvent cloudEvent = new CloudEvent(\n    \"\u002Fmyapp\u002Forders\",           \u002F\u002F source\n    \"order.created\",           \u002F\u002F type\n    BinaryData.fromObject(orderData), \u002F\u002F data\n    CloudEventDataFormat.JSON  \u002F\u002F dataFormat\n);\ncloudEvent.setSubject(\"orders\u002F12345\");\ncloudEvent.setId(UUID.randomUUID().toString());\n\ncloudClient.sendEvent(cloudEvent);\n```\n\n### Publish CloudEvents Batch\n\n```java\nList\u003CCloudEvent> cloudEvents = Arrays.asList(\n    new CloudEvent(\"\u002Fapp\", \"event.type1\", BinaryData.fromString(\"data1\"), CloudEventDataFormat.JSON),\n    new CloudEvent(\"\u002Fapp\", \"event.type2\", BinaryData.fromString(\"data2\"), CloudEventDataFormat.JSON)\n);\n\ncloudClient.sendEvents(cloudEvents);\n```\n\n### Async Publishing\n\n```java\nasyncClient.sendEvent(event)\n    .subscribe(\n        unused -> System.out.println(\"Event sent successfully\"),\n        error -> System.err.println(\"Error: \" + error.getMessage())\n    );\n\n\u002F\u002F With multiple events\nasyncClient.sendEvents(events)\n    .doOnSuccess(unused -> System.out.println(\"All events sent\"))\n    .doOnError(error -> System.err.println(\"Failed: \" + error))\n    .block(); \u002F\u002F Block if needed\n```\n\n### Custom Event Data Class\n\n```java\npublic class OrderData {\n    private String orderId;\n    private double amount;\n    private String customerId;\n    \n    public OrderData(String orderId, double amount) {\n        this.orderId = orderId;\n        this.amount = amount;\n    }\n    \n    \u002F\u002F Getters and setters\n}\n\n\u002F\u002F Usage\nOrderData order = new OrderData(\"ORD-123\", 150.00);\nEventGridEvent event = new EventGridEvent(\n    \"orders\u002F\" + order.getOrderId(),\n    \"MyApp.Order.Created\",\n    BinaryData.fromObject(order),\n    \"1.0\"\n);\n```\n\n## Receiving Events\n\n### Parse EventGridEvent\n\n```java\nimport com.azure.messaging.eventgrid.EventGridEvent;\n\n\u002F\u002F From JSON string (e.g., webhook payload)\nString jsonPayload = \"[{\\\"id\\\": \\\"...\\\", ...}]\";\nList\u003CEventGridEvent> events = EventGridEvent.fromString(jsonPayload);\n\nfor (EventGridEvent event : events) {\n    System.out.println(\"Event Type: \" + event.getEventType());\n    System.out.println(\"Subject: \" + event.getSubject());\n    System.out.println(\"Event Time: \" + event.getEventTime());\n    \n    \u002F\u002F Get data\n    BinaryData data = event.getData();\n    OrderData orderData = data.toObject(OrderData.class);\n}\n```\n\n### Parse CloudEvent\n\n```java\nimport com.azure.core.models.CloudEvent;\n\nString cloudEventJson = \"[{\\\"specversion\\\": \\\"1.0\\\", ...}]\";\nList\u003CCloudEvent> cloudEvents = CloudEvent.fromString(cloudEventJson);\n\nfor (CloudEvent event : cloudEvents) {\n    System.out.println(\"Type: \" + event.getType());\n    System.out.println(\"Source: \" + event.getSource());\n    System.out.println(\"ID: \" + event.getId());\n    \n    MyEventData data = event.getData().toObject(MyEventData.class);\n}\n```\n\n### Handle System Events\n\n```java\nimport com.azure.messaging.eventgrid.systemevents.*;\n\nfor (EventGridEvent event : events) {\n    if (event.getEventType().equals(\"Microsoft.Storage.BlobCreated\")) {\n        StorageBlobCreatedEventData blobData = \n            event.getData().toObject(StorageBlobCreatedEventData.class);\n        System.out.println(\"Blob URL: \" + blobData.getUrl());\n    }\n}\n```\n\n## Event Grid Namespaces (MQTT\u002FPull)\n\n### Receive from Namespace Topic\n\n```java\nimport com.azure.messaging.eventgrid.namespaces.EventGridReceiverClient;\nimport com.azure.messaging.eventgrid.namespaces.EventGridReceiverClientBuilder;\nimport com.azure.messaging.eventgrid.namespaces.models.*;\n\nEventGridReceiverClient receiverClient = new EventGridReceiverClientBuilder()\n    .endpoint(\"\u003Cnamespace-endpoint>\")\n    .credential(new AzureKeyCredential(\"\u003Ckey>\"))\n    .topicName(\"my-topic\")\n    .subscriptionName(\"my-subscription\")\n    .buildClient();\n\n\u002F\u002F Receive events\nReceiveResult result = receiverClient.receive(10, Duration.ofSeconds(30));\n\nfor (ReceiveDetails detail : result.getValue()) {\n    CloudEvent event = detail.getEvent();\n    System.out.println(\"Event: \" + event.getType());\n    \n    \u002F\u002F Acknowledge the event\n    receiverClient.acknowledge(Arrays.asList(detail.getBrokerProperties().getLockToken()));\n}\n```\n\n### Reject or Release Events\n\n```java\n\u002F\u002F Reject (don't retry)\nreceiverClient.reject(Arrays.asList(lockToken));\n\n\u002F\u002F Release (retry later)\nreceiverClient.release(Arrays.asList(lockToken));\n\n\u002F\u002F Release with delay\nreceiverClient.release(Arrays.asList(lockToken), \n    new ReleaseOptions().setDelay(ReleaseDelay.BY_60_SECONDS));\n```\n\n## Error Handling\n\n```java\nimport com.azure.core.exception.HttpResponseException;\n\ntry {\n    client.sendEvent(event);\n} catch (HttpResponseException e) {\n    System.out.println(\"Status: \" + e.getResponse().getStatusCode());\n    System.out.println(\"Error: \" + e.getMessage());\n}\n```\n\n## Environment Variables\n\n```bash\nEVENT_GRID_TOPIC_ENDPOINT=https:\u002F\u002F\u003Ctopic-name>.\u003Cregion>.eventgrid.azure.net\u002Fapi\u002Fevents\nEVENT_GRID_ACCESS_KEY=\u003Cyour-access-key>\n```\n\n## Best Practices\n\n1. **Batch Events**: Send multiple events in one call when possible\n2. **Idempotency**: Include unique event IDs for deduplication\n3. **Schema Validation**: Use strongly-typed event data classes\n4. **Retry Logic**: Built-in, but consider dead-letter for failures\n5. **Event Size**: Keep events under 1MB (64KB for basic tier)\n\n## Trigger Phrases\n\n- \"Event Grid Java\"\n- \"publish events Azure\"\n- \"CloudEvent SDK\"\n- \"event-driven messaging\"\n- \"pub\u002Fsub Azure\"\n- \"webhook events\"\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":35,"source":28,"date_added":36,"description":7},"unknown","2026-02-27","main","a50a3aa6b39fb0e1b7db88bef1bfc9c93606e126","modules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fazure-eventgrid-java",0,"https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant","https:\u002F\u002Fgithub.com\u002FSam-06060","Mobile Application Developer | Kotlin | Flutter, KMP, Swfit, Android,Swift UI | Building at Saar It Resources | Creator of Jarvis (AI Assistant)","2026-06-23 05:13:38",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add Sam-06060\u002Fjarvis-assistant --skill azure-eventgrid-java",{"tool":51,"command":52},"bunx","bunx skills add Sam-06060\u002Fjarvis-assistant --skill azure-eventgrid-java",{"tool":54,"command":55},"pnpm","pnpm dlx skills add Sam-06060\u002Fjarvis-assistant --skill azure-eventgrid-java","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fazure-eventgrid-java\u002FSKILL.md",true,[59,65],{"path":60,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":63,"sourceHtmlUrl":64},"evals\u002Fevals.json","REFERENCE","参考文档",6283,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FMarketing-and-Growth\u002Ffree-tool-strategy\u002Fevals\u002Fevals.json",{"path":66,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":67,"sourceHtmlUrl":68},"references\u002Ftool-types.md",4012,"https:\u002F\u002Fgithub.com\u002Fendman100\u002Fskill-router-nexus\u002Fblob\u002Fmain\u002FMarketing-and-Growth\u002Ffree-tool-strategy\u002Freferences\u002Ftool-types.md",[70,83,98,125,144,171],{"skillNo":71,"name":72,"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":73,"categories":74,"keywords":80,"publishedAt":30},"01M6GDRVS6FXX3ESH0C9DW01C0","test_skill","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fscratch\u002Ftest_skill\u002FSKILL.md",[75],{"categoryNo":76,"categoryName":77,"taxonomyType":78,"taxonomyTypeDesc":79},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[81,82],"Test Skill","test",{"skillNo":84,"name":85,"nameZh":6,"description":86,"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":89,"publishedAt":30},"01M6GDRQ40HX22MA6XWC31RHHK","zustand-store-ts","Create Zustand stores following established patterns with proper TypeScript types and middleware.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzustand-store-ts\u002FSKILL.md",[],[90,91,92,93,94,95,29,28,96,97],"zustand store ts","zustand","store","with","types","middleware","create","typescript",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":107,"publishedAt":30},"01M6GDRKEA0WE670SPFWX5GKCN","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoom-automation\u002FSKILL.md",[104],{"categoryNo":105,"categoryName":106,"taxonomyType":78,"taxonomyTypeDesc":79},"01JBSEEDCAT000000000000023","Skill与智能体开发",[108,109,110,111,112,113,114,115,116,117,118,119,120,121,28,122,123,124],"automation","zoom automation","zoom","first","Tools","search","MCP","via","meeting","automate","critical","creation","webinars","composio","recordings","management","tracking",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":132,"publishedAt":30},"01M6GDRFS1452PC71JQ38S24HR","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoho-crm-automation\u002FSKILL.md",[131],{"categoryNo":105,"categoryName":106,"taxonomyType":78,"taxonomyTypeDesc":79},[133,108,134,135,136,137,138,28,113,139,121,140,118,117,112,141,96,142,114,143],"crm automation","zoho crm","crm","zoho crm automation","zoho","leads","contacts","records","update","tasks","manage",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":153,"publishedAt":30},"01M6GDRCKQBAVTGHX5XBH26KPZ","zod-validation-expert","Expert in Zod — TypeScript-first schema validation. Covers parsing, custom errors, refinements, type inference, and integration with React Hook Form, Next.js, and tRPC.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzod-validation-expert\u002FSKILL.md",[150],{"categoryNo":151,"categoryName":152,"taxonomyType":78,"taxonomyTypeDesc":79},"01JBSEEDCAT000000000000009","前端开发",[154,155,156,157,158,97,159,160,161,162,163,164,93,165,166,167,168,28,169,170],"expert","zod","zod validation expert","validation","react","safe","parsing","errors","schema validation","react hook form","hook","trpc","form","type","next","schema","Next.js",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":178,"publishedAt":30},"01M6GDR658B08K4MY0RWD4A6EH","zeroize-audit","Detects missing zeroization of sensitive data in source code and identifies zeroization removed by compiler optimizations, with assembly-level analysis, and control-flow verification. Use for auditing C\u002FC++\u002FRust code handling secrets, keys, passwords, or other sensitive data.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzeroize-audit\u002FSKILL.md",[177],{"categoryNo":105,"categoryName":106,"taxonomyType":78,"taxonomyTypeDesc":79},[179,180,181,182,183,184,185,186,28,187,188,189,190,191,192,193,194,195,196,114],"zeroize audit","audit","write","passwords","get","project","c++","activate","assembly","read","Bash","secrets","analysis","data","flow","verification","code","rust"]