One call.
not ten reads.
Gortex indexes your repository into an in-memory knowledge graph and serves it to your coding
agent over MCP, HTTP, and a web UI. smart_context replaces 5–10 file reads, cutting token usage by ~94%. 256
languages, 72 MCP tools, live editor-buffer overlays, dataflow,
clone detection, and a 20-server LSP bridge.
Built for 15 AI coding
agents — one binary, zero services.
Stop paying your agent to re-read the same files.
A typical "make an edit" loop in Claude Code or Cursor does half a dozen Reads, a Grep,
then
maybe a Glob. Gortex answers the same question in one graph query — with callers, callees, imports,
blast
radius, and interface implementors attached.
- Read internal/watcher/watch.go (412 lines)
- Read internal/graph/patch.go (289 lines)
- Read internal/graph/types.go (603 lines)
- Grep "OnFileChange" across workspace
- Read 4 more files to resolve callers
- Guess at the interface it satisfies
- 7 symbols · 3 files · signatures + callers
- interface satisfied: graph.Patcher
- blast radius: 4 symbols, 2 tests
- no scan, no guessing, no re-reads
- live-synced via fsnotify watcher
- Δ −94.0% vs baseline
A graph, a server, a daemon, and a hook — in one static binary.
Zero external dependencies. Everything runs in-process, in memory, on your laptop. Sigstore-signed releases, SLSA Level 3 build provenance.
Files, symbols, imports, calls, fields, decorators, generics, error contracts, modules (npm · pypi · cargo · maven · go), SQL tables, channels, goroutines, flags, config keys, log/metric/pub-sub events, TODOs, licenses, owners — plus K8s resources, Kustomize overlays, Dockerfile images, dbt/SQLMesh models. One queryable structure with Tarjan SCC, Louvain communities, blast radius.
Three-tier extraction. ~30 bespoke tree-sitter (Go, TS, Python, Rust, Java, C#, Kotlin, Swift, C, C++, Ruby, Elixir, OCaml, …) for deep resolution, ~60 regex for niche/legacy (ABAP, COBOL, Verse, AL, AutoHotkey), ~165 forest-backed signature-only (Vue, Svelte, GraphQL, Prisma, Typst, SystemVerilog, Cedar, TLA+, …) — one graph, one query surface.
Full surface: smart_context, get_edit_plan, verify_change, analyze (28 kinds — dead code, hotspots, cycles, routes, models, components, k8s_resources, pubsub, dbt_models, cross_repo, …), find_clones, search_ast, flow_between, taint_paths, scaffold, rename_symbol, edit_file + 16 resources + 3 prompts.
Shadow-graph sessions for unsaved buffers. overlay_register + overlay_push stages an editor buffer; every subsequent tool call reads through a per-request view layered on the immutable base graph. compare_with_overlay returns the base↔overlay delta. MCP-session-bound lifecycle; idle TTL fail-safe; drift detection via git-blob SHA.
value_flow / arg_of / returns_to edges built at index time. flow_between returns ranked dataflow paths between two symbol IDs; taint_paths runs pattern-driven source→sink sweeps for security audits — without ever loading a sandbox.
Every substantial function body reduced to a 64-slot token-normalised MinHash signature at index time; LSH banding + Jaccard threshold emits symmetric similar_to edges. find_clones {dead_only: true} yields the "dead duplicates of live code" diagnostic.
Cross-language tree-sitter S-expression search. Bundled detectors: sql-string-concat, weak-crypto, hardcoded-secret, panic-in-library, goroutine-without-recover, java-string-equality, … Filter by fan-in of the enclosing function to keep audits on the load-bearing parts of the repo.
Wired to gopls, tsserver, pyright, rust-analyzer, clangd, jdtls, kotlin-language-server, omnisharp, ruby-lsp, phpactor, lua-language-server, sourcekit-lsp, haskell-language-server, elixir-ls, ocamllsp, zls, terraform-ls, yaml-ls, json-ls, bash-ls. subscribe_diagnostics pushes deltas over MCP; get_code_actions + apply_code_action + fix_all_in_file apply LSP-supplied fixes atomically.
Versioned /v1/* JSON API on :4747 exposing all MCP tools, plus /v1/graph (force-directed dump), /v1/events (SSE graph-change stream), and the /v1/overlay/* editor-overlay surface. Localhost bind by default; bearer-token auth for non-localhost binds. Powers IDE plugins, CI hooks, and the Next.js web UI at gortexhq/web.
One process, one graph, every editor window. Live fsnotify on every tracked repo, per-session workspace isolation, multi-server roster (route to additional local sockets or remote HTTPS servers). launchd/systemd auto-start at login — no sudo. Parallel warmup; ~200ms incremental snapshot restore vs 3-5s full re-index.
Round-trippable GCX1 compact text on 17 list-shaped tools; auto-served to known clients. Median −27.4% tiktoken savings (best case −38.3%). TOON fallback for GCX-blind clients (~10–15% smaller than JSON). compress_bodies elides function bodies on source reads.
Hybrid BM25 + vector with RRF fusion; pluggable 11-signal rerank pipeline. Hugot bundled (pure-Go ONNX, MiniLM-L6-v2 auto-downloaded). Optional ask MCP tool + search_symbols assist backed by local llama.cpp / Anthropic / OpenAI / Ollama. First-class gortex eval (recall, embedders, GCX1 tokens, SWE-bench): R@1 42.3% · R@5 56.4% · R@20 69.9%.
Index. Serve. Watch.
In-process.
No database to run. No container to orchestrate. One binary, one graph, two ports — and a Unix-socket daemon when you want to share it across editor windows.
gortex binary ── single static · ~20MB · CGO-on │ ├─ CLI (cobra) ────────────────────┐ ├─ MCP Server (stdio + sse) ───────┤ ├─ HTTP Server (:4747 /v1/*) ──────┤ ◀── web UI · IDE plugins · CI ├─ Overlay Sessions (shadow view) ─┤ ◀── unsaved editor buffers, MCP-session bound └─ Daemon (~/.gortex/server.sock) ─┤ ◀── shared graph for every editor window ▼ ┌──────────────────────────┐ │ In-memory graph │ │ nodes · edges · index │ │ on-disk snapshot │ └──────────────▲───────────┘ │ ┌─ Indexer ──► tree-sitter ◀── 256 langs ─┤ │ + regex + forest tiers │ ├─ Resolver ──► LSP · go/types · SCIP ─────┤ tier-aware: lsp_resolved → ast_resolved → ast_inferred → text_matched │ + cross-repo evidence gate │ ├─ LSP Bridge ► 20 servers · diagnostics ──┤ subscribe_diagnostics · code actions · fix_all_in_file ├─ Watcher ───► fsnotify · debounced ──────┤ per-file patches └─ Clones ───► MinHash + LSH ──────────────┘ similar_to edges · dead-dup diagnostic
Speaks what your repo speaks.
Three-tier extraction: bespoke tree-sitter for deep resolution, regex for niche/legacy,
forest-backed signature-only for the long tail. IMPLEMENTS inference for Go,
TypeScript, Java, Rust, C#, Scala, Swift, and Protobuf — no extends keyword required.
Running in three commands.
macOS + Linux · amd64 + arm64. The installer detects your OS, downloads the signed release
tarball, verifies SHA256 (and cosign if installed), drops the binary in $HOME/.local/bin. No silent sudo.
Re-runs upgrade in place.
$ curl -fsSL https://get.gortex.dev | sh # or: brew · .deb · .rpm · .apk # or: go install github.com/zzet/gortex/cmd/gortex@latest
One-time machine setup: gortex install writes user-level MCP wiring + skills + slash commands at ~/.claude/ and ~/.gemini/.
$ cd ~/projects/myapp $ gortex init --analyze # writes .mcp.json, CLAUDE.md, # per-community SKILL.md, hooks
Auto-detects every agent in scope and writes a community-routing block to each — CLAUDE.md, AGENTS.md, .windsurfrules, GEMINI.md, .cursor/rules.
$ gortex daemon start --detach # or: gortex mcp --watch (per-repo) # or: gortex server --index .
Daemon runs in the background, supervises the graph for every tracked repo. Auto-start at login: gortex daemon install-service.
Every coding agent
you already run.
Gortex is MCP-native. If your agent speaks the Model Context Protocol, it speaks Gortex. gortex init auto-detects each agent in scope and writes the right config.
Teach your agent
what your code knows.
Source-available under a PolyForm-based license — free for individuals, OSS projects, small businesses (<50 staff / <$500K rev), nonprofits, and education. Zero dependencies. One static binary. Sigstore-signed, SLSA-3 build provenance, OpenSSF Scorecard tracked, VirusTotal 0/91.