Beifahrer

Datenschutz

Beifahrer

Diese Seite ist eine statische Datei: keine Cookies, keine Analysewerkzeuge, nichts von Drittanbietern. Wer sie bereitstellt, kann dabei die üblichen Zugriffsprotokolle eines Webservers führen.

Datenschutz-Statement

Der folgende Text ist die Aussage, die Beifahrer über sich selbst macht. Jede inhaltliche Aussage trägt einen file:line-Verweis in den Baum, gegen den sie geschrieben wurde (0.1.0, Branch ab b79a9bd), damit eine prüfende Person das nachprüfen kann, statt es glauben zu müssen. Aussagen, die im Code nicht nachprüfbar sind, sind als solche gekennzeichnet statt behauptet.

Diesen Text als Webseite veröffentlichen und die URL in jedem Store-Formular angeben. Chrome, Edge und AMO verlangen alle eine URL, und Chromes Programmrichtlinien sind eindeutig, dass eine ungenaue Datenschutzerklärung — einschließlich einer, die dem Verhalten der Erweiterung widerspricht — Grund für eine Entfernung ist (Programmrichtlinien).


1. Was Beifahrer tut

Beifahrer ist eine Browser-Erweiterung. Sie lässt einen KI-Agenten in deinem eigenen Browser arbeiten, im Profil und in der Sitzung, die du bereits geöffnet hast — deinen eingeloggten Tabs, deinen Erweiterungen, deiner Historie. Es startet keinen zweiten Browser.

Der Agent spricht mit dem Browser über ein kleines lokales Programm — die Bridge — das du auf deinem eigenen Rechner ausführst. Die Bridge ist der Prozess, mit dem der Agent spricht; sie hält keine eigenen Daten und ist kein Dienst.

Für jede Aktion, die der Agent ausführen will, prüft Beifahrer eine seitenbezogene Richtlinie, die du festlegst, und fragt dich dann nach Aktionen, die diese Richtlinie noch nicht abdeckt. Die Reihenfolge ist fest, und jede Methode durchläuft sie:

  1. bist du pausiert? — der Notausschalter verweigert alles, auch das Auflisten deiner Tabs
  2. ist die Funktion eingeschaltet? — ein Schalter pro Fähigkeit
  3. die seitenbezogene Stufe, die du für diesen Ursprung eingestellt hast
  4. die eigene Host-Berechtigung des Browsers für diesen Ursprung
  5. bei Änderungen ein Bestätigungsfenster

Erst dann erreicht der Agent die Seite. extension/src/handlers.ts:1-13 nennt die Reihenfolge; extension/src/handlers.ts:1430 führt die Schritte 1 und 2 aus, bevor irgendein Handler erreicht werden kann; extension/src/handlers.ts:168 führt Schritt 3 für jede Methode aus.

Die Richtlinie schlägt grundsätzlich fehl-geschlossen (fail closed) zu. Ein unbekannter Ursprung ist none. Eine Nicht-Web-Adresse hat keinen Ursprung. Eine Methode, die zu keiner Funktion gehört, wird verweigert. packages/core/src/features.ts:188-194 sind die ersten zwei Schritte; extension/src/handlers.ts:169 verweigert alles, was die Richtlinie nicht erlaubt, und markiert es nicht als erfragbar.

2. Die Richtlinie wird in der Erweiterung durchgesetzt, nicht in der Bridge

Die Bridge ist der Prozess, mit dem der Agent spricht — eine Prüfung dort wäre eine Prüfung, die die Seite des Agenten kontrolliert. Die Entscheidung fällt in der Erweiterung, in Code, den der Agent nicht erreichen kann: packages/core/src/policy.ts entscheidet, extension/src/handlers.ts:168 ruft das vor jedem Seitenzugriff auf, und die Bridge hat dazu keinen Aufruf — app/src/bridge/bridge.ts importiert REQUIRED_LEVEL nur für eine Sache: wie lange auf eine Antwort gewartet wird (app/src/bridge/bridge.ts:126).

Die eigene MCP-Schicht der Bridge verweigert die Freigabe eines Tools, das ein Client als schreibgeschützt markiert hat, ohne readOnlyHint: true, und schlägt fehl-geschlossen zu, indem sie es verwirft (applyReadOnlyGate, aufgerufen in app/src/frontends/mcp/server.ts). Das Gate selbst stammt seit 0.54.0 aus @gjsify/mcp — bis dahin war es die eigene runtime.ts dieses Repositories, die dritte wortgetreue Kopie der von curlew — und app/tests/unit/mcp/gate.test.ts fixiert die Richtung, in der es prüft, denn ein Gate, das dieses Repository nicht besitzt, ist der eine Fall, in dem "es wurde hier einmal getestet" aufhört, Beleg zu sein.

