Skip to content

Search Web

The searchWeb executor is a native built-in capability -- no kdeps component install needed.

It queries the web and returns structured results. The default provider is DuckDuckGo (no API key required).

Configuration

yaml
run:
  searchWeb:
    query: "{{ get('query') }}"     # required
    provider: ddg                    # optional: ddg (default) | brave | bing | tavily
    apiKey: "{{ get('apiKey') }}"   # required for brave/bing/tavily
    maxResults: 5                    # optional, default 5
    timeout: 15                      # optional, seconds, default 15

Config fields

FieldTypeRequiredDefaultDescription
querystringYes--Search query
providerstringNoddgSearch provider
apiKeystringNo*--API key (required for non-DDG providers)
maxResultsintNo5Maximum number of results to return
timeoutintNo15HTTP request timeout in seconds

*Required when provider is brave, bing, or tavily.

Providers

ProviderValueAPI KeyEndpoint
DuckDuckGoddgNot requiredHTML scraping
Brave SearchbraveRequiredREST API
BingbingRequiredREST API
TavilytavilyRequiredREST API

Output

yaml
output('search').results    # list of result objects
output('search').count      # number of results returned
output('search').query      # the query string
output('search').provider   # provider used
output('search').json       # JSON string of the full result

Result object fields

FieldTypeDescription
titlestringPage title
urlstringPage URL
snippetstringDescription or summary snippet

Examples

DuckDuckGo (no API key)

yaml
metadata:
  actionId: search
run:
  searchWeb:
    query: "{{ get('query') }}"
    maxResults: 5
yaml
metadata:
  actionId: search
run:
  searchWeb:
    query: "{{ get('query') }}"
    provider: brave
    apiKey: "{{ env('BRAVE_API_KEY') }}"
    maxResults: 10

Feed results into an LLM

yaml
metadata:
  actionId: search
run:
  searchWeb:
    query: "{{ get('query') }}"

---
metadata:
  actionId: answer
  requires: [search]
run:
  chat:
    model: llama3.2:1b
    prompt: |
      Answer based on these results:
      {% for r in output('search').results %}
      - {{ r.title }}: {{ r.snippet }}
      {% endfor %}
      Question: {{ get('query') }}

Error handling

ErrorCause
query is requiredEmpty query string
apiKey required for brave providerMissing API key for Brave
apiKey required for bing providerMissing API key for Bing
apiKey required for tavily providerMissing API key for Tavily
unknown provider "x"Invalid provider value

Environment variable overrides (for testing)

VariableDescription
KDEPS_DDG_URLOverride DuckDuckGo base URL
KDEPS_BRAVE_URLOverride Brave API base URL
KDEPS_BING_URLOverride Bing API base URL
KDEPS_TAVILY_URLOverride Tavily API base URL

Released under the Apache 2.0 License.