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
| Surface | What it is | Best for | Start |
|---|---|---|---|
| CLI & daemon | The 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 Code | An 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 ↓ |
| JetBrains | One 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 ↓ |
claude/codex host, git).Prerequisites (all surfaces)
| Requirement | Why | Check |
|---|---|---|
| Node.js ≥22.13.0 | runtime. 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 |
| Ollama | local 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 CLI | cloud 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 |
| git | repo discovery, the git tools, and the workflow tracker. | git --version |
Ollama — what it's actually for
| Embedder | Model | Notes |
|---|---|---|
| Ollama (default) | qwen3-embedding:0.6b | 1024-dim. ollama pull qwen3-embedding:0.6b |
| ONNX (no Ollama) | nomic-ai/nomic-embed-text-v1.5 | 768-dim, runs in-process — no Ollama pull. Select with the installer flag --embedder onnx (or set models.local.embeddingModel). |
| Where | Model | Notes |
|---|---|---|
| Local — Ollama | qwen3.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 — CLI | claude (opus / sonnet) or codex | Set 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.
~/.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.
$ 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:
$ 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 withclaude/codex.
$ npx tsx --test 'src/workflow/**/*.test.ts' 'src/mcp/**/*.test.ts' # ~5s
$ npx tsx --test 'src/**/__tests__/*.test.ts' # full sweep
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.
$ "$HOME/.insrc/daemon/scripts/insrc"
┌─ 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.
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.
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).
# 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.
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:
$ 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):
{
"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 ~):
[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.
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:
- Install the insrc daemon into
~/.insrc/(or keep an existing one current). - 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.
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.
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:
- 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). - Offers "Enable insrc for this project" — a one-click
repo.addthat registers the open project. - 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.