Ein Coding-Agent, der in einem Pull Request endet, Web-Werkzeug und interaktiver Agent
Höhepunkte
Veröffentlicht am 2026-10-07. 0.4.1 enthält die unveröffentlichte 0.4.0-Linie und die Änderungen seither.
Coding-Agent: jede Aufgabe läuft in einem eigenen temporären Copy-on-Write-Worktree und endet als Vorschlags-Commit auf refs/greppy/agent/<run-id>, dem Pull Request. Keine feste Obergrenze für Runden und keine Werkzeug-Timeouts.
Die produktive Inferenz benutzt Metal unter macOS und CUDA unter Linux; FSKit bleibt optionale Beschleunigung, und das gewöhnliche Workspace-Backend liefert dasselbe Verhalten des Agenten.
Web-Werkzeug (Beta):greppy -p und greppy agent können einen Browser (eine eingebettete Servo-Engine) über die Verben von greppy web steuern. Die Verben können sich noch ändern.
Eingebauter Agent (Beta):greppy agent öffnet eine Terminal-Session im Vollbild. greppy -p "TASK" bleibt der kopflose One-Shot-Modus für Skripte.
Jede Aufgabe läuft in einem eigenen temporären Copy-on-Write-Worktree und endet als Vorschlags-Commit auf refs/greppy/agent/<run-id>, dem Pull Request. Dessen Parent ist die Basis des Nutzers einschließlich uncommitteter Arbeit, der Vorschlag enthält also nur die Änderungen des Agenten. Der Worktree wird entfernt, sobald der Vorschlag gespeichert ist, auch wenn ein Limit den Lauf beendet (Exit 5); er bleibt nur mit --keep-worktree oder nach einem Fehler ohne Vorschlag (Ablauf nach 24 h).
Die Commit-Message ist die endgültige Antwort des Agenten. Eine ausdrückliche Zeile Title:, sonst die Zeile vor Status:, wird zum Betreff; die Antwort ist der Body.
Eine Prompt-Quelle rendert den System-Prompt je Modus: One-Shot (-p), interaktiv (TUI), serve und ACP. greppy prompt --mode one-shot|interactive|serve|acp|external [--json] gibt jedes Rendering mit seinem SHA-256 aus; greppy prompt --external gibt den Prompt aus, den externe Agenten benutzen.
Keine festen Grenzen. Es gibt keine Standard-Obergrenze für Runden; --max-turns N ist opt-in und wird von einer Berichts-Runde ohne Werkzeuge gefolgt. Werkzeuge haben keine festen Timeouts: die Deadline des Laufs begrenzt sie, und Aufrufe vor der Deadline bekommen bis zu 30 s. Große Werkzeug-Ausgabe wird hinter expand agent-output-ID gefaltet statt abgeschnitten.
Suchen ohne Treffer und fehlschlagende Tests sind normale Ergebnisse, keine Werkzeugfehler, und lösen nie einen Stopp-Rat aus. Ein führendes greppy in den Tool-Argv wird akzeptiert. Toolchain-Caches werden in das Scratch-Verzeichnis des Laufs umgeleitet, damit Paketmanager in der Sandbox funktionieren.
Lange Sessions werden an vollständigen Wechseln zu einem vom Modell geschriebenen Checkpoint verdichtet; lässt sich ein Checkpoint nicht speichern, stoppt -p mit einem Fehler. --continue und --resume stellen den gespeicherten Vorschlag im neuen Worktree wieder her, und die TUI lehnt ein lebendes /resume ab, das nicht zu den Dateien auf der Platte passen würde.
Claude-Modelle bekommen ausdrückliche Prompt-Cache-Breakpoints für System-Prompt, Werkzeuge und Verlauf; andere Anbieter cachen implizit.
Die Gateway-Prüfung von -p hat 2 s zum Verbinden und 15 s zum Antworten und nennt die Ursache, wenn sie scheitert.
Der ACP-Modus editiert den Ordner des Clients weiter an Ort und Stelle; sein Prompt behauptet keinen Worktree und keinen Pull Request.
Prompt für externe Agenten
Der Prompt für externe Agenten (AGENTS.md, greppy prompt --external) sagt jetzt, dass die Aufgabe eine abzuliefernde Änderung ist: die Edits mit greppy machen und prüfen, nicht bei einer Analyse stehen bleiben. Das Routing wählt einen kompakten Befehl für den nächsten Schritt der Aufgabe. Ohne das haben manche Modelle ein bloßes Issue mit einer Analyse beantwortet statt mit einem Patch.
Neu
Die Verben von greppy web öffnen und beobachten Seiten, danach click, hover, check, extract und find. Auf dem Satz von 14 Aufgaben greppy-web-tasks-v1 (je fünf Läufe) bestehen die Engine-Stufe und die CLI-Chain-Stufe beide 70/70, nach zuvor 78 % und 64 %.
observe liefert @N-Refs, die am aktuellen Dokument hängen; nach einer Navigation verfallen sie mit STALE_REF. greppy web screenshot --render-complete wartet auf ein vollständiges Rendering.
Die öffentliche AGENTS.md trägt den Browser-Prompt-Block, externe Agenten, die den Prompt kopieren, bekommen das Web-Werkzeug also ohne eine zweite Datei.
Die TUI greppy agent zeigt eine Kopfzeile, ein Markdown-Transkript mit Werkzeugzeilen, einen mehrzeiligen Composer und eine Statusfußzeile. Prompts, die ankommen, während der Agent beschäftigt ist, werden eingereiht.
Slash-Befehle der TUI: /help, /clear, /model, /usage, /tools, /copy, /sessions, /name, /compact, /exit. Strg+C bricht an einer sicheren Grenze ab und unterbricht nie ein laufendes Edit.
Sessions werden als JSONL gespeichert und mit --continue oder --resume SESSION_ID wiederhergestellt. Jede Session hat ein Handle greppy://sessions/<id>.
greppy -p --json streamt Session-, Text-, Werkzeug-, Runden-, Fehler- und Ergebnis-Ereignisse, zeilenweise getrennt. Ein abgebrochener Lauf endet trotzdem mit einem result-Ereignis (Exit 130).
greppy agent sessions list|show|tail|path liest gespeicherte Transkripte, ohne die TUI zu starten.
greppy agent serve stellt eine kopflose Session auf einem Unix-Socket pro Nutzer bereit, und greppy agent status|send|attach|interrupt|quit steuert sie aus einer anderen Shell. Die Fernsteuerung ist ein Zusammenarbeitskanal innerhalb eines Nutzerkontos, keine Privilegiengrenze.
Geändert
Agenten sollen bei ihrer Aufgabe bleiben, während ein Index entsteht: den laufenden Index-Job wiederverwenden, einmal begrenzt warten, anhand der gemeldeten Schätzung, und dann mit vollem greppy weitermachen.
Unter macOS wird FSKit zur optionalen Beschleunigung. Das gewöhnliche Workspace-Backend liefert dasselbe Verhalten für Vorschlag und Anwenden, ohne die Extension.
Der Base-Build eines verknüpften Worktrees benutzt jetzt den gemeinsamen Inference-Cache und die Modelle wieder. Ein Worktree mit 41 012 Spannen baut in 161 s statt in 1 520 s.
greppy cache gc und jeder Base-Build entfernen verlassene Build-Staging-Verzeichnisse nach sechs Stunden, damit übrig gebliebene Staging-Dateien die Platte nicht weiter füllen.
Die Store-CoW-Navigation fragt die indizierten Schichten Base und Delta direkt ab: path ging von mehr als 120 s auf unter 6 s.
Sicherheit: der eingebettete Browser beachtet seine HSTS-Preload-Liste, sein TLS-Stack ist auf rustls 0.23.45 festgenagelt (RUSTSEC-2026-0285), SubtleCrypto ist aus, bis es ein RSA-Backend in konstanter Zeit gibt (RUSTSEC-2023-0071), und der Policy-Proxy begrenzt Verbindungen auf 32 pro Content-Worker und 128 pro Prozess.
Die TUI ist auf Ratatui 0.30.2 umgezogen, das das verwundbare lru 0.12 ablegt (GHSA-rhfx-m35p-ff5j).
Behoben
macOS: Base-Stores des Agenten, das Staging des Base-Builds und behaltene Aufzeichnungen von bash-smart brauchen kein separates temporäres Volume mehr. Sie benutzen die normalen Orte pro Nutzer, statt zu scheitern.
replace-text: wenn OLD nirgends passt, nennt die Ablehnung die nächste Variante (die Zeilen, die sich nur im Weißraum unterscheiden, sonst die ähnlichsten Zeilen) mit Zeilenbereich, exaktem Text und der Alternative greppy replace-lines. Es wird nichts geschrieben.
bash-smart zählt Quellzeilen wie warn!(...) in einem git diff nicht mehr als Warnungen.
Die TUI nennt den Grund, warum --continue oder --resume nicht starten kann, statt nur „startup stopped“.
Unter macOS konnte ein kalter Index 16–26 % der Embedding-Batches als Transportfehler verlieren. Der Inferenz-Client liest jetzt weiter, nachdem der Daemon seine Seite geschlossen hat.
Rust-Aufrufe wie store::f() lösen zum benannten Modul auf, nicht zu einer gleichnamigen Funktion in der Datei des Aufrufers.
read liefert einen vorübergehenden Fehler, während der Graph aktualisiert, es paart also nie aktuelle Bytes mit einer veralteten Spanne.
Seit der 0.4.0-Linie sind Korrekturen für das Web-Werkzeug, die Indizierung, die CLI, Edits und die Suche auf dem Release-Branch gelandet.
0.4.0
Entwicklungslinie, abgelöst durch 0.4.1
Höhepunkte
Die Workspace-Version wurde am 2026-09-02 auf 0.4.0 gesetzt; das Datum oben ist dieser Stand.
Nie veröffentlicht: es gibt kein 0.4.0-Tag und kein GitHub-Release. Am 2026-09-28 wurde stattdessen 0.4.1 als nächstes Release gewählt.
Die ganze Linie erscheint in 0.4.1, zusammen mit den Reparaturen seither. Siehe 0.4.1.
Die Linie brachte das Web-Werkzeug in Beta, den interaktiven Agenten in Beta, dauerhafte und ferngesteuerte Agent-Sessions und verknüpfte Worktrees, die den gemeinsamen Inference-Cache wiederverwenden.
Ebenfalls in der Linie: Härtung der Sicherheit der eingebetteten Browser-Laufzeit.
0.3.4
Portable Copy-on-Write-Workspaces für den Agenten, schnellere Worktree-Indizierung
Höhepunkte
Nie getaggt oder veröffentlicht. Die Version wurde am 2026-08-30 vorbereitet; die Entwicklung ging danach in die 0.4.0-Linie, und spätere Arbeit an 0.3.x blieb Stabilitätskorrekturen vorbehalten.
greppy -p hat einen fail-closed Workspace-Weg, gebaut für macOS ARM64, Linux x86_64 und Windows x86_64. Der Windows-Provider bleibt diagnostisch: unverändertes WinFsp 2.1 hat keine Hardlinks, die dieser Workspace-Vertrag verlangt.
Verknüpfte Git-Worktrees teilen sich einen unveränderlichen, an den Git-Tree gebundenen Base-Index und veröffentlichen nur ihr eigenes privates Delta.
Die interaktive TUI greppy agent, die der CHANGELOG unter 0.3.4 führt, erreichte main mit dem Merge der Web-Laufzeit von 0.4.0; beschrieben ist sie unter 0.4.1.
Neu
workspace setup, workspace doctor --json, workspace status --json und workspace gc verwalten einen Provider-Mount pro Nutzer: FUSE3 mit einem systemd-User-Service unter Linux, eine mitgelieferte FSKit-App-Extension unter macOS 15+.
greppy agent apply REF wendet einen Vorschlag an, der aus einem unsauberen Checkout entstanden ist: es prüft die exakte Basis, behält den Git-Index und wendet nur die Änderungen des Agenten an.
Veröffentlichen und Anwenden von Vorschlägen sind journalisiert: ein unterbrochenes Veröffentlichen oder Anwenden wird fortgesetzt, und das Anwenden lässt den Git-Index bytegleich.
Embedding- und Summary-Ergebnisse werden nutzerweit gecacht. Verknüpfte Worktrees und Agenten verwenden identischen Inhalt wieder; nur geänderte Delta-Dokumente kosten Inferenz.
Geändert
Die Snapshot-Backends von 0.3.3, der Git-Worktree-Fallback, --workspace-backend und --fresh wurden entfernt.
Der Agent-Workspace speichert Dateien als feste 1-MiB-Chunks mit BLAKE3-Adresse, sodass ein teilweiser Schreibvorgang nur die berührten Chunks ersetzt.
Das Vorwärmen der Agent-Base ist fail-closed: ein Fehler bei Graph, Embedding, Zusammenfassung oder Veröffentlichung stoppt index --agent-worktree und greppy -p vor dem ersten Modellaufruf. --device und --no-gpu werden beachtet.
Alle schweren Embedding-Arbeiten laufen über einen Daemon pro Nutzer, Gerät und Modell, statt dass jeder Client EmbeddingGemma selbst lädt.
index status funktioniert, während ein Index-Writer aktiv ist, und meldet Phase, Fortschritt der Spannen und die ETA. Ein aktiver erster Build meldet status=indexing statt no_index.
Semantische Suche auf einer unvollständigen Embedding-Generation endet mit Exit 75 und einer ausdrücklichen Retry-Bedingung index status --json.
Die erste Graph-Abfrage auf einem großen Repository startet einen Index-Job im Hintergrund, wartet höchstens zwei Sekunden und liefert den wiederholbaren Exit 75 statt eines unbegrenzten Laufs.
Strukturelle Kanten werden in einer Transaktion committet, das nimmt einen minutenlangen Schwanz auf großen Repositories weg.
Ein Worktree, der auf einen anderen Base-Publisher wartet, stoppt nach fünf Sekunden mit Exit 75 und dem Lock-Pfad.
Die Base-Veröffentlichung erzeugt Zusammenfassungen nicht mehr vorab; sie entstehen bei Bedarf.
bash-smart druckt einen Heartbeat nach 15 s Stille und danach einmal pro Minute, wendet führende VAR=value-Tokens an und benutzt pipefail für zitierte Pipelines.
Die Edit-Prüfung wählt einen lokalen Checker für die berührte Sprache, lädt nie einen herunter und stoppt ihn nach einer begrenzten Zeit.
Behoben
read-file --all und read-file --lines berühren den Graph-Store nicht mehr, sie funktionieren also während eines ersten Index.
Zeilen der Literalsuche drucken qualifizierte Locators, die greppy read akzeptiert.
Der Durchgriff von grep und rg verträgt verzögerte Pipeline-Produzenten; ein ausdrückliches - bleibt die unbegrenzte Form für langsame Produzenten.
path --code erklärt, dass path nur Aufrufstellen kennt, und nennt die Wiederherstellung über greppy read SYMBOL.
0.3.3
Isolierte Filesystem-CoW-Workspaces für den Agenten
Höhepunkte
greppy -p legt private Filesystem-CoW-Workspaces an, bevor das Modell startet.
Neue Option --workspace-backend auto|native|cow. auto (der Standard) benutzt Copy-on-Write nur, wenn es konstante Metadatenarbeit ist, und fällt sonst auf den unveränderten Git-Worktree-Weg von 0.3.2 zurück.
native erzwingt den Weg von 0.3.2. cow verlangt exaktes Copy-on-Write und scheitert, statt still Dateien zu kopieren.
Neu
Jeder Copy-on-Write-Lauf bekommt ein echtes privates Git-Verzeichnis. Bestehende Objekte werden nur lesend geteilt; neue Objekte, Indizes, Refs und Commits bleiben privat, bis finish einen geprüften Vorschlags-Commit exportiert.
Der Snapshot-Code ist greppy-rift-core, ein eigens gebauter MIT-lizenzierter Fork von anomalyco/rift, festgenagelt auf eine feste Revision. Er behält nur die Mechanik von APFS, Btrfs und Linux-Reflinks plus Fähigkeitsprüfung und Aufräumen.
Btrfs-Vorlagen werden als nur lesbare Subvolumes angelegt. Auf einem Baum mit 300.000 Dateien maßen zehn warme Erzeugungen 345,735 ms Median und 385,708 ms P95 (Grenzen: 500 ms Median, 1.000 ms P95).
Geändert
Fähigkeitsberichte unterscheiden Btrfs-Subvolume-Snapshots von Copy-on-Write-Bäumen, die den Namensraum ablaufen. APFS-Verzeichnis-clonefile und Linux-FICLONE pro Datei bleiben ausdrücklich verfügbar, aber auto wählt sie nicht.
Windows benutzt weiter den nativen Git-Worktree-Fallback.
Sieht ein Workspace manipuliert aus, bleibt er erhalten, statt gelöscht oder veröffentlicht zu werden.
Behoben
Agent-Workspaces und Sandbox-Cargo-Pfade unter Windows lösen sich aus LOCALAPPDATA und USERPROFILE, statt ein nur unter Unix vorhandenes HOME anzunehmen. Die Windows-CI führt jetzt die Suite der Agent-Workspaces aus.
Überlange Windows-Pfade werden in die gewöhnliche Laufwerks- oder UNC-Form gebracht, bevor sie an Git gehen, das \\?\-Pfade ablehnt.
0.3.2
Parallele Agenten teilen sich einen unveränderlichen Index
Höhepunkte
Gleichzeitige greppy -p-Läufe teilen sich einen inhaltsidentifizierten, unveränderlichen Base-Index für unveränderten Code; jeder Agent schreibt nur in sein eigenes privates Delta.
Ein Builder mit Lease veröffentlicht die vollständige Base — Graph, Textindex, Zusammenfassungen und Embeddings — atomar; andere Agenten benutzen sie nur lesend.
brief nimmt mehrere Symbole an, einschließlich zeilenweise getrennter Selektoren auf stdin.
Nebenläufigkeitstests decken zehn Agenten ab und belasten fünfzig isolierte Deltas; Base-Zusammenfassungen und Embeddings werden über zehn Agenten wiederverwendet, ohne doppelte private Zeilen.
Neu
greppy index --agent-worktree baut oder prüft dieselbe gemeinsame Base, die der Agent benutzen wird.
greppy -p --private-store nimmt einen Lauf von der Base-Wiederverwendung aus, zur Diagnose.
doctor, diagnostics und die Index-Gesundheit melden den Store-Modus, Identitäten, Vollständigkeit, geänderte Pfade, Cache-Treffer und jeden Grund für einen Fallback.
Geändert
Die Base-Identität umfasst den Git-Tree, das Store-Schema, den Indexer-Vertrag und die Verträge für Zusammenfassungen und Embeddings. Korrupte oder inkompatible Generationen werden unter Quarantäne gestellt und neu gebaut.
Navigation, Suche, brief, read, expand, Statistiken und Aktualitätsprüfungen sehen die Base plus die eigenen Edits, Löschungen und Umbenennungen des Agenten; ein exaktes Revert entfernt den Beitrag des Agenten.
Gemeinsame Bases nehmen an der Cache-Verwaltung per TTL/LRU teil und werden nicht verdrängt, solange ein Agent sie liest.
Gebündeltes brief hält die angeforderte Reihenfolge und wendet das Ausgabebudget nur an ganzen Ergebnissen an, mit einem brauchbaren Retry, wenn das nächste Ergebnis nicht mehr passt.
Die Navigationsanleitung des Agenten behandelt ein semantisches search-Ergebnis als eine gerankte Kandidatenmenge und verbietet wiederholte umformulierte Suchen.
read-file akzeptiert absolute Pfade außerhalb des Repositorys (zum Beispiel heruntergeladene Artefakte); relative ../-Pfade bleiben auf das Repository beschränkt.
Das Upgrade von einem bestehenden Cache in der Form von 0.3.1 ist durch Tests des Release-Pakets abgedeckt: das Leeren des Caches entfernt verwaltete Daten und lässt unverwaltete Altdateien stehen.
Behoben
Die automatische Wiederherstellung von CLI-Optionen behandelt -- als harte Grenze. Ein fehlerhafter Aufruf wird einmal mit Usage-Ausgabe abgelehnt, statt zu rekursieren, bis der Stack überläuft.
0.3.1
Zwischen-Tag der 0.3-Linie: eingebauter Agent und Benchmark-Korrekturen
Höhepunkte
Das Tag v0.3.1 (2026-08-11) zeigt auf einen Commit, der ein Vorfahr von v0.3.0 ist. Dazwischen liegen nur zwei Commits: die Rücknummerierung auf 0.3.0 und eine Korrektur im CI-Audit. Siehe 0.3.0 für den vollen Inhalt der 0.3-Linie.
Die Versionszeichenkette lautete ab 2026-08-08 auf 0.3.1, damit Builds dieser Linie nicht greppy 0.3.0 meldeten.
Für dieses Tag wurde kein GitHub-Release veröffentlicht.
Neu: greppy -p "TASK" führt einen One-Shot-Coding-Agenten über das aktuelle Repository und liefert sein Ergebnis als einen Commit auf refs/greppy/agent/<run_id>.
Neu
Das einzige Werkzeug des Agenten ist greppy selbst (Suche, Navigation, Lesen, Ändern und Befehle über bash-smart -- CMD); die Agent-Schleife ist aus pi v0.80.2 (MIT) portiert.
Der Agent spricht mit einem localhost-Gateway, das zur Anthropic Messages API kompatibel ist (Standard CLIProxyAPI auf 127.0.0.1:8317), konfiguriert über GREPPY_ENDPOINT, GREPPY_MODEL und GREPPY_API_KEY.
Werkzeug-Subprozesse sind schreibbeschränkt, mit Seatbelt unter macOS und Landlock unter Linux; --no-sandbox schaltet das ab.
git show <ref> prüft den Commit des Agenten, git cherry-pick -n <ref> wendet ihn an, und --apply wendet ihn auf einem sauberen Checkout direkt an.
greppy index --agent-worktree bereitet den Worktree vor und indiziert ihn, in dem greppy -p läuft, damit der Agent seinen ersten Index nicht selbst bezahlt.
--deadline-secs N / GREPPY_DEADLINE_SECS hält den Agenten zwischen den Runden bei einem Zeitbudget an und liefert das Ergebnis trotzdem.
Geändert
Eine Antwort bei veraltetem Index beginnt mit der Abhilfe, formuliert wie doctor; bei Index-Konkurrenz nennt sie die Wartezeit und greppy index status --json.
search-pattern … --fixed nennt das Flag, wenn ein regulärer Ausdruck unter --fixed nicht passen kann.
Edit-Quittungen geben die gelandete Spanne mit drei Zeilen Kontext wieder, zurückgelesen von der Platte, mit markierten geänderten Zeilen.
who-calls auf einem Modul listet die eigenen Definitionen des Moduls und nennt die zwei Befehle, die die Frage beantworten.
Behoben
greppy PATTERN FILE bleibt grep, auch wenn das Muster einem Befehlsnamen nahekommt (greppy greppy FILE wurde abgelehnt).
Ein vertipptes Flag wie --jsoon wird korrigiert, statt stillschweigend zu verschwinden.
index --agent-worktree schreibt jetzt in die Datenwurzel, die der Agent tatsächlich liest; vorher bezahlten vorgewärmte Agenten trotzdem den vollen ersten Index.
Ein ungültiger Parser-Datensatz verwirft nicht mehr die ganze Datei, und C++ in .h-Headern wird mit der C++-Grammatik neu extrahiert.
Ein toter Embedding-Daemon-Endpunkt fällt auf Embedding im Prozess zurück, statt jede semantische Abfrage scheitern zu lassen.
0.3.0
Brechendes Redesign: finden, lesen und ändern in einem Werkzeug, plus greppy -p
Höhepunkte
Brechendes Release ohne Aliase und ohne Übergangszeit: Vokabular, das weg ist, wird abgelehnt.
Eine Suchfamilie auf einer Achse: search "WHAT IT DOES" (Bedeutung), search-symbol NAME (Name), search-pattern REGEX [--fixed] (Text).
Neue Lese- und Änderungsbefehle mit Quittungen, damit ein Agent genau das ändern kann, was er gelesen hat, ohne die Datei noch einmal zu lesen.
greppy -p "TASK": ein eingebauter One-Shot-Coding-Agent, dessen Ergebnis ein Commit auf refs/greppy/agent/<run_id> ist; nichts wird an Ort und Stelle editiert.
Enthält alles, was am 2026-08-11 zuerst als v0.3.1 getaggt wurde (siehe 0.3.1).
Neu
where-am-i gibt einen Überblick über die Session: Sprachen, Zahl der Dateien und Definitionen, die meistreferenzierten Symbole jedes Moduls, Einstiegspunkte und Testwurzeln.
read S liefert eine Definition bytegenau, read-smart S faltet verschachtelte Blöcke in Einzeiler-Beschreibungen, und read-file PATH blättert in Seiten von 400 Zeilen.
--handle benennt genau die ausgegebene Spanne, auch wenn die Ausgabe abgeschnitten wurde, und replace-span nimmt ihn an.
Jede Edit-Quittung nennt jede berührte Spanne; --dry-run ändert nichts; Ablehnungen nennen ihren Grund; patch landet ganz oder gar nicht; undo lehnt ab, wenn eine spätere Änderung dieselbe Spanne berührt hat.
bash-smart -- CMD führt einen Build- oder Testbefehl unverändert und mit demselben Exit-Code aus und liefert eine Urteilszeile plus die Fehler- und Warnblöcke.
Der Agent benutzt ein localhost-Gateway, das zur Anthropic Messages API kompatibel ist (Standard CLIProxyAPI auf 127.0.0.1:8317), und beschränkt die Schreibrechte seiner Werkzeug-Subprozesse mit Seatbelt unter macOS und Landlock unter Linux.
index [PATH] --agent-worktree bereitet den Worktree-Index des Agenten vor; --deadline-secs N hält den Agenten sauber bei einem Zeitbudget an.
Geändert
who-calls und callees antworten für mehrere Symbole auf einmal. find-usages ist weg: who-calls geht sowohl Aufrufe als auch Verwendungen ab.
brief skizziert einen Rumpf — die Signatur plus eine Zeile pro Schritt — und impact und path --from A --to B drucken Bäume.
--path, --json, --limit/--offset, --root und --help gelten für jeden Befehl. Leere Antworten enden mit Exit 0; die Suchfamilie behält die Exit-Codes von grep.
AGENTS.md ist der System-Prompt, gehalten von zwölf Guard-Tests und einem Release-Smoke-Gate mit 33 Fällen, das jede beworbene Zeile gegen das gebaute Binary ausführt.
GPU-Beschleunigung ist der Standard-Build: Metal unter macOS, CUDA unter Linux und Windows; --features cpu-only ist der einzige Ausweg.
Eine Antwort bei veraltetem Index beginnt mit der Abhilfe, und Index-Konkurrenz nennt die Wartezeit und greppy index status --json.
Bekannte Grenzen: etwa 13 % der CALLS-Kanten lösen sich bei mehrdeutigen Namen auf, und Gruppen-Imports extrahieren nur ihren ersten Namen.
Behoben
greppy greppy FILE bleibt grep, und ein vertipptes Flag wie --jsoon wird korrigiert statt verworfen.
Das Ausgabebudget --max-bytes funktioniert wieder und schrumpft eine Antwort nie auf null Zeilen.
Vorgewärmte Agenten lesen den Store, den index --agent-worktree geschrieben hat; vorher bezahlten sie den vollen ersten Index im Lauf (im Benchmark 9× langsamer).
Template-lastige C++-Header verlieren keine Definitionen mehr: .h-Dateien mit C++-Syntax werden mit der C++-Grammatik neu extrahiert.
Ein toter Embedding-Daemon-Endpunkt fällt auf Embedding im Prozess zurück; Edit-Quittungen geben die gelandete Spanne wieder; who-calls auf einem Modul listet dessen Definitionen.
0.2.1
Erstes öffentliches Release, mit dem MSCC-Paper
Höhepunkte
Erstes öffentliches Release: der veröffentlichte Build hat alle automatischen Tests, die Sicherheitsprüfungen von Code und Abhängigkeiten und die Qualitätsprüfungen für Suche und Funktionshinweise bestanden.
Das macOS-Binary ist signiert und notarisiert, das Release ist attestiert (SBOM und Provenienz); das Windows-Binary zum direkten Download ist absichtlich unsigniert.
Veröffentlicht das MSCC-Paper und die vollständigen Belege für vier Modelle (MiniMax-M3, GLM-5.2, Qwen3.6-27B, Kimi-K3).
Der CHANGELOG hat keine eigenen Einträge für 0.1.3 und 0.2.0; mehrere Punkte unten erschienen zuerst in diesen Versionen.
Neu
Eingebettetes Qwen3.5-0.8B (Q4_K_M, MTP) schreibt kurze Zweck-Zusammenfassungen für brief und semantic-search, mit Inferenz auf CPU, Metal und CUDA.
Versionierte JSON-Ausgabeverträge mit exakten Spannen, Quellsignaturen, Zusammenfassungen und dauerhaften Expand-Handles.
greppy doctor --json meldet die Inferenz-Backends, die Geräteerkennung, Speicherprüfungen, den Daemon-Status und die Modell-Digests.
Inspektion, Garbage Collection und explizites Leeren des verwalteten Caches.
Ein Windows-Named-Pipe-Transport für die eingebetteten Inferenz-Daemons.
Geändert
Gewöhnliche grep-Aufrufe sind ein bytegenauer Durchgriff auf das echte grep, ohne Nebenwirkungen auf Index, Modell oder Cache.
Aktualität ist fail-closed: greppy gibt wissentlich keine veralteten Quellbelege aus.
EmbeddingGemma- und Qwen-Modelldateien sind in jedem Binary Pflicht; wählbar sind nur Inferenz-Backend und Gerät.
Ein Modell wird nach 300 untätigen Sekunden entladen; ein Inferenz-Daemon beendet sich nach 1800 untätigen Sekunden.
Entfernt: synthetische Anreicherung der grep-Ausgabe und Sidecars, NON_CANONICAL_CODE_HINT, der Schalter --vectors, öffentliche Schalter zum Abschalten oder Umleiten von Modellen, die Installation von greppy als grep und der eingebaute Selbst-Updater.
Quelle von MIT auf Apache-2.0 umlizenziert. Die Bedingungen der eingebetteten Modelle bleiben: EmbeddingGemma unter den Gemma Terms, das hauseigene Qwen3.5-Feintuning unter Apache-2.0.
Modellgewichte liegen in öffentlichen, nicht gegateten Hugging-Face-Repositories (metricspace/embeddinggemma-300m-q4k, metricspace/greppy-qwen35-mtp-q4km); der Build lädt sie herunter und prüft sie per SHA-256, bevor er sie einbettet.
Behoben
greppy index veröffentlicht den vollständigen Graphen, wenn die Embedding-Inferenz nachlässt, statt die ganze Arbeit zu verwerfen; eingebettete Vektoren bleiben erhalten, und die nächste semantische Abfrage holt den Rest im Hintergrund nach.
0.2.0
Verlässlichere Funktionshinweise und ein Index, der Modellfehler übersteht
Höhepunkte
Nie getaggt oder veröffentlicht. Die Änderungen sind Teil des Releases 0.2.1.
Funktionshinweise wurden verlässlicher: auf einem festen Testsatz von 300 Funktionen fielen irreführende Hinweise von 8,6 % auf 2,5 %, und sehr hilfreiche Hinweise stiegen von 34,4 % auf 44,1 %, bei unveränderter Formatgültigkeit (97 %).
Der Entwurf des MSCC-Papers (docs/paper/mscc-greppy-paper.pdf) kam dazu und wurde aus der README verlinkt.
Geändert
Der Hinweis-Dekoder läuft zuerst greedy und fällt nur auf Sampling zurück, wenn die greedy-Ausgabe leer ist.
Das Hinweis-Modell bekommt den repository-relativen Dateipfad der Definition zusammen mit ihrem Quelltext, so wie es trainiert wurde.
Das eingebettete Hinweis-Modell wurde auf den Checkpoint aktualisiert, der als model-qwen35-nano-20260716-0749 veröffentlicht ist.
Eine rechtliche Prüfung der Weitergabe der eingebetteten Modelle wurde abgeschlossen; licenses/EMBEDDED-MODEL-TERMS.md nennt die Bedingungen für die Modellgewichte.
macOS-Pakete sind von Apple notarisiert. Das Windows-Binary zum direkten Download ist unsigniert.
Behoben
greppy index wirft den Graphen nicht mehr weg, wenn die Embedding-Inferenz fehlschlägt: es veröffentlicht den Graphen mit den Vektoren, die eingebettet wurden, und die nächste semantische Abfrage wiederholt nur die fehlgeschlagenen Dokumente.
Unter macOS und BSD gilt eine reguläre Datei am Daemon-Endpunkt als „kein Daemon“, der nächste Aufruf ersetzt sie also, statt zu scheitern, bis sie jemand von Hand löscht.
Aktualitätsprüfungen behandeln gespeicherte Skip-Einträge des Index nur dann als Basis, solange Datei-Identität und Richtlinie noch passen.
greppys eigene globale Optionen (--root, --device, --no-gpu, --no-summaries) werden verbraucht, bevor ein Aufruf an grep weitergereicht wird.
0.1.3
Evidence-Packs, Funktionshinweise und verwaltete Caches
Höhepunkte
Nie getaggt oder veröffentlicht. Die Änderungen sind Teil des Releases 0.2.1.
greppy expand ID gibt ein vorbereitetes Evidence-Pack aus — den vollständigen Quelltext der besten Treffer einer Abfrage — in einem Aufruf. who-calls, callees, impact und semantic-search können mit einer Zeile Expand: greppy expand <id> enden.
Ein eingebettetes Qwen3.5-0.8B-Modell (Q4_K_M mit Multi-Token-Prediction) setzt einen kurzen Zweckhinweis unter zurückgegebene Funktionssignaturen und an jede Definition, die brief ausgibt.
Neu
greppy cache status, greppy cache gc und greppy cache clear zeigen von greppy verwaltete Cache-Daten und räumen sie ab.
greppy trial führt eine mechanisch bewertete A/B-Beobachtung auf dem eigenen Projekt aus: dieselbe who-calls-Frage, mit und ohne greppy, über Pi.
Spekulative Multi-Token-Prediction-Dekodierung für das Hinweis-Modell auf CPU, Metal und CUDA.
Während die Embeddings der ersten Nutzung noch entstehen, liefert semantic-search einen wiederholbaren Status (Exit 75) mit Backend, Fortschritt und einer ETA statt Teilergebnissen.
Geändert
semantic heißt jetzt semantic-search (der alte Name bleibt als Alias) und benutzt immer Vektor-Embeddings von EmbeddingGemma; --vectors wurde ein verstecktes No-Op.
Gewöhnliche grep-Aufrufe führen das echte System-grep bytegenau aus, ohne einen Index zu öffnen oder ein Modell zu laden. greppy wird nur als greppy installiert, nie als grep.
Die Platzhalter-Befehle install, uninstall, update und config wurden entfernt.
Beide Modelle (EmbeddingGemma und Qwen3.5) und ihre Tokenizer stecken in jedem Binary und lassen sich nicht abschalten.
Embedding- und Summary-Engine laufen als getrennte lokale Daemons: ein Modell bleibt fünf untätige Minuten geladen, ein Daemon beendet sich nach 30 untätigen Minuten.
Modelldateien kommen aus festgenagelten GitHub-Release-Assets und werden vor dem Build per Digest geprüft, statt aus Git LFS.
macOS-Pakete sind jetzt notarisiert, und jedes Release wird auf Sicherheitsprobleme in Code und Abhängigkeiten geprüft.
Behoben
Die Indizierung bleibt nicht mehr an minifizierten Dateien hängen: Spannen mit einer Zeile länger als 2 KB werden übersprungen, und eine 306 KB große minifizierte Datei embeddet jetzt in etwa 2,5 s.
Ein reiner Wechsel des Git-HEAD löst keine Neuindizierung mehr aus.
Hängende Inferenz-Daemons werden wiederhergestellt.
Die Ergebniszählung in Evidence-Packs von semantic-search wurde korrigiert.
0.1.2
Erster öffentlicher Commit: grep plus Befehle zur Code-Navigation
Höhepunkte
Der erste öffentliche Commit trug bereits die Version 0.1.2; es gibt kein Tag und kein GitHub-Release.
Jeder Aufruf, der kein greppy-Befehl ist, führt das echte grep aus und liefert dessen Ausgabe und Exit-Code unverändert zurück.
Ein typisierter Symbolgraph (CALLS, USES, TYPE_REF, IMPORTS) beantwortet Beziehungsfragen mit aufgelösten Ergebnissen qualified_name file:line statt mit Texttreffern.
Googles EmbeddingGemma steckt für die semantische Suche im Binary und läuft auf CPU, Apple Metal oder NVIDIA CUDA, automatisch erkannt.
Neu
who-calls, callees, find-usages, impact, path --from A --to B und brief über den Graphen.
search-symbols NAME findet Definitionen nach Namen.
semantic findet Code nach Bedeutung. Standard ist lexikalisches Ranking; --vectors schaltet auf die Vektorsuche mit EmbeddingGemma um.
Ein warmer Embedding-Daemon hält das Modell zwischen Aufrufen geladen und gibt es frei, wenn es untätig ist.
Außerdem dabei: index, doctor, stats, diagnostics, trace, fan-in, fan-out, graph-locate, search-graph, search-code, plus und context.
Häufige Flags: --code, --all, --json, --root DIR, --kind und --direction / --depth für impact.
Die README nennt 107 unterstützte Sprachen; Tree-sitter-Parser und SQLite sind einkompiliert.