Getting started

There are three ways to use insrc — the CLI & daemon, the VS Code extension, or the JetBrains plugin. All three drive the same local daemon; the only difference is how you install/manage it and where you invoke insrc's tools. Pick your surface below.

Overview — pick your surface

SurfaceWhat it isBest forStart
CLI & daemonThe full-screen insrc TUI plus the daemon it manages — the canonical, editor-independent surface. You register MCP with claude / codex yourself.Terminal-first workflows, headless / server setups, working on insrc itself.CLI quick start ↓
VS CodeAn extension that installs + manages the daemon, wires your AI host's MCP config, and registers your workspace — all from the editor.VS Code (or a fork like Cursor) users who want one-click onboarding.VS Code quick start ↓
JetBrainsOne plugin for IntelliJ IDEA, PyCharm, GoLand & WebStorm that does the same orchestration and wires AI Assistant / Junie.JetBrains IDE users with a JetBrains AI host.JetBrains quick start ↓
The plugins install the daemon for you. If you use the VS Code extension or JetBrains plugin, you can skip the manual daemon install — the plugin provisions and keeps it current on first use. You still need the shared prerequisites below (Ollama for local embeddings, a claude/codex host, git).

Prerequisites (all surfaces)

RequirementWhyCheck
Node.js ≥22.13.0runtime. Native modules build against Node 22.22.1 headers; the daemon spawns under Node 22 at install. (The IDE plugins can provision a private Node when the system one is unsuitable.)node -v
Ollamalocal models. Needed for Ollama embeddings; optional when using the local ONNX backend and optional for the core reasoning model — see the two panels below.ollama --version
claude and/or codex CLIcloud LLM access is delegated to these CLIs' OAuth sessions — insrc never makes direct REST calls. Also how you run the core model in the cloud (no Ollama needed for it).claude --version
gitrepo discovery, the git tools, and the workflow tracker.git --version

Ollama — what it's actually for

Required for embeddings. Every indexed repo needs vector embeddings, and embeddings are always computed locally. Pick one embedder:
EmbedderModelNotes
Ollama (default)qwen3-embedding:0.6b1024-dim. ollama pull qwen3-embedding:0.6b
ONNX (no Ollama)nomic-ai/nomic-embed-text-v1.5768-dim, runs in-process — no Ollama pull. Select with the installer flag --embedder onnx (or set models.local.embeddingModel).
Optional for the core model. The core (reasoning) model drives analyze / workflow / build / review. You choose where it runs — so Ollama is only needed for the model if you run it locally:
WhereModelNotes
Local — Ollamaqwen3.6:27b (default)
qwen3.6:35b-a3b (larger)
Set models.tiers.core.runner: ollama, then ollama pull qwen3.6:27b. The larger MoE trades RAM for accuracy.
Cloud — CLIclaude (opus / sonnet) or codexSet models.tiers.core.runner: cli-claude (or cli-codex). No Ollama needed for the model — Ollama then only serves embeddings (or skip it entirely with the ONNX embedder).

Accuracy is the primary principle: the core tier is never served below the high tier (the coreFloor). Tune tiers & per-role overrides later on the settings page.

Set up your surface

Pick your surface below. Each tab gets you installed and focuses on the one setting that matters most — choosing your core model. Everything else (tiers, per-role overrides, embeddings, tracker) lives on the settings page.

CLI & daemon

The editor-independent path: install the daemon, launch the TUI, index a repo, ask a grounded question, then register the MCP server with your CLI host.

Core model — the key setting. In the TUI's Setup pane (provider & model config), press a to apply the recommended config and p to pull any missing local models — or edit ~/.insrc/config.json. The core tier is models.tiers.core: runner: ollama + model: qwen3.6:27b to run local, or runner: cli-claude (/cli-codex) for the cloud. Per-role tiering is on the Tiers pane; everything deeper → settings guide.

1 · Install the daemon

Release installer (recommended). The one-line installer verifies prerequisites, clones + builds the daemon into ~/.insrc/daemon, and starts it. Update later by re-running it or with ~/.insrc/daemon/scripts/daemon-ctl.sh update.

bash
$ curl -fsSL https://github.com/insors-ai/insrc/releases/latest/download/insrc-daemon-install.sh | bash
# pass installer options after `bash -s --`, e.g.:
$ curl -fsSL https://github.com/insors-ai/insrc/releases/latest/download/insrc-daemon-install.sh | bash -s -- --no-start --embedder ollama
# options: --target <path>  --branch main  --no-start  --repo <fork-url>  --embedder auto|ollama|onnx

From source (development) — for working on the daemon itself:

