insrc for VS Code
Grounded code-knowledge and the tracked insrc workflow, wired into your AI
assistant — the VS Code counterpart to the insrc JetBrains plugin.
insrc runs a local daemon that indexes your repositories into a graph + vector
store and exposes a citation-grounded analyze/workflow toolset over a local Unix
socket. This extension is a thin orchestrator: it installs and manages that
daemon, wires insrc into your AI host's MCP config, and registers your workspace
— all consent-gated, all reversible. It opens no cloud path and stores no
secrets; every capability reaches the daemon over the local socket.
Requirements
- VS Code and an AI host (Claude Code, Cursor, …) that insrc wires its
MCP tools into.
- Node — used by the daemon; the extension provisions a private runtime
automatically if the system Node is missing or unsuitable.
- Ollama — required for local embeddings (the
default embedder is
qwen3-embedding:0.6b; a no-Ollama ONNX alternative,
nomic-embed-text-v1.5, is also available). Ollama is optional for the core
model: run it locally on Ollama (qwen3.6:27b) or through your existing
claude / codex CLI instead.
Full setup → Getting Started.
First run
On first activation the extension runs one coalesced onboarding flow, prompting
(each step independently, and only when needed) to:
- Install the insrc daemon into
~/.insrc/.
- Register this workspace with the daemon (
repo.add) so it gets indexed.
- Wire your AI host (Claude Code, Cursor, …) so insrc's MCP tools are
available to your assistant.
Skipped a prompt? Every action is also a durable command in the Command Palette:
insrc: Install daemon / Start / Stop / Restart / Update daemon
insrc: Wire AI hosts
insrc: Register workspace
Uninstalling the extension runs a vscode:uninstall hook that removes the insrc
entries from every host config it wrote.
The daemon's configuration is editable directly from native VS Code Settings
(search insrc) — every option is a typed, machine-scoped setting, so it never
syncs off this machine:
- Global options (
insrc.*) — log level, Ollama host, permission mode,
model tiers, plan depth, embeddings, and more, each with the daemon's current
value.
- Per-role model tiers (
insrc.models.tasks.*) — override which tier
(cheap / mid / core) serves each insrc reasoning role.
The Settings view stays truthful to the daemon: an edit the daemon rejects is
reverted with its reason, and external changes (from the CLI, JetBrains, or
another window) are reconciled on demand via insrc: Refresh insrc settings
in the Command Palette. All config access is over the local daemon socket — no
cloud path.
Pick a tier's model from a dropdown — insrc: Set model tier in the
Command Palette walks you through a tier → provider → model picker whose model
list is exactly what the daemon offers for that tier's provider (Ollama's
installed models, or the curated Claude / Codex catalog) — no typing raw model
ids. If a provider can't be listed it shows no models available with a Refresh;
switching the provider re-filters the list.
Keeps the backing daemon current — on activation the extension checks (only
when the daemon is already reachable) whether the installed daemon has fallen
behind its upstream, and if so offers an Update / Dismiss notification that
updates the daemon in place on your OK. When you update the extension itself, it
brings the daemon current automatically. Failures surface once with the reason;
nothing is retried or rolled back — the daemon owns its own state. After a
successful update it nudges you to Reload Window so the insrc MCP connection
reconnects to the freshly-updated daemon (a session run outside the editor needs
a manual claude / codex restart instead).
Status & panels
The status-bar insrc item opens a two-item menu (also reachable from the
Command Palette):
- Open Detailed Status — a tabbed panel over the running daemon:
- Daemon — the daemon's current state (uptime, repos, queue depth).
- Workflows — the workflow-artifact chain per work item.
- Debug — the attached MCP clients, a live tail of the daemon log, and a
consent-gated cleanup of stray insrc processes (the managed daemon is
never touched).
- Open Repo Configuration — pick any repo the daemon has registered
(independent of which folders are open) and edit that repo's per-repo model-tier
overrides through form fields — no hand-editing JSON. Every write is
consent-gated and reflects back only what the daemon actually stored.
All panels are read/edit views over the local daemon socket — no background
polling (only the Debug log tails while its tab is open), no cloud path.
Building & packaging (maintainers)
cd vscode-plugin
npm install
npm test # the node:test (tsx --test) suite — the local gate
npm run bundle # esbuild -> out/extension.js + out/uninstall.js (CJS)
npm run package # npx @vscode/vsce package -> a single .vsix
The bundle inlines the shared IPC client and marks vscode external, so the
.vsix is self-contained and ships no repo source (see .vscodeignore).
Publishing (maintainers)
Publishing is a deliberate, manually-triggered action — never a per-push CI
job — and targets the VS Code Marketplace only:
- Set the
publisher field in package.json to your Marketplace publisher id
(currently insors).
- Add a Marketplace Personal Access Token as the
VSCE_PAT GitHub Actions
secret (it lives only as a secret — never in the repo).
- Bump the
version in package.json.
- Run the vscode-plugin workflow from the GitHub Actions tab
(
workflow_dispatch). It bundles, packages, and vsce publishes to the
Marketplace.
License
MIT — see LICENSE.