Nicht im Code nachprüfbar: was die betreibende Person der Bridge außerhalb dieses Repositories tut. Wenn du eine von jemand anderem gebaute Bridge betreibst, entscheidet dieser Code, wonach der Agent fragen darf. Die obige Aussage bezieht sich auf Beifahrers eigene Bridge, also dieses Repository.

3. Die Bridge hört nur auf deinem Rechner, und nur für diese Erweiterung

Die Bridge bindet an 127.0.0.1 — das Loopback-Interface, das aus dem Netzwerk nicht erreichbar ist (app/src/bridge/bridge.ts:156). Eine Verbindung wird im Handshake verweigert, bevor ein Socket existiert, es sei denn, beides gilt: die Gegenstelle hat eine Loopback-Adresse (packages/core/src/protocol.ts:548) und der Origin des Handshakes ist ein Browser-Erweiterungs-Ursprung — moz-extension:, chrome-extension:, ephy-webextension: oder safari-web-extension: (packages/core/src/protocol.ts:582, verwendet in app/src/bridge/bridge.ts:161-162). Eine Webseite kann einem WebSocket-Handshake keinen dieser Ursprünge geben, also erreicht eine Seite auf irgendeiner Site, die ws://127.0.0.1:<port> öffnet, nie überhaupt das Token.

Das Token wird zeitkonstant verglichen (packages/core/src/protocol.ts:570).

Die Erweiterung baut ausschließlich ws://127.0.0.1:<port>/ auf, mit dem Port aus ihrem eigenen konfigurierten Bereich (extension/src/bridge-client.ts:141). Es gibt keinen Host, keinen Namen, keinen Konfigurationswert, der woanders hinzeigen könnte.

4. Nichts verlässt dein Gerät

Es gibt keine Telemetrie, keine Analyse, keine Absturzberichte, keine Update-Pings und keinen entfernten Endpunkt jeglicher Art. Die einzige Netzwerkverbindung, die die Erweiterung öffnet, ist der Loopback-Socket oben.

Das ist nachprüfbar, und die Prüfung lohnt sich nach jeder Änderung erneut:

Du bist die einzige Partei dabei. Die Bridge ist dein Prozess, auf deinem Rechner, liest den Storage deiner Erweiterung und deinen Browser.

Was die Erweiterung deklariert

Für den Firefox-Build deklariert das Manifest data_collection_permissions: { required: ['none'] } (extension/manifest.ts:151), Mozillas Kategorie für "nichts verlässt das Gerät". Diese Aussage ist konsistent mit dem obigen Code und mit Abschnitt 4 insgesamt: der einzige Kanal, den die Erweiterung hat, ist der Loopback-Socket, und die Bridge, die er erreicht, ist die, die du gestartet hast.

5. Wo deine Daten liegen

Alles, was Beifahrer weiß, liegt in deinem Browser-Profil, im eigenen Storage der Erweiterung. Nichts wird in den Storage der Bridge geschrieben, und nichts wird an einen Server gesendet.

WasWoCode
deine seitenbezogene Richtlinie, Funktionsschalter, Pausenzustand, Token, Portstorage.local dieses Profilsextension/src/settings.ts:45-70, geschrieben in extension/src/settings.ts:73
temporäre Freigaben ("alle Seiten", "für diese Sitzung")storage.session — nie in der gespeicherten Richtlinie, weg beim Browser-Neustartextension/src/grants.ts:6
das Aktivitätsprotokoll im Popupstorage.session wo verfügbar, sonst nur im Speicherextension/src/activity.ts:7-8
gespeicherte Sitzungen (deine Fenster und Tabs)storage.local dieses Profils, nie auf der Bridgeextension/src/sessions-store.ts:4-5, gelesen in extension/src/sessions-store.ts:38
das Anfrage-Protokoll, wenn eingeschaltetim Speicher, ein Puffer pro Tab, auf 200 Zeilen gedeckelt, verworfen beim Schließen des Tabs oder nach zehn Minuten Ruheextension/src/network.ts:52,73-77,89-95

Dass gespeicherte Sitzungen im Browser liegen statt neben dem Agenten, ist eine Entscheidung mit eigener Begründung, ADR 0004.

Was das Aktivitätsprotokoll festhält: Zeit, Methode in Worten, den Host, das Ergebnis und eine gekappte Vorschau einer Eingabe. Nie Seitentext (extension/src/activity.ts:5-6).

6. Was der Agent sehen kann, und was nicht

7. Warum die Berechtigungen für je einen Ursprung einzeln erfragt werden

Eine WebExtension-Host-Berechtigung ist eine Browser-weite Alles-oder-nichts-Freigabe. Jede Site im Voraus anzufragen wäre genau das eine, das dieses Projekt nie tun darf: es würde den Installations-Dialog — den einen Moment, in dem eine Person tatsächlich Nein sagen kann — zu einer Liste von nichts machen.

