← App
✱ webgpu-agent
Dokumentation WIP / Experiment local-first

Dokumentation

Stand: · Quelle: doku.html im Repository · GitHub

Ein autonomer Webagent, der zu 100 % im Browser läuft: lokale LLMs auf der GPU (WebGPU), strukturiertes Gedächtnis (AAMS), echte Task-Zerlegung und Ausführung — ohne Cloud, ohne Server.

Was ist das? webgpu-agent ist ein privates Forschungsprojekt / Experiment (WIP) — kein fertiges Produkt, keine Support- oder Stabilitätsversprechen. Es ist ein Prototyp, dessen Zweck es ist, Fragen zu beantworten, die sonst niemand sauber beantwortet: Wie weit kommt ein wirklich autonomer Agent, wenn er komplett im Browser leben muss?

▶ Zur App (Demo) Code auf GitHub (MIT)

1. Warum machen wir das?

1.1 Datensouveränität ist keine Einstellung — es ist die Architektur

Fast alle heutigen AI-Agents arbeiten über Cloud-APIs: Jede Aufgabe, jeder Dateiinhalt, jedes „Gedächtnis" des Agenten läuft über fremde Server. Das ist bequem — aber es bedeutet, dass die Daten nie wirklich uns gehören. Für sensible Inhalte (private Texte, Arbeitsstände, persönliche Notizen) ist das kein vertretbarer Zustand.

webgpu-agent stellt das um: Der Agent läuft komplett im Browser. Es gibt keine Cloud-APIs, kein Backend, keine Serverinfrastruktur. Alle Daten — Aufgaben, Zwischenergebnisse, Audit-Log, Gedächtnis — verbleiben zu 100 % im Client-Browser. Das ist keine Option im Einstellungs-Menü, sondern eine Invariante der Architektur: Sie lässt sich nicht versehentlich „einschalten", weil sie schlicht nicht existiert.

1.2 Lokale Inferenz auf der eigenen GPU

Die Intelligenz kommt nicht aus dem Rechenzentrum, sondern von der GPU des eigenen Geräts. Über WebGPU und WebLLM laufen quantisierte Open-Source-Modelle (Qwen/Llama) direkt im Browser: ein kompakter „Wächter" (0,5 B, läuft permanent) und ein größerer „Planer" (3 B, lädt bei Bedarf nach und wird danach wieder entladen). Damit bleibt alles in einem realistischen VRAM-Budget (Zielprofil: ≤ 4 GB).

1.3 Autonomie im Browser

Ein Agent ist nur dann interessant, wenn er Aufgaben selbst zerlegen und ausführen kann — nicht nur antworten. Deshalb hat das Projekt einen echten Agent-Loop: Der Planer zerlegt eine Aufgabe in Teilaufgaben (fester JSON-Schema), ein Executor führt sie aus, ein Audit-Log dokumentiert jeden Schritt — inkl. echter Token-Usage. Der Agent hat außerdem ein strukturiertes Gedächtnis (Session, Task-Tree, Audit, Memory in IndexedDB) und kann es als JSON exportieren/importieren.

1.4 Die eigentliche Frage: Forschung, nicht Produkt

Dahinter steht eine Forschungsfrage: Wie weit kommt ein autonomer Agent mit echtem Gedächtnis, wenn er vollständig clientseitig leben muss? Wo sind die technischen Grenzen — VRAM, Kontextlänge, WebGPU-Verfügbarkeit, Offline-Fähigkeit, Portabilität des Gedächtnisses? Diese Grenzen wollen wir messen und dokumentieren, nicht behaupten. Deshalb ist das Projekt ausdrücklich ein Experiment: Es gibt ein Benchmark-System, offene Forschungsfragen und einen stufenweisen Plan mit Abbruchkriterien (siehe Forschungsansatz).

1.5 AAMS — Gedächtnis als natives Modell

Das Gedächtnis- und Task-Modell des Agenten ist AAMS (Autonomous Agent Mesh System). Eine Besonderheit dieses Projekts: AAMS spielt doppelt eine Rolle und wird dabei strikt getrennt:

RolleWasWo
A — Arbeitsgrundlage Steuert den Entwicklungsprozess: Workpapers, Whitepapers, Langzeit-Memory, Diary In diesem Repository (WORKING/)
B — Native Agenten-Architektur Das Gedächtnis- & Task-Modell des Agenten selbst (Session, Task-Tree, Audit, Memory) Im Browser des Nutzers (IndexedDB + JSON-Export)

