InLine Ghosting
Private, context-aware inline code completion for VS Code using AI tools you already have.

InLine Ghosting provides inline suggestions through Claude Code, Codex, Gemini, a custom
command, or a local Ollama model. It has no account, API key field, or remote telemetry.
Why it is different
- Local repository memory: compact symbols, imports, diagnostics and relationships are
stored under VS Code extension storage and reused across restarts and AI backends.
- Cross-model context: every backend receives the same model-neutral context packet.
Switching Claude to Codex does not discard indexed project understanding.
- Minimum model usage: cache and continuation reuse run before debounce; compatible typed
characters reuse an existing completion without inference.
- Bounded resources: caches, traces and repository memory have hard limits. Indexing is
incremental on file open/save and never scans the repository while typing.
- Local fast path: Ollama uses its HTTP API, keeps the model resident, limits generation,
and cancels obsolete work.
- Honest analytics: requests, displays, acceptances, avoided inference, tokens and latency
are separated by session, day, week and language.
Install
Install the VSIX from Extensions → … → Install from VSIX, or install the Marketplace
release when available. Reload VS Code after installation.
At least one backend is required:
# Authenticated cloud CLI example
npm install -g @anthropic-ai/claude-code
claude
# Local/private example
ollama pull qwen2.5-coder
Open the Control Center with Ctrl+Alt+G, select the backend and model, then run Test
connection. Automatic suggestions are off by default; manual completion always remains
available.
Shortcuts
| Action |
Windows/Linux |
macOS |
| Suggest now |
Ctrl+Alt+Space |
Cmd+Alt+Space |
| Toggle automatic suggestions |
Ctrl+Alt+O |
Cmd+Alt+O |
| Open Control Center |
Ctrl+Alt+G |
Cmd+Alt+G |
| Accept suggestion |
Tab |
Tab |
Recommended modes
Lowest token/quota use
Keep automatic suggestions off and invoke cloud completion manually. Defaults send 20 prefix
lines, 5 suffix lines, single-line output, and recycle Claude's conversation after one turn.
Fast and private
Select Ollama with a small code model. InLine Ghosting calls http://127.0.0.1:11434, keeps
the model resident for 15 minutes by default, and cancels obsolete automatic requests.
Performance depends on model, CPU/GPU, available memory and repository.
Context and local memory
On file open/save the extension asks the installed language service for document symbols and
stores a compact per-file record. It extracts common import forms across JavaScript/
TypeScript, Python, Rust and C-family languages. At completion time it combines:
- current unsaved prefix and suffix;
- enclosing symbol, type hover and nearby diagnostics;
- imported or identifier-related symbols from local memory.
Context assembly has a 50 ms default deadline and a 2,400-character project-context cap.
Source hashes and a memory revision invalidate stale completions. No LLM conversation is used
as repository truth.
Embeddings are intentionally not required. Exact symbols and imports are faster, smaller,
explainable and work without downloading another model. Semantic vectors can be added later
as an optional measured feature.
Privacy
- Repository memory, usage and preferences remain local.
- Raw prompts, source and model output are not stored in lifecycle traces.
.env, keys, certificates, credential/secret files, .ssh, .aws, .azure, .git,
dependency directories and common build output are excluded automatically.
- Add workspace-specific patterns with
wisp.excludedPaths.
- Clear completion cache and repository memory independently from Diagnostics.
- The selected cloud CLI receives the bounded context packet. Ollama stays local.
The packaged extension has zero runtime dependencies and is roughly 50 KB. Default limits:
| Resource |
Limit |
| Completion cache |
500 entries |
| Live continuations |
100 entries / 5 minutes |
| Recent attempts |
1,000 entries / 30 seconds |
| Rejection suppression |
500 entries / 30 seconds |
| Repository memory |
500 files / 200 symbols each |
| Lifecycle traces |
100 memory-only records |
Synthetic release benchmark on this development machine (500 files, 10,000 symbols): cache
p95 approximately 0.003 ms; retrieval p95 approximately 0.62 ms. Run npm run bench on your
machine rather than treating those numbers as universal.
Backends
| Backend |
Transport |
Status |
| Claude Code |
warm stream-json or one-shot CLI |
Verified |
| Ollama |
local HTTP /api/generate |
Implemented; model/hardware dependent |
| Codex CLI |
one-shot stdin |
Experimental |
| Gemini CLI |
one-shot stdin |
Experimental |
| Custom |
configured executable/stdin |
Experimental |
General-purpose cloud CLIs can take seconds and consume subscription quota. They should not be
presented as equivalent to a purpose-built completion service. Use the local path when
keystroke latency is the priority.
Development
npm install
npm test # deterministic runtime, memory, provider and UI tests
npm run bench # local bounded-cache/retrieval benchmark
npm run verify # complete pre-package verification
npm run package # build VSIX
The extension is plain CommonJS with no build step or runtime dependency.
Documentation
License
MIT. InLine Ghosting is independent and is not affiliated with Anthropic, Google, OpenAI,
Ollama or GitHub.