Beifahrer deklariert also keine Host-Berechtigungen im Installations-Dialog. Alle drei Muster sind optional (extension/manifest.ts:26, verdrahtet in extension/manifest.ts:114 für Manifest V3 und extension/manifest.ts:120 für Manifest V2):

Jede Freigabe wird im Moment der Nutzung geprüft, und die Freigabe des Browsers ist ein zweiter Zaun hinter deiner Richtlinie, kein Ersatz dafür (extension/src/handlers.ts:176; warum die Richtlinie — genauer Ursprung, Port eingeschlossen — statt der Host-weiten Freigabe des Browsers das Gate ist, steht in extension/src/settings.ts:76-83).

Eine temporäre Freigabe gibt den Host-Zugriff zurück, wenn sie endet (extension/src/grants.ts:145).

8. Die optionalen Berechtigungen, und was jede davon kauft

Keine davon wird bei der Installation gewährt. Jede wird im selben Klick angefragt, der die Funktion einschaltet, und der Schalter bleibt aus, wenn du Nein sagst.

BerechtigungWas sie kauftWo angefragtWarum nicht im Voraus
webRequestSeitenanfragen sehen — ein Protokoll dessen, was eine Seite angefragt hat, mit Zeiten. Standardmäßig aus.extension/entrypoints/options/main.ts:203ein Protokoll von allem, was dein Browser tut, ist eine Browsing-Historie mit Zeitstempeln, und anders als eine Host-Berechtigung lässt es sich nicht auf eine Site eingrenzen — es gibt keine seitenbezogene Form davon (extension/manifest.ts:29-38, packages/core/src/features.ts:101-105)
<all_urls>Screenshots — die captureVisibleTab-API des Browsers akzeptiert nichts Engeres, und Firefox definiert sie ohne die Freigabe gar nicht. Standardmäßig aus.extension/entrypoints/options/main.ts:172die eigene API des Browsers hat keine engere Form (extension/manifest.ts:21-23, pro Aufruf geprüft in extension/src/handlers.ts:1039)
http:/// + https:///Gespeicherte Sitzungen und Tab-Verwaltung — speichern, wiederherstellen, sortieren, anpinnen, schließen, gruppieren von Fenstern und Tabs. Standardmäßig aus.extension/entrypoints/popup/main.ts:202eine Sitzung ist eine Liste deiner Tabs, also ist das deine Browsing-Historie; gehört hinter einen Schalter, den du setzt, nicht in den Installations-Dialog
downloadsVersteckte Downloads abfangen — einen Download sehen, den die Seite außer Sicht startet, und die Kopie des Browsers entfernen, sobald der Agent die Bytes hat. Standardmäßig aus; die Berechtigung wird im selben Klick angefragt und nur während einer Aufnahme beobachtet.extension/src/saves.ts; extension/entrypoints/options/main.tsdie Berechtigung kann Downloads auflisten und löschen, also ist sie optional, ein eigener Schalter, und nie außerhalb einer Aufnahme genutzt (ADR 0019)
webRequest + script-FunktionDas eigene Skript des Agenten in einer Seite ausführen — standardmäßig aus, braucht die Stufe write, und fragt immer, zeigt dir das ganze Skriptextension/entrypoints/confirm/main.ts:134; packages/core/src/policy.ts:219ein Skript ist Code, den du nicht gelesen hast und der in einer Seite läuft, in die du eingeloggt bist; bekommt einen eigenen Schalter, und keine Einstellung kann ihn zum Schweigen bringen (ADR 0012)

Die übrigen deklarierten Berechtigungen brauchen keine Anfrage und berühren von sich aus keine Site: tabs, storage, alarms, sessions, tabGroups (extension/manifest.ts:92) — und die Fähigkeiten hinter sessions und tabGroups sind standardmäßig aus (packages/core/src/features.ts:114-115).

9. Was die Erweiterung nicht tut

10. Kinder und sensible Seiten

Beifahrer ist ein Entwickler-Werkzeug. Es richtet sich nicht an Kinder, und es wird keine Altersgrenze behauptet.

Du kannst eine Site komplett blockieren — ein Tab darauf zeigt dann nur dessen Host, und nichts darf darauf gelesen oder geändert werden, und eine Blockierung wird nicht von einer temporären Freigabe überschrieben. Tu das für die Site einer Bank, einer Gesundheitseinrichtung oder deines Arbeitgebers, und denk daran, dass ein eingebetteter Frame von einem anderen Ursprung separat beurteilt wird, also deckt eine Blockierung der obersten Site nicht ab, was die Seite einbettet.

11. Änderungen an diesem Text

Diese Datei ist die Aussage. Wenn eine künftige Version ändert, was die Erweiterung tut, ändert sich diese Datei im selben Commit — die Aussagen sind file:line-Zitate genau deshalb, damit eine Code-Änderung den Text sichtbar falsch macht, statt still zu veralten.

Kontakt: pascal@jumplink.eu

Zurück zu Beifahrer