greplm-cli 0.3.0

greplm command-line interface.
---
name: greplm-search
description: Code search agent for exploring any codebase. Use for finding implementations, locating symbols, understanding how code works, or tracing references. Prefer over Bash/Read for exploratory codebase search.
---

Use the **greplm MCP server** when it is configured (`greplm mcp config` → paste into `.cursor/mcp.json`).
Call `build_context` first, then `search_code`, `find_symbol`, `impact_of`, and the other MCP tools —
they return compact, jump-ready locations instead of whole files.

If MCP is not set up yet, use the `greplm` CLI the same way — faster than raw grep, with real code
intelligence (call graph, typed go-to-definition, structural search, git history).

```bash
greplm index                          # build or refresh the index

# Find code
greplm search "authentication flow"
greplm search "SegmentWriter" --word  # whole-identifier match
greplm search -e 'fn .*candidates' --lang rust --limit 20
greplm search "needle" --exhaustive       # every match: no ranking/limit/per-file cap (grep parity)
greplm symbols extract --exact        # symbol / definition lookup
greplm outline crates/greplm-core/src/trigram.rs
greplm snippet crates/greplm-core/src/trigram.rs 15 25 --context 3

# Code intelligence
greplm pack "how does incremental indexing work" --budget 8000  # task -> ranked, budgeted context
greplm def <file> <line> <col>   # typed go-to-definition (file line col)
greplm callers references            # who calls this symbol
greplm callees merge_segments        # what this symbol calls
greplm impact add_doc --depth 3      # blast radius: what breaks if I change this
greplm xref SegmentWriter            # resolved references (defs + calls + imports)
greplm ast 'fn $NAME() {}' --lang rust   # structural / AST search (or a tree-sitter query)

# Git time-travel
greplm blame <file> <line>
greplm history references            # commits that touched a symbol
greplm changed main                  # files + symbols changed since a revision

greplm summary
```

Pass `-C ./my-project` to search another directory. Add `--json` for machine-readable output.

For repeated queries in an agent loop, run `greplm serve` in the background to keep the index hot; queries then route to the daemon automatically.

If `greplm` is not on `$PATH`, install with:

```bash
curl -fsSL https://raw.githubusercontent.com/KhaledSMQ/greplm/main/install.sh | sh
```

### Workflow

1. Run `greplm index` before searching a project (incremental by default). `indexed 0 files` means nothing *changed* since the last run — **not** an empty index; confirm the index is populated with `greplm status`/`greplm summary` (check `files`/`doc_count`) before falling back to grep.
2. Start a task with `greplm pack "<task>" --budget N` to load exactly the relevant code instead of reading whole files.
3. Before editing a symbol, run `greplm impact <symbol>` to see the blast radius, plus `greplm callers`/`greplm callees` to map the call graph.
4. Use `greplm def <file> <line> <col>` for typed go-to-definition and `greplm xref <symbol>` for resolved references (definitions, calls, imports).
5. Use `greplm ast '<pattern>' --lang <lang>` for structural matches regex can't express.
6. Use `greplm blame`/`greplm history`/`greplm changed` to understand how and why code evolved.
7. For "find every occurrence", use `greplm search --exhaustive` (no ranking/limit/per-file cap); drop to raw grep only for a quick one-off confirmation of an exact string.

### Reporting results

- Report paths and line numbers exactly as greplm emits them (`line_start`/`line_end`, `file:line`). greplm anchors a symbol's span to its definition line — not preceding doc comments or attributes — so don't re-derive line numbers from your own reading or widen them to include comments.
- Separate what you verified from what you infer. State findings grounded in greplm output as fact; mark guesses, recommendations, and "natural fit" suggestions explicitly as such.
- For a negative result, name what you searched (commands/patterns) so the caller can judge coverage, then state the conclusion plainly — don't pad it with speculation.
- Lead with the answer. Keep it compact: locations plus the minimal quoted lines that prove the point, not whole-file dumps or editorializing.