{
  "schemaVersion": "1.0",
  "item": {
    "slug": "vbnet-coder-en",
    "name": "Vbnet Coder En",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/alexwoo-awso/vbnet-coder-en",
    "canonicalUrl": "https://clawhub.ai/alexwoo-awso/vbnet-coder-en",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/vbnet-coder-en",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=vbnet-coder-en",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "docs/async-patterns.md",
      "docs/class-design-and-patterns.md",
      "docs/control-flow.md",
      "docs/error-handling.md",
      "docs/linq-patterns.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/vbnet-coder-en"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/vbnet-coder-en",
    "agentPageUrl": "https://openagent3.xyz/skills/vbnet-coder-en/agent",
    "manifestUrl": "https://openagent3.xyz/skills/vbnet-coder-en/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/vbnet-coder-en/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "VB.NET CODING AGENT SKILL REFERENCE",
        "body": "Target: Claude-Code, Codex, AI coding agents\nVersion: 2026 Modern .NET\nMax Lines: 500"
      },
      {
        "title": "DETAILED REFERENCES",
        "body": "For detailed patterns, examples, and best practices on specific topics, see:\n\nTopicFileWhen to consultType Systemdocs/types-and-declarations.mdVariable declarations, nullable types, field declarationsControl Flowdocs/control-flow.mdIf/ElseIf, Select Case, loops, Exit/ContinueAsync/Awaitdocs/async-patterns.mdAsync method structure, ConfigureAwait, cancellation, Task.WhenAllError Handlingdocs/error-handling.mdExceptions, Try/Catch/Finally, IDisposable, Using statementLINQdocs/linq-patterns.mdQuery/method syntax, common operations, deferred executionStrings & Collectionsdocs/strings-and-collections.mdString comparison/building, List, Dictionary, HashSet, arraysClass Design & Patternsdocs/class-design-and-patterns.mdProperties, constructors, interfaces, Factory, Repository, Null Object"
      },
      {
        "title": "Mandatory File Headers",
        "body": "ALWAYS include at top of every file:\n\nOption Explicit On\nOption Strict On\nOption Infer On\n\nRationale: Option Explicit On prevents undeclared variable usage (catches typos), Option Strict On enforces type safety (prevents implicit conversions causing runtime errors), Option Infer On enables local type inference while maintaining type safety.\n\nNever use: Option Explicit Off or Option Strict Off - these create runtime errors, performance degradation, and late binding overhead.\n\nProject-level setting preferred: Set in .vbproj file rather than per-file when possible."
      },
      {
        "title": "Core Rules",
        "body": "ElementConventionExampleNamespacePascalCase, hierarchicalCompanyName.ProductName.ComponentNameClass/InterfacePascalCase, noun/noun phraseCustomerRepository, IPaymentProcessorInterface prefixStarts with IIDisposable, IEnumerable(Of T)MethodPascalCase, verb/verb phraseCalculateTotal(), ProcessPayment()PropertyPascalCase, noun/adjectiveCustomerName, IsActiveField (private)_camelCase with underscore_connectionString, _maxRetriesField (public/shared)PascalCaseMaxValue, DefaultTimeoutParameter/LocalcamelCaseuserId, itemCountConstantPascalCase or UPPER_SNAKEMaxConnections, DEFAULT_TIMEOUTEnum TypePascalCase, singularOrderStatus, FileModeEnum MembersPascalCaseOrderStatus.Pending, FileMode.ReadEventPascalCase, verb phraseDataReceived, ConnectionClosedDelegatePascalCase, ends with Handler/CallbackEventHandler, DataReceivedCallbackGeneric Type ParamT + PascalCaseTKey, TValue, TEntity"
      },
      {
        "title": "Specific Guidelines",
        "body": "Boolean names: Use Is, Has, Can, Should prefixes:\n\nDim isValid As Boolean\nDim hasChildren As Boolean\nDim canProcess As Boolean\n\nCollection/Array naming: Plural nouns:\n\nDim customers As List(Of Customer)\nDim orderIds() As Integer\n\nAsync method suffix: Always use Async:\n\nPublic Async Function LoadDataAsync() As Task(Of DataSet)\nPublic Async Function SaveCustomerAsync(customer As Customer) As Task\n\nAvoid: Hungarian notation (strName, intCount), My prefix (conflicts with VB.NET My namespace), abbreviations unless universally known (OK: Id, Xml, Http; Avoid: Mgr, Proc, Calc)."
      },
      {
        "title": "Indentation and Spacing",
        "body": "4 spaces per indentation level (never tabs)\nOne statement per line\nOne blank line between methods/properties\nLine continuation: Use implicit continuation (no underscore) where possible\n\n' ✓ Implicit line continuation (no underscore needed)\nDim result = customers _\n    .Where(Function(c) c.IsActive) _\n    .OrderBy(Function(c) c.Name) _\n    .ToList()\n\nDim customer = New Customer With {\n    .Name = \"John\",\n    .Email = \"john@example.com\",\n    .IsActive = True\n}\n\n' Method parameters\nPublic Function ProcessOrder(\n    orderId As Integer,\n    customerId As Integer,\n    processDate As Date) As OrderResult"
      },
      {
        "title": "Comments",
        "body": "' Single-line comment for brief explanations\n\n''' <summary>\n''' Processes customer orders asynchronously.\n''' </summary>\n''' <param name=\"customerId\">The unique customer identifier.</param>\n''' <param name=\"cancellationToken\">Token to cancel the operation.</param>\n''' <returns>A task representing the async operation with the order result.</returns>\n''' <exception cref=\"CustomerNotFoundException\">Thrown when customer not found.</exception>\nPublic Async Function ProcessOrdersAsync(\n    customerId As Integer,\n    cancellationToken As CancellationToken) As Task(Of OrderResult)\n\n    ' Implementation\nEnd Function\n\nAvoid: Commenting obvious code, redundant comments, commented-out code (use version control)."
      },
      {
        "title": "FILE ORGANIZATION",
        "body": "Standard file structure:\n\nOption Explicit On\nOption Strict On\nOption Infer On\n\nImports System\nImports System.Collections.Generic\nImports System.Linq\nImports System.Threading.Tasks\n\nNamespace CompanyName.ProjectName.ComponentName\n\n    ''' <summary>\n    ''' Brief class description.\n    ''' </summary>\n    Public Class ClassName\n        ' Constants\n        Private Const DefaultTimeout As Integer = 30\n\n        ' Shared (static) fields\n        Public Shared ReadOnly MaxConnections As Integer = 100\n\n        ' Private fields\n        Private _connectionString As String\n        Private ReadOnly _logger As ILogger\n\n        ' Constructors\n        Public Sub New(logger As ILogger)\n            _logger = logger\n        End Sub\n\n        ' Properties\n        Public Property Name As String\n\n        ' Methods\n        Public Function DoSomething() As Integer\n            ' Implementation\n        End Function\n\n        ' IDisposable implementation if needed\n        Public Sub Dispose() Implements IDisposable.Dispose\n            ' Cleanup\n        End Sub\n    End Class\nEnd Namespace"
      },
      {
        "title": "PERFORMANCE CONSIDERATIONS",
        "body": "Avoid boxing/unboxing: Use generics instead of Object collections.\n\nString comparisons: Use StringComparison.Ordinal for best performance when culture doesn't matter.\n\nLINQ materialization: Call .ToList() only when needed; leverage deferred execution.\n\nAsync I/O: Always use async for file, database, network operations.\n\nConfigureAwait(False): Use in library code to avoid sync context overhead.\n\nStringBuilder: Use for concatenating >3-4 strings in loops.\n\nCollection capacity: Set initial capacity for List(Of T) and Dictionary(Of K, V) when size known.\n\nDim customers As New List(Of Customer)(expectedCount)  ' Avoid reallocations"
      },
      {
        "title": "COMMON ANTI-PATTERNS TO AVOID",
        "body": "❌ Option Strict Off - causes runtime errors, performance issues\n❌ Async void methods - unobservable exceptions (except event handlers)\n❌ Blocking async code - .Result, .Wait() cause deadlocks\n❌ Catching Exception without logging - swallows errors\n❌ Not disposing IDisposable - memory/resource leaks\n❌ Using == for strings - culture-dependent, use .Equals() with StringComparison\n❌ String concatenation in loops - O(n²) performance\n❌ Not using Using statement - resources not released on exception\n❌ Hungarian notation - outdated, conflicts with modern style\n❌ Magic numbers - use named constants\n❌ Deep nesting - extract methods, early returns"
      },
      {
        "title": "AGENT-SPECIFIC GUIDANCE",
        "body": "When generating VB.NET code:\n\nAlways include Option Explicit On and Option Strict On at file top\nUse explicit types for all declarations\nPrefer method syntax LINQ over query syntax (easier for agent parsing)\nAlways use Using for IDisposable objects\nUse Async/Await for any I/O operations\nInclude XML documentation for public APIs\nUse meaningful names - prioritize readability over brevity\nHandle exceptions explicitly - no empty catches\nFollow naming conventions exactly - PascalCase for public, _camelCase for private fields\nOne responsibility per method - extract when logic grows\nPrefer composition over inheritance - use interfaces\nImmutability when possible - ReadOnly fields, ReadOnly properties\nValidate parameters at method entry\nUse CancellationToken for long-running async operations\nLog errors with context - include relevant data in log messages\n\nEND OF SKILL REFERENCE\n\nThis document is optimized for AI coding agents generating modern, maintainable VB.NET code targeting .NET Framework 4.8+ and .NET 6/7/8+"
      }
    ],
    "body": "VB.NET CODING AGENT SKILL REFERENCE\n\nTarget: Claude-Code, Codex, AI coding agents Version: 2026 Modern .NET Max Lines: 500\n\nDETAILED REFERENCES\n\nFor detailed patterns, examples, and best practices on specific topics, see:\n\nTopic\tFile\tWhen to consult\nType System\tdocs/types-and-declarations.md\tVariable declarations, nullable types, field declarations\nControl Flow\tdocs/control-flow.md\tIf/ElseIf, Select Case, loops, Exit/Continue\nAsync/Await\tdocs/async-patterns.md\tAsync method structure, ConfigureAwait, cancellation, Task.WhenAll\nError Handling\tdocs/error-handling.md\tExceptions, Try/Catch/Finally, IDisposable, Using statement\nLINQ\tdocs/linq-patterns.md\tQuery/method syntax, common operations, deferred execution\nStrings & Collections\tdocs/strings-and-collections.md\tString comparison/building, List, Dictionary, HashSet, arrays\nClass Design & Patterns\tdocs/class-design-and-patterns.md\tProperties, constructors, interfaces, Factory, Repository, Null Object\nCRITICAL COMPILER DIRECTIVES\nMandatory File Headers\n\nALWAYS include at top of every file:\n\nOption Explicit On\nOption Strict On\nOption Infer On\n\n\nRationale: Option Explicit On prevents undeclared variable usage (catches typos), Option Strict On enforces type safety (prevents implicit conversions causing runtime errors), Option Infer On enables local type inference while maintaining type safety.\n\nNever use: Option Explicit Off or Option Strict Off - these create runtime errors, performance degradation, and late binding overhead.\n\nProject-level setting preferred: Set in .vbproj file rather than per-file when possible.\n\nNAMING CONVENTIONS\nCore Rules\nElement\tConvention\tExample\nNamespace\tPascalCase, hierarchical\tCompanyName.ProductName.ComponentName\nClass/Interface\tPascalCase, noun/noun phrase\tCustomerRepository, IPaymentProcessor\nInterface prefix\tStarts with I\tIDisposable, IEnumerable(Of T)\nMethod\tPascalCase, verb/verb phrase\tCalculateTotal(), ProcessPayment()\nProperty\tPascalCase, noun/adjective\tCustomerName, IsActive\nField (private)\t_camelCase with underscore\t_connectionString, _maxRetries\nField (public/shared)\tPascalCase\tMaxValue, DefaultTimeout\nParameter/Local\tcamelCase\tuserId, itemCount\nConstant\tPascalCase or UPPER_SNAKE\tMaxConnections, DEFAULT_TIMEOUT\nEnum Type\tPascalCase, singular\tOrderStatus, FileMode\nEnum Members\tPascalCase\tOrderStatus.Pending, FileMode.Read\nEvent\tPascalCase, verb phrase\tDataReceived, ConnectionClosed\nDelegate\tPascalCase, ends with Handler/Callback\tEventHandler, DataReceivedCallback\nGeneric Type Param\tT + PascalCase\tTKey, TValue, TEntity\nSpecific Guidelines\n\nBoolean names: Use Is, Has, Can, Should prefixes:\n\nDim isValid As Boolean\nDim hasChildren As Boolean\nDim canProcess As Boolean\n\n\nCollection/Array naming: Plural nouns:\n\nDim customers As List(Of Customer)\nDim orderIds() As Integer\n\n\nAsync method suffix: Always use Async:\n\nPublic Async Function LoadDataAsync() As Task(Of DataSet)\nPublic Async Function SaveCustomerAsync(customer As Customer) As Task\n\n\nAvoid: Hungarian notation (strName, intCount), My prefix (conflicts with VB.NET My namespace), abbreviations unless universally known (OK: Id, Xml, Http; Avoid: Mgr, Proc, Calc).\n\nCODE LAYOUT AND STYLE\nIndentation and Spacing\n4 spaces per indentation level (never tabs)\nOne statement per line\nOne blank line between methods/properties\nLine continuation: Use implicit continuation (no underscore) where possible\n' ✓ Implicit line continuation (no underscore needed)\nDim result = customers _\n    .Where(Function(c) c.IsActive) _\n    .OrderBy(Function(c) c.Name) _\n    .ToList()\n\nDim customer = New Customer With {\n    .Name = \"John\",\n    .Email = \"john@example.com\",\n    .IsActive = True\n}\n\n' Method parameters\nPublic Function ProcessOrder(\n    orderId As Integer,\n    customerId As Integer,\n    processDate As Date) As OrderResult\n\nComments\n' Single-line comment for brief explanations\n\n''' <summary>\n''' Processes customer orders asynchronously.\n''' </summary>\n''' <param name=\"customerId\">The unique customer identifier.</param>\n''' <param name=\"cancellationToken\">Token to cancel the operation.</param>\n''' <returns>A task representing the async operation with the order result.</returns>\n''' <exception cref=\"CustomerNotFoundException\">Thrown when customer not found.</exception>\nPublic Async Function ProcessOrdersAsync(\n    customerId As Integer,\n    cancellationToken As CancellationToken) As Task(Of OrderResult)\n\n    ' Implementation\nEnd Function\n\n\nAvoid: Commenting obvious code, redundant comments, commented-out code (use version control).\n\nFILE ORGANIZATION\n\nStandard file structure:\n\nOption Explicit On\nOption Strict On\nOption Infer On\n\nImports System\nImports System.Collections.Generic\nImports System.Linq\nImports System.Threading.Tasks\n\nNamespace CompanyName.ProjectName.ComponentName\n\n    ''' <summary>\n    ''' Brief class description.\n    ''' </summary>\n    Public Class ClassName\n        ' Constants\n        Private Const DefaultTimeout As Integer = 30\n\n        ' Shared (static) fields\n        Public Shared ReadOnly MaxConnections As Integer = 100\n\n        ' Private fields\n        Private _connectionString As String\n        Private ReadOnly _logger As ILogger\n\n        ' Constructors\n        Public Sub New(logger As ILogger)\n            _logger = logger\n        End Sub\n\n        ' Properties\n        Public Property Name As String\n\n        ' Methods\n        Public Function DoSomething() As Integer\n            ' Implementation\n        End Function\n\n        ' IDisposable implementation if needed\n        Public Sub Dispose() Implements IDisposable.Dispose\n            ' Cleanup\n        End Sub\n    End Class\nEnd Namespace\n\nPERFORMANCE CONSIDERATIONS\n\nAvoid boxing/unboxing: Use generics instead of Object collections.\n\nString comparisons: Use StringComparison.Ordinal for best performance when culture doesn't matter.\n\nLINQ materialization: Call .ToList() only when needed; leverage deferred execution.\n\nAsync I/O: Always use async for file, database, network operations.\n\nConfigureAwait(False): Use in library code to avoid sync context overhead.\n\nStringBuilder: Use for concatenating >3-4 strings in loops.\n\nCollection capacity: Set initial capacity for List(Of T) and Dictionary(Of K, V) when size known.\n\nDim customers As New List(Of Customer)(expectedCount)  ' Avoid reallocations\n\nCOMMON ANTI-PATTERNS TO AVOID\n\n❌ Option Strict Off - causes runtime errors, performance issues ❌ Async void methods - unobservable exceptions (except event handlers) ❌ Blocking async code - .Result, .Wait() cause deadlocks ❌ Catching Exception without logging - swallows errors ❌ Not disposing IDisposable - memory/resource leaks ❌ Using == for strings - culture-dependent, use .Equals() with StringComparison ❌ String concatenation in loops - O(n²) performance ❌ Not using Using statement - resources not released on exception ❌ Hungarian notation - outdated, conflicts with modern style ❌ Magic numbers - use named constants ❌ Deep nesting - extract methods, early returns\n\nAGENT-SPECIFIC GUIDANCE\n\nWhen generating VB.NET code:\n\nAlways include Option Explicit On and Option Strict On at file top\nUse explicit types for all declarations\nPrefer method syntax LINQ over query syntax (easier for agent parsing)\nAlways use Using for IDisposable objects\nUse Async/Await for any I/O operations\nInclude XML documentation for public APIs\nUse meaningful names - prioritize readability over brevity\nHandle exceptions explicitly - no empty catches\nFollow naming conventions exactly - PascalCase for public, _camelCase for private fields\nOne responsibility per method - extract when logic grows\nPrefer composition over inheritance - use interfaces\nImmutability when possible - ReadOnly fields, ReadOnly properties\nValidate parameters at method entry\nUse CancellationToken for long-running async operations\nLog errors with context - include relevant data in log messages\n\nEND OF SKILL REFERENCE\n\nThis document is optimized for AI coding agents generating modern, maintainable VB.NET code targeting .NET Framework 4.8+ and .NET 6/7/8+"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/alexwoo-awso/vbnet-coder-en",
    "publisherUrl": "https://clawhub.ai/alexwoo-awso/vbnet-coder-en",
    "owner": "alexwoo-awso",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/vbnet-coder-en",
    "downloadUrl": "https://openagent3.xyz/downloads/vbnet-coder-en",
    "agentUrl": "https://openagent3.xyz/skills/vbnet-coder-en/agent",
    "manifestUrl": "https://openagent3.xyz/skills/vbnet-coder-en/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/vbnet-coder-en/agent.md"
  }
}