greppy ist der token-effizienteste Coding-Harness.

greppy trimmt Suchen, Lesen, Ändern, Testen und die Arbeit im Web auf maximale Token-Effizienz. Deine Agents erledigen ihre Aufgaben damit schneller, günstiger und besser, mit schlankem Kontext und klarem Fokus.

greppy läuft als Plugin in Claude Code, Codex, Gemini CLI, pi und OpenCode und bringt einen eigenen Harness zum Einsatz als Subagent mit.

Dieselbe Frage an denselben Agenten: links mit grep, rechts mit greppy.

Echte Aufgaben aus Open-Source-Projekten

ironclaw: Laufstatus für die Weboberfläche bereitstellen

3 von 3 Läufen gelöst statt 1 von 347 % weniger Kosten pro gelöster Aufgabe

Der Agent soll in ironclaw, einem Rust-Projekt, eine Abfrage des Laufstatus für die Weboberfläche bauen. Mit greppy findet er die zuständige Fassade mit der ersten Suche und sieht die Datei als Liste ihrer Definitionen, 4.810 Zeichen. Darin steht die vorhandene Prüfung parse_thread_id_field, und er nutzt sie.

Ohne greppy liest er dieselbe Datei komplett, 29.359 Zeichen, und schreibt trotzdem einen eigenen Parser. Der meldet eine ungültige Thread-ID mit dem falschen Fehler, ein Test des Projekts schlägt fehl. Mit greppy lösen alle drei Läufe die Aufgabe, ohne greppy einer.

Gemessen mit pi und glm-5.3-flash.

Ohne greppyMit greppy
ErgebnisTests rotTests grün
Input (neu)93.11671.278−23 %
Cache-Read2.203.3923.436.544+56 %
Output24.45525.388+4 %
Runden4282+95 %
Zeit13:03 min13:16 min+2 %

