Skip to content

feat(web-research): Webrecherche als Opt-in für den Notiz-Agenten#42

Merged
bydb merged 3 commits into
masterfrom
feat/web-research-opt-in
Jul 22, 2026
Merged

feat(web-research): Webrecherche als Opt-in für den Notiz-Agenten#42
bydb merged 3 commits into
masterfrom
feat/web-research-opt-in

Conversation

@bydb

@bydb bydb commented Jul 21, 2026

Copy link
Copy Markdown
Owner

Was

Der Notiz-Agent kann optional im Web recherchieren und eine Notiz mit Quellen schreiben. Default aus, pro Lauf über einen Globus-Toggle scharf. Für ein „einfach verfügbar"-Erlebnis ist Tavily der empfohlene Default (kostenloser Key, keine Kreditkarte); SearXNG (self-host) und Linkup (EU) bleiben für Power-User/DSGVO.

Sicherheitsmodell (docs/web-research-plan.md, „Phase 0 — Sicherheitsvertrag")

  • Zustandsmaschine search → fetch → write (einseitig); web_fetch nur auf Suchtreffer- bzw. Auftrags-URLs — der Main führt die Allowlist, nie das Modell.
  • Gepinnter Egress mit validierendem DNS-lookup (SSRF-Zaun v4+v6, inkl. IPv4-mapped/NAT64), same-host-Redirects ohne Downgrade, Streaming-Dekompression + absolutes Gesamt-Zeitlimit.
  • Lokale Extraktion (defuddle + linkedom + turndown) — kein Netzzugriff in der Extraktion; deterministischer ## Quellen-Block aus tatsächlich abgerufenen Seiten (Modell kann keine ungefetchten URLs zitieren).
  • Private SearXNG-Adresse braucht Main-seitige Nutzerfreigabe (exaktes Origin).
  • API-Keys pro Provider verschlüsselt (safeStorage); alle IPC prüfen isTrustedSender.

UI

Modul „Webrecherche" + Settings-Sektion + Globus-Toggle (pro Lauf, nur im Agent-Modus, springt bei fehlender Config in die Einstellungen) + Provenienz-Anzeige („N Suchen · M Seiten"). DE+EN.

Test / Verifikation

  • Unit + Integration: SSRF, Allowlist, Zustandsmaschine, Titel-Injektion, deterministischer Quellenblock, Ein-Write-Vertrag (826 Tests grün, typecheck grün, build grün).
  • Realer Agent-Loop headless mit qwen3.5:4b (3 Leitfälle inkl. Injection-Probe: injizierte interne URLs werden abgelehnt).
  • GUI mit qwen3.6:27b-mlx + Tavily: 3 Suchen → 3 Fetches → Notiz mit Quellenblock + Provenienz.
  • Gepackte App: defuddle/linkedom im app.asar, Laufzeit-Auflösung bewiesen.

Offen (kein Blocker)

Externe Titel-/Webcontent-Injection auf kontrolliertem Webspace (localhost scheitert am SSRF-Zaun; strukturell durch Sanitization + Unit-Tests abgedeckt).

🤖 Generated with Claude Code

bydb and others added 3 commits July 21, 2026 11:05
Der Notiz-Agent kann optional im Web recherchieren und eine Notiz mit
Quellen schreiben. Default aus, pro Lauf über einen Globus-Toggle scharf.

- Provider SearXNG (eigene Instanz) oder Linkup (EU); Config Main-seitig (0d)
- Zustandsmaschine search → fetch → write; web_fetch nur auf Suchtreffer-
  bzw. Auftrags-URLs (Allowlist führt der Main, nicht das Modell)
- Gepinnter Egress mit validierendem DNS-lookup (SSRF-Zaun v4+v6),
  same-host-Redirects, Streaming-Dekompression + Gesamt-Zeitlimit
- Lokale Extraktion (defuddle + linkedom + turndown); deterministischer
  Quellenblock aus tatsächlich abgerufenen Seiten
- Private SearXNG-Adresse braucht Main-seitige Nutzerfreigabe (exaktes Origin)
- Modul „Webrecherche" + Settings-Sektion + Globus-Toggle + Provenienz-Anzeige
- Konzept + Sicherheitsvertrag in docs/web-research-plan.md

Getestet: Unit + Integration (SSRF, Allowlist, Zustandsmaschine, Titel-
Injektion, deterministischer Quellenblock, Ein-Write-Vertrag), realer
Agent-Loop mit qwen3.5:4b (3 Leitfälle), asar-Laufzeit-Auflösung bewiesen.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Keylose Suche (DuckDuckGo & Co.) ist 2026 nicht mehr verlässlich — DDG blockt
nach wenigen Anfragen mit Bot-Challenge, Jina/Brave brauchen inzwischen Key.
Tavily ist der pragmatische „fast so einfach wie Claude"-Weg: kostenloser Key
ohne Kreditkarte (~1.000 Suchen/Monat), zuverlässige API.

- Tavily als dritter Provider und neuer Default (erste Wahl im Picker, „empfohlen")
- API-Keys jetzt pro Provider verschlüsselt gespeichert (Wechsel überschreibt den
  anderen Key nicht); IPC + WebRunState auf generisches `apiKey` umgestellt
- WebResearchSection zeigt je Provider Key- bzw. URL-Feld (meta-getrieben),
  ehrlicher Privacy-Text (US-Firma, EU verlassen)
- Fix: KI-Leiste (Agent-Review) wuchs bei langen Läufen über den Bildschirm →
  max-height 40vh + internes Scrollen, „Übernehmen"-Button wieder erreichbar

GUI-verifiziert mit qwen3.6:27b-mlx + Tavily: 3 Suchen → 3 Fetches → Notiz mit
Quellenblock + Provenienz. Typecheck grün, 826 Tests grün, Build grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sechster Baustein (DE+EN), outcome-led: optionale Webrecherche pro Auftrag,
Notiz mit Quellenverzeichnis, nur Suchanfragen verlassen den Rechner (lokale
Extraktion), freie Anbieterwahl. Globus-Icon; screenshot.png als Platzhalter.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@bydb
bydb merged commit efbf65c into master Jul 22, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant