[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G8VRBK7XRY1QPR4XPXWPHE":3,"skill-same:01M6G8VRBK7XRY1QPR4XPXWPHE":76},{"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":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":13,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M6G8VRBK7XRY1QPR4XPXWPHE","azure-ai-voicelive-dotnet",null,"Azure AI Voice Live SDK for .NET. Build real-time voice AI applications with bidirectional WebSocket communication. Use for voice assistants, conversational AI, real-time speech-to-speech, and voice-enabled chatbots. Triggers: \"voice live\", \"real-time voice\", \"VoiceLiveClient\", \"VoiceLiveSession\", \"voice assistant .NET\", \"bidirectional audio\", \"speech-to-speech\".","ricardoaevt\u002Fnexus-roms","ricardoaevt","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F164531880?v=4","01M6DGFGSV6CF9AKPHABBREC79","01M6DGFGYNNPJVDFQA05TDPSBN",0,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-dotnet\u002Fskills\u002Fazure-ai-voicelive-dotnet\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"dotnet","azure ai","azure","azure ai voicelive dotnet","applications","speech-to-speech","with","Conversational AI","triggers","live","time","build","use","Audio","assistant","real-time","websocket","speech","communication","sdk","2026-11-10 10:12:30",false,"---\nname: azure-ai-voicelive-dotnet\ndescription: |\n  Azure AI Voice Live SDK for .NET. Build real-time voice AI applications with bidirectional WebSocket communication. Use for voice assistants, conversational AI, real-time speech-to-speech, and voice-enabled chatbots. Triggers: \"voice live\", \"real-time voice\", \"VoiceLiveClient\", \"VoiceLiveSession\", \"voice assistant .NET\", \"bidirectional audio\", \"speech-to-speech\".\npackage: Azure.AI.VoiceLive\n---\n\n# Azure.AI.VoiceLive (.NET)\n\nReal-time voice AI SDK for building bidirectional voice assistants with Azure AI.\n\n## Installation\n\n```bash\ndotnet add package Azure.AI.VoiceLive\ndotnet add package Azure.Identity\ndotnet add package NAudio                    # For audio capture\u002Fplayback\n```\n\n**Current Versions**: Stable v1.0.0, Preview v1.1.0-beta.1\n\n## Environment Variables\n\n```bash\nAZURE_VOICELIVE_ENDPOINT=https:\u002F\u002F\u003Cresource>.services.ai.azure.com\u002F\nAZURE_VOICELIVE_MODEL=gpt-4o-realtime-preview\nAZURE_VOICELIVE_VOICE=en-US-AvaNeural\n# Optional: API key if not using Entra ID\nAZURE_VOICELIVE_API_KEY=\u003Cyour-api-key>\n```\n\n## Authentication\n\n### Microsoft Entra ID (Recommended)\n\n```csharp\nusing Azure.Identity;\nusing Azure.AI.VoiceLive;\n\nUri endpoint = new Uri(\"https:\u002F\u002Fyour-resource.cognitiveservices.azure.com\");\nDefaultAzureCredential credential = new DefaultAzureCredential();\nVoiceLiveClient client = new VoiceLiveClient(endpoint, credential);\n```\n\n**Required Role**: `Cognitive Services User` (assign in Azure Portal → Access control)\n\n### API Key\n\n```csharp\nUri endpoint = new Uri(\"https:\u002F\u002Fyour-resource.cognitiveservices.azure.com\");\nAzureKeyCredential credential = new AzureKeyCredential(\"your-api-key\");\nVoiceLiveClient client = new VoiceLiveClient(endpoint, credential);\n```\n\n## Client Hierarchy\n\n```\nVoiceLiveClient\n└── VoiceLiveSession (WebSocket connection)\n    ├── ConfigureSessionAsync()\n    ├── GetUpdatesAsync() → SessionUpdate events\n    ├── AddItemAsync() → UserMessageItem, FunctionCallOutputItem\n    ├── SendAudioAsync()\n    └── StartResponseAsync()\n```\n\n## Core Workflow\n\n### 1. Start Session and Configure\n\n```csharp\nusing Azure.Identity;\nusing Azure.AI.VoiceLive;\n\nvar endpoint = new Uri(Environment.GetEnvironmentVariable(\"AZURE_VOICELIVE_ENDPOINT\"));\nvar client = new VoiceLiveClient(endpoint, new DefaultAzureCredential());\n\nvar model = \"gpt-4o-mini-realtime-preview\";\n\n\u002F\u002F Start session\nusing VoiceLiveSession session = await client.StartSessionAsync(model);\n\n\u002F\u002F Configure session\nVoiceLiveSessionOptions sessionOptions = new()\n{\n    Model = model,\n    Instructions = \"You are a helpful AI assistant. Respond naturally.\",\n    Voice = new AzureStandardVoice(\"en-US-AvaNeural\"),\n    TurnDetection = new AzureSemanticVadTurnDetection()\n    {\n        Threshold = 0.5f,\n        PrefixPadding = TimeSpan.FromMilliseconds(300),\n        SilenceDuration = TimeSpan.FromMilliseconds(500)\n    },\n    InputAudioFormat = InputAudioFormat.Pcm16,\n    OutputAudioFormat = OutputAudioFormat.Pcm16\n};\n\n\u002F\u002F Set modalities (both text and audio for voice assistants)\nsessionOptions.Modalities.Clear();\nsessionOptions.Modalities.Add(InteractionModality.Text);\nsessionOptions.Modalities.Add(InteractionModality.Audio);\n\nawait session.ConfigureSessionAsync(sessionOptions);\n```\n\n### 2. Process Events\n\n```csharp\nawait foreach (SessionUpdate serverEvent in session.GetUpdatesAsync())\n{\n    switch (serverEvent)\n    {\n        case SessionUpdateResponseAudioDelta audioDelta:\n            byte[] audioData = audioDelta.Delta.ToArray();\n            \u002F\u002F Play audio via NAudio or other audio library\n            break;\n            \n        case SessionUpdateResponseTextDelta textDelta:\n            Console.Write(textDelta.Delta);\n            break;\n            \n        case SessionUpdateResponseFunctionCallArgumentsDone functionCall:\n            \u002F\u002F Handle function call (see Function Calling section)\n            break;\n            \n        case SessionUpdateError error:\n            Console.WriteLine($\"Error: {error.Error.Message}\");\n            break;\n            \n        case SessionUpdateResponseDone:\n            Console.WriteLine(\"\\n--- Response complete ---\");\n            break;\n    }\n}\n```\n\n### 3. Send User Message\n\n```csharp\nawait session.AddItemAsync(new UserMessageItem(\"Hello, can you help me?\"));\nawait session.StartResponseAsync();\n```\n\n### 4. Function Calling\n\n```csharp\n\u002F\u002F Define function\nvar weatherFunction = new VoiceLiveFunctionDefinition(\"get_current_weather\")\n{\n    Description = \"Get the current weather for a given location\",\n    Parameters = BinaryData.FromString(\"\"\"\n        {\n            \"type\": \"object\",\n            \"properties\": {\n                \"location\": {\n                    \"type\": \"string\",\n                    \"description\": \"The city and state or country\"\n                }\n            },\n            \"required\": [\"location\"]\n        }\n        \"\"\")\n};\n\n\u002F\u002F Add to session options\nsessionOptions.Tools.Add(weatherFunction);\n\n\u002F\u002F Handle function call in event loop\nif (serverEvent is SessionUpdateResponseFunctionCallArgumentsDone functionCall)\n{\n    if (functionCall.Name == \"get_current_weather\")\n    {\n        var parameters = JsonSerializer.Deserialize\u003CDictionary\u003Cstring, string>>(functionCall.Arguments);\n        string location = parameters?[\"location\"] ?? \"\";\n        \n        \u002F\u002F Call external service\n        string weatherInfo = $\"The weather in {location} is sunny, 75°F.\";\n        \n        \u002F\u002F Send response\n        await session.AddItemAsync(new FunctionCallOutputItem(functionCall.CallId, weatherInfo));\n        await session.StartResponseAsync();\n    }\n}\n```\n\n## Voice Options\n\n| Voice Type | Class | Example |\n|------------|-------|---------|\n| Azure Standard | `AzureStandardVoice` | `\"en-US-AvaNeural\"` |\n| Azure HD | `AzureStandardVoice` | `\"en-US-Ava:DragonHDLatestNeural\"` |\n| Azure Custom | `AzureCustomVoice` | Custom voice with endpoint ID |\n\n## Supported Models\n\n| Model | Description |\n|-------|-------------|\n| `gpt-4o-realtime-preview` | GPT-4o with real-time audio |\n| `gpt-4o-mini-realtime-preview` | Lightweight, fast interactions |\n| `phi4-mm-realtime` | Cost-effective multimodal |\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `VoiceLiveClient` | Main client for creating sessions |\n| `VoiceLiveSession` | Active WebSocket session |\n| `VoiceLiveSessionOptions` | Session configuration |\n| `AzureStandardVoice` | Standard Azure voice provider |\n| `AzureSemanticVadTurnDetection` | Voice activity detection |\n| `VoiceLiveFunctionDefinition` | Function tool definition |\n| `UserMessageItem` | User text message |\n| `FunctionCallOutputItem` | Function call response |\n| `SessionUpdateResponseAudioDelta` | Audio chunk event |\n| `SessionUpdateResponseTextDelta` | Text chunk event |\n\n## Best Practices\n\n1. **Always set both modalities** — Include `Text` and `Audio` for voice assistants\n2. **Use `AzureSemanticVadTurnDetection`** — Provides natural conversation flow\n3. **Configure appropriate silence duration** — 500ms typical to avoid premature cutoffs\n4. **Use `using` statement** — Ensures proper session disposal\n5. **Handle all event types** — Check for errors, audio, text, and function calls\n6. **Use DefaultAzureCredential** — Never hardcode API keys\n\n## Error Handling\n\n```csharp\nif (serverEvent is SessionUpdateError error)\n{\n    if (error.Error.Message.Contains(\"Cancellation failed: no active response\"))\n    {\n        \u002F\u002F Benign error, can ignore\n    }\n    else\n    {\n        Console.WriteLine($\"Error: {error.Error.Message}\");\n    }\n}\n```\n\n## Audio Configuration\n\n- **Input Format**: `InputAudioFormat.Pcm16` (16-bit PCM)\n- **Output Format**: `OutputAudioFormat.Pcm16`\n- **Sample Rate**: 24kHz recommended\n- **Channels**: Mono\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.AI.VoiceLive` | Real-time voice (this SDK) | `dotnet add package Azure.AI.VoiceLive` |\n| `Microsoft.CognitiveServices.Speech` | Speech-to-text, text-to-speech | `dotnet add package Microsoft.CognitiveServices.Speech` |\n| `NAudio` | Audio capture\u002Fplayback | `dotnet add package NAudio` |\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| NuGet Package | https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FAzure.AI.VoiceLive |\n| API Reference | https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Fazure.ai.voicelive |\n| GitHub Source | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Ftree\u002Fmain\u002Fsdk\u002Fai\u002FAzure.AI.VoiceLive |\n| Quickstart | https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fai-services\u002Fspeech-service\u002Fvoice-live-quickstart |\n","# Azure.AI.VoiceLive (.NET)\n\nReal-time voice AI SDK for building bidirectional voice assistants with Azure AI.\n\n## Installation\n\n```bash\ndotnet add package Azure.AI.VoiceLive\ndotnet add package Azure.Identity\ndotnet add package NAudio                    # For audio capture\u002Fplayback\n```\n\n**Current Versions**: Stable v1.0.0, Preview v1.1.0-beta.1\n\n## Environment Variables\n\n```bash\nAZURE_VOICELIVE_ENDPOINT=https:\u002F\u002F\u003Cresource>.services.ai.azure.com\u002F\nAZURE_VOICELIVE_MODEL=gpt-4o-realtime-preview\nAZURE_VOICELIVE_VOICE=en-US-AvaNeural\n# Optional: API key if not using Entra ID\nAZURE_VOICELIVE_API_KEY=\u003Cyour-api-key>\n```\n\n## Authentication\n\n### Microsoft Entra ID (Recommended)\n\n```csharp\nusing Azure.Identity;\nusing Azure.AI.VoiceLive;\n\nUri endpoint = new Uri(\"https:\u002F\u002Fyour-resource.cognitiveservices.azure.com\");\nDefaultAzureCredential credential = new DefaultAzureCredential();\nVoiceLiveClient client = new VoiceLiveClient(endpoint, credential);\n```\n\n**Required Role**: `Cognitive Services User` (assign in Azure Portal → Access control)\n\n### API Key\n\n```csharp\nUri endpoint = new Uri(\"https:\u002F\u002Fyour-resource.cognitiveservices.azure.com\");\nAzureKeyCredential credential = new AzureKeyCredential(\"your-api-key\");\nVoiceLiveClient client = new VoiceLiveClient(endpoint, credential);\n```\n\n## Client Hierarchy\n\n```\nVoiceLiveClient\n└── VoiceLiveSession (WebSocket connection)\n    ├── ConfigureSessionAsync()\n    ├── GetUpdatesAsync() → SessionUpdate events\n    ├── AddItemAsync() → UserMessageItem, FunctionCallOutputItem\n    ├── SendAudioAsync()\n    └── StartResponseAsync()\n```\n\n## Core Workflow\n\n### 1. Start Session and Configure\n\n```csharp\nusing Azure.Identity;\nusing Azure.AI.VoiceLive;\n\nvar endpoint = new Uri(Environment.GetEnvironmentVariable(\"AZURE_VOICELIVE_ENDPOINT\"));\nvar client = new VoiceLiveClient(endpoint, new DefaultAzureCredential());\n\nvar model = \"gpt-4o-mini-realtime-preview\";\n\n\u002F\u002F Start session\nusing VoiceLiveSession session = await client.StartSessionAsync(model);\n\n\u002F\u002F Configure session\nVoiceLiveSessionOptions sessionOptions = new()\n{\n    Model = model,\n    Instructions = \"You are a helpful AI assistant. Respond naturally.\",\n    Voice = new AzureStandardVoice(\"en-US-AvaNeural\"),\n    TurnDetection = new AzureSemanticVadTurnDetection()\n    {\n        Threshold = 0.5f,\n        PrefixPadding = TimeSpan.FromMilliseconds(300),\n        SilenceDuration = TimeSpan.FromMilliseconds(500)\n    },\n    InputAudioFormat = InputAudioFormat.Pcm16,\n    OutputAudioFormat = OutputAudioFormat.Pcm16\n};\n\n\u002F\u002F Set modalities (both text and audio for voice assistants)\nsessionOptions.Modalities.Clear();\nsessionOptions.Modalities.Add(InteractionModality.Text);\nsessionOptions.Modalities.Add(InteractionModality.Audio);\n\nawait session.ConfigureSessionAsync(sessionOptions);\n```\n\n### 2. Process Events\n\n```csharp\nawait foreach (SessionUpdate serverEvent in session.GetUpdatesAsync())\n{\n    switch (serverEvent)\n    {\n        case SessionUpdateResponseAudioDelta audioDelta:\n            byte[] audioData = audioDelta.Delta.ToArray();\n            \u002F\u002F Play audio via NAudio or other audio library\n            break;\n            \n        case SessionUpdateResponseTextDelta textDelta:\n            Console.Write(textDelta.Delta);\n            break;\n            \n        case SessionUpdateResponseFunctionCallArgumentsDone functionCall:\n            \u002F\u002F Handle function call (see Function Calling section)\n            break;\n            \n        case SessionUpdateError error:\n            Console.WriteLine($\"Error: {error.Error.Message}\");\n            break;\n            \n        case SessionUpdateResponseDone:\n            Console.WriteLine(\"\\n--- Response complete ---\");\n            break;\n    }\n}\n```\n\n### 3. Send User Message\n\n```csharp\nawait session.AddItemAsync(new UserMessageItem(\"Hello, can you help me?\"));\nawait session.StartResponseAsync();\n```\n\n### 4. Function Calling\n\n```csharp\n\u002F\u002F Define function\nvar weatherFunction = new VoiceLiveFunctionDefinition(\"get_current_weather\")\n{\n    Description = \"Get the current weather for a given location\",\n    Parameters = BinaryData.FromString(\"\"\"\n        {\n            \"type\": \"object\",\n            \"properties\": {\n                \"location\": {\n                    \"type\": \"string\",\n                    \"description\": \"The city and state or country\"\n                }\n            },\n            \"required\": [\"location\"]\n        }\n        \"\"\")\n};\n\n\u002F\u002F Add to session options\nsessionOptions.Tools.Add(weatherFunction);\n\n\u002F\u002F Handle function call in event loop\nif (serverEvent is SessionUpdateResponseFunctionCallArgumentsDone functionCall)\n{\n    if (functionCall.Name == \"get_current_weather\")\n    {\n        var parameters = JsonSerializer.Deserialize\u003CDictionary\u003Cstring, string>>(functionCall.Arguments);\n        string location = parameters?[\"location\"] ?? \"\";\n        \n        \u002F\u002F Call external service\n        string weatherInfo = $\"The weather in {location} is sunny, 75°F.\";\n        \n        \u002F\u002F Send response\n        await session.AddItemAsync(new FunctionCallOutputItem(functionCall.CallId, weatherInfo));\n        await session.StartResponseAsync();\n    }\n}\n```\n\n## Voice Options\n\n| Voice Type | Class | Example |\n|------------|-------|---------|\n| Azure Standard | `AzureStandardVoice` | `\"en-US-AvaNeural\"` |\n| Azure HD | `AzureStandardVoice` | `\"en-US-Ava:DragonHDLatestNeural\"` |\n| Azure Custom | `AzureCustomVoice` | Custom voice with endpoint ID |\n\n## Supported Models\n\n| Model | Description |\n|-------|-------------|\n| `gpt-4o-realtime-preview` | GPT-4o with real-time audio |\n| `gpt-4o-mini-realtime-preview` | Lightweight, fast interactions |\n| `phi4-mm-realtime` | Cost-effective multimodal |\n\n## Key Types Reference\n\n| Type | Purpose |\n|------|---------|\n| `VoiceLiveClient` | Main client for creating sessions |\n| `VoiceLiveSession` | Active WebSocket session |\n| `VoiceLiveSessionOptions` | Session configuration |\n| `AzureStandardVoice` | Standard Azure voice provider |\n| `AzureSemanticVadTurnDetection` | Voice activity detection |\n| `VoiceLiveFunctionDefinition` | Function tool definition |\n| `UserMessageItem` | User text message |\n| `FunctionCallOutputItem` | Function call response |\n| `SessionUpdateResponseAudioDelta` | Audio chunk event |\n| `SessionUpdateResponseTextDelta` | Text chunk event |\n\n## Best Practices\n\n1. **Always set both modalities** — Include `Text` and `Audio` for voice assistants\n2. **Use `AzureSemanticVadTurnDetection`** — Provides natural conversation flow\n3. **Configure appropriate silence duration** — 500ms typical to avoid premature cutoffs\n4. **Use `using` statement** — Ensures proper session disposal\n5. **Handle all event types** — Check for errors, audio, text, and function calls\n6. **Use DefaultAzureCredential** — Never hardcode API keys\n\n## Error Handling\n\n```csharp\nif (serverEvent is SessionUpdateError error)\n{\n    if (error.Error.Message.Contains(\"Cancellation failed: no active response\"))\n    {\n        \u002F\u002F Benign error, can ignore\n    }\n    else\n    {\n        Console.WriteLine($\"Error: {error.Error.Message}\");\n    }\n}\n```\n\n## Audio Configuration\n\n- **Input Format**: `InputAudioFormat.Pcm16` (16-bit PCM)\n- **Output Format**: `OutputAudioFormat.Pcm16`\n- **Sample Rate**: 24kHz recommended\n- **Channels**: Mono\n\n## Related SDKs\n\n| SDK | Purpose | Install |\n|-----|---------|---------|\n| `Azure.AI.VoiceLive` | Real-time voice (this SDK) | `dotnet add package Azure.AI.VoiceLive` |\n| `Microsoft.CognitiveServices.Speech` | Speech-to-text, text-to-speech | `dotnet add package Microsoft.CognitiveServices.Speech` |\n| `NAudio` | Audio capture\u002Fplayback | `dotnet add package NAudio` |\n\n## Reference Links\n\n| Resource | URL |\n|----------|-----|\n| NuGet Package | https:\u002F\u002Fwww.nuget.org\u002Fpackages\u002FAzure.AI.VoiceLive |\n| API Reference | https:\u002F\u002Flearn.microsoft.com\u002Fdotnet\u002Fapi\u002Fazure.ai.voicelive |\n| GitHub Source | https:\u002F\u002Fgithub.com\u002FAzure\u002Fazure-sdk-for-net\u002Ftree\u002Fmain\u002Fsdk\u002Fai\u002FAzure.AI.VoiceLive |\n| Quickstart | https:\u002F\u002Flearn.microsoft.com\u002Fazure\u002Fai-services\u002Fspeech-service\u002Fvoice-live-quickstart |\n",{"name":5,"package":48,"description":49},"Azure.AI.VoiceLive","Azure AI Voice Live SDK for .NET. Build real-time voice AI applications with bidirectional WebSocket communication. Use for voice assistants, conversational AI, real-time speech-to-speech, and voice-enabled chatbots. Triggers: \"voice live\", \"real-time voice\", \"VoiceLiveClient\", \"VoiceLiveSession\", \"voice assistant .NET\", \"bidirectional audio\", \"speech-to-speech\".\n","main","d41309588593cee5c2fb44062474efc3a99fbcb6",".agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-dotnet\u002Fskills\u002Fazure-ai-voicelive-dotnet","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms","https:\u002F\u002Fgithub.com\u002Fricardoaevt","2026-03-23 00:05:03",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add ricardoaevt\u002Fnexus-roms --skill azure-ai-voicelive-dotnet",{"tool":62,"command":63},"bunx","bunx skills add ricardoaevt\u002Fnexus-roms --skill azure-ai-voicelive-dotnet",{"tool":65,"command":66},"pnpm","pnpm dlx skills add ricardoaevt\u002Fnexus-roms --skill azure-ai-voicelive-dotnet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-dotnet\u002Fskills\u002Fazure-ai-voicelive-dotnet\u002FSKILL.md",true,[70],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"references\u002Facceptance-criteria.md","REFERENCE","参考文档",13143,"https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-dotnet\u002Fskills\u002Fazure-ai-voicelive-dotnet\u002Freferences\u002Facceptance-criteria.md",[77,99,115,130,141,150],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":81,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":43},"01M6G9HYKQRK6HBKVTZM3258M3","openspec-propose","Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to build and get a complete proposal with design, specs, and tasks ready for implementation.","MIT","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-propose\u002FSKILL.md",[],[85,86,87,88,29,89,90,91,34,92,93,35,94,95,96,97,98],"openspec propose","openspec","cli","generated","proposal","complete","get","implementation","ready","user","artifacts","tasks","change","design",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":81,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":43},"01M6G9HV9V20WFCHYVSDNQMJVK","openspec-new-change","Start a new OpenSpec change using the experimental artifact workflow. Use when the user wants to create a new feature, fix, or modification with a structured step-by-step approach.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-new-change\u002FSKILL.md",[],[86,106,97,107,87,108,109,110,35,94,111,112,113,114,29],"openspec new change","new feature","structured","artifact","workflow","create","start","fix","feature",{"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":81,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":43},"01M6G9HRF6R89QZXGSFC9DRQW3","openspec-explore","Enter explore mode - a thinking partner for exploring ideas, investigating problems, and clarifying requirements. Use when the user wants to think through something before or during a change.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-explore\u002FSKILL.md",[],[122,123,86,35,124,87,97,94,125,126,127,128,129],"openspec explore","explore","partner","think","thinking partner","thinking","ideas","requirements",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":81,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":43},"01M6G9HP3APFCXZG7XRWBMM524","openspec-continue-change","Continue working on an OpenSpec change by creating the next artifact. Use when the user wants to progress their change, create the next artifact, or continue their workflow.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-continue-change\u002FSKILL.md",[],[86,137,138,97,110,87,111,94,35,139,109,140],"continue","openspec continue change","next","progress",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":81,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":147,"publishedAt":43},"01M6G9HKT3WMSDBSKA7YM4MSSQ","openspec-archive-change","Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-archive-change\u002FSKILL.md",[],[148,86,149,97,87,110,94,35,92,90],"openspec archive change","archive",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":81,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":156,"publishedAt":43},"01M6G9HHEG0RJK4E0YTVZZ6A8T","openspec-apply-change","Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-apply-change\u002FSKILL.md",[],[86,97,157,158,96,112,137,159,94,35,92,87],"openspec apply change","implement","work"]