Dokumentation

Lokale Daten, Datenschutz und Deinstallation

Was deinen Rechner verlässt

Code-Navigation läuft vollständig auf deinem Rechner. Index, Symbolgraph, Embeddings und Zusammenfassungen berechnen die eingebetteten Modelle lokal. greppy macht für Code-Navigation keine Netzwerkaufrufe, sendet keine Telemetrie und braucht kein Konto. Es läuft offline und air-gapped. Die Modelle stecken im Binary; Release-Pakete laden zur Laufzeit nichts nach.

Zwei optionale Funktionen verhalten sich anders:

  • Das Browser-Tool (Beta) greift nur auf die URLs zu, die ein Agent ausdrücklich öffnet, sucht oder recherchiert. Dein Repository lädt es nie hoch.
  • Der eingebaute Agent (Beta) schickt seine Konversation, inklusive des Codes, den er liest, an das Modell-Gateway, das du mit GREPPY_ENDPOINT einstellst (Standard http://127.0.0.1:8317). Wohin die Daten von dort gehen, bestimmt dieses Gateway. greppy liefert kein Chat-Modell mit und speichert keine Provider-Zugangsdaten; einen API-Schlüssel übergibst du mit GREPPY_API_KEY.

Was greppy speichert

greppy legt Workspace-Pfade, Quelltext-Spans, Graphkanten, Embeddings und Query-Cache-Einträge in einem lokalen, SQLite-basierten Cache außerhalb deines Repositorys ab. Vollständige Quelltexte dupliziert es dort nicht. Unter macOS ist das Datenverzeichnis ~/Library/Application Support/greppy. greppy cache status zeigt es als cache root, mit --json als data_root.

Daten Inhalt
Workspace-Store pro Repository (workspaces/v2/<id>/) Pfade, Spans, Graph-Beziehungen, Zusammenfassungen, Embeddings, Query-Cache
Gemeinsame Base Stores und Deltas dasselbe, geteilt zwischen verlinkten Worktrees und Agent-Läufen
Inference-Cache (inference-cache/v1/) Embeddings und Zusammenfassungen, geschlüsselt nach exaktem Modell, Prompt und Eingabe, benutzerweit wiederverwendet
Extrahierte Modelle (models/v1/<modell>/<sha256>/) beide eingebetteten Modelle samt Tokenizer, vor dem Laden geprüft
Agent-Sessions (agent-sessions/<projekt>/) Append-only-JSONL-Transkripte; Geheimnisse und Authorization-Header sind geschwärzt
Agent-Workspaces die erfasste Baseline des Repositorys und die privaten Änderungen jedes Laufs; unter macOS in ~/Library/Group Containers/group.ai.metricspace.greppy/workspace

So sieht das in einem eigenen, sonst leeren Home aus, nach einer Installation mit dem Installer und dem Indizieren von serde. ~/.local/share/greppy/versions und ~/.greppy gehören zum Installer, der Rest zu greppy.

$ find ~ -maxdepth 4 -type d
~
~/.local
~/.local/share
~/.local/share/greppy
~/.local/share/greppy/versions
~/.greppy
~/Library
~/Library/Application Support
~/Library/Application Support/greppy
~/Library/Application Support/greppy/locks
~/Library/Application Support/greppy/verified-base-digests-v1
~/Library/Application Support/greppy/inference-cache
~/Library/Application Support/greppy/trash
~/Library/Application Support/greppy/models
~/Library/Application Support/greppy/workspaces
~/Library/Group Containers
~/Library/Group Containers/group.ai.metricspace.greppy
~/Library/Group Containers/group.ai.metricspace.greppy/workspace

Der Store für serde (339 Dateien, 4.573 Symbole) belegt 29 MiB. Die beiden entpackten Modelle mit Tokenizern belegen 777 MiB, die installierte Version mit CLI und Browser-Runtime 1,1 GiB.

$ cd ~/Library/Application\ Support/greppy
$ du -sh workspaces/v2/6f9b5d25ed63b4d6 models inference-cache
 29M    workspaces/v2/6f9b5d25ed63b4d6
777M    models
 15M    inference-cache
$ du -sh ~/.local/share/greppy/versions/v0.4.1
1.1G    ~/.local/share/greppy/versions/v0.4.1

Das Datenverzeichnis hat Modus 0700: Andere Benutzer kommen nicht hinein. greppy verwaltet Cache-Objekte erst, nachdem es Eigentümer, Typ und Pfad geprüft hat. Das Aufräumen durchläuft deshalb keine Verzeichnisse, die greppy nicht gehören, und entfernt keine Daten, die ein laufender Leser gerade nutzt.

Alle diese Daten sind aus dem Quellcode abgeleitet. Schütze sie wie das Repository selbst.

Den Cache im Blick

greppy cache status listet jeden verwalteten Eintrag mit Größe, letzter Nutzung, Sperre und Aktualität, dazu die nicht verwalteten Pfade.

$ greppy cache status
cache root: ~/Library/Application Support/greppy
…
model ~/Library/Application Support/greppy/models/v1/qwen35-0.8b-mtp-q4km/5f9e4d4901a92b997e463c1f46055088b6cca5ca61a6522d1b9f64c4bb81cb42 12808179 bytes last_used=1791407430 locked=false orphaned=false freshness=unknown
model ~/Library/Application Support/greppy/models/v1/qwen35-0.8b-mtp-q4km/b36838d6969d415e08e7f91ab4aa069dcc260ec0801ea1d00bb5dab234181200 529297349 bytes last_used=1791407430 locked=false orphaned=false freshness=unknown
…
model ~/Library/Application Support/greppy/models/v1/embeddinggemma-300m-q4k/53f7d1c0d5c84a81e46f3bea8e0f17c94f459ffbaa8b06f7f52f1f09e58996f2 238991878 bytes last_used=1791407489 locked=false orphaned=false freshness=unknown
model ~/Library/Application Support/greppy/models/v1/embeddinggemma-300m-q4k/6852f8d561078cc0cebe70ca03c5bfdd0d60a45f9d2e0e1e4cc05b68e9ec329e 33385205 bytes last_used=1791407489 locked=false orphaned=false freshness=unknown
…
workspace ~/Library/Application Support/greppy/workspaces/v2/6f9b5d25ed63b4d6 29712704 bytes last_used=1791407625 locked=false orphaned=false freshness=fresh
unmanaged ~/Library/Application Support/greppy/inference-cache
unmanaged ~/Library/Application Support/greppy/verified-base-digests-v1

Mit --json kommen Quota, Untergrenze für die Garbage Collection und TTL dazu.

$ greppy cache status --json | jq '{data_root, quota_bytes, low_water_bytes, ttl_secs, unmanaged}'
{
  "data_root": "~/Library/Application Support/greppy",
  "quota_bytes": 10737418240,
  "low_water_bytes": 9663676416,
  "ttl_secs": 1209600,
  "unmanaged": [
    "~/Library/Application Support/greppy/inference-cache",
    "~/Library/Application Support/greppy/verified-base-digests-v1"
  ]
}

Auf ein geschütztes Volume verlegen

GREPPY_STORE_DIR verlegt das komplette Datenverzeichnis: Workspace-Stores, entpackte Modelle und Inference-Cache. Setze es vor dem Indizieren auf ein absolutes Verzeichnis auf einem verschlüsselten oder flüchtigen Volume und nutze denselben Wert für alle späteren Befehle:

export GREPPY_STORE_DIR=/absolute/encrypted-volume/greppy-store
greppy index .
greppy doctor        # store: zeigt jetzt in dieses Verzeichnis

Lege für den Agenten auch das Workspace-Datenverzeichnis auf gleich gut geschützten Speicher. GREPPY_SHARED_INFERENCE_ROOT beschreibt Worktrees und gemeinsame Indizes.

Prüfen und aufräumen

greppy cache status --json       # Pfade, Größen, Sperren, TTL und Quota
greppy cache gc --dry-run        # TTL/LRU-Aufräumen als Vorschau
greppy cache gc                  # berechtigte Einträge freigeben
greppy cache clear --root . --yes
greppy cache clear --all --yes   # entfernt auch verwaltete gemeinsame Agent-Bases

Die Workspace-Caches haben eine TTL von 14 Tagen und eine Quota von 10 GiB mit Garbage Collection. cache status --json zeigt beides als ttl_secs und quota_bytes. GREPPY_STORE_TTL_DAYS=0 schaltet das Altern ab, die Quota bleibt. GREPPY_STORE_MAX_GIB setzt die Quota. cache clear behält gesperrte Stores und meldet sie.

$ greppy cache status --json | jq -c '{ttl_secs, quota_bytes}'
{"ttl_secs":1209600,"quota_bytes":10737418240}
$ GREPPY_STORE_TTL_DAYS=0 greppy cache status --json | jq -c '{ttl_secs, quota_bytes}'
{"ttl_secs":0,"quota_bytes":10737418240}
$ GREPPY_STORE_MAX_GIB=20 greppy cache status --json | jq -c '{ttl_secs, quota_bytes}'
{"ttl_secs":1209600,"quota_bytes":21474836480}

cache status listet auch nicht verwaltete Pfade: Daten im Datenverzeichnis, die cache gc und cache clear nicht anfassen. In der Demo-Installation sind das inference-cache und verified-base-digests-v1; nach Agent-Läufen kommen agent-sessions und agent-settings.json dazu.

Daemons

Die Embedding- und Summary-Daemons laufen lokal und pro Benutzer. Ein geladenes Modell bleibt 300 Sekunden im Leerlauf im Speicher, ein Daemon-Prozess beendet sich nach 1800 Sekunden im Leerlauf. greppy doctor zeigt den Socket jedes Daemons; unter macOS liegen sie in /tmp/greppy-daemon-<uid>/, das Verzeichnis mit Modus 0700, die Sockets mit 0600. Die Steuer-Sockets des Agenten liegen unter kurzen, gehashten Pfaden in einem Laufzeitverzeichnis pro Benutzer; greppy agent sessions list --json nennt den genauen Pfad.

Deinstallieren

Notiere vorher den cache root aus greppy cache status, falls du GREPPY_STORE_DIR gesetzt hast. Dann führst du aus:

curl -fsSL https://greppy.xyz/install.sh | sh -s -- --uninstall

Der Installer arbeitet in drei Schritten und meldet jeden:

  1. Er rollt zurück, was er eingerichtet hat: die greppy-Blöcke in den Anweisungsdateien deiner Agenten, den Link ~/.local/bin/greppy (wenn er in seine Versionsverzeichnisse zeigt), ~/.local/share/greppy/versions und ~/.greppy. Die *.greppy-backup-Dateien bleiben.
  2. Er leert die Caches mit greppy cache clear --all --yes. Einträge, die ein laufendes greppy sperrt, bleiben; Daemons im Leerlauf beenden sich innerhalb von 30 Minuten.
  3. Er listet die systemweiten Teile auf, die er nicht anfasst: ein mit --system installiertes Paket, den Login-Eintrag von greppy workspace setup und jedes weitere greppy auf deinem PATH.

Für eine restlose Entfernung räumst du danach selbst auf:

Rest So entfernst du ihn
nicht verwaltete Pfade im Datenverzeichnis rm -rf "$HOME/Library/Application Support/greppy" (macOS) oder den notierten cache root
Agent-Workspaces (macOS) rm -rf "$HOME/Library/Group Containers/group.ai.metricspace.greppy"
Login-Eintrag von greppy workspace setup macOS: LaunchAgent ~/Library/LaunchAgents/ai.metric-space.greppy.workspace.plist; Linux: systemd-User-Unit
macOS-Paket aus --system /Applications/GreppyWorkspaceFS.app und /usr/local/bin/greppy löschen, dann sudo pkgutil --forget ai.metric-space.greppy
Debian-Paket sudo apt remove greppy
RPM-Paket sudo rpm -e greppy

Alle Optionen des Installers stehen unter Installieren und deinstallieren.

Daten für Bug-Reports

Für ein Issue hilft greppy doctor --json; schwärze vorher private Pfade. Sicherheitslücken meldest du über GitHubs vertrauliche Schwachstellenmeldung, siehe Sicherheit und Verifikation.