All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.37.0 - 2026-09-10
- Per-Request Project Root for MCP Tools: Project-scoped MCP tools (
grepai_search,grepai_trace_callers,grepai_trace_callees,grepai_trace_graph,grepai_refs_readers,grepai_refs_writers,grepai_refs_graph,grepai_index_status) accept an optionalrootparameter with an absolute project path; configuration, vector store and symbol index are loaded from that path instead of the server startup project, enabling per-launch project detection across multiple projects without restartingmcp-serve(#305) - @wasup-yash- Specifying both
workspaceandrootin one request is rejected; an explicitrootalso takes precedence over a server started with--workspace - The server now advertises tool capabilities during MCP initialization (
server.WithToolCapabilities(true)), which some MCP clients require before discovering server features/roots
- Specifying both
- Non-Reproducible Search Ranking: Results that scored exactly the same came back in a different order on every search over an unchanged index, because callers assembled them by ranging over a Go map and
sort.Sliceis not stable. Since callers truncate to a limit after sorting, this also changed which results were returned, not just their order. Score ties now break on the chunk ID, which is unique within a store, so an unchanged index returns the same ranking every time (#303) - @MaxFreedomPollard - Idle GOB Index Rewrites: Vector and symbol GOB stores now persist only when modified, eliminating full-index rewrites every 30 seconds when idle (#298) - @jeremyakers
- Atomic GOB Replacement: Failed cross-platform index replacement now preserves the previous index instead of falling back to a remove-then-rename window that could leave no index after interruption - @jeremyakers
- Concurrent Watcher Snapshot Loss: Foreground, background, and workspace watchers now enforce one lifetime writer per canonical project root, while read-only search, MCP, and trace processes remain concurrent - @jeremyakers
- Missing-Index Reader Overwrites: Read-only vector and symbol GOB stores that load before an index exists now close cleanly without replacing an index created later, while real pre-load mutations and direct first persists are preserved - @jeremyakers
- Worktree Seed Races: Worktree auto-initialization now copies complete vector and symbol seed indexes under the project writer lock before exposing the copied configuration - @jeremyakers
- GOB Mutable Aliases: Vector GOB stores now own deep copies of mutable inputs, and symbol lookups return detached slices, preventing caller mutations from changing clean in-memory snapshots - @jeremyakers
- Worktree Auto-Init Rollback: Seed and configuration files are now atomically published from synced temporary files, failed copy stages remove partial destinations, and only a parseable configuration counts as initialization completion - @jeremyakers
- Incomplete or Stale File Watching: File, worktree, and workspace watchers now fail closed when a directory watch cannot be registered, fsnotify closes or reports an error, or the internal event queue cannot keep up. Fatal coverage shutdown withdraws daemon readiness and synchronously aborts event handling without flushing potentially untrustworthy derived state; the CLI then exits immediately and lets the OS reclaim watcher descriptors. Library callers that remain alive after receiving a fatal error may call
Closeto release the backend explicitly. The next startup's full scan repairs the indexes. Ready markers are PID-validated, write failures stop startup, timed-out children are stopped and cleaned up, and stale PID cleanup removes the matching marker. On Linux, registrationENOSPCmeans the per-user inotify watch quota is exhausted, not that the filesystem is out of disk space (#304) - @jeremyakers- Behaviour change:
grepai watchnow exits on a filesystem watch failure where it previously logged a warning and kept running. On a host whose inotify quota is exhausted, this surfaces as a startup error instead of a watcher that silently misses changes. The error names the affected path and, on Linux, explains the quota.
- Behaviour change:
- Bump
github.com/mark3labs/mcp-gofrom 0.58.0 to 1.0.0 (#302)
0.36.1 - 2026-09-01
- Files Dropped From the Index on Atomic Writes: An atomic write — write to a temp file, then rename it over the target — surfaces as
RENAME/REMOVEon a path whose file is still on disk, and the watcher removed it from both the vector and symbol indexes, silently, until the next manual save or watcher restart (#295, closes #225 and #129) - @yoanbernabeu- Editors and coding agents (Claude Code, Cursor) save this way, so the files being dropped were exactly the ones being actively worked on
- The same cause emptied the index wholesale on
git checkoutacross a diverged branch, since git writes files by renaming over them — reproduced asFiles indexed: 0on a 20-file repository - The event is now re-qualified as a modification when the path still resolves to a regular file; genuine deletions are unaffected
- Credit to @Third-Thing, who identified this class of false removals independently in July
- Stale Symbols After Upgrade: Pair each persisted symbol entry with the extractor version that produced it, so a release shipping improved symbol extraction re-processes unchanged files instead of leaving stale symbols in place until
.grepai/symbols.gobis deleted by hand (#264) - @kryptt- The first
grepai watchafter upgrading re-extracts symbols for every traced file once, then returns to normal incremental behaviour - Symbol extraction only: the vector index is untouched and no re-embedding occurs, so there is no API cost and no reindexing to plan
- Existing
symbols.gobfiles load unchanged, and remain readable if you downgrade
- The first
- Go Toolchain From
go.mod: The release and docs workflows now resolve the Go version fromgo.mod(go-version-file) instead of a hardcoded pin, so the toolchain can no longer drift from what the module actually requires (#293) - @yoanbernabeu - Building from source now requires Go 1.25.5 or later, up from 1.25.0 (#288). Installing a released binary is unaffected
- Bump
github.com/mark3labs/mcp-gofrom 0.45.0 to 0.58.0 (#288) - Bump
google.golang.org/grpcfrom 1.82.1 to 1.83.2 (#289) - Bump
actions/setup-gofrom 5 to 7 (#292),actions/setup-nodefrom 6 to 7 (#290)
0.36.0 - 2026-08-30
- Vue SFC Support: Process Vue single-file components for search and trace, with source remapping back to original line numbers (#157) - @mika76
- File-Level Deduplication: Configurable
search.dedupto collapse multiple chunks from the same file into a single result (#188) - @Don-Yin - RPG CLI Commands:
grepai rpg search,grepai rpg fetchandgrepai rpg explore, plus--compactstructured output fortraceandrefs, bringing the CLI to parity with the MCP server (#240) - @teelicht - Custom File Extensions: New
chunking.custom_extensionsoption to index file types outside the built-in list, for niche or polyglot codebases (#256) - @kryptt - Configurable Embedder Timeout and Retries: New
embedder.request_timeout_secondsandembedder.max_retriesfor slow self-hosted endpoints; defaults are unchanged (60s, 5 attempts) (#257) - @kryptt - Requesty Provider: Add Requesty as a new embedding provider
- Requesty (
requesty): Multi-provider gateway viahttps://router.requesty.ai/v1with OpenAI-compatible embeddings (openai/text-embedding-3-small, 1536 dims) - API key resolved from
REQUESTY_API_KEY(falling back toOPENAI_API_KEY) - Integrated into the embedder factory (
NewFromConfig),grepai initprompts, and shell completion (#268) - @Thibaultjaigu
- Requesty (
- Opt Out of Worktree Discovery: New
watch.discover_worktreesoption to stopgrepai watchfrom auto-initializing and watching every linked git worktree (#270) - @rusel95 - C++
.cxx/.hxxSupport: Index and trace.cxxand.hxxfiles, which were previously skipped despite being advertised in the default config (#276) - @Third-Thing
- Watcher Crash on Long Runs: Add a mutex to the RPG graph, fixing the
concurrent map iteration and map writecrash that killedgrepai watchafter hours of use (#206, closes #279) - @drizzt - Gitignore Root Match: Fix
.gitignorepattern.*/incorrectly matching the root directory and preventing all files from being indexed (#203, closes #202) - @pingtimeout - Qdrant Search on Large Repos: Raise the gRPC max message size to 64 MB and stop fetching unused vectors in
GetAllChunks, fixingResourceExhaustederrors on hybrid search (#207) - @drizzt - Windows Qdrant Collection Names: Sanitize
\and:in collection names derived from Windows paths (#201) - @AkosLukacs - Corrupted Index Recovery: Write
index.gobatomically, and quarantine an already-truncated index toindex.gob.corruptinstead of failing forever withunexpected EOF(#269) - @rusel95 - Postgres Embedding Cache Scoping: Scope the content-hash cache by project and by embedder identity (provider/model/dimensions/endpoint), preventing cross-project and cross-model vector reuse (#252, closes #249 and #251) - @3em0
- OpenAI 300k Token Limit: Detect the API's
maximum request sizeerror and recursively split the batch until it fits, instead of failing the whole indexing run (#226, closes #214) - @p1ng0o - Workspace Document Scoping: Scope
projectPrefixStore.ListDocumentsto the current project, fixing wildly inflated "files removed" counts and thousands of pointless store roundtrips on every workspace scan (#263) - @kryptt - Agent Skill Accuracy: Replace absolute "never use grep" instructions with a recall-safe combination, since semantic search returns a ranking rather than an exhaustive result set (#272) - @rusel95
- Nix Package Build: Add
gitandnodejstonativeCheckInputsin the flake, so the test phase no longer fails withexec: "git": executable file not found in $PATH(closes #244)
- Faster Watcher Startup: Parallelize file-change detection and replace
filepath.WalkwithWalkDirin the watcher, cutting restart time on large repositories (#277) - @Slicit
- Go 1.25 Required to Build:
qdrant/go-client1.19.0,pgvector-go0.4.1 andpgx/v55.10.0 all require Go 1.25, so building grepai from source now needs Go 1.25 or later. Installing a released binary is unaffected. The CI matrix andgolangci-lint(pinned to v2.13.2) were aligned accordingly (#284, #286, #287)
- Bump
github.com/qdrant/go-clientfrom 1.17.1 to 1.19.0 (#253) - Bump
github.com/pgvector/pgvector-gofrom 0.3.0 to 0.4.1 (#254) - Bump
github.com/jackc/pgx/v5from 5.8.0 to 5.10.0 (#228) - Bump
github.com/fsnotify/fsnotifyfrom 1.9.0 to 1.10.1 (#238) - Bump
actions/checkoutfrom 6 to 7 (#267),codecov/codecov-actionfrom 5 to 7 (#265),actions/upload-pages-artifactfrom 4 to 5 (#227),actions/deploy-pagesfrom 4 to 5 (#208)
0.35.0 - 2026-03-16
- Shell Completion: New
grepai completion [zsh|bash|fish|powershell]command for shell autocompletion (#175) - @Greite- Static completions with descriptions for
--provider,--backend,--modeflags - Dynamic completions for
--workspaceand--projectflags (loaded from config) - Positional argument completions for workspace subcommands (names, project names, directories)
- Installation instructions for Zsh (eval, Oh-My-Zsh plugin, manual fpath), Bash, Fish, PowerShell
- Static completions with descriptions for
.grepaiignoreSupport: New.grepaiignorefile allows overriding.gitignorerules for grepai indexing. Supports negation patterns (!) to re-include files excluded by.gitignore, with directory-level precedence for nested files (#163) - @Greite- Lua Fast-Mode: Add fast-mode support for Lua language (#176) - @Logonz
- Stats Tracking: Introduce privacy-first gains tracking feature (#162) - @hansipie
- OpenAI Workspace Defaults: Fix OpenAI workspace create defaults (#182) - @garitar
- OpenAI Init Model: Fix OpenAI init model handling and config defaults (#181) - @garitar
- Trace Helpers: Deduplicate workspace helpers, eliminate double scan, add error logging (#164) - @jugrajsingh
- RPG Encoder: Rename RPGIndexer to RPGEncoder and extend multi-feature model (#149) - @tinker495
- Quickstart: Add agent integration step to quickstart (#167) - @sethbrasile
- Bump
github.com/mark3labs/mcp-gofrom 0.44.0 to 0.45.0 (#184) - @dependabot - Bump
github.com/qdrant/go-clientfrom 1.16.2 to 1.17.1 (#160) - @dependabot
- Bump
actions/upload-artifactfrom 6 to 7 (#171) - @dependabot - Bump
goreleaser/goreleaser-actionfrom 6 to 7 (#159) - @dependabot
0.34.0 - 2026-02-24
- MCP Discovery Commands: Add
grepai_list_workspacesandgrepai_list_projectsMCP tools to expose relative paths for searching (#144) - @jeremyakers - Bubble Tea TUI: Add interactive TUI for watch, status, trace, init, and workspace commands (#143) - @tinker495
- MCP Workspace Discovery Response:
grepai_list_workspacesnow returns workspace-level entries only (without embedded project lists) (#144) - @jeremyakers - MCP Startup Fallback:
grepai mcp-servenow starts without--workspacewhen global workspaces exist, allowing clients to passworkspaceper tool call at runtime (#144) - @jeremyakers
0.33.0 - 2026-02-22
- F# Language Support for Trace: Symbol extraction and call graph analysis now supports F# with Ionide tree-sitter grammar (#152) - @WillEhrendreich
- Search Path Filter: New
--pathflag forgrepai searchto filter results by file path with backend pushdown (#141) - @jeremyakers
- Worktree Deduplication: Fix worktree dedup and multi-project chunk storage (#142) - @justinkatzman
0.32.1 - 2026-02-19
- Dependencies: Bump
github.com/mark3labs/mcp-gofrom 0.43.2 to 0.44.0 (#145) - @dependabot
0.32.0 - 2026-02-19
- Synthetic & OpenRouter Providers: Add Synthetic API and OpenRouter as new embedding providers (#106) - @Revaz-Goguadze
- Synthetic API (
synthetic): Cloud embedding viahttps://api.synthetic.newwithnomic-embed-text-v1.5(768 dims) - OpenRouter (
openrouter): Multi-provider gateway viahttps://openrouter.ai/api/v1with model selection (text-embedding-3-small, text-embedding-3-large, qwen3-embedding-8b) - Embedder factory pattern (
NewFromConfig/NewFromWorkspaceConfig) centralizing provider initialization across CLI and MCP server - Interactive model selection for OpenRouter during
grepai init --modelflag for non-interactive OpenRouter configuration
- Synthetic API (
0.31.0 - 2026-02-13
- RPG Semantic Graph Layer: Add RPG semantic graph layer fully integrated into existing APIs (#110) - @tinker495
- Workspace Mode: Add trace, symbol indexing, and watcher fixes for workspace mode (#121) - @jugrajsingh
grepai trace callers/callees/graphnow supports--workspaceand--projectflags for cross-project call graph analysisgrepai watch --workspacenow extracts symbols and builds per-project call graphs (stored in.grepai/symbols.gobper project)- MCP trace tools (
grepai_trace_callers,grepai_trace_callees,grepai_trace_graph) andgrepai_index_statussupport workspace and project parameters - Extracted
trace.SymbolStoreinterface fromGOBSymbolStorefor extensibility
- Watch Optimization: Reduce branch-switch reparsing with metadata and symbol hash cache (#123) - @tinker495
- MCP Windsurf Compatibility: Add titleFixWriter for Windsurf stdio compatibility (#104) - @cmdaltctr
- Update Command: Fix cross-device link and newline output in
grepai update(#124) - @hansipie - GOB Store Directory Creation: GOB stores create missing parent directories on persist (#136) - @tinker495
- Call Graph Quality: Improve callgraph quality and GOB store resilience (#137) - @tinker495
- Call Graph Nodes: Fix caller nodes missing from call graph for incoming edges
- Daemon Windows: Use file-based stop signal on Windows (#140) - @tintop2k
- Watcher Event Routing: Fixed workspace file events being silently dropped due to relative vs absolute path comparison
0.30.0 - 2026-02-08
- Multi-Worktree Watch and Daemon Support: Worktree-aware daemon PID management and multi-worktree parallel watching via errgroup (#115) - @tinker495
- Worktree-specific PID/ready/log files in daemon package
discoverWorktreesForWatch()for automatic linked worktree detection with auto-initwatchProject()extracted for single-project watch loop- Platform-specific liveness detection (pipe on Unix, poll on Windows)
- Lock File Handle Leak: Fix file handle leak in
WriteWorktreePIDFile(defer close after lock) (#115) - @tinker495 - Deduplicate Watch Loop: Remove duplicated no-worktree path to use
watchProject()instead of inline copy (#115) - @tinker495
0.29.0 - 2026-02-08
- Git Worktree Detection and Auto-Init: Automatically detect git worktrees and initialize grepai in the main worktree root (#114) - @tinker495
- GOB File Locking for Cross-Process Safety: Add file locking to GOB store to prevent data corruption when multiple processes access the same index (#113) - @tinker495
- Git Worktree Support Documentation: Add documentation page for git worktree support (#126) - @yoanbernabeu
0.28.0 - 2026-02-07
- Ollama/LM Studio Endpoint Prompt:
grepai initnow prompts for custom Ollama/LM Studio endpoint URL during initialization (#111) - @yoanbernabeu - Content-Addressed Embedding Deduplication: Skip re-embedding unchanged chunks using content hashing, reducing indexing time and API calls (#112) - @tinker495
- Nix Release Automation: Automate
flake.nixversion and vendorHash update in the release GitHub Actions workflow (#117) - @yoanbernabeu
- UTF-8 Chunk Boundaries: Align chunk boundaries to valid UTF-8 rune starts to prevent splitting multi-byte characters (#116) - @yoanbernabeu
0.27.0 - 2026-02-04
- Non-Interactive Workspace Create:
workspace createnow supports--name,--backend,--embedder-provider,--embedder-model,--dsnflags for scripted/CI usage (#100) - @jugrajsingh- Enables fully non-interactive workspace creation without TUI prompts
- All required parameters can be passed as CLI flags
- MCP Serve Workspace Flag:
mcp-serve --workspace <name>to scope MCP tools to a specific workspace (#100) - @jugrajsingh- MCP search and trace tools automatically use the workspace context
- Workspace Config Helpers:
FindWorkspaceConfig()andWorkspaceStoreConfig()in config package for programmatic workspace resolution (#100) - @jugrajsingh
- Community Tools Page: New documentation page listing community-built tools and integrations (#101) - @miqcie
- Updated workspace docs with workspace mode, parallelism tiers, and MCP workspace sections
- Updated MCP docs with workspace-scoped configuration examples
- Updated embedders docs with parallelism tier reference
- Updated watch guide with workspace daemon examples
- Bump
golang.org/x/syncfrom 0.18.0 to 0.19.0 (#99) - @dependabot
0.26.0 - 2026-02-01
- TOON Format Support: Add
--toon/-tflag for token-efficient output format (#95) - @yoanbernabeu- TOON (Token-Oriented Object Notation) uses ~50% fewer tokens than JSON in compact mode
- Available on
searchandtracecommands (callers, callees, graph) - MCP tools now support
formatparameter ("json" or "toon") - Flags
--jsonand--toonare mutually exclusive --compactnow works with both--jsonand--toon
0.25.2 - 2026-02-01
- Ollama Progress Reporting: Add visual progress bar for sequential (Ollama) indexing (#94) - @anyeloamt
- Previously, embedding progress appeared frozen during Ollama indexing
- Now displays a real-time progress bar matching the scan bar style
- Fixes confusing UX where users would cancel thinking grepai was broken
0.25.1 - 2026-01-31
- OpenAI Dimensions Parameter: Only send
dimensionsparameter when explicitly configured (#93) - @yoanbernabeu- Changed
Dimensionsfromintto*intin config to distinguish "not set" from "explicitly set" - OpenAI embedder now omits
dimensionsfrom API requests when not configured, allowing models to use their native dimensions - Fixes issues with custom OpenAI-compatible endpoints that don't support the
dimensionsparameter
- Changed
- Nix Flake: Update vendorHash for flake (#90) - @mholtzscher
0.25.0 - 2026-01-30
- Automatic Re-chunking for Large Chunks: Automatically split chunks that exceed the embedder's context limit (#88) - @yoanbernabeu
- New
ContextLengthErrortype for detecting context limit errors from providers (Ollama, OpenAI, LM Studio) ReChunk()method splits oversized chunks into smaller sub-chunks using half the original size- Automatic retry with smaller chunks (up to 3 attempts)
- Transparent handling: no configuration changes needed
- Fixes "input length exceeds context length" errors when
chunking.size> model limit
- New
0.24.1 - 2026-01-29
- Symlink Directory Indexing: Resolve symlinks in
FindProjectRoot()so thatgrepai watchworks correctly when executed from a symlinked directory (#85) - @yoanbernabeu
0.24.0 - 2026-01-27
- Adaptive Rate Limiting for OpenAI: Auto-adjusts parallelism based on 429 responses, respects Retry-After headers, optional TPM pacing via
WithOpenAITPMLimit(#81) - @ariel-frischer - Parallel OpenAI Embedding: 3x+ faster indexing with batched API requests and configurable parallelism (
embedder.parallelism, default: 4) (#81) - @ariel-frischer- New
BatchEmbedderinterface for batch processing - Exponential backoff with jitter for retries
- Token bucket rate limiting for proactive TPM management
- Real-time progress reporting during batch embedding
- New
0.23.0 - 2026-01-25
- Windows PowerShell Installation: Native PowerShell installation script for Windows users (#73) - @Lisito11
- Simple one-liner:
irm https://grepai.dev/install.ps1 | iex - Automatic PATH configuration
- No external dependencies required
- Simple one-liner:
- MCP Server Project Path: Add optional
project-pathargument tomcp-servecommand (#76) - @yoanbernabeu- Fixes "failed to find project root" error when launched via Cursor/MCP on Windows
- Configuration:
grepai mcp-serve /path/to/your/project - Fully backward compatible: without argument, uses existing behavior
0.22.0 - 2026-01-24
- Multi-Project Workspace Support: Index and search across multiple projects with shared vector store (#75) - @yoanbernabeu
- New
grepai workspacecommand for managing workspaces:workspace create <name>- Create a new workspace with store/embedder configurationworkspace add <workspace> <path>- Add a project to a workspaceworkspace remove <workspace> <project>- Remove a project from a workspaceworkspace list- List all configured workspacesworkspace show <name>- Show workspace details and projectsworkspace status <name>- Show indexing status per projectworkspace delete <name>- Delete a workspace
- Extended
grepai watchwith--workspaceflag for multi-project indexing- Background daemon mode:
grepai watch --workspace <name> --background - Status check:
grepai watch --workspace <name> --status - Stop daemon:
grepai watch --workspace <name> --stop
- Background daemon mode:
- Extended
grepai searchwith--workspaceand--projectflags- Cross-project search:
grepai search --workspace <name> "query" - Scoped search:
grepai search --workspace <name> --project frontend "query"
- Cross-project search:
- Extended MCP server with
workspaceandprojectsparameters forgrepai_search - Global workspace configuration stored in
~/.grepai/workspace.yaml - Path prefixing format:
workspaceName/projectName/relativePathfor isolation - Requires PostgreSQL or Qdrant backend (GOB not supported for shared storage)
- 100% backward compatible: existing single-project workflows unchanged
- New
- New workspace management documentation page
- Blog post announcing multi-project workspace feature
0.21.0 - 2026-01-23
-
Pascal/Delphi Language Support for Trace: Symbol extraction and call graph analysis now supports Pascal/Delphi (#71) - @yoanbernabeu
- Functions:
function FunctionName(params): ReturnType; - Procedures:
procedure ProcedureName(params); - Class methods:
function TClassName.MethodName/procedure TClassName.MethodName - Classes:
TClassName = class(TParent)/TClassName = class - Interfaces:
IInterfaceName = interface - Types: records, packed records, enums, type aliases, arrays
- Pascal keywords added to filter out false positives
.pasand.dpradded to default traced languages and supported extensions
- Functions:
-
Claude Code Release Skill: New skill for automated release process
- Checks CI status before proceeding
- Determines version type (major/minor/patch) based on changes
- Updates CHANGELOG and documentation version
- Credits contributors automatically
0.20.1 - 2026-01-23
- MCP Index Status Schema: Added
verboseparameter togrepai_index_statustool to fix empty schema issue with strict MCP clients like Copilot/GPT5-Codex-Max (#66)- Some MCP clients require a non-empty input schema for all tools
- Added regression test to prevent future schema-related issues
0.20.0 - 2026-01-23
- MCP Compact Mode: New
compactparameter for MCP tools to reduce token usage (#61)grepai_search: Whencompact=true, omits thecontentfield (~80% token savings)grepai_trace_callers: Whencompact=true, omits thecontextfield from call sitesgrepai_trace_callees: Whencompact=true, omits thecontextfield from call sites- Default is
falsefor full backward compatibility - Ideal for AI agents that only need file locations to then read files directly
- Added Opencode MCP configuration example
0.19.0 - 2026-01-22
- Watcher Performance Optimization: Skip unchanged files on subsequent launches (#62)
- New
last_index_timefield in configuration tracks last indexing timestamp - Files with ModTime before
last_index_timeare skipped, avoiding unnecessary embeddings - Config write throttling (30s) prevents file system overload during active development
- Significantly faster subsequent
grepai watchlaunches (~1ms vs ~100ms for unchanged codebases) - Fully backward compatible: old configs work normally, optimization kicks in after first watch
- New
Indexernow acceptslastIndexTimeparameter for ModTime-based file skippingrunInitialScanreturnsIndexStatsto enable conditional config updates
0.18.0 - 2026-01-21
- Qdrant Vector Store Backend: New storage backend using Qdrant vector database (#57)
- Support for local Qdrant (Docker) and Qdrant Cloud
- gRPC connection with TLS support
- Automatic collection creation and management
- Docker Compose profile for easy local setup:
docker compose --profile=qdrant up - Configuration options: endpoint, port, TLS, API key, collection name
- Qdrant Backend Improvements: Various fixes and improvements
- Fixed default port display in
grepai initprompt (6333 → 6334 for gRPC) - Added UTF-8 sanitization to prevent indexing errors on files with invalid characters
- Added
qdrant_storageto default ignore patterns - Updated CLI help to include qdrant in backend options
- Fixed typo in compose.yaml ("Optionnal" → "Optional")
- Fixed default port display in
0.17.0 - 2026-01-21
- Cursor Rules Support:
grepai agent-setupnow supports.cursor/rulesconfiguration file (#59).cursor/rules(Cursor's current standard) takes priority over deprecated.cursorrules- Backwards compatibility maintained for existing
.cursorrulesfiles - Both files are configured if present (idempotence handled by marker detection)
0.16.1 - 2026-01-18
- CLI Error Display: Commands now properly display error messages on stderr (#52, #53)
- Previously errors were silenced by Cobra's
SilenceErrors: truesetting - Permission errors in
updatecommand now show user-friendly message with sudo suggestion
- Previously errors were silenced by Cobra's
0.16.0 - 2026-01-16
- Background Daemon Mode: New flags for
grepai watchto run as a background processgrepai watch --background: Start watcher as a detached daemongrepai watch --status: Check if background watcher is running (shows PID and log location)grepai watch --stop: Gracefully stop the background watcher (with 30s timeout)--log-dir: Override default log directory- OS-specific default log directories:
- Linux:
~/.local/state/grepai/logs/(or$XDG_STATE_HOME) - macOS:
~/Library/Logs/grepai/ - Windows:
%LOCALAPPDATA%\grepai\logs\
- Linux:
- PID file management with file locking to prevent race conditions
- Automatic stale PID detection and cleanup
- Ready signaling: parent waits for child to fully initialize before returning
- Graceful shutdown with index persistence on SIGINT/SIGTERM
- New
daemonpackage: Cross-platform process lifecycle management- Platform-specific implementations for Unix and Windows
- File locking (flock on Unix, LockFileEx on Windows)
- Process detection and signal handling
0.15.1 - 2026-01-16
- External Gitignore Support: New
external_gitignoreconfiguration option to specify a path to an external gitignore file (e.g.,~/.config/git/ignore) (#50)- Supports
~expansion for home directory paths - External patterns are respected during indexing alongside project-level
.gitignorefiles - If the file doesn't exist, a warning is logged but indexing continues normally
- Supports
0.15.0 - 2026-01-14
- C# Language Support for Trace: Symbol extraction and call graph analysis now supports C# (#48)
- Classes (with inheritance, generics, sealed/abstract/static/partial modifiers)
- Structs (including readonly and ref structs)
- Records (record, record class, record struct)
- Interfaces (including generic interfaces)
- Methods (with all modifiers: public, private, protected, internal, static, virtual, override, abstract, async, etc.)
- Constructors
- Expression-bodied members
- C# keywords added to filter out false positives
.csadded to default traced languages- Tree-sitter support for precise symbol extraction
0.14.0 - 2026-01-12
- Java Language Support for Trace: Symbol extraction and call graph analysis now supports Java (#32)
- Classes (with extends/implements, generics, sealed/non-sealed)
- Inner and nested classes
- Interfaces (including generic interfaces)
- Annotations (
@interface) - Enums (top-level and inner, with methods)
- Records (Java 14+)
- Methods with all modifiers (public, protected, private, static, final, abstract, synchronized, native, strictfp)
- Constructors
- Default interface methods (Java 8+)
- Abstract methods
- Java keywords added to filter out false positives
.javaadded to default traced languages
0.13.0 - 2026-01-12
- Self-Update Command: New
grepai updatecommand for automatic updates (#42)grepai update --check: Check for available updates without installinggrepai update: Download and install the latest version from GitHub releasesgrepai update --force: Force update even if already on latest version- Automatic platform detection (linux/darwin/windows, amd64/arm64)
- SHA256 checksum verification before installation
- Progress bar during download
- Graceful error handling for network issues, rate limits, and permission errors
- Makefile: Uses Docker for consistent linting with golangci-lint v1.64.2
0.12.0 - 2026-01-12
- Custom OpenAI Endpoint: Fixed
embedder.endpointconfig not being used for OpenAI provider (#35)- Enables Azure OpenAI and Microsoft Foundry support
- Custom endpoints now correctly passed to the OpenAI embedder
- Configurable Vector Dimensions: New
embedder.dimensionsconfig option (#35)- Allows specifying vector dimensions per embedding model
- PostgreSQL vector column automatically resizes to match configured dimensions
- Backward compatible: old configs without
dimensionsuse sensible defaults per provider
0.11.0 - 2026-01-12
- Nested
.gitignoreSupport: Each subdirectory can now have its own.gitignorefile (#40)- Patterns in nested
.gitignorefiles apply only to their directory and subdirectories - Matches git's native behavior for hierarchical ignore rules
- Example:
src/.gitignorewithgenerated/only ignoressrc/generated/, notdocs/generated/
- Patterns in nested
- Directory Pattern Matching: Patterns with trailing slash (e.g.,
build/) now correctly match the directory itself- Previously only matched contents inside the directory
- Now triggers
filepath.SkipDirfor better performance on large repositories - Significantly improves indexing speed when ignoring
node_modules/,vendor/, etc.
0.10.0 - 2026-01-11
- Compact JSON Output: New
--compact/-cflag forgrepai searchcommand (#33)- Outputs minimal JSON without
contentfield for ~80% token savings - Requires
--jsonflag (returns error if used alone) - Recommended format for AI agents:
grepai search "query" --json --compact - All agent setup templates updated to use
--json --compactby default
- Outputs minimal JSON without
0.9.0 - 2026-01-11
- Claude Code Subagent: New
--with-subagentflag forgrepai agent-setup(#17)- Creates
.claude/agents/deep-explore.mdfor Claude Code - Provides a specialized exploration agent with grepai search and trace access
- Uses
model: inheritto match user's current model - Subagents operate in isolated context, ensuring grepai tools are available during exploration
- Creates
0.8.1 - 2026-01-11
- Simplify Claude Code MCP setup: use
claude mcp addcommand instead of manual JSON configuration
0.8.0 - 2026-01-11
- MCP Server Mode: New
grepai mcp-servecommand for Model Context Protocol integration (#18)- Exposes grepai as native MCP tools for AI agents (Claude Code, Cursor, Windsurf, etc.)
- Available tools:
grepai_search,grepai_trace_callers,grepai_trace_callees,grepai_trace_graph,grepai_index_status - Uses stdio transport for local MCP server communication
- Structured JSON responses by default
- Works automatically in subagents without explicit configuration
0.7.2 - 2026-01-11
- Sidebar Reorganization: Moved "Search Boost" and "Hybrid Search" from Configuration to Features section
- Configuration Reference: Updated full configuration reference with correct field names
- Added missing options:
version,watch.debounce_ms,trace.mode,trace.enabled_languages,trace.exclude_patterns - Fixed
scanner.ignore→ignore(root level) - Fixed
store.postgres.connection_string→dsn - Removed
store.gob.path(handled automatically)
- Added missing options:
- Trace Documentation: Added missing supported languages (C, C++, Zig, Rust) to the languages table
0.7.1 - 2026-01-11
- Agent Setup Trace Instructions: Updated
grepai agent-setupto include trace command documentation (#16)- Added "Call Graph Tracing" section with
trace callers,trace callees,trace graphexamples - All trace examples include
--jsonflag for optimal AI agent integration - Updated workflow to include trace as step 2 for understanding function relationships
- Added "Call Graph Tracing" section with
0.7.0 - 2026-01-10
- Extended Language Support for Trace: Symbol extraction now supports additional languages
- C (
.c,.h) - functions, structs, enums, typedefs - Zig (
.zig) - functions, methods (inside structs/enums), inline/export/extern functions, structs, unions, enums, error sets, opaque types, nested types - Rust (
.rs) - functions, methods, structs, enums, traits, type aliases - C++ (
.cpp,.hpp,.cc,.cxx,.hxx) - functions, methods, classes, structs, enums
- C (
- Default ignore patterns for Zig and Rust build directories:
target,.zig-cache,zig-out
0.6.0 - 2026-01-10
- Search JSON Output: New
--json/-jflag forgrepai searchcommand- Machine-readable JSON output optimized for AI agents
- Excludes internal fields (vector, hash, updated_at) to minimize token usage
- Error handling outputs JSON format when flag is used
- Closes #13
0.5.0 - 2026-01-10
- Call Graph Tracing: New
grepai tracecommand for code navigationtrace callers <symbol>- find all functions calling a symboltrace callees <symbol>- find all functions called by a symboltrace graph <symbol>- build call graph with configurable depth
- Regex-based symbol extraction (fast mode) for Go, JS/TS, Python, PHP
- Tree-sitter integration (precise mode) with build tag
treesitter - Separate symbol index stored in
.grepai/symbols.gob - JSON output for AI agent integration (
--jsonflag) - Automatic symbol indexing during
grepai watch
0.4.0 - 2026-01-10
- LM Studio Provider: New local embedding provider using LM Studio
- Supports OpenAI-compatible API format
- Configurable endpoint and model selection
- Privacy-first alternative for local embeddings
0.3.0 - 2026-01-09
- Search Boost: Configurable score multipliers based on file paths
- Penalize tests, mocks, fixtures, generated files, and docs
- Boost source directories (
/src/,/lib/,/app/) - Language-agnostic patterns, enabled by default
- Hybrid Search: Combine vector similarity with text matching
- Uses Reciprocal Rank Fusion (RRF) algorithm
- Configurable k parameter (default: 60)
- Optional, disabled by default
GetAllChunks()method to VectorStore interface for text search- Dedicated documentation pages for Search Boost and Hybrid Search
- Feature cards on docs homepage
- Searcher now accepts full SearchConfig instead of just BoostConfig
0.2.0 - 2026-01-09
- Initial release of grepai
grepai initcommand for project initializationgrepai watchcommand for real-time file indexinggrepai searchcommand for semantic code searchgrepai agent-setupcommand for AI agent integration- Ollama embedding provider (local, privacy-first)
- OpenAI embedding provider
- GOB file storage backend (default)
- PostgreSQL with pgvector storage backend
- Gitignore support
- Binary file detection and exclusion
- Configurable chunk size and overlap
- Debounced file watching
- Cross-platform support (macOS, Linux, Windows)
- Privacy-first design with local embedding option
- No telemetry or data collection
0.1.0 - 2026-01-09
- Initial public release