For Claude Code, Cursor, Codex and Antigravity on Apple Silicon
Stop polluting your coding agent's context window. Let it ask your Mac.
Repeated rounds of grep and full-file reads fill your cloud context window and push your CLAUDE.md rules out of attention. localctx answers repo questions on your Mac—finding the right file on 53.3% of held-out PR descriptions vs. 23.3% for ripgrep and cutting estimated cloud input tokens by 84.5% without uploading your code.
brew install apolloswave/tap/localctx && localctx init
Requires an M1 or newer Mac with 16 GB+ RAM on macOS 14+ · 0.85 ms zero-GPU code index · 99.5 ms warm zero-GPU repo search · 6.58 s local GPU answers (E4B) · Currently in private beta.
Benchmark methodology & confidence intervals (Held-Out Set 3 & Set 5, n = 90 + 90)
Held-Out Set 3 (measured on v4.8.0-pre (commit 0dcccf6, pre-73bddeb); 90 changes merged post-2026-09-01 across 9 unseen polyglot repos, evaluated on pre-fix parent commits fix_commit~1 from PR descriptions to locate the code a merged change describes right after git clone, 0 s setup wait): 53.3% first-try file match for localctx ask ([43.3%, 63.3%]) and 37.8% for zero-GPU localctx search ([27.8%, 47.8%], 10.0% (9/90) router abstention rate, 0 crashes) vs. 23.3% for our ripgrep active control ([14.4%, 32.2%]; paired bootstrap diff +14.4 pp for search vs. ripgrep, [+3.3 pp, +25.6 pp], McNemar p = 0.0241).
On 45 PR descriptions without code identifiers: 44.4% (localctx ask E4B) and 33.3% (localctx search) vs 4.4% (ripgrep) first-try file match — v4.8.0-pre (commit 0dcccf6, pre-73bddeb). Single-shot cloud input tokens: −85.7% (localctx search, 1,016 vs 7,086) and −84.5% (localctx ask E4B, 1,101 vs 7,086) estimated cloud input tokens per query across 90 held-out merged PRs across 9 open-source repositories — v4.8.0-pre (commit 0dcccf6, pre-73bddeb), freeze SHA a496b98edc337d95, while re-attaching matching CLAUDE.md and AGENTS.md rules at the edit site.
Held-Out Set 5 & v4.9 updates: First-try file match on 90 held-out merged PRs across 9 unseen repositories (Held-Out Set 5, freeze SHA 5871d7ab0e253504): 38.9% for zero-GPU localctx search (95% CI 28.9–48.9%) vs 28.9% for ripgrep (95% CI 20.0–38.9%, +10.0 pp); top-3 file match 65.6% vs 53.3% (+12.2 pp, McNemar p = 0.0266); on 45 PR descriptions without code identifiers, 37.8% vs 20.0% (+17.8 pp, McNemar p = 0.0386); cutting estimated cloud input tokens by −83.1% (1,070 vs 6,322). Warm zero-GPU localctx search answers in 99.5 ms median on Held-Out Set 5 (down from 183.7 ms cold, 0.10 s warm vs 0.18 s cold across 90 queries) and 65.5 ms median on CLI flag queries (595.5 ms cold to 225.3 ms warm across 25 runs on 10k-file mastodon/mastodon, 0 output divergences). Independent symbol navigation audit against Universal Ctags across 10 repositories in Go, Python, Ruby, Rust, and TypeScript (out-of-sample seed 43): 300/300 (100.0%) symbol definition recall and 200/200 (100.0%) symbol reference recall, with 249/250 (99.6%) definition precision and 249/250 (99.6%) reference precision (seed 44).
Zero-GPU structural CLI tools (defs/impact/route/schema/context/review) answer in 0.85 ms warm p50 (1.63 ms warm p95, 3.46 ms cold p95, 22.5 ms cold max across 750 runs; 0 MB GPU memory, v4.7.0-beta.1). Warm GPU answers on a 568K-token Rails repo average 6.58 s p50 (E4B) to 8.03 s p50 (26B), 4.36 s p50 (26B) with 50 uncommitted file edits, or 1.83 s/question in warm batch mode.
The problem
Grep loops pollute your context window—and dilute scoped repo conventions.
Ask an agent to trace a change across a Rails, Rust, Go, Python or TypeScript monorepo and it burns multiple rounds of grep and full-file reads. Every false lead stays in the cloud prompt, gets re-billed on every turn, triggers early context compaction, and pushes your Turn-0 CLAUDE.md and AGENTS.md rules out of attention.
> locate the code described by a merged change rg -n "close" app/ # 214 matches read app/models/card.rb rg -n "Closure" app/ read app/models/card/closeable.rb read app/models/concerns/eventable.rb rg -n "notify" app/jobs read app/jobs/notify_recipients_job.rb ... 6,955 est. cloud input tokens / query (Set 2 held-out mean) · scoped CLAUDE.md rules not re-attached
> locate the code described by a merged change localctx ask "closing a card not notifying watchers" app/models/card/closeable.rb:L18-L34 close! records a Closure, then track_event app/models/concerns/eventable.rb:L40-L57 event callback enqueues notifications app/jobs/notify_recipients_job.rb:L6-L22 CLAUDE.md:L42-L47 [rule] event jobs must stay idempotent ... 850 est. cloud input tokens / query (Set 2 held-out mean, 8.2× fewer vs. ripgrep)
Single-shot held-out averages: 1,101 est. vs. 7,086 est. tokens/query on Held-Out Set 3 (n = 90); 850 est. vs. 6,955 est. on Held-Out Set 2 (n = 60).
Single-shot token benchmark provenance (Set 3 & v4.7 180-PR)
−85.7% (localctx search, 1,016 vs 7,086) and −84.5% (localctx ask E4B, 1,101 vs 7,086) estimated cloud input tokens per query across 90 held-out merged PRs across 9 open-source repositories — v4.8.0-pre (commit 0dcccf6, pre-73bddeb), freeze SHA a496b98edc337d95. In prior v4.7 evaluations across 60 unseen held-out merged PRs (Set 2, c2849dad01162079) and 120 dev PRs (Set 1, 1140fef86dc2db02) across six open-source repositories right after git clone (0 s setup): estimated cloud input tokens per query averaged 850 est. for localctx ask and 1,059 est. for zero-GPU localctx search vs. 6,955 est. for ripgrep on unseen Set 2 (8.2× and 6.6× fewer tokens; 6,105 est. tokens saved per ask), and 881 est. vs. 6,876 est. across all 180 PRs (7.8× fewer).
How it works
Cost-ordered local tools your agent calls automatically.
-
Answer structure in 0.85 ms warm p50 (0 GPU)
Our compiled 12-language syntax parser builds a structural code index right after
git clone(0 s cold setup) that traces definitions (defs), references (refs), 3-hop caller blast radius (impact), covering test commands (tests), Rails routes (route), ActiveRecord schemas (schema), stack traces (triage) and pre-commit diffs (review) with zero GPU memory. -
Synthesize cross-file flow on Apple Metal
When a bug has no symbol names yet, Gemma 4 runs natively on your Mac's GPU via our compiled Apple Silicon arm64 binary (zero Python), reading 50 uncommitted file edits in 4.36 s p50 (26B) and returning verbatim
path:Lx-Lysource slices. -
Make existing CLAUDE.md & AGENTS.md stick
Zero migration: localctx indexes your existing
CLAUDE.md, nestedAGENTS.md,.cursor/rules/*.mdcglobs andremembernotes in place—re-injecting matching rules (≤ 120 tokens) right when the agent touches that file and flagging broken rule paths inlocalctx review.
localctx init configures Claude Code, Cursor, Codex and Antigravity via MCP stdio and cost-ordered skill routing so agents call zero-GPU structural tools before escalating to GPU synthesis. Existing configs are backed up to .bak-localctx first.
Results · Held-Out Set 3 (n = 90)
Evaluated right after git clone across 9 unseen polyglot repos.
Each tool tries to locate the code a merged change describes from its PR description on the pre-fix parent commit (fix_commit~1, 0 s setup wait): 45 natural descriptions and 45 symptom_only PR descriptions without code identifiers.
Corpus repositories, freeze hash & paired statistical tests
Part 1A — Frozen Held-Out Set 3 (a496b98edc337d95, measured on v4.8.0-pre (commit 0dcccf6, pre-73bddeb)) across astral-sh/ruff, astral-sh/uv, caddyserver/caddy, cli/cli, colinhacks/zod, honojs/hono, pydantic/pydantic, rubocop/rubocop, tokio-rs/tokio (90/90 git-ancestor verified). Zero-GPU localctx search beats ripgrep on first-try file match by +14.4 pts (95% CI +3.3 to +25.6, McNemar p = 0.024, n = 90) — v4.8.0-pre (commit 0dcccf6, pre-73bddeb); localctx ask vs. localctx search: +15.6 pp ([+8.9 pp, +23.3 pp], McNemar p = 0.0001).
| Tool & operating mode (Held-Out Set 3, n = 90 pre-fix PR descriptions, v4.8.0-pre (commit 0dcccf6, pre-73bddeb)) | Right file on first try Overall (n=90) |
Symptom-only (n = 45) Identifiers stripped |
Multi-file coverage (top 3 / top 5) | Hunk overlap (top-3 files) | Router abstention / crashes | Answer p50 | Est. tokens sent to Claude / q |
|---|---|---|---|---|---|---|---|
| localctx ask · E4B (4.24 GB, 0 s setup, v4.8.0-pre (commit 0dcccf6, pre-73bddeb)) | 53.3% [43.3%, 63.3%] |
44.4% | 63.1% / 68.0% | 22.0% | 0.0% (0/90) / 0 crashes | 11.32 s | 1,101 est. |
| localctx search (12-language code index, 0 GPU, v4.8.0-pre (commit 0dcccf6, pre-73bddeb)) | 37.8% [27.8%, 47.8%] |
33.3% | 54.4% / 61.7% | 23.0% | 10.0% (9/90) / 0 crashes | 0.30 s | 1,016 est. |
| Active control — ripgrep (rg -n + snippet read) | 23.3% [14.4%, 32.2%] |
4.4% | 47.4% / 57.6% | 10.6% | 0.0% (0/90) / 0 crashes | 0.10 s (96.6 ms) | 7,086 est. |
Held-Out Set 5 & 5-language symbol audit (n = 90 unseen PRs across 9 new repos, v4.9)
Single-shot zero-GPU localctx search evaluation across 9 additional unseen polyglot repositories (lobsters/lobsters, mastodon/mastodon, gofiber/fiber, junegunn/fzf, typst/typst, helix-editor/helix, trpc/trpc, TanStack/query, Textualize/textual) at fix_commit~1 (0 s setup wait), paired with an independent Universal Ctags symbol recall and precision audit.
Held-Out Set 5 freeze hash, warm search cache & Universal Ctags audit
Part 1B — First-try file match on 90 held-out merged PRs across 9 unseen repositories (Held-Out Set 5, freeze SHA 5871d7ab0e253504): 38.9% for zero-GPU localctx search (95% CI 28.9–48.9%) vs 28.9% for ripgrep (95% CI 20.0–38.9%, +10.0 pp); top-3 file match 65.6% vs 53.3% (+12.2 pp, McNemar p = 0.0266); on 45 PR descriptions without code identifiers, 37.8% vs 20.0% (+17.8 pp, McNemar p = 0.0386); cutting estimated cloud input tokens by −83.1% (1,070 vs 6,322).
Warm zero-GPU localctx search answers in 99.5 ms median on Held-Out Set 5 (down from 183.7 ms cold, 0.10 s warm vs 0.18 s cold across 90 queries) and 65.5 ms median on CLI flag queries (595.5 ms cold to 225.3 ms warm across 25 runs on 10k-file mastodon/mastodon, 0 output divergences).
Independent symbol navigation audit against Universal Ctags across 10 repositories in Go, Python, Ruby, Rust, and TypeScript (out-of-sample seed 43): 300/300 (100.0%) symbol definition recall and 200/200 (100.0%) symbol reference recall, with 249/250 (99.6%) definition precision and 249/250 (99.6%) reference precision (seed 44).
| Tool & operating mode (Held-Out Set 5, n = 90 pre-fix PR descriptions, v4.9) | Right file on first try Overall (n=90) |
Right file in top 3 McNemar p = 0.0266 |
Symptom-only (n = 45) McNemar p = 0.0386 |
Multi-file coverage (top 3 / top 5) | Hunk overlap (top-3 files) | Router abstention / crashes | Answer p50 (cold / warm) | Est. tokens sent to Claude / q |
|---|---|---|---|---|---|---|---|---|
| localctx search (12-language code index, 0 GPU, v4.9) | 38.9% [28.9%, 48.9%] |
65.6% [55.6%, 75.6%] |
37.8% | 58.6% / 67.4% | 28.5% | 3.3% (3/90) / 0 crashes | 0.18 s cold / 0.10 s warm (99.5 ms) | 1,070 est. (−83.1%) |
| Active control — ripgrep (rg -n + snippet read) | 28.9% [20.0%, 38.9%] |
53.3% [43.3%, 63.3%] |
20.0% | 46.9% / 55.2% | 16.9% | 1.1% (1/90) / 0 crashes | 0.07 s (72.5 ms) | 6,322 est. |
Secondary v4.7 benchmark across 180 merged upstream PRs (60 unseen Set 2 + 120 Set 1 dev)
Prior cold evaluation right after git clone (0 s setup wait) comparing localctx against ripgrep, sense 1.14.2 (local embeddings), and aider repo map across six open-source repositories.
v4.7 180-PR corpus & split provenance
Evaluated at fix_commit~1 across 60 unseen held-out Set 2 PRs (c2849dad01162079, seed = 20261101, never inspected during v4.7 tuning) and 120 Set 1 dev PRs (1140fef86dc2db02, used to diagnose v4.6 failure modes during v4.7 development; 90 with code symbol names, 90 symptom-only) across rails/rails, discourse/discourse, vercel/next.js, fastapi/fastapi, tokio-rs/axum and cloudflare/cloudflared on MacBook Pro M1 Max (32 GB).
| Tool & operating mode (n = 180 upstream PRs, v4.7) | Right file on first try Set 2 held-out (n=60) / Set 1 dev (n=120) / Combined (n=180) |
Multi-file coverage (top 3 / top 5) | Hunk overlap (top-3 files) | Vague descriptions (no code names) | Answer p50 | Setup wait after clone | Est. tokens sent to Claude / q Set 2 held-out / Combined 180 |
|---|---|---|---|---|---|---|---|
| localctx ask · E4B (4.24 GB, 0 s setup, v4.7) | 40.0% / 50.0% / 46.7% | 56.0% / 64.7% | 23.8% (Set 2: 22.9%) | 34.4% | 10.21 s | 0.0 s | 850 est. / 881 est. |
| localctx search (12-language code index, 0 GPU, v4.7) | 41.7% / 45.8% / 44.4% | 56.2% / 67.0% | 22.8% (Set 2: 20.2%) | 37.8% | 0.42 s | 0.0 s | 1,059 est. / 1,063 est. |
| Active control — ripgrep (rg -n + snippet read) | 28.3% / 36.7% / 33.9% | 47.2% / 55.9% | 17.0% (Set 2: 14.8%) | 18.9% | 0.07 s | 0.0 s | 6,955 est. / 6,876 est. |
| Embedding control — sense 1.14.2 (local embeddings + SQLite) | 35.0% / 40.0% / 38.3% | 48.7% / 56.5% | 23.7% (Set 2: 18.3%) | 42.2% | 0.18 s | 477.2 s | 906 est. / 911 est. |
| aider repo map (8k cross-file symbol graph) | 20.0% / 20.0% / 20.0% | 26.6% / 32.8% | 4.9% (Set 2: 4.0%) | 20.0% | 0.01 s | 0.0 s | 9,490 est. / 9,496 est. |
When active control (ripgrep) wins — don't use localctx:
- Know the exact unique class, method, or constant name? Use
ripgrep(37.7 ms p50 on Agent-Audit 50 / 96.6 ms p50 on Set 3, 0 index build). - Already built a local vector index? Once its 477.2 s 6-repo index build finishes,
sense 1.14.2leads top-3 hunk overlap on Agent-Audit 50 (85.0% vs. 77.5%ask/ 72.5%search) and leads v4.7 Set 1/2 symptom-only PRs (42.2% vs. 37.8%). - Cloning cold or working from a symptom without burning your cloud token budget?
localctxleads first-try file match on Set 3 (53.3%ask/ 37.8%searchvs. 23.3%ripgrep) while cutting estimated cloud input tokens to 1,016–1,101 est. vs. 7,086 est.
Full per-repository loss & slice disclosures
Disclosed losses: ripgrep is faster on raw p50 latency (37.7 ms vs 459.0 ms search / 11202.0 ms ask on Agent Audit 50, and 96.64 ms vs 300.5 ms search / 11323.3 ms ask on Set 3); sense beats localctx on top-3 line-hunk overlap in Agent Audit 50 (85.0% vs 77.5% ask / 72.5% search on 40 positive probes); on Set 3 rubocop/rubocop, ripgrep beats zero-GPU localctx search on first-try file match (30.0% vs 20.0%, while localctx ask E4B reaches 50.0%); and on Set 3 top-3 line-hunk overlap, ripgrep beats localctx ask on astral-sh/uv (5.28% vs 3.33%), cli/cli (20.0% vs 18.33%), and rubocop/rubocop (20.0% vs 13.33%).
On Held-Out Set 5 per-repo slices (n = 10 PRs per repo, v4.9), ripgrep beats zero-GPU localctx search on lobsters/lobsters first-try file match (20.0% vs. 10.0%), on mastodon/mastodon first-try file match (40.0% vs. 30.0%), and on helix-editor/helix top-3 hunk overlap (26.7% vs. 21.4%), and remains faster on raw median latency (72.5 ms vs. 99.5 ms warm / 183.7 ms cold).
On Set 3 per-repo slices (n = 10 PRs per repo), ripgrep beats zero-GPU localctx search on rubocop/rubocop first-try file match (30.0% vs. 20.0%, while localctx ask scores 50.0%). Across v4.7 180-PR per-repository slices (n = 30 PRs per repo), ripgrep leads fastapi/fastapi top-5 file hit (90.0% vs. 86.7% localctx search) and top-5 file coverage (83.3% vs. 81.7%), edges vercel/next.js hunk overlap (9.5% vs. 9.0%), beats zero-GPU localctx search on rails/rails first-try file hit (40.0% vs. 36.7%, while localctx ask scores 43.3%) and on discourse/discourse hunk overlap (17.1% vs. 15.8%, while localctx ask scores 29.1%), and leads the 10-PR unseen Set 2 discourse/discourse slice on first-try file hit (50.0% vs. 40.0%).
On Agent-Audit 50 (measured on v4.8.0-pre (commit 0dcccf6, pre-73bddeb); n = 40 positive code-question probes across 5 repos), localctx ask leads first-try file match at 85.0% vs. 77.5% sense. Across v4.7 Set 1/2, sense 1.14.2 leads Set 2 symptom-only (50.0% vs. 46.7%), rails/rails (46.7% vs. 43.3% first-try file match and 38.9% vs. 36.9% hunk overlap), and cloudflare/cloudflared (40.0% vs. 30.0% first-try file match and 31.9% vs. 27.6% hunk overlap), and edges tokio-rs/axum hunk overlap (22.0% vs. 20.5%). On Held-Out Set 3 (measured on v4.8.0-pre (commit 0dcccf6, pre-73bddeb); n = 90), symptom_only first-try file match is 44.4% and 33.3% vs. 4.4%; on unseen Set 2 (n = 60), first-try file match is 41.7% (search) and 40.0% (ask) vs. 35.0% (sense) and 28.3% (ripgrep) at 850 est. tokens (8.2× fewer than ripgrep's 6,955 est.; 881 est. vs. 6,876 est. across all 180 PRs).
Part 2 — Internal warm-cache speed check on basecamp/fizzy (43 self-authored dev-set tasks, v4.6 / v4.7)
Internal regression and warm repeat-query speed check inside a single warm-indexed Rails app (basecamp/fizzy, 1,017 files, 568K-token codebase of Ruby, ERB, JavaScript and CSS) plus 10 polyglot onboarding probes. Because we authored these 43 tasks while building v4.0–v4.6, treat the accuracy rows below as internal engineering checks rather than unseen held-out external benchmarks. Hardware: MacBook Pro M1 Max, 32 GB (zero Python).
| Self-authored dev-set slice (warm session) | Compact model Gemma 4 E4B · 4.24 GB RAM |
Large model Gemma 4 26B-A4B · 14.47 GB RAM |
|---|---|---|
| Trace a behavior across several files (fizzy) | 20 / 20 | 20 / 20 |
| Follow a view into its JavaScript controller and Rails endpoint (fizzy) | 16 / 16 | 16 / 16 |
| Find the cause of a bug described without code names (fizzy) | 9 / 10 | 10 / 10 |
| Refuse to cite deleted uncommitted code (fizzy) | 5 / 5 | 5 / 5 |
| Answer on 10 unfamiliar repos in 10 languages, zero tuning | 21 / 21 | 21 / 21 |
| basecamp/fizzy 43-probe dev-set (v4.6 / v4.7, self-authored) | 42 / 43 (98%) | 43 / 43 (100%) |
| Local answer time, warm p50 on 568K-token repo (v4.7, M1 Max 32 GB) | 6.58 s | 8.03 s |
| Speed with 50 uncommitted file edits / 10-question warm batch per query (v4.7) | not measured / not measured | 4.36 s / 1.83 s |
Read all 16 dated benchmark reports across 14 releases (v0.0 Apr 10 → v4.9 Nov 4) →
Apple Silicon leaderboard
How fast is your Mac?
Run one command. It benchmarks your machine on a fixed open-source fixture, not on your code, and compares medians across Apple Silicon chips.
localctx bench --share
| Chip | RAM | Machines | Decode tok/s | Prefill tok/s | Answer p50 | Files parsed/s |
|---|---|---|---|---|---|---|
| Loading… | ||||||
PostgreSQL exact medians (PERCENTILE_CONT 0.5, best of last 5 runs per machine) per chip and memory size. Submissions contain hardware model and timings only—never code, paths or questions.
See what you saved
localctx stats separates literal local slice tokens read on your Mac from an active-control estimate of cloud input tokens avoided vs. ripgrep (6,105 est. tok/ask saved on our unseen Set 2 held-out benchmark: 6,955 est. for ripgrep minus 850 est. for localctx ask). Add --share to generate a summary card. The card never includes code or private repo names.
$ localctx stats
Local context read : 10.68M slice tokens processed on-device across 212 asks
Est. cloud avoided : 1.29M input tokens ($3.88 est. @ $3.00/MTok, based on 6,105 tok/ask saved vs. ripgrep active control)
Model : Gemma 4 E4B · Apple M2 Pro · 32 GB
Estimate = 212 asks × 6,105 est. tok/ask saved vs. ripgrep active control (Set 2 held-out benchmark).
Privacy
Runs on your Mac. Sends nothing by default.
Indexing, the model and every answer stay on the machine. Telemetry is off by default; if you opt in during activation, only daily counts and latency percentiles are sent—never source code, file paths, prompts or answers.
Secrets stay out of answers: localctx respects .gitignore, blocks traversal outside the repository root, skips .env*, private keys and credential files, and redacts token patterns before output.
Zero source code, prompts, or file contents leave your Mac (0 outbound network calls on Free tier after the one-time huggingface.co model download on init; paid license lease checks and explicit opt-in --share / update / feedback commands send only metadata, verified across 5 CLI source modules). Explicit licensing and support commands include activate, login, logout, license --refresh, feedback, and update, plus optional opt-in daily aggregate telemetry (--telemetry, off by default) and explicit --share benchmark runs. Paid licenses include a 14-day offline grace window beyond the 7-day lease. Free-tier users without login make zero outbound calls after model download.
Pricing
Free for small repos. Pro for full monorepos.
Keep thousands of tokens of grep noise out of your coding agent's working context—whether you pay per API token or run on a flat-rate plan. Every paid plan includes a 30-day refund.
Free
For small projects and evaluating on your Mac.
- 1 active repo slot (24h switch cooldown), up to 65,536 tokens indexed (2 shards × 32,768 tokens)
- On larger repositories, the top 65,536 tokens from the cross-file symbol graph are indexed
- Compact Gemma 4 E4B model (4.24 GB RAM on 16 GB+ Macs)
- Zero-GPU 12-language structural MCP tools (
defs,refs,impact,schema,route) and cited answers - Works with Claude Code, Cursor, Codex, Antigravity
Pro
Or $210 / year (2 months free). Cancel any time. 30-day refund.
- Unlimited repositories and local NVMe cache shards (tested on 568K+ token monorepos)
- Pre-baked persistent local cache shards & shared prompt prefix cache (1.83 s/question batch answers)
- Large Gemma 4 26B-A4B MoE model (14.47 GB RAM on 32 GB+ Macs)
- Automatic git-hook sync on commit
- Authenticated localhost OpenAI-compatible server
- Up to 2 Macs per license (laptop + desktop, 14-day offline grace)
Founding
Locked at $150/yr · Window closes Nov 23 (19 days left) · Capped at 1,200.
- Everything in Pro, locked at $150/yr for as long as active ($60/yr below Pro)
- Capped at first 1,200 members (21-day enrollment window closes Nov 23, 2026)
- Up to 3 Macs per license (early-backer perk), 30-day refund
- Direct engineering feedback channel
- Optional name credit in release notes
Team
Minimum 3 seats ($420/seat/yr annual) · Shared CI-built local cache shards & team memory rules · 1-click seat revocation & single company invoice · 3 Macs per seat.
Referrals: Give 1 free month ($21 credit), get 1 free month ($21 credit) on every paid Pro or Founding referral. Questions or team pilots: localctx@apolloswave.com. Maintain a popular open-source project (1,000+ GitHub stars, non-fork, active commits in the last 90 days)? Apply for a free 12-month Pro license (capped at the first 200 approvals).
Questions
Before you install
Which Macs does it run on?
Any Apple Silicon Mac (M1 or newer) running macOS 14 Sonoma or newer. In v4.7 (native Apple Silicon arm64 binary, zero Python), the compact Gemma 4 E4B model uses 4.24 GB of unified memory and is the default on 16 and 24 GB machines. The large 26B-A4B model uses 14.47 GB and requires 32 GB or more. Zero-GPU 12-language structural MCP tools (defs, refs, impact, schema, route) use 0 GB of GPU memory. Intel Macs, Linux and Windows are not supported.
How reliable are the file and line citations?
Every answer attaches verbatim source lines from disk so both you and your coding agent can verify before editing, and in all 5/5 test cases, deleted uncommitted lines were not cited.
- Held-Out Set 3 (n = 90, 0 s setup): 53.3% first-try file match for
localctx askand 37.8% for zero-GPUlocalctx searchvs. 23.3% forripgrep. - Held-Out Set 5 (n = 90, v4.9) & 5-language symbol audit: 38.9% first-try file match vs. 28.9% for
ripgrep(65.6% vs. 53.3% in top 3,p = 0.0266; 37.8% vs. 20.0% on symptom-only PRs,p = 0.0386). Independent symbol navigation audit against Universal Ctags across 10 repositories in Go, Python, Ruby, Rust, and TypeScript (out-of-sample seed 43): 300/300 (100.0%) symbol definition recall and 200/200 (100.0%) symbol reference recall, with 249/250 (99.6%) definition precision and 249/250 (99.6%) reference precision (seed 44). - Held-Out Set 2 (n = 60) & Combined 180-PR (v4.7): 41.7% (
search) and 40.0% (ask) vs. 28.3% (ripgrep) on Set 2 (46.7% / 44.4% vs. 33.9% across all 180 PRs), cutting estimated cloud tokens by 7.8×–8.2× (850 est. vs. 6,955 est. on Set 2; 881 est. vs. 6,876 est. on all 180). - Internal warm-cache dev set (
basecamp/fizzy, 43 probes): 42 / 43 (98%) with E4B and 43 / 43 (100%) with 26B-A4B.
How is this different from Aider's repo map or cloud code indexing?
A static repo map lists symbol names, so the cloud agent still reads full files to understand control flow. Cloud vector indexing uploads your repository to third-party servers. localctx runs a local GPU model over your repository on-device and returns cited file and line-range slices, keeping source code on your Mac.
How long does setup take?
About five minutes, mostly the one-time Hugging Face model download (around 4.2 GB for the compact 4-bit model). Zero-GPU structural CLI tools (defs/impact/route/schema/context/review) answer in 0.85 ms warm p50 (1.63 ms warm p95, 3.46 ms cold p95, 22.5 ms cold max across 750 runs; 0 MB GPU memory, v4.7.0-beta.1).
Which model does it use and under what license?
Google's open Gemma 4 models (E4B and 26B-A4B), quantized for Apple Metal via MLX and downloaded directly from Hugging Face during localctx init under the Google Gemma Terms of Use.
What happens if I cancel Pro or go offline?
Paid licenses refresh a signed 7-day lease in the background and include a 14-day offline grace window (21 days total offline operation). If you cancel Pro or Founding, your CLI drops back cleanly to the Free tier (1 repo slot with a 24-hour switch cooldown, 65,536 tokens, compact model) at the end of your billing period. Nothing on your disk is deleted. Founding subscriptions lock in the $150/yr rate for as long as your annual subscription remains active.