Ohne greppy

  1. ls -la /ironclaw3.532 Zeichen
  2. find /ironclaw -maxdepth 2 -type d | head -501.394 Zeichen
  3. grep -ri "RebornServices" /ironclaw --include="*.rs" -l | head -20445 Zeichen
  4. grep -ri "TurnCoordinator" /ironclaw --include="*.rs" -l | head -201.246 Zeichen
  5. ls -la /ironclaw/crates/ironclaw_product_workflow/src/ /ironclaw/crates/ironclaw_product_w1.421 Zeichen
  6. git -C /ironclaw log --oneline -15; git -C /ironclaw status68 Zeichen
  7. liest crates/ironclaw_product_workflow/src/reborn_services.rs29.359 Zeichen
  8. ls -la /ironclaw/crates/ironclaw_product_workflow/src/reborn_services/ 2>/dev/null; grep -220 Zeichen
  9. liest crates/ironclaw_product_workflow/src/reborn_services/types.rs3.329 Zeichen
  10. liest crates/ironclaw_product_workflow/tests/reborn_services_contract.rs30.611 Zeichen
  11. liest crates/ironclaw_product_workflow/src/webui_inbound.rs14.386 Zeichen
  12. liest crates/ironclaw_product_workflow/src/reborn_services/error.rs1.937 Zeichen
  13. grep -rn "TurnRunState\|GetRunStateRequest\|TurnRunFailure\|pub struct EventCursor\|RunFai4.827 Zeichen
  14. liest crates/ironclaw_product_workflow/src/lib.rs2.467 Zeichen
  15. grep -rn "pub struct TurnRunState" /ironclaw/crates/ironclaw_turns/src/ -A 403.397 Zeichen
  16. grep -rn "pub struct SanitizedFailure\|pub enum SanitizedFailure" /ironclaw/crates/ironcla2.386 Zeichen
  17. grep -rn "get_run_state\|GetRunState" /ironclaw/docs /ironclaw/FEATURE_PARITY.md /ironclaw11 Zeichen
  18. grep -rn "RebornServices\|reborn_services" /ironclaw/crates/ironclaw_reborn_composition/sr2.659 Zeichen
  19. grep -rn "pub struct TurnCheckpointId\|impl TurnCheckpointId\|pub struct RunProfileId\|imp11 Zeichen
  20. liest crates/ironclaw_turns/src/status.rs4.248 Zeichen
  21. grep -rn "TurnCheckpointId\b" /ironclaw/crates/ironclaw_turns/src/lib.rs; grep -rn "pub st252 Zeichen
  22. grep -rn "RunProfileId\|RunProfileVersion\|TurnCheckpointId" /ironclaw/crates/ironclaw_tur84 Zeichen
  23. liest crates/ironclaw_turns/src/ids.rs7.145 Zeichen
  24. grep -rn "SanitizedFailure" /ironclaw/crates --include="*.rs" | grep -v "ironclaw_turns/sr2.581 Zeichen
  25. grep -rn "failure" /ironclaw/crates/ironclaw_product_adapters/src/*.rs | head -20; ls /iro2.628 Zeichen
  26. cargo test -p ironclaw_product_workflow --test reborn_services_contract 2>&1 | tail -201.177 Zeichen
  27. grep -rn "impl ThreadId" /ironclaw/crates/ironclaw_host_api/src/ -A 30 | head -50; grep -r39 Zeichen
  28. grep -rn "ThreadId" /ironclaw/crates/ironclaw_host_api/src/*.rs | grep -i "struct\|fn new"235 Zeichen
  29. grep -rn "ThreadId" /ironclaw/crates/ironclaw_host_api/src/ids.rs | head; grep -rn "macro_1.025 Zeichen
  30. liest crates/ironclaw_host_api/src/ids.rs3.085 Zeichen
  31. … 25 weitere Schritte69.654 Zeichen

Mit greppy

  1. greppy where-am-i3.266 Zeichen
  2. greppy search "RebornServices facade WebUI submit cancel resolve gate run state"1.277 Zeichen
  3. greppy read crates/ironclaw_product_workflow/src/reborn_services.rs4.810 Zeichen
  4. greppy read crates/ironclaw_product_workflow/src/reborn_services/types.rs2.154 Zeichen
  5. greppy read-file crates/ironclaw_product_workflow/src/reborn_services.rs --lines 1:1053.551 Zeichen
  6. greppy read-file crates/ironclaw_product_workflow/src/reborn_services/types.rs --lines 1:13.459 Zeichen
  7. greppy read-file crates/ironclaw_product_workflow/src/reborn_services.rs --lines 105:47015.009 Zeichen
  8. greppy read-file crates/ironclaw_product_workflow/src/reborn_services.rs --lines 470:76010.736 Zeichen
  9. greppy search "RunState run state snapshot status event cursor gate failure checkpoint" --145 Zeichen
  10. greppy read-file crates/ironclaw_turns/src/status.rs --lines 200:3404.974 Zeichen
  11. greppy search-symbol GetRunStateRequest68 Zeichen
  12. greppy read-file crates/ironclaw_turns/src/request.rs --lines 1:1201.597 Zeichen
  13. greppy read crates/ironclaw_product_workflow/tests/reborn_services_contract.rs --head 2009.445 Zeichen
  14. greppy read-file crates/ironclaw_product_workflow/tests/reborn_services_contract.rs --line7.144 Zeichen
  15. greppy read crates/ironclaw_product_workflow/src/webui_inbound.rs::WebUiResolveGateRequest940 Zeichen
  16. greppy read crates/ironclaw_product_workflow/src/webui_inbound.rs4.696 Zeichen
  17. greppy read-file crates/ironclaw_product_workflow/src/webui_inbound.rs --lines 65:43012.382 Zeichen
  18. greppy read crates/ironclaw_product_workflow/src/reborn_services/error.rs1.490 Zeichen
  19. greppy search "SanitizedFailure failure category sanitized"1.015 Zeichen
  20. greppy read-file crates/ironclaw_turns/src/status.rs --lines 1:2005.750 Zeichen
  21. greppy read crates/ironclaw_product_workflow/src/reborn_services/error.rs::Class::RebornSe562 Zeichen
  22. greppy read-file crates/ironclaw_product_workflow/tests/reborn_services_contract.rs --line2.706 Zeichen
  23. greppy read-file crates/ironclaw_product_workflow/tests/reborn_services_contract.rs --line1.909 Zeichen
  24. greppy search-pattern "pub use|pub mod" crates/ironclaw_product_workflow/src/lib.rs551 Zeichen
  25. greppy read crates/ironclaw_turns/src/events.rs::EventCursor205 Zeichen
  26. greppy read-file crates/ironclaw_product_workflow/src/lib.rs --lines 25:701.550 Zeichen
  27. greppy read crates/ironclaw_turns/src/run_profile.rs::RunProfileId && greppy read crates/i221 Zeichen
  28. greppy search-symbol RunProfileId && greppy search-symbol RunProfileVersion && greppy sear496 Zeichen
  29. greppy search-pattern "struct RunProfileId|struct RunProfileVersion|struct AcceptedMessage600 Zeichen
  30. greppy rg -n "pub struct RunProfileId|pub struct RunProfileVersion|pub struct AcceptedMess736 Zeichen
  31. … 68 weitere Schritte61.767 Zeichen

ruff: Widerspruch zwischen zwei Lint-Regeln beheben

36 % weniger Kosten beim Beheben des Bugs

Der Agent soll in ruff, dem Python-Linter in Rust, einen Widerspruch zwischen zwei Regeln beheben. Mit greppy findet er die zuständige Regel mit einem Aufruf in 100 Zeichen und liest danach genau die Funktionen, die er braucht, etwa comment_contains_code mit 1.681 Zeichen.

Ohne greppy liest er die beteiligten Dateien komplett, detection.rs, suppression.rs und noqa.rs zusammen 118.799 Zeichen. Beide Läufe bestehen die Tests des Projekts, mit greppy für 0,15 $ statt 0,24 $.

Gemessen mit pi und glm-5.3-flash.

Ohne greppyMit greppy
ErgebnisTests grünTests grün
Input (neu)108.99485.162−22 %
Cache-Read6.548.5443.987.008−39 %
Output50.52539.967−21 %
Runden9578−18 %
Zeit23:55 min26:02 min+9 %

Ohne greppy

  1. ls /ruff && git -C /ruff log --oneline -3356 Zeichen
  2. find /ruff/crates/ruff_linter/src -name "*.rs" | xargs grep -ln "commented_out_code"179 Zeichen
  3. liest crates/ruff_linter/src/rules/eradicate/rules/commented_out_code.rs6.408 Zeichen
  4. liest crates/ruff_linter/src/checkers/tokens.rs5.226 Zeichen
  5. ls /ruff/crates/ruff_linter/src/rules/eradicate/36 Zeichen
  6. liest crates/ruff_linter/src/rules/eradicate/detection.rs16.270 Zeichen
  7. ls /ruff/crates/ruff_linter/src/rules/ruff/rules/ | head -501.378 Zeichen
  8. liest crates/ruff_linter/src/rules/ruff/rules/unused_noqa.rs4.308 Zeichen
  9. grep -rn "UnusedCodes\|unused_noqa\|UnusedNOQA" /ruff/crates/ruff_linter/src --include="*.2.132 Zeichen
  10. grep -rn "CommentedOutCode" /ruff/crates/ruff_linter/src --include="*.rs" | grep -v snapsh900 Zeichen
  11. liest crates/ruff_linter/src/suppression.rs51.254 Zeichen
  12. liest crates/ruff_linter/src/noqa.rs51.275 Zeichen
  13. grep -rn "find_line_with_directive_mut\|find_line_with_directive\|directive.used\|used:" /50 Zeichen
  14. grep -rn "find_line_with_directive_mut\|RUF100\|unused_noqa\|UnusedNOQA" /ruff/crates/ruff39 Zeichen
  15. grep -rn "NoqaDirectives" /ruff/crates/ruff_linter/src --include="*.rs" | grep -v "noqa.rs461 Zeichen
  16. grep -rn "NoqaMapping\|NoqaDirectives\|check_noqa\|mark_used\|set_used" /ruff/crates/ruff_654 Zeichen
  17. grep -rn "check_suppressions\|Suppressions" /ruff/crates/ruff_linter/src --include="*.rs" 1.912 Zeichen
  18. ls /ruff/crates/ruff_linter/src/checkers/;89 Zeichen
  19. liest crates/ruff_linter/src/checkers/noqa.rs11.125 Zeichen
  20. ls /ruff/crates/ruff_linter/resources/test/fixtures/eradicate/ && head -100 /ruff/crates/r1.511 Zeichen
  21. grep -rn "noqa" /ruff/crates/ruff_linter/resources/test/fixtures/eradicate/ERA001.py | hea90 Zeichen
  22. liest crates/ruff_linter/src/rules/ruff/mod.rs5.684 Zeichen
  23. grep -n "fn line_str\|fn line_range\|fn full_line_range\|fn full_lines_range\|fn line_star1.470 Zeichen
  24. cat -A /ruff/crates/ruff_linter/resources/test/fixtures/ruff/RUF100_5.py472 Zeichen
  25. ls /ruff/crates/ruff_linter/src/rules/ruff/snapshots/ | grep -i ruf100336 Zeichen
  26. cat /ruff/crates/ruff_linter/src/rules/ruff/snapshots/ruff_linter__rules__ruff__tests__ruf2.149 Zeichen
  27. ls /ruff/target/debug/ruff 2>/dev/null && /ruff/target/debug/ruff --version; ls /ruff/targ11 Zeichen
  28. ls /ruff/target 2>/dev/null; cargo --version; rustc --version72 Zeichen
  29. cargo build -p ruff --bin ruff 2>&1 | tail -5317 Zeichen
  30. mkdir -p /tmp/repro && cd /tmp/repro && printf '#\t)\n#\t) # noqa: ERA001\n' > repro.py &464 Zeichen
  31. … 79 weitere Schritte70.645 Zeichen

Mit greppy

  1. greppy search-symbol commented_out_code100 Zeichen
  2. greppy search "detect commented-out code eradication"1.160 Zeichen
  3. greppy read commented_out_code.rs::commented_out_code606 Zeichen
  4. greppy read crates/ruff_linter/src/rules/eradicate/detection.rs --lines 1:135228 Zeichen
  5. greppy read crates/ruff_linter/src/rules/eradicate/rules/commented_out_code.rs::Function::1.125 Zeichen
  6. greppy read crates/ruff_linter/src/rules/eradicate/detection.rs --head 1402.174 Zeichen
  7. greppy read crates/ruff_linter/src/rules/eradicate/detection.rs::Function::comment_contain1.681 Zeichen
  8. greppy read-file crates/ruff_linter/src/rules/eradicate/detection.rs --lines 1:1354.113 Zeichen
  9. greppy read crates/ruff_linter/src/rules/eradicate/rules/commented_out_code.rs::Function::730 Zeichen
  10. greppy who-calls comment_contains_code1.062 Zeichen
  11. greppy read-file crates/ruff_linter/src/rules/eradicate/rules/commented_out_code.rs --line3.164 Zeichen
  12. greppy search "parse an inline noqa directive from a comment"1.027 Zeichen
  13. greppy search-symbol parse_inline_noqa512 Zeichen
  14. greppy read crates/ruff_linter/src/suppression.rs::parse_suppression_comment664 Zeichen
  15. greppy read crates/ruff_linter/src/noqa.rs::lex_inline_noqa429 Zeichen
  16. greppy search "a suppression comment with pragma kind and codes" --kind struct625 Zeichen
  17. greppy read crates/ruff_linter/src/suppression.rs --head 12012.169 Zeichen
  18. greppy read crates/ruff_linter/src/suppression.rs::SuppressionParser::parse_comment crates1.317 Zeichen
  19. greppy read-file crates/ruff_linter/src/suppression.rs --lines 1:1304.268 Zeichen
  20. git log --oneline -3 2>/dev/null | cat && ls target/debug/ruff 2>/dev/null; ls target 2>/d49 Zeichen
  21. printf '\t\t\t# \t)\n\t\t\t# \t) # noqa: ERA001\n' > repro.py && cat -A repro.py42 Zeichen
  22. ls crates/ruff_linter/resources/test/fixtures/eradicate/ && greppy search-symbol commented169 Zeichen
  23. greppy search "test ERA001 rule over a fixture" --path crates/ruff_linter/src/rules/eradic1.244 Zeichen
  24. greppy read crates/ruff_linter/src/rules/eradicate/mod.rs::rules 2>/dev/null || greppy rea510 Zeichen
  25. cat crates/ruff_linter/resources/test/fixtures/eradicate/ERA001.py1.746 Zeichen
  26. ls crates/ruff_linter/resources/test/fixtures/eradicate/snapshots/ 2>/dev/null || find cra109 Zeichen
  27. cat crates/ruff_linter/src/rules/eradicate/snapshots/ruff_linter__rules__eradicate__tests_7.527 Zeichen
  28. greppy read crates/ruff_linter/src/suppression.rs::SuppressionParser::eat_action crates/ru3.203 Zeichen
  29. greppy who-calls crates/ruff_linter/src/suppression.rs::SuppressionParser::parse_comment; 1.062 Zeichen
  30. greppy read crates/ruff_linter/src/suppression.rs::SuppressionsBuilder::load_from_tokens8.329 Zeichen
  31. … 69 weitere Schritte94.011 Zeichen

ArcadeDB: verlorene Messwerte bei gleichzeitigen Inserts beheben

28 % weniger Kosten beim Beheben des Bugs

Der Agent soll in ArcadeDB, einer Datenbank in Java, einen Datenverlust beheben: Bei vielen gleichzeitigen Inserts in eine Zeitreihe gehen Messwerte verloren. Mit greppy beschreibt er die gesuchte Stelle in einem Satz, landet bei der Methode, die Messwerte an einen Shard anhängt, und liest danach einzelne Methoden der Transaktionslogik wie commit1stPhase.

Ohne greppy liest er die beteiligten Klassen komplett, TimeSeriesShard, TimeSeriesBucket und TransactionContext zusammen 109.095 Zeichen. Beide Läufe bestehen die Tests des Projekts, mit greppy für 0,36 $ statt 0,50 $.

Gemessen mit pi und glm-5.3-flash.

Ohne greppyMit greppy
ErgebnisTests grünTests grün
Input (neu)160.153250.396+56 %
Cache-Read14.644.2249.934.336−32 %
Output69.72546.779−33 %
Runden169136−20 %
Zeit40:00 min40:00 min+0 %

Ohne greppy

  1. ls /arcadedb && cat /arcadedb/pom.xml | head -502.313 Zeichen
  2. find /arcadedb -type d -name "*timeseries*" -o -type d -name "*timeSeries*" -o -type d -na124 Zeichen
  3. find /arcadedb/engine/src/main/java/com/arcadedb/engine/timeseries -type f -name "*.java" 2.574 Zeichen
  4. ls /arcadedb/engine/src/test/java/com/arcadedb/engine/timeseries/ && cat /arcadedb/CLAUDE.6.116 Zeichen
  5. grep -n "Disabled" /arcadedb/engine/src/test/java/com/arcadedb/engine/timeseries/TimeSerie439 Zeichen
  6. liest engine/src/test/java/com/arcadedb/engine/timeseries/TimeSeriesConcurrentInsertTest.j4.077 Zeichen
  7. liest engine/src/main/java/com/arcadedb/engine/timeseries/TimeSeriesBucket.java29.867 Zeichen
  8. liest engine/src/main/java/com/arcadedb/engine/timeseries/TimeSeriesShard.java42.347 Zeichen
  9. find /arcadedb/engine/src/main/java -name "TransactionContext.java" -o -name "TransactionM307 Zeichen
  10. liest engine/src/main/java/com/arcadedb/database/TransactionContext.java36.881 Zeichen
  11. grep -rn "class TransactionManager" /arcadedb/engine/src/main/java/com/arcadedb/engine/Tra265 Zeichen
  12. grep -rn "txContexts\|getTransaction()\|begin()" /arcadedb/engine/src/main/java/com/arcade960 Zeichen
  13. sed -n 440,560p /arcadedb/engine/src/main/java/com/arcadedb/database/LocalDatabase.java3.265 Zeichen
  14. find /arcadedb/engine/src/main/java -name "PageManager.java" | xargs cat | sed -n 1,200p8.019 Zeichen
  15. find /arcadedb/engine/src/main/java -name "PageManager.java" | xargs sed -n 200,420p10.166 Zeichen
  16. find /arcadedb/engine/src/main/java -name "CachedPage.java" | xargs cat4.352 Zeichen
  17. find /arcadedb/engine/src/main/java -name "DatabaseContext.java" | xargs cat9.064 Zeichen
  18. grep -rn "getWrappedDatabaseInstance" /arcadedb/ha-raft/src/main/java --include="*.java" |708 Zeichen
  19. sed -n 470,600p /arcadedb/ha-raft/src/main/java/com/arcadedb/server/ha/raft/RaftReplicated3.812 Zeichen
  20. grep -n "class RaftReplicatedDatabase\|extends\|implements" /arcadedb/ha-raft/src/main/jav1.036 Zeichen
  21. sed -n 108,330p /arcadedb/ha-raft/src/main/java/com/arcadedb/server/ha/raft/RaftReplicated10.672 Zeichen
  22. git log --oneline -10 2>/dev/null; git status 2>/dev/null | head -2068 Zeichen
  23. grep -rn "appendSamples" engine/src/main/java/com/arcadedb/engine/timeseries/TimeSeriesEng831 Zeichen
  24. grep -rn "TimeSeries\|timeseries" --include="*.java" engine/src/main/java/com/arcadedb/que794 Zeichen
  25. grep -n "TimeSeries\|timeSeries\|appendSamples" engine/src/main/java/com/arcadedb/query/sq790 Zeichen
  26. liest engine/src/main/java/com/arcadedb/engine/timeseries/TimeSeriesEngine.java27.110 Zeichen
  27. grep -n "public TransactionContext getTransaction\|getTransaction()" engine/src/main/java/2.538 Zeichen
  28. find engine/src/main/java -name "PageManager.java" | xargs sed -n 420,530p3.843 Zeichen
  29. mvn -q -pl engine -am compile -DskipTests 2>&1 | tail -5247 Zeichen
  30. ls ~/.m2 2>/dev/null; which mvn; echo $MAVEN_HOME; echo $M2_HOME; ls /opt/tools 2>/dev/nul383 Zeichen
  31. … 143 weitere Schritte117.259 Zeichen

Mit greppy

  1. ls && git log --oneline -5544 Zeichen
  2. greppy where-am-i4.269 Zeichen
  3. greppy search-symbol TimeSeries --all --limit 60 2>&1 | head -807.238 Zeichen
  4. greppy search "append single sample to shard with lock and nested transaction"1.172 Zeichen
  5. greppy brief TimeSeriesShard42.171 Zeichen
  6. greppy brief TimeSeriesBucket 2>&1 | head -502.580 Zeichen
  7. greppy read TimeSeriesBucket::appendSamples 2>&1 | head -1201.699 Zeichen
  8. greppy brief TransactionContext 2>&1 | head -60238 Zeichen
  9. greppy search "nested transaction commit defers durable publish to outer transaction" --al1.522 Zeichen
  10. greppy read engine/src/main/java/com/arcadedb/database/TransactionContext.java --lines 1:1228 Zeichen
  11. greppy read-file engine/src/main/java/com/arcadedb/database/TransactionContext.java --line7.313 Zeichen
  12. greppy search "begin pushes nested transaction context onto per-thread stack" --all --limi999 Zeichen
  13. greppy search-symbol txContexts --all --limit 20467 Zeichen
  14. greppy read LocalDatabase::begin 2>&1 | head -40668 Zeichen
  15. greppy read-file engine/src/main/java/com/arcadedb/database/DatabaseContext.java --lines 12.489 Zeichen
  16. greppy read LocalDatabase::commit 2>&1 | head -60649 Zeichen
  17. greppy read TransactionContext::commit2ndPhase 2>&1 | head -802.829 Zeichen
  18. greppy read TransactionContext::commit1stPhase 2>&1 | head -1504.655 Zeichen
  19. greppy read RaftReplicatedDatabase::commit 2>&1 | head -1004.947 Zeichen
  20. greppy read RaftReplicatedDatabase::commit --handle 2>&1 | tail -5; greppy read-file ha-ra2.107 Zeichen
  21. greppy search-symbol PageManager --all --limit 201.708 Zeichen
  22. greppy brief PageManager 2>&1 | head -803.719 Zeichen
  23. greppy read PageManager::updatePages 2>&1 | head -701.500 Zeichen
  24. greppy read PageManager::checkPageVersion 2>&1 | head -602.276 Zeichen
  25. greppy read TimeSeriesBucket::getOrCreateActiveDataPage 2>&1 | head -601.968 Zeichen
  26. greppy search "load mutable page for transaction or overwrite current page" --limit 15923 Zeichen
  27. greppy read TransactionContext::getPageToModify 2>&1 | head -40572 Zeichen
  28. greppy read PageManager::getPageToModify 2>&1 | head -60303 Zeichen
  29. greppy read TransactionContext::getPageToModify --all --limit 10 2>&1 | head -20; greppy s370 Zeichen
  30. greppy read-file engine/src/main/java/com/arcadedb/database/TransactionContext.java --line1.008 Zeichen
  31. … 126 weitere Schritte164.010 Zeichen

Was greppy ausmacht

Dein Agent sieht, wie der Code zusammenhängt

Wer ruft diese Funktion auf, was hängt an einer Änderung, über welche Aufrufe kommt ein Request von der Route bis in die Datenbank? greppy beantwortet jede dieser Fragen mit einem Aufruf, mit Datei und Zeile.

Vorher und nachher ansehen →

Code finden, den man nur beschreiben kann

„Passwort eines Nutzers prüfen“ führt direkt zu checkPassword. greppy sucht nach dem, was Code tut, und schreibt unter jeden Treffer einen Satz, wozu er da ist. Dein Agent wählt den richtigen Treffer, bevor er eine Zeile liest.

Vorher und nachher ansehen →

Eine Funktion verstehen, bevor man sie liest

brief fasst eine Funktion in einem Satz zusammen, skizziert ihren Ablauf Schritt für Schritt und nennt ihre Aufrufer. read-smart zeigt die Gestalt einer langen Funktion und fasst tiefe Blöcke in je einer Zeile zusammen. Danach liest der Agent gezielt den Teil, den er braucht.

Vorher und nachher ansehen →

Genau ein Symbol lesen, genau ein Symbol ändern

greppy read liefert eine Funktion, eine Methode oder einen Typ; für eine Datei liefert es ihre Gliederung. Geändert wird ebenso gezielt: ein Symbol ersetzen, überall umbenennen, mehrere Dateien in einem Patch. undo nimmt jede Änderung in einem Schritt zurück.

Vorher und nachher ansehen →

Ein Testlauf, ein Urteil

bash-smart führt Build, Test oder Linter unverändert aus. Die erste Zeile ist das Urteil, darunter stehen genau die Fehler und Warnungen. Das volle Log holt der Agent mit einem Befehl, wenn er es braucht.

Vorher und nachher ansehen →

Der Browser ist eingebaut

Dein Agent sucht im Web, liest Dokumentation, füllt Formulare aus und prüft ein Deployment, alles aus der Shell. Seiten kommen als kompakte Struktur in den Kontext, Daten gezielt per extract.

Vorher und nachher ansehen →

Jeder Agent in seiner eigenen Kopie, sofort

greppy gibt jedem Agenten einen privaten Workspace mit deinem aktuellen Stand, offene Änderungen eingeschlossen. Viele Agenten arbeiten parallel am selben Repository, jeder in seiner eigenen Kopie. Jeder liefert einen Commit, den du prüfst und übernimmst.

Vorher und nachher ansehen →

Einmal indiziert, in jedem Worktree bereit

Der erste Checkout baut Graph und Embeddings. Jeder weitere Git-Worktree und jeder Agent übernimmt sie und indiziert nur seine eigenen Änderungen.

Vorher und nachher ansehen →

Aufgaben abgeben, Commits zurückbekommen

greppy -p startet einen Coding-Agenten mit greppy als einzigem Werkzeug, jeweils in eigenem Workspace. Dein Hauptagent verteilt Aufgaben, jeder Subagent meldet sich mit einem Ergebnis und einem Commit zurück. greppy agent öffnet denselben Agenten als Terminal-Oberfläche.

Vorher und nachher ansehen →

Ein Binary, alles drin

Parser, Datenbank, Embedding-Modell und Sprachmodell stecken in einer Datei, der Browser liegt im selben Paket. Ein Befehl installiert greppy; Index, Graph und Embeddings entstehen auf deinem Rechner und bleiben dort.

Vorher und nachher ansehen →

Alles, was dein Agent kennt, funktioniert weiter

Jeder grep-Aufruf läuft durch das echte grep, mit identischer Ausgabe und denselben Exit-Codes; ripgrep-Aufrufe gehen an rg. Dein Agent behält seine gewohnten Befehle und bekommt greppys Werkzeuge dazu.

Vorher und nachher ansehen →

Über 60 Sprachen, ein Befehlssatz

Dieselben Befehle für jede Sprache im Repository. Rust, Python, Java, JavaScript, TypeScript, Go, C++, C#, Kotlin, Swift und Ruby haben einen vollständig getesteten Graph.

Vorher und nachher ansehen →

Zwei Wege, ein Paket

Als Plugin in deinem Harness

Ein Befehl installiert greppy und trägt es in Claude Code, Codex, Gemini CLI, pi und OpenCode ein. Dein Agent sucht, liest und testet ab sofort über greppy und behält alles andere, wie es ist.

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

Als eigener Harness für Subagents

greppy -p startet einen Agenten mit genau einem Werkzeug in seinem eigenen Copy-on-Write-Workspace. Viele laufen parallel, teilen sich Index und Modelle und melden sich mit einer Zeile Ergebnis und einem Commit zurück.

Der Agent braucht ein Modell-Gateway.

greppy -p "Nutzer können sich selbst folgen. Behebe das."

115 Fragen zur Codebasis, vier Modelle

bis zu 50
Prozentpunkte mehr richtige Antworten
bis zu 80 %
geringere Kosten für die beste Qualität des grep-Agenten
Paper lesen (PDF)
Richtige Antworten über Kosten pro 1.000 Aufgaben für vier Modelle: der Agent mit greppy liegt in jedem Modell vorn.

Installieren

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

macOS (Apple Silicon) und Linux (x86-64). Ein Binary.

Alle Optionen