feat(skills): add web-search and browser-use built-in skills (#11233)

Signed-off-by: Abhijay Jain <Abhijay007j@gmail.com>
This commit is contained in:
Abhijay Jain
2026-08-19 21:51:24 +00:00
committed by GitHub
parent 6722a195e1
commit 6d6abf74a1
4 changed files with 94 additions and 3 deletions
@@ -129,6 +129,7 @@ Create, list, update, pause, resume, and remove scheduled recipe runs, and inspe
You have these skills at your disposal, when it is clear they can help you solve a problem or you are asked to use them:
• goose-doc-guide - Reference goose documentation to create, configure, or explain goose-specific features like recipes, extensions, sessions, and providers. You MUST read the relevant goose docs before answering. You MUST NOT rely on training data or assumptions for any goose-specific fields, values, names, syntax, or commands.
• web-search - Search the web and extract page content using DuckDuckGo (no API key required), Tavily, or SearXNG. Use whenever the task needs current information, facts not in training data, or content from a specific URL.
## summarize
@@ -0,0 +1,71 @@
---
name: web-search
description: Search the web and extract page content using DuckDuckGo (no API key required), Tavily, or SearXNG. Use whenever the task needs current information, facts not in training data, or content from a specific URL.
---
## Requirements
- `uv` must be installed (`curl -LsSf https://astral.sh/uv/install.sh | sh`)
- No API key required for the default DuckDuckGo path
## Search
**Default — DuckDuckGo (no API key):**
```bash
uvx ddgs text -q "your query here" -m 5
```
**Tavily (richer results, requires `TAVILY_API_KEY`):**
```bash
uvx --from tavily-python python -c "
import os
from tavily import TavilyClient
r = TavilyClient(os.environ['TAVILY_API_KEY']).search('your query here', max_results=5)
for res in r['results']:
print(res['url'])
print(res['content'])
print()
"
```
**SearXNG (self-hosted, requires `SEARXNG_URL`):**
```bash
curl -sG --data-urlencode "q=your query here" --data "format=json" "${SEARXNG_URL}/search" | python3 -c "
import json, sys
data = json.load(sys.stdin)
for r in data.get('results', [])[:5]:
print(r['url'])
print(r.get('content',''))
print()
"
```
Pick the first available: Tavily if `TAVILY_API_KEY` is set, SearXNG if `SEARXNG_URL` is set, otherwise DuckDuckGo.
## Extract page content
```bash
url="https://example.com"
tmpfile=$(mktemp /tmp/page-XXXXXX)
curl -sL --max-time 15 -A "Mozilla/5.0" "$url" | uvx html2text --ignore-links > "$tmpfile" 2>/dev/null
wc -c "$tmpfile"
head -c 15000 "$tmpfile"
```
If the page is larger than 15 000 characters, show both head and tail so the user can decide whether to read the full file:
```bash
echo "--- HEAD ---"
head -c 7500 "$tmpfile"
echo ""
echo "--- TAIL ---"
tail -c 7500 "$tmpfile"
echo ""
echo "(Full content saved to $tmpfile)"
```
## Rules
- Always quote search queries to avoid shell word-splitting.
- Respect robots.txt for scraping; do not hammer a host with repeated requests.
- Never send authentication cookies or session tokens to external URLs.
- If a page returns a login wall or CAPTCHA, report the URL and stop; do not attempt to bypass it.
@@ -27,6 +27,22 @@ You can also ask goose what skills are available, run `goose skills list`, or us
goose skills are compatible with Claude Desktop and other [agents that support Agent Skills](https://agentskills.io/home#adoption).
:::
## Built-in Skills
goose ships with a built-in skill that is always available without any installation:
| Skill | Description |
|-------|-------------|
| `web-search` | Search the web using DuckDuckGo (no API key), Tavily, or SearXNG, and extract page content. |
For browser automation — navigating pages, clicking, filling forms, and capturing screenshots — install the upstream-maintained browser-use skill:
```bash
browser-use skill install
```
This gives you the full, up-to-date skill from the browser-use project, including remote browser support, the AX-tree element selection strategy, and recording tools.
## Skill Locations
Skills can be stored globally, per-project, or in installed plugins:
+6 -3
View File
@@ -122,6 +122,8 @@ extensions:
name: summon
- type: builtin
name: extensionmanager
- type: builtin
name: skills
prompt: |
Execute the Goose Self-Testing Integration Suite in {{ workspace_dir }}.
@@ -198,11 +200,12 @@ prompt: |
This tests the discovery mechanism that lists everything available for loading or delegation.
### Load Tool - Builtin Skill Test
Test loading the builtin `goose-doc-guide` skill:
Test loading the builtin skills using the skills extension's load_skill tool:
```
load(source: "goose-doc-guide")
load_skill(name: "goose-doc-guide")
load_skill(name: "web-search")
```
Verify the skill content is returned and can be read. This confirms builtin skills are accessible.
Verify the skill content is returned and can be read for each. This confirms all builtin skills are accessible.
### Load Tool - Knowledge Injection
If any other skills or recipes are discovered, test loading one: