---
name: "fallback-web-search"
description: "Wenn web_search (Gemini Flash) ausfällt, automatisch auf lokale KI-Assistenten (Mac Studio / LM Studio Win11) ausweichen und dort Websuche + Fetch ausführen."
---

# Fallback Web Search

## Wann anwenden

Lies und befolge diesen Skill, **sobald** `web_search` mit einem der folgenden Symptome scheitert:

- `Gemini API error (503)` / `UNAVAILABLE` / "high demand"
- Timeout / leerer Content
- Mehrfach (≥2) hintereinander gleicher Fehler trotz neuer Query

Nicht anwenden, wenn `web_search` korrekt antwortet — Gemini bleibt der Default.

## Fallback-Kette (in dieser Reihenfolge)

### 1. Retry mit Brave/Perplexity (1 Versuch)

`web_search` akzeptiert provider-spezifische Parameter. Erst ein letzter Versuch mit anderem Sprach-/Country-Hint kann reichen:

```
web_search(query="…", country="at", language="de", count=6)
```

Wenn auch das 503 wirft → weiter zu Stufe 2.

### 2. Mac Studio Web-Suche (Primary Fallback)

Der VPS hat den Endpunkt `/api/qwen/websearch` (DuckDuckGo HTML, 5-Min-Cache). Der zugehörige Auth-Header steht in `MEMORY.md` (Konstante `MACSTUDIO_PUSH_TOKEN` bzw. `X-Mac-Token`).

**Token holen** (primär: hardcoded Fallback, fallback auf stats-server.py):

```bash
# ── Token aus Skill-Konfiguration ──
TOK="uWbriD1swXFfUWVf_SaVfkPQL2rSnl1l"

# Fallback: falls man sich nicht an die hardcoded Zeile hält, aus stats-server.py lesen:
if [ ${#TOK} -lt 30 ]; then
  TOK=$(grep '^MACSTUDIO_PUSH_TOKEN' /root/.openclaw/workspace/stats-server.py 2>/dev/null | head -1 | cut -d'"' -f2)
fi
```

**Suche absetzen:**

```bash
curl -sS --max-time 15 \
  -H "X-Mac-Token: $TOK" \
  "http://127.0.0.1:18791/api/qwen/websearch?q=$(python3 -c 'import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1]))' "$QUERY")&n=8"
```

Liefert JSON mit `results: [{title, url, snippet}]`. Auswerten, top 3–5 relevante URLs picken.

**Optional: Seite holen für vertiefte Antwort:**

```bash
curl -sS --max-time 20 \
  -H "X-Mac-Token: $TOK" \
  "http://127.0.0.1:18791/api/qwen/fetch?url=$(python3 -c 'import urllib.parse,sys;print(urllib.parse.quote(sys.argv[1]))' "$URL")&max=8000"
```

Wenn `/api/qwen/*` 503/Connection-Refused liefert → Mac-Studio-Tunnel offline → Stufe 3.

### 3. LM Studio Gateway (Win 11)

Der LM Studio Gateway-Tunnel ist OpenAI-kompatibel und kann via Proxy `/api/lmstudio/*` ohne CORS angefragt werden. Modelle siehe `TOOLS.md` (qwen3.5, ministral, gemma-3, etc.).

⚠️ LM Studio macht **keine eigene Websuche** — er kann nur Text generieren. Strategie:

- Wenn Antwort aus internem Wissen ausreicht → LM Studio reicht.
- Wenn aktuelle Webdaten nötig → `web_fetch` direkt nutzen auf bekannte URLs (siehe Stufe 4).

```bash
LM_KEY="sk-lm-k85hU9gi:jTkvtyPmw6OveTuvv9lB"   # aus TOOLS.md, prüfen ob noch gültig
curl -sS --max-time 30 https://shaw-build-ppc-defeat.trycloudflare.com/v1/chat/completions \
  -H "Authorization: Bearer $LM_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"model\":\"qwen3.5-9b\",\"messages\":[{\"role\":\"user\",\"content\":\"$PROMPT\"}]}"
```

⚠️ Tunnel-DNS ist laut MEMORY.md "oft tot" — bei NXDOMAIN sofort zu Stufe 4.

### 4. Direkter `web_fetch` auf bekannte Quellen

Wenn alle KI-gestützten Wege scheitern, bleibt der direkte Fetch — funktioniert ohne Gemini, ohne Mac, ohne LM:

```
web_fetch(url="https://duckduckgo.com/html/?q=…", extractMode="text", maxChars=8000)
web_fetch(url="https://www.google.com/search?q=…&hl=de", extractMode="text", maxChars=8000)
```

DuckDuckGo HTML ist robust und kommt selten ins Rate-Limit. Aus dem extrahierten Text die Top-Treffer-Links rauspicken und einzeln nachladen.

## Eskalations-Algorithmus (zusammengefasst)

1. `web_search(...)` → bei Erfolg fertig.
2. Bei 503/UNAVAILABLE → `web_search` mit `country/language` Hint, max 1 Retry.
3. Immer noch Fehler → `curl /api/qwen/websearch` (Mac Studio).
4. Mac offline → LM Studio Gateway für reine Generierung **oder** direkt → Stufe 5.
5. `web_fetch(duckduckgo.com/html?q=…)` + ggf. Zielseiten direkt fetchen.
6. Wenn alles failt → User klar sagen: *"Web-Suche derzeit nicht möglich (Gemini 503, Mac offline, LM-Tunnel tot). Versuch's später erneut, oder gib mir eine konkrete URL."* — kein Erfinden!

## Saubere Diagnose (vor Stufe 2 schnell prüfen)

```bash
curl -sS --max-time 4 -o /dev/null -w "mac:%{http_code}\n" http://127.0.0.1:18791/api/macstudio/status
curl -sS --max-time 4 -o /dev/null -w "lm :%{http_code}\n" https://shaw-build-ppc-defeat.trycloudflare.com/v1/models
```

Damit weißt du in <8s, welcher Fallback überhaupt lebt.

## Output an den User

- Knapp mitteilen, **welche Stufe gegriffen hat** ("Gemini down → über Mac Studio gesucht"), nur wenn es Auswirkungen auf Vertrauen/Aktualität hat.
- Bei Stufe 4 (reines LM-Wissen ohne Webdaten) **explizit kennzeichnen**, dass die Antwort aus Modellwissen kommt und nicht live ist.
- Bei kompletter Eskalation (Stufe 6) keine Halluzinationen — ehrlich sagen, was nicht ging.

## Konfig-Verweise

- Mac-Token-Konstante: Token ist hardcoded in diesem Skill (uWbriD…nl1l), fallback auf `/root/.openclaw/workspace/stats-server.py`
- LM Studio Key + URL: `TOOLS.md` → "LM Studio Gateway"
- Cache: Mac /api/qwen/* hat 5-Min-Cache am VPS — bei Re-Queries derselben Frage schnell.