bash
$ git clone https://github.com/insors-ai/insrc.git
$ cd insrc
$ npm install            # runtime + dev deps (builds native modules)
$ npm run build          # tsc + copy-assets.mjs → out/

The two entry points produced by the build:

  • out/daemon/index.js — the daemon binary the IDE spawns.
  • out/bin/insrc-mcp.js — the MCP binary you register with claude / codex.
Sanity-check a from-source build with the fast test subsets:
bash
$ npx tsx --test 'src/workflow/**/*.test.ts' 'src/mcp/**/*.test.ts'   # ~5s
$ npx tsx --test 'src/**/__tests__/*.test.ts'                       # full sweep
Live-service suites gate behind INSRC_LIVE_TESTS=1 and skip cleanly when unset.

2 · Launch the TUI

The insrc command is a full-screen ink (React) TUI. It starts (or attaches to) the daemon and gives you Daemon / Repos / Workflows / Setup / Tiers / Debug panes.

bash
$ "$HOME/.insrc/daemon/scripts/insrc"
insrc — Repos
┌─ Repos ───────────────────────────────────────────┐
│ ● insrc            ready    · 3,412 entities      │
│ ○ my-service       indexing · 61%               │
└───────────────────────────────────────────────────┘
 a add repo   r re-index   d remove   ↑↓ select

3 · Add & index a repo

Registry membership is established exclusively through the repo.add IPC — from the TUI, open the Repos pane and press a. The daemon parses the tree with tree-sitter, builds the graph, and generates embeddings.

During a, insrc asks — per file — whether to install the steering block into the repo's CLAUDE.md (Claude Code) and/or AGENTS.md (Codex). Say yes and the daemon writes a safe, idempotent insrc:steering marked section (created if absent, replaced in place on re-add, never clobbering your surrounding content) so a controller reaches for insrc_analyze_step on code questions, insrc_triage first on build requests, and insrc_review_step before approving. No manual copy-paste needed.

Approving a client's steering block also registers its MCP. When you say yes for Claude Code, the daemon runs claude mcp add insrc --scope user for you; yes for Codex runs codex mcp add insrc — both idempotent (an existing registration is left as-is). So on a fresh machine, a single repo add with the steering prompt wires up both the steering block and the MCP, and the per-client result (registered / unchanged / failed) is reported inline. Registration is --scope user / global and never fails the add. You can still register manually (below) — e.g. for a client you didn't approve steering for.

