Unofficial plugin. A personal community project — not affiliated with, endorsed by, or supported by JetBrains or Anthropic. It is not distributed on JetBrains Marketplace; install it from the release zip below.
A JetBrains plugin that adds a Claude Subscription agent to AI chat — one that authenticates with a Claude.ai Pro/Max subscription instead of demanding Anthropic Console API billing.
Install it and the agent appears. There is nothing else to run.
JetBrains launches its bundled Claude agent like this:
npx -y @agentclientprotocol/claude-agent-acp@0.62.0 --hide-claude-auth
That flag does two things inside the package:
- removes
claude-ai-login("Claude Subscription") from the offeredauthMethods, leaving only Anthropic Console and gateway auth; - rejects subscription credentials outright when a session starts:
if (shouldHideClaudeAuth() && initializationResult.account.subscriptionType && !this.gatewayAuthRequest) {
throw RequestError.authRequired(undefined, "This integration does not support using claude.ai subscriptions.");
}On a consumer Max/Pro account the Console login then just re-issues a subscription token, the guard fires again, and the IDE shows:
Authentication was reset. Please create a new chat for the change to take effect.
Creating a new chat cannot help — it is not a stale-session problem.
This plugin registers the same official package as a local agent, without the flag. Nothing is patched or bypassed: the package supports subscriptions by default, which is how other ACP clients use it. The restriction is JetBrains-side, applied to their own bundled entry.
- A JetBrains IDE on the 262.* branch (2026.2) with the AI Assistant plugin.
- A Claude.ai Pro or Max subscription.
- Node.js — but see below, one is usually already present.
⬇ Download jetbrains-claude-subscription-0.1.0.zip — or pick the newest zip from the releases page.
Then in the IDE: Settings → Plugins → ⚙ → Install Plugin from Disk…, choose the zip
(do not unzip it), and restart.
JAVA_HOME=/path/to/a/jdk ./gradlew buildPlugin
# build/distributions/jetbrains-claude-subscription-0.1.0.zipgradle.properties sets platformLocalPath and aiAssistantPluginPath to a locally
installed IDE so the build does not download a full platform. Point them at your own
installation.
On first startup the agent is registered and a notification confirms it. Select
Claude Subscription in the AI chat agent picker and authenticate — the browser flow
now offers --claudeai login instead of --console.
One entry in ~/.jetbrains/acp.json, which the IDE reads for locally defined agents and
watches for changes:
{
"agent_servers": {
"Claude Subscription": {
"command": "<node>",
"args": ["<npx-cli.js>", "-y", "@agentclientprotocol/claude-agent-acp@0.62.0"],
"env": { "PATH": "<node bin>:<inherited PATH>" },
"use_idea_mcp": true,
"use_custom_mcp": true
}
}
}The file is merged, never overwritten — other agents and default_mcp_settings
survive. The pre-plugin contents are copied once to
acp.json.before-claude-subscription-plugin. If the file exists but is not valid JSON
the plugin refuses to write at all and says so, rather than silently dropping whatever
was in it.
Two findings drove the shape:
npxis not enough on its own.npx-cli.jsre-execs its helpers through#!/usr/bin/env node, so the node binary must be onPATH. Calling it by absolute path fails withenv: 'node': No such file or directory. Hence the explicitPATH.- The path is recomputed on every startup. If no system node exists, the fallback is
the runtime the IDE downloads for its own ACP agents
(
~/.cache/JetBrains/<IDE>/acp-agents/.runtimes/node/<version>/bin). That path carries a version number, so freezing it would break on the next runtime update. The plugin re-resolves and rewrites only when the result actually changed.
If neither a system node nor an IDE runtime is found, you get a notification explaining what to install — not a silent failure.
State lives in claude-subscription-acp.xml:
| Key | Default | Meaning |
|---|---|---|
manageAgent |
true |
Turn off to stop the plugin touching acp.json and manage the entry yourself. |
displayName |
Claude Subscription |
Also determines the agent id the IDE derives, and therefore icon matching. |
packageSpec |
@agentclientprotocol/claude-agent-acp@0.62.0 |
Pinned deliberately — the guard being worked around lives in this package. |
Model, effort and permission mode are not managed here. They are ACP session config options that the IDE stores per agent id, so pick them once in the chat panel after the agent appears.
-
The icon uses internal API, and sits in every agent's icon path.
acp.jsonhas no icon field, so the icon comes from the AI Assistant extension pointcom.intellij.ml.llm.core.chat.ui.agentIconService— internal, not a published contract, hence the262.*build range.Worth knowing how it behaves: icons resolve through
EP_NAME.extensionList.firstNotNullOf { it.loadIconForAgent(agentId) }, butloadIconForAgentreturns a non-nullIcon. The first registered extension therefore always answers and nothing falls through. Being consulted at all requiresorder="first", which means this plugin is asked for every agent's icon. It answers for its own agent and hands every other one back to the service that would have answered otherwise. If that delegation ever fails, other agents fall back to a generic icon — the failure is cosmetic and logged, never fatal.If the extension point breaks outright, the agent itself keeps working; only the icon is lost.
-
POSIX only. Node resolution assumes POSIX paths and Linux/macOS IDE cache locations. Windows is untested.
-
Unsupported by JetBrains. They disabled this deliberately in their bundled entry. An IDE update can change the behaviour this relies on.
-
A harmless
AcpModeManager - Agent ... has no registered modeswarning appears in the log. The bundled agent logs it too; the Claude ACP wrapper does not use ACP session modes.
icons/claude.svg is Anthropic's Claude mark, taken from the official Claude Code
JetBrains plugin so the agent is visually recognisable. This project is a personal
integration tool, not affiliated with or endorsed by Anthropic or JetBrains, and the mark
remains Anthropic's.
MIT — except icons/claude.svg, which is Anthropic's mark (see Attribution).