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.