Sign inTry it

Search NuGet packages.

Searches the NuGet Gallery like its package search page: package id, latest version, short description and link. First page of results (about 20 packages), in the site's order.

No reports yetRead-only, no login
Site
NuGet Gallery, United States
Version
v1
Runs, last 7 days
No reports yet
sha256
a81d3b5df573…

Run it with your agent

after installing Wield

Ask in plain words. Your agent finds this recipe and calls it:

“Search NuGet packages.”

Read-only: it changes nothing on the site. No login needed.

{
  "tool": "run",
  "arguments": {
    "recipe_id": "nuget.org/search-packages",
    "params": {
      "query": "newtonsoft.json"
    }
  }
}

Requests

sent from your browser, in order
  1. 1GET/packages?qServer-rendered package search page /packages?q=...; read-only GET. Each result is li.package; the id and latest version come from data attributes on the title link.

Parameters

from your agent
querystringrequiredPackage name or keyword, e.g. 'newtonsoft.json', 'serilog', 'dapper'

Returns

to your agent
packagesobject[]description, name, url, version
querystring

Where it can send

  • www.nuget.org

Anything else is blocked by the extension.

Reads from your session

Nothing. Your browser attaches the site's cookies by itself.

Used only in requests to the addresses on the left. Never sent to wield.run or your agent.

Checks

a run passes when
  • length(output.packages) > `0`
  • length(output.packages[?name != `null`]) == length(output.packages)
  • length(output.packages[?starts_with(url, 'https://www.nuget.org/packages/')]) == length(output.packages)

Raw recipe

Served as canonical JSON from /api/v1/recipes/nuget.org/search-packages, so its sha256 matches the ETag and the index.

Check it yourself
curl -s https://wield.run/api/v1/recipes/nuget.org/search-packages | shasum -a 256
# a81d3b5df573062a9b44ea04ebb9404cef863e7f128f5442a4abeccbe89031be
nuget.org/search-packages.json, v1
{
  "description": "Searches the NuGet Gallery like its package search page: package id, latest version, short description and link. First page of results (about 20 packages), in the site's order.",
  "effect": "read",
  "id": "nuget.org/search-packages",
  "keywords": [
    "nuget",
    "nuget.org",
    "dotnet",
    ".net",
    "csharp",
    "c#",
    "package",
    "packages",
    "library",
    "libraries",
    "dll",
    "net core",
    "gallery",
    "search"
  ],
  "output": {
    "schema": {
      "properties": {
        "packages": {
          "items": {
            "properties": {
              "description": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "name": {
                "type": "string"
              },
              "url": {
                "type": "string"
              },
              "version": {
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "required": [
              "name",
              "url"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "query": {
          "type": "string"
        }
      },
      "required": [
        "query",
        "packages"
      ],
      "type": "object"
    },
    "value": "{query: params.query, packages: steps.search.packages[?name != `null` && href != `null`].{name: name, version: version || `null`, description: description || `null`, url: join('', ['https://www.nuget.org', href])}}"
  },
  "params": {
    "additionalProperties": false,
    "properties": {
      "query": {
        "description": "Package name or keyword, e.g. 'newtonsoft.json', 'serilog', 'dapper'",
        "maxLength": 100,
        "minLength": 2,
        "type": "string"
      }
    },
    "required": [
      "query"
    ],
    "type": "object"
  },
  "provenance": {
    "method": "har",
    "notes": "GET /packages?q=...: the HTML already contains the first page of package cards (li.package). Id and version are data attributes on h2.package-title a; description is .package-details. Download counts and dates are not extracted because they have no stable attribute. Icons on api.nuget.org are not read.",
    "recorded_at": "2026-11-08T12:00:00.000Z",
    "recorded_by": "wield-forge (claude-haiku agent)"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "US",
    "id": "nuget.org",
    "language": "en",
    "name": "NuGet Gallery",
    "origin": "https://www.nuget.org",
    "origins": [
      "https://www.nuget.org"
    ]
  },
  "steps": [
    {
      "description": "Server-rendered package search page /packages?q=...; read-only GET. Each result is li.package; the id and latest version come from data attributes on the title link.",
      "expect": {
        "content_type": "html",
        "status": [
          200
        ]
      },
      "extract": {
        "html_items": {
          "packages": {
            "fields": {
              "description": {
                "selector": ".package-details"
              },
              "href": {
                "attr": "href",
                "selector": "h2.package-title a"
              },
              "name": {
                "attr": "data-package-id",
                "selector": "h2.package-title a"
              },
              "version": {
                "attr": "data-package-version",
                "selector": "h2.package-title a"
              }
            },
            "max": 30,
            "selector": "li.package"
          }
        }
      },
      "id": "search",
      "request": {
        "headers": {
          "Accept": "text/html"
        },
        "method": "GET",
        "query": {
          "q": "{{params.query}}"
        },
        "url": "/packages"
      }
    }
  ],
  "task": "Search NuGet packages",
  "tos": {
    "notes": "Not reviewed. One search page per call, the same page a visitor loads. The site's terms on automated access were not checked.",
    "reviewed": false
  },
  "verify": {
    "checks": [
      "length(output.packages) > `0`",
      "length(output.packages[?name != `null`]) == length(output.packages)",
      "length(output.packages[?starts_with(url, 'https://www.nuget.org/packages/')]) == length(output.packages)"
    ],
    "example_params": {
      "query": "newtonsoft.json"
    },
    "max_ms": 5000
  },
  "version": 1
}