Skip to main content

Indexed grep + glob for AI agents

Project description

glep

Indexed grep + glob for AI agents.

Ripgrep pays the full scan cost on every query. glep pays it once: a persistent, self-healing trigram index answers warm content queries in ~1-20ms and glob listings with zero filesystem traversal, with output byte-compatible with ripgrep's and no daemon.

Why

Coding agents call Grep and Glob dozens of times per session. On monorepo-scale projects each call costs seconds. glep replaces both with index-backed equivalents built on ripgrep's own crates (ignore, grep-searcher, regex-syntax), so correctness is inherited, not reimplemented.

When to use it

Use glep Stick with rg / fd
Agent sessions firing dozens of searches over one repo (the bundled hook reroutes Grep/Glob) One-off searches in a tree you will never search again
Monorepos where rg takes 100ms+ per query; warm glep answers in ~1-20ms Small repos where rg already answers in under ~50ms
Repeated glob listings: glep --files reads the manifest, no traversal Ephemeral CI runners where the index never persists between runs
Read-heavy bursts with --ttl 5 to amortize the freshness sweep rg features glep lacks: replacements, PCRE2, compressed files
Correctness-critical work: self-healing index, sound full-scan fallback Corpora dominated by binaries or files over the 1MB cap (live-scanned anyway)

Numbers

Linux kernel 6.12 checkout: 86,605 files, ~1.5 GB. Apple Silicon macOS, hyperfine medians, warm filesystem cache, rg and fd at their default parallelism.

Scenario glep glep --ttl 5 ripgrep fd
Rare pattern 221 ms 21 ms 1.39 s
Common pattern (~10k matches) 90 ms 1.54 s
List all .c files (--files) 242 ms 44 ms 92 ms
Index build (one-time) 24 s

Default glep pays the self-healing freshness sweep (a stat of every file) on each query; --ttl amortizes it across read bursts. Index size: 154 MB, about 10% of the corpus. The parity harness pins byte-equality with rg's output; speed differs, bytes do not.

How it works

  • A file-level trigram inverted index (the Russ Cox / csearch model) lives in .glep/, memory-mapped, a few percent of corpus size.
  • Every query self-heals: a fast parallel mtime sweep incrementally reindexes only what changed, then answers. No watcher, no background process.
  • The regex becomes a trigram plan, postings intersection yields a handful of candidate files, and ripgrep's searcher runs over just those.
  • Patterns trigrams can't narrow fall back to a full parallel scan: never a wrong answer, worst case is rg-speed.

Interface

glep 'fn parse_intent' src/     # content search (Grep replacement)
glep --files '**/*.py'          # glob listing (Glob replacement)
glep --json 'pattern'           # machine-readable output for agents
glep index                      # explicit (re)build; lazy on first query
glep status                     # index stats

Ships with a Claude Code skill and a PreToolUse hook that routes built-in Grep/Glob calls through glep automatically.

Install

pip install glep          # binary wheel, no Rust toolchain needed
# or
cargo install glep

Claude Code integration (skill + hook): claude/install.sh.

Status

Spec: docs/superpowers/specs/2026-07-14-glep-design.md.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

glep-0.2.0-py3-none-musllinux_1_2_x86_64.whl (2.0 MB view details)

Uploaded Python 3musllinux: musl 1.2+ x86-64

glep-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

glep-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.9 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

glep-0.2.0-py3-none-macosx_11_0_arm64.whl (1.7 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

glep-0.2.0-py3-none-macosx_10_12_x86_64.whl (1.8 MB view details)

Uploaded Python 3macOS 10.12+ x86-64

File details

Details for the file glep-0.2.0-py3-none-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for glep-0.2.0-py3-none-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0eebebd0a99186a07a3be92bcf584947de662d57a32a89af8eb5c0659d09522b
MD5 21984f62a559a66cf2a0dcdb012270bf
BLAKE2b-256 5e40d439f8635d529252efe305d79c9b344f5495d5353e8c032ba8c996a32c67

See more details on using hashes here.

File details

Details for the file glep-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for glep-0.2.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1f0b3f0a335b765674bd4a803fad48bce0f51026de6208fe661c9afe44e64f9f
MD5 168347b06fc8f0437bf14b752b1b2bac
BLAKE2b-256 2403c68b3b6593dbe49d2a79d1170472f67f7fb53cc5381766175aec2a60fdd4

See more details on using hashes here.

File details

Details for the file glep-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for glep-0.2.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 26a1f0b301cf221dd27f1cea75747193632d74e8f72121e1fb2505b3753a1575
MD5 bcb349491e6d34b30db42b421a6e49ed
BLAKE2b-256 ddfe82ff7b39d18a5c25445ab663c9f806b647fac139b7ce2e5e8b57842bee99

See more details on using hashes here.

File details

Details for the file glep-0.2.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for glep-0.2.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e5fbb024a02088b381e9f5aa5fa248ab7ed712c45abc5e13f9e177bdda721455
MD5 5b9037b906f59fbf687aca6b0f58a5d8
BLAKE2b-256 16f024b4b898e64b9f2ed7b0799bbd27df7710e825410c89fb85b5365bafcb41

See more details on using hashes here.

File details

Details for the file glep-0.2.0-py3-none-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for glep-0.2.0-py3-none-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 0c4cb7f6e4e827d8c77c3b4d829e25170c9b7c18614578dd4edcbd1ea86beb55
MD5 f413fd5686b648526179809f29883afe
BLAKE2b-256 a3ba116ad2cb70ef4d099dd63d9dc72c4d1c62c133f8128ab4e8484cf825b1fc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page