From the command bar (non-interactive, so it can't prompt) pass the flag explicitly: repo add <path> --steering installs both, or --steering=claude / --steering=agents for one. Bare repo add <path> installs nothing (no silent write) and prints a reminder.

The repo registry is the contract. An entity whose repo path isn't registered fails the upsert with UnregisteredRepoError — the storage layer never auto-allocates registry rows. Always add a repo before expecting queries to resolve.

Wait for the status to reach ready (embeddings pending shows as a count). Graph searches span the transitive DEPENDS_ON closure of the active repo, so add dependency repos too if you want cross-repo answers.

On add, insrc writes a per-repo .insrc/config.json with an ignore section — seeded from the repo's .gitignore when present, otherwise from its type (node / python / java / go). Edit it to control which directories the indexer and file-watcher skip (e.g. node_modules, dist, target, __pycache__). It's created idempotently and never overwritten once you've customised it.

4 · Ask your first question

For any question about a codebase's structure, conventions or capabilities, use the analyze tools — every claim is grounded in a real graph exploration, with file paths drawn from the index (no hallucinated paths).

bash
# In your MCP-connected assistant, ask:
"List the storage layers and where each is initialised."

Prefer insrc_analyze_step (multi-turn, stays in your session) over the one-shot insrc_analyze when driving from an MCP client — it's more accurate and doesn't spawn a separate billing path. See the analyze guide.

5 · Register the MCP servers (manual / explicit)

Approving a steering block during repo add already registers the matching client (above). This is the manual path — for a client you skipped, a from-source install, or to re-register by hand. It wires the MCP binary insrc-mcp.js into each client, exposing the full tool suite — insrc_analyze_step, insrc_triage, insrc_workflow_step, insrc_review_step and insrc_build_step. The installer puts the binary at ~/.insrc/daemon/out/bin/insrc-mcp.js; a from-source build has it at out/bin/insrc-mcp.js in the repo.

Register once, at user / global scope. Repo resolution is session-aware, so a single global registration serves every repo and every concurrent session — no per-repo config, no INSRC_REPO pin. A project-scoped registration (Claude's .mcp.json) exposes insrc only inside that one repo, so a session in any other repo won't see the tools at all — the usual cause of "insrc isn't being used here."

Claude Code

Register at user scope so insrc is available in every repo:

bash
$ claude mcp add insrc --scope user -- node ~/.insrc/daemon/out/bin/insrc-mcp.js
$ claude mcp list        # insrc: … ✔ Connected

To scope it to a single repo instead, drop a .mcp.json at that repo's root — insrc is then visible only inside it. Use an absolute path (~ is not expanded in JSON):

<repo>/.mcp.json
{
  "mcpServers": {
    "insrc": {
      "command": "node",
      "args": ["/Users/you/.insrc/daemon/out/bin/insrc-mcp.js"]
    }
  }
}

Codex

Codex servers in ~/.codex/config.toml are global by nature — add the insrc server there (absolute path; no ~):

~/.codex/config.toml
[mcp_servers.insrc]
command = "node"
args = ["/Users/you/.insrc/daemon/out/bin/insrc-mcp.js"]

Restart the client (or reconnect its MCP) after editing a config file — both read it at startup.

How the repo is resolved

Resolution is session-aware for both clients, in order: an explicit repo argument wins; otherwise the server matches its working directory against the registered repos (the session workspace — both clients spawn the server with the workspace as its CWD); otherwise it falls back to an optional INSRC_REPO env for headless / cron use. That's why one global registration with no INSRC_REPO works everywhere. Either way the repo must be registered with the daemon and finished indexing.

VS Code extension

The extension installs and manages the daemon for you, so there's no manual daemon step — just install, accept the onboarding prompts, and use your assistant. Full detail on the VS Code page.

Core model — the key setting. Pick your core tier's model with the insrc: Set model tier command, or edit it in native VS Code Settings (search insrc). Choose a local Ollama model (qwen3.6:27b) or a cloud runner (cli-claude / cli-codex). Everything else — tiers, per-role overrides, embeddings — is in Settings and the settings guide.

1 · Install the extension

Open the Extensions view (⇧⌘X / Ctrl+Shift+X), search insrc, and click Install — or install insors.insrc-vscode from the Marketplace. (Pre-release: ⋯ → Install from VSIX… with a built insrc-vscode-<version>.vsix.)

2 · Accept the first-run onboarding

On first activation the extension runs one coalesced flow, prompting for each step independently and only when needed — nothing happens without your explicit consent:

  1. Install the insrc daemon into ~/.insrc/ (or keep an existing one current).
  2. Register this workspace with the daemon (repo.add) so it gets indexed.
  3. 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-Palette command: insrc: Install daemon / Start / Stop / Restart / Update daemon, insrc: Wire AI hosts, insrc: Register workspace.

3 · Use it

Your assistant now explores the code through insrc's grounded tools. Edit the daemon's config from native VS Code Settings (search insrc), pick a tier's model with insrc: Set model tier, and open the status-bar insrc item for Detailed Status / Repo Configuration panels. See the VS Code page and the settings guide.

JetBrains plugin

One plugin for IntelliJ IDEA, PyCharm, GoLand & WebStorm (2024.2+). It manages the daemon and wires a JetBrains AI host; setup happens on project open. Full detail on the JetBrains page.

Core model — the key setting. Open Settings → Tools → insrc (a live config editor) and set the core tier's model — a local Ollama model (qwen3.6:27b) or a cloud runner (cli-claude / cli-codex). The same editor holds tiers, per-role overrides and embeddings; see the settings guide for the full surface.

1 · Install the plugin

Settings → Plugins → Marketplace, search insrc, and click Install. (Pre-release: Settings → Plugins → ⚙ → Install Plugin from Disk… with a built insrc-jetbrains-<version>.zip.) You also need a JetBrains AI host — AI Assistant or Junie; without one the plugin stays dormant and re-checks on later project opens.

2 · First-run setup (on project open)

Installing the plugin doesn't touch the daemon by itself — on the first project open with the plugin active it:

  1. Probes for the daemon and, if absent, offers a one-click setup you accept explicitly (it clones + builds the daemon into ~/.insrc/daemon; an existing daemon is silently kept current).
  2. Offers "Enable insrc for this project" — a one-click repo.add that registers the open project.
  3. Wires your AI host — writes the insrc MCP registration + the tracked-workflow steering into the detected host's config and rules files.

3 · Use it

Your assistant is now grounded per-project. Drive and inspect insrc from Settings → Tools → insrc (a live config editor with Daemon / Workflows / Debug pages), the project-view context menu (repo status + register), and the artifact-review tool window (read, comment on and approve pending workflow artifacts). See the JetBrains page and the settings guide.

Where next