Sign inTry it

Search open-source projects.

Searches the SourceForge project directory like its search page: project name, one-line summary, link and last update date, in the site's order. First page of results (about 25 projects).

No reports yetRead-only, no login
Site
SourceForge, United States
Version
v1
Runs, last 7 days
No reports yet
sha256
0eff87fd827f…

Run it with your agent

after installing Wield

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

“Search open-source projects.”

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

{
  "tool": "run",
  "arguments": {
    "recipe_id": "sourceforge.net/search-packages",
    "params": {
      "query": "vlc"
    }
  }
}

Requests

sent from your browser, in order
  1. 1GET/directory/?qServer-rendered project directory search /directory/?q=...; read-only GET. Each result is li.project-oss.

Parameters

from your agent
querystringrequiredProject or keyword, e.g. 'vlc', 'filezilla', 'audacity'

Returns

to your agent
projectsobject[]last_update, name, summary, url
querystring

Where it can send

  • sourceforge.net

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.projects) > `0`
  • length(output.projects[?name != `null`]) == length(output.projects)
  • length(output.projects[?starts_with(url, 'https://sourceforge.net/projects/')]) == length(output.projects)

Raw recipe

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

Check it yourself
curl -s https://wield.run/api/v1/recipes/sourceforge.net/search-packages | shasum -a 256
# 0eff87fd827fa18ad24ecb3d18b011f0a4c7907efc00cbb83345ee91c75b0443
sourceforge.net/search-packages.json, v1
{
  "description": "Searches the SourceForge project directory like its search page: project name, one-line summary, link and last update date, in the site's order. First page of results (about 25 projects).",
  "effect": "read",
  "id": "sourceforge.net/search-packages",
  "keywords": [
    "sourceforge",
    "sourceforge.net",
    "open source",
    "opensource",
    "software",
    "download",
    "projects",
    "freie software",
    "quelloffen",
    "programme",
    "apps",
    "directory",
    "search"
  ],
  "output": {
    "schema": {
      "properties": {
        "projects": {
          "items": {
            "properties": {
              "last_update": {
                "description": "Date of the last release or update, YYYY-MM-DD",
                "type": [
                  "string",
                  "null"
                ]
              },
              "name": {
                "type": "string"
              },
              "summary": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "url": {
                "type": "string"
              }
            },
            "required": [
              "name",
              "url"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "query": {
          "type": "string"
        }
      },
      "required": [
        "query",
        "projects"
      ],
      "type": "object"
    },
    "value": "{query: params.query, projects: steps.search.projects[?name != `null` && href != `null`].{name: name, summary: summary || `null`, last_update: last_update || `null`, url: join('', ['https://sourceforge.net', href])}}"
  },
  "params": {
    "additionalProperties": false,
    "properties": {
      "query": {
        "description": "Project or keyword, e.g. 'vlc', 'filezilla', 'audacity'",
        "maxLength": 100,
        "minLength": 2,
        "type": "string"
      }
    },
    "required": [
      "query"
    ],
    "type": "object"
  },
  "provenance": {
    "method": "har",
    "notes": "GET /directory/?q=...: the HTML already contains the first page of project results (li.project-oss). Name is the h3 in the result title link, summary is p.subtitle, last update is the datetime of time.dateUpdated. Download counts are not extracted because they are plain text without a stable selector. Results are fuzzy matches (e.g. 'vlc' also returns player apps that mention VLC).",
    "recorded_at": "2026-11-08T12:20:00.000Z",
    "recorded_by": "wield-forge (claude-haiku agent)"
  },
  "requires_login": false,
  "schema": "https://wield.run/schema/recipe/v1.json",
  "site": {
    "country": "US",
    "id": "sourceforge.net",
    "language": "en",
    "name": "SourceForge",
    "origin": "https://sourceforge.net",
    "origins": [
      "https://sourceforge.net"
    ]
  },
  "steps": [
    {
      "description": "Server-rendered project directory search /directory/?q=...; read-only GET. Each result is li.project-oss.",
      "expect": {
        "content_type": "html",
        "status": [
          200
        ]
      },
      "extract": {
        "html_items": {
          "projects": {
            "fields": {
              "href": {
                "attr": "href",
                "selector": "a.result-heading-title"
              },
              "last_update": {
                "attr": "datetime",
                "selector": "time.dateUpdated"
              },
              "name": {
                "selector": ".result-heading-title h3"
              },
              "summary": {
                "selector": "p.subtitle"
              }
            },
            "max": 30,
            "selector": "li.project-oss"
          }
        }
      },
      "id": "search",
      "request": {
        "headers": {
          "Accept": "text/html"
        },
        "method": "GET",
        "query": {
          "q": "{{params.query}}"
        },
        "url": "/directory/"
      }
    }
  ],
  "task": "Search open-source projects",
  "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.projects) > `0`",
      "length(output.projects[?name != `null`]) == length(output.projects)",
      "length(output.projects[?starts_with(url, 'https://sourceforge.net/projects/')]) == length(output.projects)"
    ],
    "example_params": {
      "query": "vlc"
    },
    "max_ms": 5000
  },
  "version": 1
}