Dasselbe Schema wird in beiden Rollen verwendet, die Instanzen bleiben getrennt. Für den Nutzer heißt das: Der Agent versteht AAMS von Haus aus und baut seine eigene lokale Wissens- und Task-Struktur exakt nach dieser Spezifikation auf.

2. Was ist das Ziel?

2.1 Kernziel

Ein vollständig clientseitiger, autonomer Webagent mit:

2.2 Forschungsziele (konkret)

#ZielWarum
1 Benchmark-System (Level L1–L10, ≤ 4 GB-VRAM-Profil, Pass-Regel 5/5, Referenzgerät) Ohne harte, programmatisch prüfbare Messung ist jede Aussage über „Funktioniert" unbelegt
2 Wächter-Spezialist (eigenes getuntes 0,5–1,5-B-Modell für Protokoll-Aufgaben) Der Wächter läuft permanent — seine Zuverlässigkeit hat die größte Hebelwirkung (siehe §6)
3 Offline nach Setup Ein „lokaler" Agent, der nach dem ersten Start noch Internet braucht, ist nicht souverän
4 Gedächtnis-Portabilität (besser als JSON-Export/Import) Heute: Gedächtnis ist an Browser+Origin gebunden — anderes Gerät = leeres Gedächtnis
5 Datei-Output (Artefakte: HTML → ZIP → docx/xlsx) Nachgewiesene Lücke: Aufgabe „6/6 erledigt", aber 0 Dateien — Ergebnisse müssen echte Dateien sein
6 Helfer-Modelle (OCR / Übersetzung / Web-Fetch) on-demand Spezialisten nur bei Bedarf im VRAM, danach wieder frei

2.3 Nicht-Ziele (bewusst)

3. Wo steht das Projekt?

Stand: · Prototyp (Vite + TypeScript) · Lizenz: MIT · Mitarbeit willkommen (GitHub-Issues/PRs).

3.1 Umgesetzt

BereichWas kann esStatus
Agent-Loop Echte Zerlegung (Planer-JSON → Task-Tree) + echte Ausführung (Executor-Regel) mit echter Token-Usage und Audit-Spur (llm.*, plan.*, chat.*) umgesetzt
Modell-Pool Wächter (Qwen2.5 0.5B, ≈945 MB) resident + Planer (Llama-3.2 3B, ≈2,3 GB) on-demand · Modell-Katalog ≤ 4 GB · Laden/Entladen, Download-Fortschritt, DEGRADED-State, VRAM-Budget-Balken umgesetzt
Chat Einziger Dialogkanal, Intent-gesteuert: Status · „beginne" → Ausführung · Aufgabe → Planer + automatischer Loop · Frage → Planer antwortet umgesetzt
Dashboard Dunkler App-Frame (3 Spalten): Rollen-Karten, VRAM-Bar, Tabs Zuschauen (Live-Feed) / Arbeit (Task-Tree) / Audit (filterbar) / Gedächtnis umgesetzt
Artefakte HTML-Ergebnisse deterministisch aus task.result extrahiert (kein Schema-Eingriff) → Sandbox-Vorschau (ohne allow-same-origin) + Download + Audit umgesetzt
Gedächtnis AAMS-B in IndexedDB (Session, Tasks, Audit, Memory, Knowledge) · „Neue Session" mit automatischem Safety-Export + Rollback · JSON-Export/Import (portabel, mit Schema-Prüfung) umgesetzt
KERN Prototyp: Tokenwächter (Kontext-Grenzenwächter) + mechanischer Loop (simuliert) — Grundlage für die echten Loops umgesetzt
Benchmark-System Fixiert als Whitepaper WH-002: Level L1–L10, ≤ 4-GB-Profil, Metriken, Pass-Regel 5/5, Reproduzierbarkeits-Protokoll, Geräterollen definiert 1. Testlauf offen
Live-Demo Statisch gehostet (HuggingFace-Static-Space), App + Assets verifiziert live

3.2 Noch offen

