JiRack Agent for VS Code
An agentic coding assistant inside VS Code, powered by a JiRack model served over Ollama or any OpenAI-compatible endpoint. This is a port of the JiRack Agent for Eclipse plugin.
You describe a task in plain language; the agent inspects the project, reads the files it needs and works step by step. Every edit it wants to make is queued for your approval. Nothing touches disk until you apply it.
What you get
The same layout as the Eclipse JiRack Agent perspective, out of the box: Agent Chat on the right (Secondary Side Bar, full height) and Proposed Changes + Skills in the bottom panel, under the editor. After every install, reinstall or update a Welcome to JiRack Agent page opens in the editor area, the JiRack Agent tab opens in the bottom panel and the Agent Chat opens on the right (the JiRack status-bar menu → Welcome restores all three any time); normal restarts keep your layout; Proposed Changes is revealed when the agent queues its first change of a task.
| View |
What it does |
| Agent Chat |
Transcript (readable Text tab + verbatim JSON tab for debugging), project picker, model dropdown (the jirack.models list plus Other… to type any name), Send / Stop / Build & Fix. |
| Proposed Changes |
One row per proposed edit (modify / new / delete / rename icons). Click a row to open its side-by-side diff with an Apply / Reject / Decide later menu. Tick the checkboxes of several pending changes and use Apply Checked / Reject Checked in the view title (one confirmation for all), or Check All. Right-click for Show Diff / Apply / Reject / Revert; with several rows selected (Ctrl/Shift+click) the action applies to all of them. Apply and Reject also appear in the diff editor's title bar. |
| Skills |
Reusable rules you approved. They are added to the agent's system prompt on every task, so it stays consistent with your preferences. When a task finishes well the agent may suggest one; you decide whether it is saved. |
Plus a JiRack status-bar item (Settings, License, Registration, Version, Test Connection, Open Agent Chat) and the same commands in the Command Palette under JiRack Agent.
Requirements
- A model endpoint, either:
- Ollama (
ollama serve, default http://localhost:11434) with a JiRack model pulled, e.g. ollama pull cmsmanhattan/JiRackDeltaNet_27b-q4-reasoning (q4 wants ~18–24 GB RAM; q2/q3 lighter, q6/q8 heavier and more precise), or
- the JiRack server (OpenAI-compatible) with a license key.
- VS Code 1.106 or newer (needed for extensions to place views in the Secondary Side Bar), with a folder open.
Install
From a .vsix: Extensions view → … → Install from VSIX…
From source:
npm install
npm run package # compiles and produces jirack-agent-0.11.0.vsix
or open this folder in VS Code and press F5 to launch a development host.
Using it
- Open a folder. The Agent Chat is in the right side bar (
Ctrl+Alt+B toggles it; the JiRack status-bar item → Open Agent Chat also brings it back). Pick the project (multi-root workspaces list every folder) and model.
- Type a task and press Enter (Shift+Enter for a new line).
- Review each proposal in Proposed Changes: click it (diff + Apply / Reject), or tick several and use Apply Checked. Applied changes are saved through VS Code's normal editor save, so Local History / Timeline records the previous version, and Revert restores the snapshot taken when the agent proposed the change (it warns first if the file has changed since).
- Build & Fix collects the errors VS Code already knows about (the Problems panel) and, if you set
jirack.buildCommand, the output of that command when it fails, and hands them to the agent to fix. A clean result costs no model call.
Settings
JiRack Agent Settings (gear button on the chat, or the JiRack status-bar menu → Settings…) is a settings page like the Eclipse preference page: change fields, then Apply or Apply and Close; Restore Defaults refills the form without saving; invalid values are flagged inline and block Apply. It edits your User settings; a value equal to its default is removed from settings.json rather than written. The same settings are also in VS Code's own Settings (Open in VS Code Settings), which saves instantly.
Every setting is a standard VS Code setting declared in package.json with its real default, so Settings shows them pre-filled and you override them in settings.json like any other extension. These are the values that used to live in the Eclipse plugin's config/jirack.properties.
| Group |
Setting |
Default |
| Connection |
jirack.endpoint |
http://account.jirack.com:9000 |
|
jirack.apiStyle |
openai (/v1/chat/completions); ollama = /api/chat |
|
jirack.model |
JiRackOnlineAgent |
|
jirack.models |
the 17 JiRack models offered in the chat dropdown |
|
jirack.connectTimeoutSec / jirack.responseTimeoutMin |
10 / 10 |
| Generation |
jirack.temperature / jirack.numCtx / jirack.maxTokens |
0.2 / 8192 / 8192 |
| Behavior |
jirack.alwaysConfirm |
true |
|
jirack.maxIterations |
24 (1–32) |
|
jirack.buildCommand |
empty (Build & Fix uses the Problems panel only) |
| Appearance |
jirack.chat.fontFamily / jirack.chat.fontSize |
empty / 0 = follow the editor UI font |
|
jirack.chat.agentColor |
#1e90ff |
| Account |
jirack.registrationUrl / jirack.billingBaseUrl |
https://account.jirack.com |
|
jirack.supportEmail |
support@jirack.com |
jirack.endpoint, jirack.apiStyle and the account URLs are User settings only (application scope) and jirack.buildCommand is machine-scoped, so an opened repository cannot redirect your code to another server or run commands. URL settings that are not http/https are ignored in favour of the default.
For a fleet-wide default (e.g. pointing every install at a shared inference box), change the defaults in package.json and rebuild, or push the values through your organisation's VS Code settings management.
The license key (a JWT) is entered via JiRack menu → License… and stored in VS Code's secret storage (OS keychain), not in settings.json. It is sent as Authorization: Bearer … on every model request; the server validates it.
Agent protocol
The model must answer every turn with exactly one JSON action:
{"action":"list_files"}
{"action":"read_file","path":"src/main.ts"}
{"action":"search_files","query":"sum(","regex":false}
{"action":"propose_edit","path":"src/main.ts","rationale":"...","content":"<full new content>"}
{"action":"propose_patch","path":"src/main.ts","rationale":"...","search":"exact fragment","replace":"new fragment"}
{"action":"propose_delete","path":"src/old.ts","rationale":"..."}
{"action":"propose_rename","path":"src/a.ts","new_path":"src/b.ts","rationale":"...","content":"optional"}
{"action":"say","text":"..."}
{"action":"done","summary":"...","skill_title":"optional","skill_body":"optional"}
list_files, read_file and search_files are answered automatically (read-only). propose_* only queues a proposal. Paths must be project-relative and stay inside the project; .. and absolute paths are refused.
Differences from the Eclipse plugin
- Perspective → default layout. VS Code has no perspectives; the views are contributed to the Secondary Side Bar (chat) and the bottom panel (Proposed Changes, Skills), which reproduces the Eclipse layout. Users can still drag them anywhere; View: Reset View Locations restores the default.
config/jirack.properties → VS Code settings. All its keys are now jirack.* settings with the same values as defaults. The JIRACK_* environment-variable and -Djirack.* overrides are gone; VS Code settings (User, Remote, or managed policy) are the standard way to override.
- Native diff. The unified-diff text preview is replaced by VS Code's diff editor.
- Project detection uses marker files (
pom.xml, package.json, tsconfig.json, …) instead of Eclipse natures.
- Build & Fix uses the Problems panel (and the optional
jirack.buildCommand) instead of an Eclipse project build.
- Eclipse-only pieces are gone: the product/splash/branding files, the Maven/
.classpath system-prompt advice, and the .product configurations.
- Fixes to bugs in the original, found while porting: the UI stayed stuck "busy" after Stop; collapsed tool results re-appended their
(elided) marker every turn; and a reply cut off at the output limit could still queue a truncated file as a proposal (it is now treated as "no action" and the model is asked for a smaller step).
Development
npm install
npm run compile # tsc -> out/
npm test # unit + integration tests (node:test)
Layout: src/core/ is plain TypeScript with no vscode imports (protocol, engine, streaming client, config, license, skills) and is covered by tests against a real local HTTP server that speaks both the OpenAI-SSE and Ollama-NDJSON formats. src/ (top level) and src/ui/ are the VS Code layer; src/test/extension.test.ts exercises it end to end against an in-process mock of the vscode module.
Privacy
Prompts and the project files the agent reads are sent only to the endpoint you configure. There is no telemetry.