devgrep
Install

FAQ

Answers grounded in how devgrep actually works.

What gets indexed?

Phase 1: bash/zsh shell history, .log files under indexed paths, and markdown (.md, .markdown) notes. Default paths from config apply when you run devgrep index without arguments. Explicit paths like devgrep index . scope logs and notes to that tree.

How large does the database get?

Size depends on history limit (default 200,000 entries in config), number of log lines, and note files indexed. Use devgrep stats to see document counts and human-readable database size. Indexing skips huge files, media, and binaries by default.

Privacy

devgrep never phones home. It does not collect usage data, environment data, queries, commands, paths, or logs. Everything stays in your local SQLite file. Search stats are stored locally for ranking — not transmitted.

Offline behavior

Fully offline. No network calls, accounts, or cloud API. The CLI, indexers, SQLite, and TUI run without connectivity.

Performance

Designed for fast startup and local queries. SQLite uses WAL mode and prepared statements. Incremental indexing tracks file offsets in source_states so re-indexing avoids full re-parses. The repository includes a 100k-document search benchmark (make bench).

Watch mode behavior

Watch mode runs in the foreground after indexing explicit paths (unless --no-watch). fsnotify debounces events by 500ms, then re-runs all indexers. File removals trigger document deletion. devgrep index --watch restores paths from watched_paths without re-specifying directories.

Incremental indexing

Each source tracks state in source_states (offsets, modification times). Shell history and log files append incrementally. Watch-triggered re-indexes process only changed content where possible.

Source management

devgrep sources lists grouped paths. devgrep sources --tree shows directory structure. Watched paths persist in SQLite; config indexed_paths applies for default index runs.

Troubleshooting

No index found

Run devgrep index. The TUI and plain search report this when the database is empty.

No results found

The index exists but nothing matched. Broaden the query or check devgrep sources to confirm the relevant paths were indexed.

Unsafe path refused

Indexing / or ~ requires confirmation in an interactive terminal, or --yes in scripts. Prefer project-scoped paths: devgrep index .

Invalid config

devgrep doctor reports YAML and validation issues. Config is optional — delete or fix ~/.config/devgrep/config.yaml if doctor flags problems.