<?xml version="1.0" encoding="UTF-8"?>
<plugins>
  <plugin id="com.jonnyzzz.mcp-steroid" url="https://github.com/jonnyzzz/mcp-steroid/releases/download/v0.102/mcp-steroid-0.102.0-r-c68d8f15d.zip" version="0.102.0-r-c68d8f15d">
    <idea-version since-build="261"/>
    <name>MCP Steroid</name>
    <vendor>jonnyzzz.com</vendor>
    <description><![CDATA[<p><strong>MCP Steroid</strong> gives AI agents the whole IDE, not just the files.</p>
<p>It runs a Model Context Protocol (MCP) server inside your IDE. Connected agents — Claude Code, Codex, Gemini CLI, or any MCP-compatible agent — execute Kotlin against the live IntelliJ Platform: semantic navigation, inspections, refactorings, the debugger, and test runs. Screenshots let the agent see the IDE. Guides bundled with the plugin teach the agent these APIs as it works.</p>
<p>The recommended way to connect an agent is the <a href="https://devrig.dev/docs/devrig/">devrig CLI</a>: one bridge that reaches every IDE you have open and keeps working across restarts and port changes. Documentation and examples: <a href="https://devrig.dev">devrig.dev</a>.</p>
<p>MCP Steroid is an independent research project by Eugene Petrenko (<a href="https://jonnyzzz.com">@jonnyzzz</a>). Not affiliated with, endorsed by, or supported by JetBrains s.r.o.</p>
<p><small>IntelliJ Platform and JetBrains are trademarks of JetBrains s.r.o.</small></p>]]></description>
    <change-notes><![CDATA[<h2>What's New in v0.102</h2>
<h3>0.102</h3>
<p>0.102 is the largest devrig and MCP Steroid release yet — 535 pre-release commits touching both halves of the product. The headline: **devrig can now bootstrap a headless Remote Development backend entirely from an agent session**, completing the capability goals of the [product strategy](https://devrig.dev/docs/strategy/). Beyond that, **devrig** — the CLI you install and run — grows one unified command surface where every `steroid_*` MCP tool is a subcommand generated from its own schema, keeps itself up to date automatically, installs the MCP Steroid plugin into your running IDEs, and downloads 14 JetBrains IDE products. **The MCP Steroid plugin** compiles `steroid_execute_code` scripts roughly 3×–10× faster with an in-process Kotlin compiler, returns machine-parseable results, is ready for IntelliJ 2026.3 EAP, loads on Android Studio, and picked up a long list of correctness, modality, and Windows fixes.</p>
<p>> **`devrig` is the recommended entry point.** Direct use of the plugin's HTTP server is still supported (now explicitly marked deprecated in the settings UI), but `devrig` owns installation, the bundled Java runtime, agent registration, updates, and backend lifecycle.</p>
<p>> **One name, one home.** This release completes a transition: what started as *MCP Steroid* at `mcp-steroid.jonnyzzz.com` now lives at **[devrig.dev](https://devrig.dev)** — devrig is the product you install and run; MCP Steroid remains the name of the IDE plugin it talks to. The old host redirects permanently.</p>
<p>### Breaking changes</p>
<li><b>The `applyPatch { }` script DSL is removed</b> ([#206](https://github.com/jonnyzzz/mcp-steroid/issues/206), [#209](https://github.com/jonnyzzz/mcp-steroid/issues/209)): at eval scale it failed 64% of invocations. File edits go through the taught single-`writeAction` multi-edit recipe plus a new apply-unified-diff escape hatch built on the IDE's own patch engine.</li>
<li><b>`steroid_list_windows` renames `projectName` / `projectPath` to snake_case `project_name` / `project_path`</b> ([#381](https://github.com/jonnyzzz/mcp-steroid/issues/381)), matching `steroid_list_projects` and the tool's own documentation. Consumers reading the old camelCase keys must switch.</li>
<p>### Headless Remote Development backends — the strategy milestone</p>
<p>The essential change of 0.102: devrig can now launch a downloaded IDE as a **headless managed Remote Development backend** with MCP Steroid pre-provisioned — no desktop session, no attached client window. With it, the capability goals of the [product strategy](https://devrig.dev/docs/strategy/) are all in place: devrig runs in headless environments end to end, so the full IDE — inspections, refactorings, debugger, test runs — is available to **every agent wherever it executes**, not only next to a developer's open desktop IDE.</p>
<li>Agents bootstrap the whole <b>discover → download → start</b> flow themselves via the prompt articles and server instructions ([#449](https://github.com/jonnyzzz/mcp-steroid/issues/449)); the backend lifecycle is hardened with pid-marker process tracking (a `remoteDevelopmentBackend` flag distinguishes backends from desktop IDEs, [#451](https://github.com/jonnyzzz/mcp-steroid/issues/451)), single-instance locking, and artifact-safety checks ([#411](https://github.com/jonnyzzz/mcp-steroid/issues/411), [#441](https://github.com/jonnyzzz/mcp-steroid/issues/441)).</li>
<li>`devrig mcp` advertises a steroid capability statement at `initialize`, so schema-deferring harnesses (like Claude Code) learn the `steroid_*` surface before loading any tool schema ([#428](https://github.com/jonnyzzz/mcp-steroid/issues/428), [#417](https://github.com/jonnyzzz/mcp-steroid/issues/417)).</li>
<li>Clean-machine Claude/Codex Docker scenarios validate the workflow end to end. Background: [devrig: MCP Steroid Goes Level 3 — Autonomous IDE Setup for AI Agents](https://jonnyzzz.com/blog/2026/06/02/devrig-mcp-steroid-level-3/).</li>
<p>### One devrig CLI, generated from the tools' own schemas</p>
<p>Every `steroid_*` MCP tool is now a first-class devrig subcommand **auto-generated from its own schema metadata** — adding a tool adds its command, and the served stdio MCP surface registers from the same canonical spec list, so the CLI and the MCP server can never drift ([#284](https://github.com/jonnyzzz/mcp-steroid/issues/284), [#437](https://github.com/jonnyzzz/mcp-steroid/issues/437), [#356](https://github.com/jonnyzzz/mcp-steroid/issues/356)); a golden test pins the MCP wire unchanged.</p>
<li><b>One Clikt tree for everything</b> ([#442](https://github.com/jonnyzzz/mcp-steroid/issues/442)): consistent help, aliases, and error handling; project listing is canonical `list_projects` (`projects` / `project` stay as aliases).</li>
<li><b>Help that routes you</b> ([#450](https://github.com/jonnyzzz/mcp-steroid/issues/450), [#454](https://github.com/jonnyzzz/mcp-steroid/issues/454)): `devrig --help` is a compact index; the full tool reference moved to `devrig tools`; missing or invalid parameters route to focused help with the exact allowed values — and parse validation happens <b>before</b> any backend, file/stdin, or `--out` side effect.</li>
<li><b>Exit codes follow sysexits</b> ([#437](https://github.com/jonnyzzz/mcp-steroid/issues/437), [#450](https://github.com/jonnyzzz/mcp-steroid/issues/450)): parse errors aggregate into one `USAGE=64` message, internal faults exit `SOFTWARE=70` with a stderr trace, and only I/O failures (plus an `open_project --wait` poll timeout) map to `UNAVAILABLE=69`.</li>
<li><b>`--json` and `--out` you can build on</b>: JSON payloads are real `content[].json` objects (no double-decoding for jq) in a shared `{tool, command, isError, data}` envelope; `--out` writes atomically and is accepted only where an image can exist; stdin and `--*-file` inputs reject malformed UTF-8, binary bytes, and >10 MiB payloads.</li>
<li><b>`open_project --wait`</b> polls until the canonical project path appears in `list_projects`, then returns the fresh `project_name` / `backend_name` / canonical path — and a *failed* open surfaces its error immediately.</li>
<li>The whole surface is an authoritative contract in `docs/devrig-cli-contract.md` ([#452](https://github.com/jonnyzzz/mcp-steroid/issues/452)), pinned by unit tests, a real-IDE Docker flow, and live Claude/Codex agent-usability experiments.</li>
<p>### devrig keeps itself up to date</p>
<p>devrig now auto-updates ([#270](https://github.com/jonnyzzz/mcp-steroid/issues/270), [#380](https://github.com/jonnyzzz/mcp-steroid/issues/380)): when the published `version.json` promotes a newer version, running sessions download and run the official installer, coordinated across concurrent devrig processes via per-pid marker files — simple by design: **no lock files, no failure-count state**, lower-pid-wins races, a stdout-purity test guarding the MCP channel ([#373](https://github.com/jonnyzzz/mcp-steroid/issues/373), [#268](https://github.com/jonnyzzz/mcp-steroid/issues/268) closed by this design). Design story: [Install, Launch, Update: Shipping a CLI on Five Platforms — the devrig Approach](https://jonnyzzz.com/blog/2026/08/06/devrig-install-launch-autoupdate/).</p>
<li><b>Launcher replacement handles Windows file locks</b> ([#385](https://github.com/jonnyzzz/mcp-steroid/issues/385)): a rename-aside, rustup-style sequence validated under real NTFS contention (locks that permit rename); <b>an older devrig never overwrites a newer launcher</b> thanks to a version header checked during self-heal ([#374](https://github.com/jonnyzzz/mcp-steroid/issues/374)).</li>
<li><b>Version numbers finally compare correctly</b> ([#360](https://github.com/jonnyzzz/mcp-steroid/issues/360), [#358](https://github.com/jonnyzzz/mcp-steroid/issues/358)): all build lanes share one token layout (releases are `<base>.0-r-<hash>`), compared by IntelliJ's `VersionComparatorUtil` ported into mcp-core (Apache 2.0, NOTICE shipped) — update notifications fire only when the promoted version is strictly newer than the current build.</li>
<p>### The Kotlin compiler update: in-process compilation, 3×–10× faster</p>
<p>The fixed per-call Kotlin compiler startup — **7.8 seconds, 94% of wall time** — is gone ([#207](https://github.com/jonnyzzz/mcp-steroid/issues/207)). Snippet compilation moved onto the [Kotlin Build Tools API (BTA)](https://github.com/JetBrains/kotlin/tree/master/compiler/build-tools/kotlin-build-tools-api) with one shared in-process build session per project ([#361](https://github.com/jonnyzzz/mcp-steroid/issues/361)): the Kotlin daemon machinery is gone, the plugin no longer downloads a kotlinc distribution at all (the compiler jars ship in the plugin, 12→10 jars), and pinning the compiler environment per session cuts warm compiles from 367 ms to 218 ms. BTA is the lever that makes this optimization possible.</p>
<p>**Yahor Berdnikau ([@Tapchicoma](https://github.com/Tapchicoma)) and the Kotlin team contributed this migration** — thank you, Yahor and team, for the collaboration and the support along the way.</p>
<li>Compiler messages are structured, remapped to user-code coordinates, and persisted for compilation errors and OOMs.</li>
<li>In-process compilation also fixes <b>Windows-side IDEs opening WSL-hosted projects</b> ([#78](https://github.com/jonnyzzz/mcp-steroid/issues/78)): no kotlinc subprocess to misroute into the WSL distro, and execution storage lives under `~/.mcp-steroid/runs` off the `\\wsl$` volume ([#280](https://github.com/jonnyzzz/mcp-steroid/issues/280)) — the `mcp.steroid.storage.path` workaround is no longer needed.</li>
<p>### Ready for IntelliJ 2026.3 EAP and Android Studio</p>
<li>The bundled kotlinc is bumped <b>2.3.20 → 2.4.20-RC</b> (the bump landed as 2.4.10, then pinned to the upstream BTA release candidate) so `steroid_execute_code` works on IntelliJ 2026.3 EAP while staying compatible with 2026.1/2026.2 ([#357](https://github.com/jonnyzzz/mcp-steroid/issues/357), [#359](https://github.com/jonnyzzz/mcp-steroid/issues/359)); when an IDE's metadata outruns the bundled compiler, the plugin fails fast with one actionable message ([#377](https://github.com/jonnyzzz/mcp-steroid/issues/377)).</li>
<li>Scripts default to <b>Kotlin language/API level 2.3</b> (up from 2.2) — the floor of the supported IDE range.</li>
<li>The plugin and devrig emit <b>JVM 21 bytecode</b> (keeping the JDK 25 toolchain), so they load on Android Studio's bundled JBR 21 where v0.101 failed ([#157](https://github.com/jonnyzzz/mcp-steroid/issues/157), [#181](https://github.com/jonnyzzz/mcp-steroid/issues/181)–[#184](https://github.com/jonnyzzz/mcp-steroid/issues/184)); a class-file guard scans every shipped class, and an Android Studio Docker gate exercises the production plugin.</li>
<p>### `steroid_execute_code` output is machine-parseable again</p>
<p>For successful executions, the tool result is exactly the `execution_id:` header plus your script's printed output — stage framing and progress lines no longer interleave with the payload, so a script printing a single JSON document parses again ([#154](https://github.com/jonnyzzz/mcp-steroid/issues/154), [#159](https://github.com/jonnyzzz/mcp-steroid/issues/159)). Progress still flows to `idea.log`, MCP progress notifications, and the execution event log.</p>
<li><b>The print-only output contract is taught everywhere</b>: only *printed* output is returned (a bare trailing expression is ignored), and every recipe ends with a print. `printToon`'s docs now describe its actual two-form contract ([#459](https://github.com/jonnyzzz/mcp-steroid/issues/459)).</li>
<p>### The host IDE's identity is back in `list_projects` / `list_windows`</p>
<p>Both list tools carry a `backends[]` lookup resolving each entry's `backend_name` to the host IDE's identity ([#155](https://github.com/jonnyzzz/mcp-steroid/issues/155)) — a fresh IDE with zero open projects is identifiable with one cheap tool call:</p>
<p>```json</p>
<p>"backends": [</p>
<p>  { "backend_name": "iu-47qi79c1",</p>
<p>    "intellij": { "name": "IntelliJ IDEA 2026.1.3", "version": "2026.1.3", "build": "IU-261.25134.95" } }</p>
<p>]</p>
<p>```</p>
<p>**Migration:** parsers reading the old top-level `ide.*` switch to `backends[0].intellij`. devrig's `project` / `backend` output carries the same identity keys in the same order.</p>
<p>### `steroid_execute_code` reliability and IDE responsiveness</p>
<li>Every execution is a <b>visible, cancellable task</b> in the IDE status bar, and a client disconnect cancels the script ([#213](https://github.com/jonnyzzz/mcp-steroid/issues/213), [#229](https://github.com/jonnyzzz/mcp-steroid/issues/229)).</li>
<li>`findProjectFile` accepts absolute paths and force-refreshes stale VFS entries — the #1 `execute_code` failure class (35% of eval failures) is fixed ([#156](https://github.com/jonnyzzz/mcp-steroid/issues/156)); kotlinc diagnostics point at the agent's actual script lines ([#221](https://github.com/jonnyzzz/mcp-steroid/issues/221)).</li>
<li>`waitForSmartMode` returns a clear "INDEXING IN PROGRESS — keep polling" result instead of failing at its cap ([#169](https://github.com/jonnyzzz/mcp-steroid/issues/169)); `smart_non_modal` waits out dialog-less modal progress (bounded, with progress notifications) while a real modal dialog still fails fast.</li>
<li>One hung script can no longer wedge every other MCP tool into 60-second timeouts ([#214](https://github.com/jonnyzzz/mcp-steroid/issues/214)), and a <b>31-second UI freeze</b> from `syncDocuments` on the EDT is gone, with a fail-fast guard against reintroduction ([#318](https://github.com/jonnyzzz/mcp-steroid/issues/318)).</li>
<li>Three `steroid_input` / `steroid_take_screenshot` defects against modal dialogs are fixed ([#309](https://github.com/jonnyzzz/mcp-steroid/issues/309)).</li>
<li><b>Inspections are crash-isolated and cancellable</b>: one crashing inspection no longer aborts the whole sweep; per-tool failures are reported in a structured `failedTools` section while the rest keep running ([#93](https://github.com/jonnyzzz/mcp-steroid/issues/93), [#69](https://github.com/jonnyzzz/mcp-steroid/issues/69), [#94](https://github.com/jonnyzzz/mcp-steroid/issues/94)).</li>
<p>### Execution history in one shared store — and we'd love to see yours</p>
<p>Execution history moved into **collision-safe shared storage under `~/.mcp-steroid/runs`** with full backend provenance ([#280](https://github.com/jonnyzzz/mcp-steroid/issues/280), [#433](https://github.com/jonnyzzz/mcp-steroid/issues/433), [#414](https://github.com/jonnyzzz/mcp-steroid/issues/414)); execution events route through a bounded serial write queue so log order is deterministic and a write failure fails the call honestly ([#436](https://github.com/jonnyzzz/mcp-steroid/issues/436)).</p>
<p>Sharing that folder shapes the product: **we are looking forward to your execution histories** — real `~/.mcp-steroid/runs` sessions are exactly what we analyze to adjust and fine-tune the tools, prompts, and recipes ([how the learning loop works](https://devrig.dev/docs/learning-methodology/), [what to send and how](https://devrig.dev/docs/need-your-experiments-and-support/)). **We also welcome proof-of-concept customers and enterprise partners** — to have devrig evaluated on your repositories with us, see [how you can help](https://devrig.dev/docs/strategy/) and get in touch.</p>
<p>### Fourteen downloadable IDE products, resolved reliably</p>
<p>PhpStorm, RubyMine, DataGrip, RustRover, and MPS join the catalog — **14 IDE products, up from nine** ([#430](https://github.com/jonnyzzz/mcp-steroid/issues/430), [#434](https://github.com/jonnyzzz/mcp-steroid/issues/434)).</p>
<li><b>Android Studio resolution</b> picks the newest advertised version, with pinning by version, prefix, baseline, or channel ([#432](https://github.com/jonnyzzz/mcp-steroid/issues/432)); JetBrains EAP resolution falls back to the newest available build when an EAP channel goes stale — ending the PyCharm "Build Expired" failure found in [#412](https://github.com/jonnyzzz/mcp-steroid/issues/412).</li>
<li>Downloads retry stalled connections with resume, resuming from the partial file ([#423](https://github.com/jonnyzzz/mcp-steroid/issues/423)); every catalog product is integration-tested against recorded feed payloads, with opt-in live-network lanes ([#431](https://github.com/jonnyzzz/mcp-steroid/issues/431)).</li>
<p>### `devrig install`: agents, the plugin, and any MCP client</p>
<li><b>New `devrig install plugin`</b> discovers running JetBrains IDEs and installs or updates MCP Steroid over each IDE's built-in REST endpoint — the IDE's own install dialog is the consent gate; `--check` is a read-only dry-run ([#82](https://github.com/jonnyzzz/mcp-steroid/issues/82), [#391](https://github.com/jonnyzzz/mcp-steroid/issues/391)). `devrig backend` / `devrig project` listings promote the command for every running IDE lacking the plugin.</li>
<li><b>New `devrig install config`</b> prints the manual MCP configuration for clients devrig cannot configure automatically (Cursor, Windsurf, …); bare `devrig install` prints an overview with live per-agent CLI detection ([#277](https://github.com/jonnyzzz/mcp-steroid/issues/277)); a missing agent CLI yields friendly guidance at exit 64 instead of a stacktrace ([#342](https://github.com/jonnyzzz/mcp-steroid/issues/342)).</li>
<li>Flag-less `devrig install devrig` does exactly one thing — re-register the launcher and PATH — with no implicit plugin installs, running under `DEVRIG_JAVA_HOME`, never touching your `JAVA_HOME` ([#398](https://github.com/jonnyzzz/mcp-steroid/issues/398)). Agents are configured only through their own CLIs; `docs/install-scripts-contract.md` locks that scope in writing.</li>
<p>### In-IDE onboarding and a devrig-first settings page</p>
<p>When devrig is missing, the plugin can show a single promotion balloon linking devrig.dev — behind a registry key that is **off by default**; the settings page carries the same offer as the default surface ([#367](https://github.com/jonnyzzz/mcp-steroid/issues/367)). One click installs devrig through devrig's own updater machinery (shared per-pid markers prevent duplicate ~611 MB downloads), and installing devrig registers nothing with any agent.</p>
<p>The settings page is one **Devrig** section (**Tools → Devrig — MCP Steroid**, [#394](https://github.com/jonnyzzz/mcp-steroid/issues/394)) plus a collapsed direct-HTTP section marked deprecated: a copyable install one-liner next to a button that runs the same script, display-only `devrig install <agent>` rows, and a collapsed stdio `mcpServers` snippet for other MCP clients. Every displayed path is the real absolute OS-native path. The Marketplace listing was rewritten around the core value ([#355](https://github.com/jonnyzzz/mcp-steroid/issues/355), [#395](https://github.com/jonnyzzz/mcp-steroid/issues/395)).</p>
<p>### devrig sessions that fail loudly, with bounded process waits</p>
<li>`devrig mcp` <b>self-terminates when orphaned</b> — SIGKILL'd agent sessions no longer leave ~250 MB JVMs running for days ([#132](https://github.com/jonnyzzz/mcp-steroid/issues/132)); every production process wait is bounded, and timed-out process trees are force-killed ([#387](https://github.com/jonnyzzz/mcp-steroid/issues/387)).</li>
<li>A malformed stdin line no longer wedges the MCP session: devrig answers with JSON-RPC `-32700` and keeps serving ([#461](https://github.com/jonnyzzz/mcp-steroid/issues/461)).</li>
<li>Windows: the user-PATH registration hang is fixed ([#150](https://github.com/jonnyzzz/mcp-steroid/issues/150)), and `devrig status` no longer reports false registration drift over an unquoted `devrig.cmd` path ([#160](https://github.com/jonnyzzz/mcp-steroid/issues/160)).</li>
<p>### Windows support, validated on real Windows</p>
<p>The devrig launcher, managed-backend commands, and the test infrastructure now work on Windows dev hosts ([#158](https://github.com/jonnyzzz/mcp-steroid/issues/158)); `:test-integration-agent-launch` runs the same agent-launch matrix on Windows and Linux with per-OS assertions ([#255](https://github.com/jonnyzzz/mcp-steroid/issues/255), [#257](https://github.com/jonnyzzz/mcp-steroid/issues/257), [#262](https://github.com/jonnyzzz/mcp-steroid/issues/262), [#269](https://github.com/jonnyzzz/mcp-steroid/issues/269)). The suites stay genuinely Windows-correct — CRLF-normalized assertions, `Path.of(...)`-built path fragments, an injectable executability probe ([#445](https://github.com/jonnyzzz/mcp-steroid/issues/445)) — and the agent CLI test runner bounds whole process trees and cleans up under NTFS lock semantics ([#407](https://github.com/jonnyzzz/mcp-steroid/issues/407)).</p>
<p>### Install scripts: correct next steps, session PATH, honest naming</p>
<p>The installer build and verification model — every URL and SHA-256 baked in at build time, per-platform JDKs, PGP-verified vendor feeds — is on the blog: [Install, Launch, Update: Shipping a CLI on Five Platforms — the devrig Approach](https://jonnyzzz.com/blog/2026/08/06/devrig-install-launch-autoupdate/).</p>
<li>The printed next step is agent-qualified (`devrig install claude|codex|gemini`) ([#320](https://github.com/jonnyzzz/mcp-steroid/issues/320)), and `install.ps1` prepends the bin dir to the <b>current session's</b> PATH ([#275](https://github.com/jonnyzzz/mcp-steroid/issues/275)).</li>
<li>`install.ps1` works on stock Windows PowerShell 5.1 — StrictMode-safe arch detection ([#273](https://github.com/jonnyzzz/mcp-steroid/issues/273)), no progress-bar download crawl ([#274](https://github.com/jonnyzzz/mcp-steroid/issues/274)).</li>
<li>Both installers are contractually non-interactive under `curl|sh` / `irm|iex` with ASCII-only output ([#278](https://github.com/jonnyzzz/mcp-steroid/issues/278)), and the JDK install directory is named by the vendor JDK version ([#362](https://github.com/jonnyzzz/mcp-steroid/issues/362)).</li>
<p>### Prompt corpus: recipes that work on every IDE</p>
<li>The structured test-run article is available on every IDE ([#406](https://github.com/jonnyzzz/mcp-steroid/issues/406)): the Gradle recipe stays on IDEA/Android Studio while a platform-only branch covers PyCharm, GoLand, WebStorm, CLion, RubyMine, and DataGrip — and pre-existing runs of the same configuration are never misattributed or destroyed.</li>
<li>The lsp/completion recipe compiles warning-free on 2026.1 and 2026.2 via the public extension point ([#409](https://github.com/jonnyzzz/mcp-steroid/issues/409)), and verification primitives now distinguish "clean" from "did not run" with a canonical result vocabulary ([#142](https://github.com/jonnyzzz/mcp-steroid/issues/142)).</li>
<p>### devrig.dev everywhere, and a devrig-first website</p>
<p>**https://devrig.dev is the single canonical public identity** ([#197](https://github.com/jonnyzzz/mcp-steroid/issues/197), [#319](https://github.com/jonnyzzz/mcp-steroid/issues/319), [#330](https://github.com/jonnyzzz/mcp-steroid/issues/330), [#335](https://github.com/jonnyzzz/mcp-steroid/issues/335)): loop-free redirects from the old host, corrected canonical/OG/sitemap metadata, protected by build-time assertions and post-deploy live checks ([#331](https://github.com/jonnyzzz/mcp-steroid/issues/331), [#332](https://github.com/jonnyzzz/mcp-steroid/issues/332)).</p>
<li>The homepage centers one primary action — install devrig — and the README follows with honest capability claims ([#334](https://github.com/jonnyzzz/mcp-steroid/issues/334), [#337](https://github.com/jonnyzzz/mcp-steroid/issues/337)–[#339](https://github.com/jonnyzzz/mcp-steroid/issues/339), [#349](https://github.com/jonnyzzz/mcp-steroid/issues/349)); a live-site audit fixed tool counts, commands, and lingering old-domain URLs ([#348](https://github.com/jonnyzzz/mcp-steroid/issues/348)).</li>
<li><b>The honest headless story</b>: Xvfb on Linux/CI, a real GUI on macOS/Windows, no true headless — with a new "Running devrig in CI" guide ([#343](https://github.com/jonnyzzz/mcp-steroid/issues/343), [#346](https://github.com/jonnyzzz/mcp-steroid/issues/346), [#219](https://github.com/jonnyzzz/mcp-steroid/issues/219)) — and a page of <b>measured with/without-MCP A/B findings</b> with test sources and CI run IDs as provenance, honest negatives included ([#232](https://github.com/jonnyzzz/mcp-steroid/issues/232)).</li>
<p>### Under the hood: build, CI, and shared internals</p>
<li><b>Gradle 9.6.1</b> + IntelliJ Platform Gradle Plugin 2.18.1 with every resulting deprecation resolved ([#371](https://github.com/jonnyzzz/mcp-steroid/issues/371)); a remote build cache with a read-only public token as the zero-setup contributor fallback; release builds compile entirely from source with all caches disabled.</li>
<li>The [#412](https://github.com/jonnyzzz/mcp-steroid/issues/412) burn-down brought the CompatTests lane to 9/9 and unblocked full main-matrix runs (test design: [A Real IntelliJ IDEA Inside Docker](https://jonnyzzz.com/blog/2026/07/05/intellij-in-docker-integration-tests/)); installer integration tests dropped from ~10 minutes to 44 seconds via digest-pinned images ([#443](https://github.com/jonnyzzz/mcp-steroid/issues/443)); Gemini missing-key tests report SKIPPED honestly ([#408](https://github.com/jonnyzzz/mcp-steroid/issues/408)).</li>
<li>A new IJ-free <b>devrig-common</b> module holds everything the CLI and the plugin share — the `~/.mcp-steroid` layout, update coordination, launcher tooling, PID-marker wire types — with forbidden-import and CI guards keeping it minimal ([#444](https://github.com/jonnyzzz/mcp-steroid/issues/444)).</li>
<li>Design records land the validated LIST/CALL recipes for IntelliJ's native MCP tools ([#352](https://github.com/jonnyzzz/mcp-steroid/issues/352), [#353](https://github.com/jonnyzzz/mcp-steroid/issues/353)) — groundwork for a future release.</li>
<p>### Known issues</p>
<li>[#259](https://github.com/jonnyzzz/mcp-steroid/issues/259) — `devrig install plugin` targets <b>running</b> IDEs only; closed-IDE installs are the recorded follow-up design.</li>
<li>[#267](https://github.com/jonnyzzz/mcp-steroid/issues/267) — devcontainers: the client project root is not yet configurable.</li>
<p>### Acknowledgements</p>
<p>0.102 is the first release of this project built by a real team — thank you to every contributor:</p>
<li><b>Matvei Ludzskii</b> ([@matveidetonator](https://github.com/matveidetonator)) — the schema-driven devrig CLI unification ([#284](https://github.com/jonnyzzz/mcp-steroid/issues/284)): generated tool commands, `open_project --wait`, output and exit-code hardening, and the Docker CLI smoke tests (81 commits, 8 merged PRs), plus nine issue reports including [#414](https://github.com/jonnyzzz/mcp-steroid/issues/414) and [#415](https://github.com/jonnyzzz/mcp-steroid/issues/415).</li>
<li><b>Grigory Gulyuk</b> ([@BraindeadDogge](https://github.com/BraindeadDogge)) — the in-IDE devrig onboarding ([#367](https://github.com/jonnyzzz/mcp-steroid/issues/367)): the state-driven settings page, display-only agent setup commands, and install-via-devrig's-updater (41 commits), plus 17 issue reports across the plugin UX/activation series ([#222](https://github.com/jonnyzzz/mcp-steroid/issues/222)–[#228](https://github.com/jonnyzzz/mcp-steroid/issues/228), [#242](https://github.com/jonnyzzz/mcp-steroid/issues/242), [#244](https://github.com/jonnyzzz/mcp-steroid/issues/244)–[#249](https://github.com/jonnyzzz/mcp-steroid/issues/249), [#160](https://github.com/jonnyzzz/mcp-steroid/issues/160), [#201](https://github.com/jonnyzzz/mcp-steroid/issues/201), [#413](https://github.com/jonnyzzz/mcp-steroid/issues/413)).</li>
<li><b>Yahor Berdnikau</b> ([@Tapchicoma](https://github.com/Tapchicoma)) — the [Kotlin Build Tools API](https://github.com/JetBrains/kotlin/tree/master/compiler/build-tools/kotlin-build-tools-api) migration ([#361](https://github.com/jonnyzzz/mcp-steroid/issues/361)) behind this release's compile-speed story, contributed together with the Kotlin team: dropped the kotlinc-dist download and daemon, and structured the compiler messages (26 commits). Thank you for the collaboration and the ongoing support!</li>
<li><b>Aleksei Priakhin</b> ([@aleksei-priakhin](https://github.com/aleksei-priakhin)) — Windows dev-host adoption ([#158](https://github.com/jonnyzzz/mcp-steroid/issues/158)): the devrig launcher plus the test and prompt-compilation infrastructure on Windows hosts, and a `DaemonCodeAnalyzer` deprecation fix.</li>
<li><b>Serge Baranov</b> ([@CrazyCoder](https://github.com/CrazyCoder)) — the kotlinc 2.4.10 bump for 2026.3 EAP ([#359](https://github.com/jonnyzzz/mcp-steroid/issues/359), fixing his own report [#357](https://github.com/jonnyzzz/mcp-steroid/issues/357)), and the reports that drove much of this release's contract work: the execute_code framing break ([#154](https://github.com/jonnyzzz/mcp-steroid/issues/154)), the missing host-IDE identity ([#155](https://github.com/jonnyzzz/mcp-steroid/issues/155)), the Android Studio / Java 21 incompatibility ([#157](https://github.com/jonnyzzz/mcp-steroid/issues/157)), and the UpdateChecker version-comparison hazards ([#358](https://github.com/jonnyzzz/mcp-steroid/issues/358), [#360](https://github.com/jonnyzzz/mcp-steroid/issues/360)).</li>
<li><b>Igor Engel</b> ([@gt22](https://github.com/gt22)) — preserving the agent-produced patch for evaluation in the test-experiments arena ([#256](https://github.com/jonnyzzz/mcp-steroid/issues/256)).</li>
<li><b>Dmitriy Zharikhin</b> ([@dzharikhin](https://github.com/dzharikhin)) — reporting the devcontainers project-root configurability gap ([#267](https://github.com/jonnyzzz/mcp-steroid/issues/267)).</li>
<li><b>Eugene Petrenko</b> ([@jonnyzzz](https://github.com/jonnyzzz)) — project lead: the devrig CLI, installer, and auto-update; plugin architecture; release engineering and CI (381 commits, 116 merged PRs).</li>
<p>Full release notes: <a href="https://devrig.dev/releases/0.102/">devrig.dev/releases/0.102/</a></p>]]></change-notes>
  </plugin>
</plugins>

