Sign inTry it

Search Go packages.

Searches pkg.go.dev, the Go package index, like its search page: package name, import path, synopsis, number of importing packages, license and link. First page of results (about 25 packages). Returns an empty list when nothing matches.

No reports yetRead-only, no login
Site
Go Packages, United States
Version
v1
Runs, last 7 days
No reports yet
sha256
33c4af9e62b9…

Run it with your agent

after installing Wield

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

“Search Go packages.”

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

{
  "tool": "run",
  "arguments": {
    "recipe_id": "pkg.go.dev/search-packages",
    "params": {
      "query": "gin"
    }
  }
}

Requests

sent from your browser, in order
  1. 1GET/search?qServer-rendered search results page /search?q=…; read-only GET. Each result is div.SearchSnippet with its title link (data-test-id snippet-title), synopsis, imported-by count and license.

Parameters

from your agent
querystringrequiredPackage name or keyword, e.g. 'gin', 'cobra', 'postgres driver'

Returns

to your agent
packagesobject[]import_path, imported_by, license, name, synopsis, url
querystring

Where it can send

  • pkg.go.dev

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[?starts_with(url, 'https://pkg.go.dev/')]) == length(output.packages)
  • length(output.packages[?name != `null`]) == length(output.packages)
  • length(output.packages[?import_path != `null`]) == length(output.packages)

Raw recipe

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

Check it yourself
curl -s https://wield.run/api/v1/recipes/pkg.go.dev/search-packages | shasum -a 256
# 33c4af9e62b92dd25598be62a1a3de5deb81babc5f20452c205404dc6bd8fe3f
pkg.go.dev/search-packages.json, v1
{
  "description": "Searches pkg.go.dev, the Go package index, like its search page: package name, import path, synopsis, number of importing packages, license and link. First page of results (about 25 packages). Returns an empty list when nothing matches.",
  "effect": "read",
  "id": "pkg.go.dev/search-packages",
  "keywords": [
    "go",
    "golang",
    "pkg.go.dev",
    "go packages",
    "modules",
    "go modules",
    "library",
    "libraries",
    "gin",
    "cobra",
    "gorm",
    "package index",
    "open source"
  ],
  "output": {
    "schema": {
      "properties": {
        "packages": {
          "items": {
            "properties": {
              "import_path": {
                "description": "Module or package path, e.g. 'github.com/gin-gonic/gin'",
                "type": "string"
              },
              "imported_by": {
                "description": "Number of packages that import it",
                "type": [
                  "integer",
                  "null"
                ]
              },
              "license": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "name": {
                "type": "string"
              },
              "synopsis": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "url": {
                "type": "string"
              }
            },
            "required": [
              "name",
              "import_path",
              "url"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "query": {
          "type": "string"
        }
      },
      "required": [
        "query",
        "packages"
      ],
      "type": "object"
    },
    "value": "{query: params.query, packages: steps.search.packages[?title != `null` && href != `null`].{name: split(title, ' (')[0], import_path: trim_left(href, '/'), synopsis: synopsis || `null`, imported_by: (imported_by && to_number(replace(imported_by, ',', ''))) || `null`, license: license || `null`, url: join('', ['https://pkg.go.dev', href])}}"
  },
  "params": {
    "additionalProperties": false,
    "properties": {
      "query": {
        "description": "Package name or keyword, e.g. 'gin', 'cobra', 'postgres driver'",
        "maxLength": 100,
        "minLength": 2,
        "type": "string"
      }
    },
    "required": [
      "query"
    ],
    "type": "object"
  },
  "provenance": {
    "method": "har",
    "notes": "GET /search?q=<query> answers 200 HTML with the result snippets in div.SearchSnippet. Titles link to the package path, and the synopsis, imported-by count and license come from the snippet's own labelled elements. Selectors use data-test-id and aria-label attributes, not hashed classes.",
    "recorded_at": "2026-11-08T16:08:00.000Z",
    "recorded_by": "wield-forge (claude-haiku agent)"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "US",
    "id": "pkg.go.dev",
    "language": "en",
    "name": "Go Packages",
    "origin": "https://pkg.go.dev",
    "origins": [
      "https://pkg.go.dev"
    ]
  },
  "steps": [
    {
      "description": "Server-rendered search results page /search?q=…; read-only GET. Each result is div.SearchSnippet with its title link (data-test-id snippet-title), synopsis, imported-by count and license.",
      "expect": {
        "assert": "status == `200` && contains(body, 'Search Results')",
        "content_type": "html",
        "status": [
          200
        ]
      },
      "extract": {
        "html_items": {
          "packages": {
            "fields": {
              "href": {
                "attr": "href",
                "selector": "[data-test-id='snippet-title']"
              },
              "imported_by": {
                "selector": "a[aria-label='Go to Imported By'] strong"
              },
              "license": {
                "selector": "[data-test-id='snippet-license'] a"
              },
              "synopsis": {
                "selector": "[data-test-id='snippet-synopsis']"
              },
              "title": {
                "selector": "[data-test-id='snippet-title']"
              }
            },
            "max": 50,
            "selector": "div.SearchSnippet"
          }
        }
      },
      "id": "search",
      "request": {
        "headers": {
          "Accept": "text/html"
        },
        "method": "GET",
        "query": {
          "q": "{{params.query}}"
        },
        "url": "/search"
      }
    }
  ],
  "task": "Search Go 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[?starts_with(url, 'https://pkg.go.dev/')]) == length(output.packages)",
      "length(output.packages[?name != `null`]) == length(output.packages)",
      "length(output.packages[?import_path != `null`]) == length(output.packages)"
    ],
    "example_params": {
      "query": "gin"
    },
    "max_ms": 5000
  },
  "version": 1
}