PunktStatus
Erster Benchmark-Testlauf (L1 auf dem Referenzgerät — GTX 1050 4 GB, Variante zu verifizieren) offen — erster Schritt
Benchmark-Seite (Szenario-Textseiten L1–L5, Start, Run-Report) + Panel „Maschine" offen
Helfer-Modelle (OCR / Übersetzung / Web-Fetch) via Transformers.js offen
Automatisierte Tests (Vitest) für Gedächtnis, Task-Queue, Modell-Pool offen
PWA / Offline-Cache für die Weights (Forschungsziel 3) bewusst nicht vor Messung
Ehrlichkeit-Hinweis: Die Weights (≈ 945 MB Wächter / ≈ 2,3 GB Planer) werden beim ersten Laden vom CDN heruntergeladen (Setup) — danach Browser-Cache. WebGPU ist eine Pflicht-Voraussetzung: Chrome/Edge. Firefox/Safari: aktuell nicht verfügbar.

4. Der Forschungsansatz

4.1 Grundprinzipien

4.2 Doku-Kette (AAMS-Dev-Prozess, Rolle A)

Der Entwicklungsprozess ist selbst Teil des Experiments: Jede Arbeits-Einheit startet mit einem Workpaper (offen, mit Autor:in und Auftrag), stabil gewordene Wahrheiten steigen in ein Whitepaper auf (mit Decision Records — nachvollziehbare Entscheidungen mit Begründung und Alternativen), und Langzeit-Kontext wird in einem LTM-Index geführt. Die Kette wird nicht übersprungen: Workpaper → Whitepaper → LTM. Das komplette Repo (WORKING/) ist offen einsehbar — man kann also sehen, wie das Projekt entsteht.

4.3 Benchmark-Protokoll (WH-002, Auszug)

Das Benchmark-System definiert eine stabile Level-Achse — die Anzahl der Teilaufgaben und der Charakter steigen mit dem Level:

LevelTeilaufgabenCharakter
L11einfache Aufgabe, keine Zerlegung
L22minimale Zerlegung
L33Standard-Zerlegung
L44ein Zwischenergebnis fließt in Teilaufgabe 4 ein
L55Zwischenergebnisse + finales Artefakt
L6–L96–9Skizze — bei Bedarf ausformulieren
L10~10kleine App: planen + bauen + HTML-Übersicht (Kern-Proof)

VRAM-Budget im ≤ 4-GB-Profil (Ground-Truth: WebLLM-Lib-Metadaten):

KombinationVRAM (≈)Passt in ≤ 4096 MB?
Wächter Qwen2.5-0.5B allein944,62 MB✅ ~3,1 GB Reserve
Wächter + Planer Llama-3.2-3B3208,31 MB⚠ ~0,8 GB Reserve (beobachten!)
Wächter + Fallback Qwen2.5-1.5B2574,37 MB✅ ~1,5 GB Reserve
7B-Modelle> 5100 MB❌ außerhalb des Zielprofils

Gemessen wird pro Lauf (automatisch in das Gedächtnis geloggt): harter DoD (0/1), Score (0–3), geplante Teilaufgaben, echte Token-Usage (Prompt/Completion/Total), Zeit, VRAM (geladen + OOM-Events), Flush-Zyklen und KERN-Integrität (nichts nach einem Kontext-Flush verloren — Invariante). Pass-Regel: 5/5 — und „bewiesen" gilt nur auf dem Referenzgerät (GTX 1050 4 GB, Variante zu verifizieren), nicht auf dem Dev-Gerät (RTX 5090). WebGPU-Determinismus ist nicht garantiert → Läufe werden mehrfach wiederholt und die Streuung angegeben.

4.4 Offene Forschungsfragen (Auswahl)

#FrageStatus
1Offline nach Setup: Was darf der Service Worker zuverlässig cachen? App-Shell ja; Weights (1–2,5 GB) → Quota-/CacheStorage-Verhalten je Browser messenoffen
2AAMS-B & Origin: Gedächtnis ist an Browser+Origin gebunden — reicht JSON-Export/Import, oder brauchen wir eine Brücke (OPFS + File-System-Access)?offen
3WebGPU-Verfügbarkeit: Welche Browser/Devices können es (Chrome/Edge ja; Firefox/Safari zu prüfen)? Capability-Check + saubere Meldung im UIoffen
4Modell-Updates: Wie versionieren wir Weights (Revision pro Modell), wie veralten Caches, wie migrieren Nutzer?offen
5Browser-Extension (Web-Zugriff-Brücke): sinnvoll nur am selben Gerät — wie verteilen/aktualisieren?offen
6Sicherheit/Hosting: CSP-Header, keine Secrets in der App, Web-Zugriff nur über geprüfte Brücke (untrusted-Daten-Regel)offen

4.5 Erweiterungs-Proposal (V1–V5, geprüft)

#VorschlagPrüfergebnis
V1OPFS (Origin Private File System) für größere Kapazität✅ machbar
V2Browser-Extension als Web-Zugriff-Brücke (untrusted-Daten-Regel)✅ optional, zuletzt
V3Pyodide (Python in der Browser-Sandbox)✅ erst nach 5/5-Proof
V4Artefakte: Ergebnisse als echte Dateien✅ Schritt 1 (HTML) umgesetzt, ZIP folgt
V5„Hermes-lite" im Pool1–4 ja / 5.5 abgelehnt (kein passendes Modell ≤ 4 GB im Katalog)

Vorgeschlagene Reihenfolge: V4 → V1 → V5 → V3 → V2 — jede Stufe erst nach menschlicher Freigabe.

5. Offene Probleme — was es zu lösen gilt

Diese Liste ist bewusst gesondert: Hier stehen die Probleme, die wir kennen und die es in Zukunft zu lösen gilt. Bei jedem Punkt steht, warum er wichtig ist und in welche Richtung wir nach besseren Wegen und besseren Lösungen suchen. Die aktuelle Lösung ist bei keinem Punkt als final zu verstehen — genau das ist der Punkt der Forschung.

ProblemWarum es wichtig istBessere Wege / was wir suchen
P1 · Offline nach Setup Ein „lokaler" Agent, der nach dem ersten Start noch Internet braucht, ist nicht souverän. Weights (≈3 GB) + Cache-Quota sind je Browser unbekannt Zuverlässige Cache-Strategie messen (Service Worker, CacheStorage vs. OPFS), selbst gehostete Weights, Update-/Versions-Strategie — pro Browser messen, nicht raten
P2 · Gedächtnis an Browser+Origin gebunden Anderes Gerät oder Browser = leeres Gedächtnis. Heute gibt es nur JSON-Export/Import (manuell) Bessere Portabilität: OPFS + File-System-Access-API, lokale Synchronisations-Konzepte, bessere Import-/Merge-UX — ohne Cloud (Invariante bleibt)
P3 · WebGPU-Verfügbarkeit Chrome/Edge ja, Firefox/Safari nein — ein Teil der Nutzer kann das Projekt nicht nutzen Besserer Capability-Check + ehrliche Meldung im UI; langfristig: Alternativen prüfen (WASM-Runtimes, andere Backends) — als eigene Studie, nicht als Stillstand
P4 · Modell-Updates & Caches Neue Quantisierungen/Revisionen: Wie veralten Caches? Wie kommen Nutzer zu besseren Modellen, ohne zu verlieren? Revisionssystem pro Modell, saubere Cache-Invalidation, Migrations-Pfad — Teil des Benchmark-Protokolls (Reproduzierbarkeit)
P5 · Kontextfenster (4096 Tokens) Für größere Aufgaben zu klein; der Tokenwächter muss Kontext flushen — dabei darf nichts verloren gehen (Invariante) Progressive Disclosure (nur benötigte Kontext-Schnitte), bessere Memory-Kompression/Reflexion, längere Kontexte nur, wenn das VRAM-Profil es hergibt
P6 · Datei-Output Nachgewiesene Lücke: eine Website-Aufgabe lief „6/6 erledigt" — aber 0 Dateien. Ein Agent ohne echte Dateien ist unvollständig Artefakt-Pipeline (V4): HTML (fertig) → ZIP/mehrdateiig → docx/xlsx; File-System-Access für direkten Speicherort-Wunsch
P7 · Reproduzierbarkeit auf WebGPU Inferenz ist nicht deterministisch garantiert — Benchmark-Ergebnisse sind nur im Rahmen der Streuung vergleichbar Besseres Protokoll: mehr Läufe, fixierte Seeds wo möglich, Spannweite ausweisen, „bewiesen" nur auf dem Referenzgerät
P8 · VRAM auf kleinen GPUs Wächter + Planer lassen im 4-GB-Profil nur ≈0,8 GB Reserve — enger als gedacht Besseres VRAM-Budget mit Systemreserve, Quantisierungs-Wahl via Capability-Gate (shader-f16 → q4f16_1, sonst q4f32_1), Fallback-Pfade
P9 · Training: Daten & Qualität Für den Wächter-Spezialisten: Daten-Leckage, Lehrer-Fehler, Lizenzen, Quantisierungs-Verlust — alles kann den Tuning-Nutzen aufzehren Strikter Split, nur programmatisch geprüfte Daten, lizenzkonforme Lehrermodelle, Vor-/Nach-Messung des Exports (Details in §6)
P10 · Distribution & Sicherheit Hosting (CSP, Model-CDN) und die Web-Zugriff-Brücke (Extension) müssen sicher bleiben, ohne die Invariante „keine Secrets in der App" zu brechen Besseres Hosting-Setup (ggf. selbst gehostetes Weights-CDN), untrusted-Daten-Regel für alles Webseitige, saubere Capability-Grenzen
Meta-Regel: Diese Liste ist lebendig. Ein Problem, das gelöst ist, wandert mit Beleg (Benchmark/Decision Record) in ein Whitepaper — und verschwindet von dieser Liste. Ein Problem, das widerlegt wird (z. B. „Training lohnt sich nicht"), ist ein gültiges Ergebnis und wird ebenfalls dokumentiert.

6. Ein eigenes Modell für den Wächter

Der Wächter ist die permanent geladene Instanz des Agenten (≈945 MB, resident). Er führt die engen Protokoll-Aufgaben aus: Planer-JSON im festen Schema, Tool-Aufruf-JSON, Skill-Routing und Memory-Zusammenfassungen. Genau deshalb ist er der interessanteste Kandidat für ein eigenes, getuntes Modell.

6.1 Der Ansatz

StufeInhaltAbbruch / Weiter
0Datenerfassung: jeder Lauf loggt Prompts, Antworten, Prüf-Ergebnisse, Versionen als JSONL (kein Training)Weiter, sobald Format stabil
1Baseline ohne Training: Prompt-Optimierung + schemabasierte JSON-AusgabeWenn die Baseline schon ≥ Zielwert → Training überflüssig, Stufen 2+ streichen
2Datensatz-Aufbau: Lehrermodell + Filter, strikter Train/Val/Test-Split, Dubletten-CheckWeiter bei genügend geprüften Beispielen je Task
3Erstes Tuning (LoRA/QLoRA) auf 0,5 B, ggf. 1,5 BAbbruch, wenn Val-Metriken nicht besser als Baseline
4Export für WebGPU: Adapter zusammenführen, quantisieren, kompilieren, in WebLLM ladenAbbruch, wenn Export Qualität oder VRAM-Profil bricht
5Benchmark-Vergleich Base vs. Tuned im selben Protokoll (WH-002)Entscheidung über Aufnahme in den Pool (Decision Record)

Messgrößen (Base vs. Tuned, identische Bedingungen): Schema-Validität ohne Retry, Tool-Wahl und Parameter korrekt, Retry-Rate, harter DoD-Erfolg, Token/Zeit pro Aufgabe, VRAM-Spitze — und Test-Set-Leistung getrennt von Val-Leistung, damit Überanpassung sichtbar bleibt. „Besser" heißt: Verbesserung außerhalb der Streuung auf dem Test-Split.

6.2 Sinnhaftigkeit & erwarteter Nutzen

6.3 Die Probleme (bewusst sichtbar)

ProblemGegenmaßnahme / wie wir es prüfen
Daten-Leckage / Auswendiglernen des BenchmarksStrikter Split: Test-Szenarien nie im Training; Dubletten-Check; zurückgehaltene Zusatz-Szenarien
Lehrer-Fehler im TrainingssatzNur programmatisch geprüfte Beispiele (Schema + DoD) — kein Modell bewertet sich selbst
Überanpassung auf das Protokoll, Verlust von AllgemeinwissenAufgabe bewusst eng halten; Generalisten-Leistung wird nicht versprochen (Leitplanke T7)
Quantisierung/Export bricht die QualitätStufe 4 misst vor/nach Export; Abbruchkriterium, wenn das VRAM-Profil oder die Qualität bricht
Lizenzen (Basismodell + Lehrermodell)Vor Stufe 2 abschließen: Lizenzen selbst lesen, dokumentieren, abgeleitete Modelle prüfen
„Moving Target": Der Agent verändert sich laufendCommit-Hash, Tool-Registry- und Skill-Version in jedem Datensatz festgehalten
Aufwand unterschätztAbbruchkriterien pro Stufe — und Stufe 1 kann den ganzen Plan beenden („Baseline reicht schon")
Status: Der Plan ist als Research-Plan verfasst (WP-TRAIN-PLAN) und steht zur Prüfung bereit. Stufe 0 (Datenerfassung) ist noch nicht umgesetzt; jede Stufe beginnt erst nach menschlicher Freigabe. Es wird nicht trainiert, bevor die Baseline gemessen ist.