Skip to content

Latest commit

 

History

History
840 lines (565 loc) · 50.7 KB

user-manual.md

File metadata and controls

840 lines (565 loc) · 50.7 KB

NetBeans Claude Code GUI — User Manual

Plugin overview: session tab open in NetBeans

Table of Contents

  1. Overview
  2. Requirements & Installation
  3. Quick Start
  4. Session Window
  5. Sending Prompts
  6. Favorites
  7. Prompt History
  8. File Attachments
  9. Interactive Prompts (Choice Menu)
  10. File-Change Permissions (Diff Panel)
  11. Settings (Tools → Options → Claude Code)
  12. Profiles
  13. Managing Sessions
  14. IDE Tools (MCP)
  15. Troubleshooting

1. Overview

NetBeans Claude Code GUI is a NetBeans IDE plugin that embeds the Claude Code CLI as a full interactive terminal session directly inside the IDE. You type prompts in a dedicated session tab, Claude reads and edits your project files, and the plugin provides:

  • a graphical file diff (using NetBeans' built-in diff viewer) before any change is written to disk
  • a graphical panel for responding to Claude's interactive questions

IDE integration (open editors, diagnostics, current selection) is exposed to Claude via the MCP protocol so that Claude always has full context about your work.


2. Requirements & Installation

See Installation & Build for requirements, installation steps, and build instructions.


3. Quick Start

  1. Right-click your project in the Projects window → Open with Claude Code.
  2. A session tab opens and Claude Code starts. Wait for the Claude Code prompt to appear in the terminal.
  3. If this is the first time running Claude Code (or the first time for this project), answer Claude's initial setup questions in the terminal or the choice panel.
  4. Type your first prompt in the input area at the bottom (e.g., Explain what this project does).
  5. Press Ctrl+Enter (default) to send. Claude's response appears in the terminal.

Session tab after first prompt


4. Session Window

Session window layout

The session tab contains the following areas:

Terminal area (center)

Displays Claude Code output. You can also click into the terminal and interact with Claude Code directly — as if it were running in a standalone terminal. Use this when the plugin fails to detect Claude's state correctly, for example if an interactive choice panel was not shown.

Zoom — use Alt+Scroll (mouse wheel) to zoom in and out, or Ctrl+= / Ctrl+−. Press Ctrl+0 or Alt+Click Wheel (middle-click while holding Alt) to reset to the default size. The Zoom submenu is also available via right-click.

Prompt panel (bottom)

Contains the input area, ▶ Send / ✖ Cancel buttons, and ☰ History / ★ Favorites buttons.

Status bar (below the prompt panel, visible during an active session)

Edit mode selector — controls how Claude handles file edits:

Label Internal value Description
Plan Mode plan Claude can discuss and plan but cannot edit files
Ask on Edit default Claude asks for permission before each edit (default)
Accept on Edit acceptEdits Claude applies edits automatically without asking

Press Shift+Tab anywhere in the prompt panel to cycle through modes.

Model selector — lists the models available in the current session. Standard entries (sonnet, opus, haiku) are discovered by opening the /model menu. For Claude-compatible API, OpenAI Compatible and ChatGPT Subscription profiles, every model assigned an alias in Model Aliases (sonnet, opus, haiku or custom) also appears here, shown by its full provider ID. Selecting a model switches to it immediately.

On the right side of the status bar:

  • Session state — Starting while the process is initializing, Ready when Claude is waiting for input, Working while a task is in progress.
  • Active plan — name of the current plan file, if any (shown when Claude is operating in plan mode with a saved plan).
  • Claude version — the version of the claude CLI detected at session start.

5. Sending Prompts

Input area

A multi-line text area. Wrap long prompts naturally — newlines are preserved. @path tokens are highlighted in blue (see File Attachments).

Sending

Press the configured send key (default: Ctrl+Enter) or click the ▶ Send button. The input area is cleared after sending.

You can change the send key in Tools → Options → Claude Code → General (choices: Enter, Shift+Enter, Ctrl+Enter, Alt+Enter).

Cancelling

Press Escape in the input area, or click the ✖ Cancel button to interrupt Claude's running task.

Edit mode

Press Shift+Tab anywhere in the prompt panel to cycle Claude Code's edit mode. The current mode is shown in the status bar.

Button states

  • ▶ Send is active only when Claude is idle and ready to accept input.
  • ✖ Cancel is active only when Claude is working.

If the states appear out of sync:

  • Send is inactive but Claude is ready — click ✖ Cancel to reset the state.
  • Cancel is inactive but Claude is working — click into the terminal area and interact directly.

Context menu (right-click in the input area)

Item Description
Cut / Copy / Paste / Select All / Clear Standard text editing actions
Add to Favorites Saves the current input text as a project favorite (active only when the input is non-empty and a working directory is set)
Favorites... Opens the Favorites dialog
Start New Session Immediately closes the current session and opens a fresh one (available only during an active session)
Switch to Session… Opens the Save & Switch dialog pre-selecting "Resume specific" (available only during an active session)

6. Favorites

Favorites are saved prompts you can reuse with a button click or a keyboard shortcut.

Scope

  • Global favorites — available in every project. Managed in Tools → Options → Claude Code → Favorites.
  • Project favorites — available only for a specific working directory.

Adding a favorite

Right-click the input area → Add to Favorites. This always adds to project favorites. To promote a project favorite to global, use the To Global button in the Favorites dialog.

Favorites dialog

Click ★ Favorites in the prompt panel to open the dialog.

Favorites dialog

The dialog shows a table with the following columns:

Column Description
☐ Checkbox for multi-select
Text Prompt text (truncated to 100 characters)
Shortcut Assigned keyboard shortcut, if any
Scope PROJECT or GLOBAL

Buttons:

Button Effect
Send Loads the selected favorite into the input area and closes the dialog (also triggered by double-click)
Edit Edit the text of the selected favorite
To Global Move selected PROJECT favorite(s) to global scope
Assign Shortcut Assign a keyboard shortcut to the selected favorite
↑ / ↓ Change the display order of favorites
Delete Delete selected favorite(s) (PROJECT only — global favorites can only be deleted via Tools → Options → Claude Code → Favorites)

The search field filters entries by text.

Assigning keyboard shortcuts

Click Assign Shortcut to open the shortcut capture dialog. Press the desired key combination(s) — they are displayed in the field. Multiple key combos can be chained (e.g., Ctrl+K Ctrl+F).

If the combination is already used by another favorite, a conflict warning is shown and OK is disabled.

Note: All key presses are captured as shortcut input — to close the dialog use the OK, Clear, or Cancel buttons with the mouse.

Shortcut conflicts with other NetBeans IDE actions are not checked automatically. If a shortcut does not work, check for conflicts in Tools → Keymap (search "Claude Favorite").


7. Prompt History

The plugin records every sent prompt per working directory.

In-session keyboard navigation

Action Key
Previous prompt (older) Ctrl+Up
Next prompt (newer) Ctrl+Down

These keys work inside the input area. At the most-recent position, Ctrl+Down clears the field.

History dialog

Click the ☰ History button to open the History dialog.

Prompt History dialog

The dialog shows history for the current working directory. The table has the following columns:

Column Description
☐ Checkbox for multi-select
Prompt Prompt text (truncated to 120 characters)
Time Date and time the prompt was sent (yyyy-MM-dd HH:mm)

Buttons:

Button Effect
Send Loads the selected entry into the input area and closes the dialog (also triggered by double-click)
To Favorites Saves selected entries as project favorites
Delete Deletes selected entries
Clear older… Opens a date input dialog (yyyy-MM-dd); deletes all entries from that date and older (with confirmation)

The search field filters entries by prompt text.

History settings

Configure in Tools → Options → Claude Code → General:

Setting Default Description
History max depth 200 Maximum entries kept per working directory
History TTL (days) 0 (forever) Entries older than this are purged automatically

8. File Attachments

You can attach files to a prompt as @path tokens. Claude Code interprets these as file references.

@-completion popup

Type @ anywhere in the input area. A popup appears listing the contents of the current directory level. Hidden files (starting with .) are not shown. .. is always present for navigating up.

@ path completion popup

Key Action
Up / Down Navigate the list
Enter or Tab File: insert and close popup. Directory: navigate into it.
Space Insert the current item as-is (even if it is a directory) and close the popup
Escape Dismiss the popup
Double-click Same as Enter

Drag-and-drop and paste

You can drag items from the OS file manager or the NetBeans Projects tree and drop them onto the input area, or paste them via Ctrl+V, Shift+Ins, or Paste from the context menu.

Three types of content are supported:

Content type What is inserted
File inside the working directory (from OS or Projects tree) Relative path without @ (e.g. src/Main.java)
File outside the working directory @/absolute/path
Package directory (under a source root such as src/main/java/) Fully-qualified package name (e.g. com.example.util)
Directory inside the working directory (not a source root) Relative path without @
Directory outside the working directory @/absolute/path
Image from clipboard Saved as a temporary PNG file; @/tmp/....png inserted
Plain text Inserted as-is

9. Interactive Prompts (Choice Menu)

Claude Code sometimes presents interactive prompts (Yes/No or multiple choice). The plugin detects these and shows a Choice Menu panel in place of the prompt input area.

Choice Menu panel with numbered options

Choice Menu panel with Yes/No question

Yes / No options appear as buttons. Clicking one sends the answer immediately and closes the panel.

Other options appear as radio buttons. Some options may include a text field for additional input. Click the desired option (and optionally fill in the text field), then press Enter or click Send to submit. Press Escape to cancel.

Long menus. When Claude shows only part of a long list (e.g. /model with more than a handful of models), the plugin scrolls through the whole list once to collect every item, then shows them all. If the list is taller than Choice menu max height (see Settings), the option list gets a scrollbar. Items numbered 10 and above are selected by moving Claude's cursor with the arrow keys, so every item can be chosen.

After submitting or cancelling, the input area is restored automatically.

Note: If the choice panel does not appear when Claude asks a question, or appears unexpectedly without a question — click into the terminal area and interact with Claude directly. The panel will disappear automatically once Claude's state changes.


10. File-Change Permissions (Diff Panel)

When Claude Code is about to edit or create a file, the plugin intercepts the operation and shows a diff panel before the change is written to disk.

The diff panel appears either embedded in the session tab (replacing the input area) or in a separate IDE tab, depending on the setting in Tools → Options → Claude Code → General → Open file diff in a separate tab.

Diff panel with permission bar

Permission bar

[✓✓ Accept All]  [✓ Accept]   [_Decline reason (Optional)_]  [✗ Decline]   [Cancel]
Button Effect
✓✓ Accept All Accept this change and switch Claude's edit mode to "Accept on Edit" for this session — all subsequent edits are accepted automatically without showing a diff
✓ Accept Allow this single change; Claude continues
✗ Decline Reject this change; optionally send a reason to Claude (type it in the text field first)
Cancel Reject this change and interrupt Claude's current task
Close tab (×) Treated as Decline without a reason

When to use each action

Situation Action
You agree with all the proposed changes Click ✓ Accept (or ✓✓ Accept All to skip diffs for all further edits in this session)
You disagree completely — the change should not be made at all Click ✗ Decline (optionally explain why in the reason field)
You partially agree — the change is on the right track but needs adjustment Type what needs to be different in the reason field, then press Enter or click ✗ Decline. Claude will receive your feedback and try again.

Decline reason

Type a reason in the text field between the Accept and Decline buttons. When you click Decline, the reason is sent to Claude. Pressing Enter in a non-empty reason field automatically clicks Decline.

If you type a decline reason but click Accept, a confirmation dialog warns you that the reason will not be sent.

Keyboard navigation

Tab / Shift+Tab cycles focus between: Accept All → Accept → reason field → Decline → Cancel. Press Escape to click Cancel.

Markdown preview

For .md files, a rendered markdown preview is shown alongside the raw diff. Toggle it via right-click on the diff → Preview Markdown (checkbox). The default state is configured in Tools → Options → Claude Code → General → Markdown preview in diff, which offers three options:

Option Behaviour
Always Always show the inline preview for .md files in the diff panel (default)
Never Never show the inline preview
Except when Plan Preview tab is open Show the inline preview, but suppress it when a dedicated live Plan Preview tab is already visible for a file in the plans/ directory

Toggling in the context menu does not change the global setting.

Pin Preview — opens the rendered markdown (proposed content) in a separate IDE tab that remains open after the diff is closed.

Both features are especially useful in Claude's plan mode: they let you read the formatted plan before deciding whether to accept it.

Markdown Preview controls

These controls apply to every Markdown Preview tab — whether shown inside the diff panel, opened by the show_markdown / show_markdown_file MCP tools, or the Auto Plan Preview tab.

Action Key / gesture
Open find bar Ctrl+F
Next match F3
Previous match Shift+F3
Close find bar Escape
Reload from disk F5
Zoom in Alt+Scroll up or Ctrl+=
Zoom out Alt+Scroll down or Ctrl+−
Reset zoom Ctrl+0 or Alt+Click Wheel
Zoom submenu Right-click → Zoom

Auto Plan Preview

When Claude writes a plan file to a plans/ directory (e.g. ~/.claude/plans/my-plan.md), the plugin can automatically open a live Markdown Preview tab the moment you click Accept in the diff panel.

  • The preview opens immediately when you click Accept; the file content appears within a second or two as Claude finishes writing it.
  • If you click Accept again for the same plan file (e.g. after an update), the existing preview tab refreshes in-place instead of opening a new tab.
  • The feature works with any CLAUDE_CONFIG_DIR location — it detects the plans/ directory by name, so named profiles with custom config directories are supported automatically.

Enable / disable: Tools → Options → Claude Code → General → Automatically open Plan Preview tab when Claude writes a plan.

If the file being edited is outside the current project directory, a warning ⚠ is shown in the diff panel.


11. Settings

Open Tools → Options → Claude Code in NetBeans.

General tab

Settings — General tab

Setting Default Description
Start new session when opening with Claude Off (Continue last) Checked → always start a New session when opening with the project context menu or when NetBeans restores a closed session tab on restart. Unchecked → Continue last.
Session tab dock position Editor area Where the Claude Code session tab is docked when first opened. Choices: Editor area, Right side, Left side top, Left side bottom, Bottom dock.
Send prompt key Ctrl+Enter Key combination that sends the prompt from the input area.
Insert newline key Enter Key combination that inserts a newline in the input area. The send and newline keys are configured independently but cannot be set to the same value.
Open file diff in a separate tab Off Opens the diff panel in a new IDE tab instead of embedding it in the session tab.
File diff tab dock position Editor area Where the File Diff tab is docked when opened as a separate tab. Enabled only when "Open file diff in a separate tab" is checked.
Markdown preview in diff Always Controls when the inline markdown preview is shown for .md files in the diff panel. Always — always show it. Never — never show it. Except when Plan Preview tab is open — show it, but suppress it when the diffed file is a plan file and Auto Plan Preview is on (or its tab is already open).
Automatically open Plan Preview tab when Claude writes a plan On When enabled, a live Markdown Preview tab opens automatically as soon as the user clicks Allow in a diff panel for a file in a plans/ directory.
Markdown preview dock position Right side Where the Markdown Preview tab is docked when first opened. Choices: Editor area, Right side, Left side top, Left side bottom, Bottom dock.
Choice menu focus Grab focus Controls whether the choice menu panel grabs keyboard focus when it appears. Choices: Grab focus, Show without grabbing focus, Hide menu.
Choice menu max height (px) 320 Maximum height of the option list in the choice menu panel (100–2000). Longer lists (e.g. /model with many models) get a scrollbar; the scrollbar also appears or disappears by itself when you resize the panel by dragging the divider.
Terminal font Auto Font used in the embedded terminal. Click Choose… to open the font picker. The label shows the resolved font name (e.g. Adwaita Mono, 14 (Auto) when auto-detection is active, or Monospaced, 14 when set explicitly).

Terminal font picker

The Choose… button opens a font picker dialog:

  • Font list — all installed font families. The first item, Auto (detect best available), lets the plugin choose automatically.
  • Show monospaced only checkbox — filters the list to monospace fonts (checked by default).
  • Size spinner — font size, 8–72 pt.
  • Preview — renders AaBbCc 0O1Il → ⏵ ◐ in the selected font and size, so you can verify that Claude Code TUI symbols (spinner, prompt marker) are covered.

When Auto is selected, the plugin picks the first installed font from this priority list: Adwaita Mono, Consolas, Menlo, DejaVu Sans Mono, Monospaced. Adwaita Mono has the broadest Unicode coverage for Claude Code TUI symbols; on Linux GNOME desktops it is usually pre-installed.

Advanced tab

Settings — Advanced tab

Setting Default Description
Claude CLI path (empty) Absolute path to the claude executable. Leave empty to use the system PATH.
Hang timeout (seconds) 60 Kill the process if no PTY output is received within this many seconds after launch. Set to 0 to disable.
MCP server port 28991 Port for the internal MCP SSE server. Change only if 28991 conflicts. Requires IDE restart.
Enable MCP integration On When unchecked, the --mcp-config flag is not passed to claude. Hooks (PreToolUse) are always configured regardless of this setting. Disable only if MCP causes issues.
History max depth 200 Maximum number of history entries kept per working directory.
History TTL (days) 0 Number of days after which history entries expire. 0 = keep forever.
Session list limit 30 Maximum number of past sessions shown in the session selector table.
Debug mode Off Enables verbose logging of all Claude I/O to the NetBeans log file and the Output window.

Favorites tab

Settings — Favorites tab

Manages global favorites — prompts available in every project.

The table shows all global favorites with columns: ☐ (checkbox for multi-select), Text, Shortcut.

Buttons:

Button Effect
Add Add a new global favorite (enter text in the dialog)
Edit Edit the text of the selected favorite
Assign Shortcut Assign a keyboard shortcut to the selected favorite
↑ / ↓ Change the display order
Delete Delete selected favorite(s)

The search field filters entries by text.

Profiles tab

See Section 12 — Profiles for full details on creating and managing profiles.


12. Profiles

Profiles allow you to run Claude Code under different accounts for different projects. Each profile has an isolated CLAUDE_CONFIG_DIR so that authentication and settings do not interfere with each other.

Profiles tab in Tools → Options → Claude Code

Open Tools → Options → Claude Code → Profiles.

The Default profile is always present and cannot be renamed or deleted. Named profiles can be freely created, copied, renamed, and deleted.

Profiles directory

Named profiles are stored under a common base directory (default: ~/.netbeans/claude-plugin/profiles/). Each profile occupies a subdirectory named after the profile.

The base directory only affects newly created profiles. To move existing profiles to a new location, manually move their subdirectories to the new location first, then update the directory via the New Profiles Directory field (click Change…).

The Profile Storage Directory field shows where Claude Code stores its configuration for the selected profile. For the Default profile it shows ~/.claude (not overridden) and the buttons are disabled. For named profiles:

  • Computed path (default) — <profilesDir>/<profile-name>. The field shows the path with no suffix.
  • Custom path — any directory you choose. The field shows the path with a (custom) suffix.
Button Effect
Change… Opens a directory chooser. The chosen path is stored with the profile and used as CLAUDE_CONFIG_DIR when a session starts.
Reset Clears the custom path and reverts to the computed default. Enabled only when a custom path is set.

Tip: Use a custom path to share a single Claude Code configuration directory across multiple profiles, or to point a profile at an existing ~/.claude-style directory.

Managing profiles

Button Effect
New Create a new named profile
Copy Duplicate the currently selected profile
Rename Rename the currently selected profile
Delete Delete the currently selected profile

Authentication

Select the authentication type using the radio buttons:

Type Fields to fill in How to authenticate
Claude Managed None Claude manages authentication itself. Run claude in a terminal once to set it up, or Claude will prompt you on first launch. Use /login in the session terminal to re-authenticate.
Claude Subscription OAuth token Obtain the token at claude.ai (requires Pro, Max, Team, or Enterprise subscription). Note: OAuth tokens expire periodically and must be regenerated and re-entered manually. For a smoother experience, prefer Claude Managed instead.
Claude API API key Obtain the key at console.anthropic.com (requires an Anthropic Console account with API access).
Claude-compatible API API key + Base URL Use the API key and base URL provided by your third-party provider (Anthropic-compatible endpoint).
OpenAI-compatible API API key + Base URL Route Claude Code through any OpenAI-compatible provider. The plugin starts an internal proxy that translates Anthropic API calls to OpenAI Chat Completions format. See OpenAI-compatible API below.
ChatGPT Subscription Sign in via browser Route Claude Code through OpenAI's Codex backend using a ChatGPT Free, Go, Plus, Pro, or Team subscription instead of an API key. See ChatGPT Subscription below.

Note: Changes to connection parameters (API key, Base URL) take effect only after restarting the session.

Model aliases (Claude-compatible API, OpenAI-compatible API, and ChatGPT Subscription)

If your provider names models differently from Anthropic's standard names, the plugin cannot match them to the sonnet, opus, and haiku aliases used by Claude Code. In that case, set the alias to the actual model ID used by your provider (for example, with an anthropic/ prefix). For ChatGPT Subscription, Model Aliases… becomes available once you're signed in and fetches the live list of models available to your account instead of a fixed list.

Click Model Aliases… to open the Model Aliases dialog.

Model Aliases dialog

The dialog shows a table with four columns:

Column Description
ID The model identifier as returned by the provider
Available ✓ if the model was found at the endpoint during the last Fetch; ✗ otherwise
Alias The standard alias to map this model to: sonnet, opus, haiku, custom, or blank (no alias)
Explicit Cache Experimental: send explicit prompt-cache control to the provider for this model (see below)

Explicit Cache column (experimental): GPT-5.6-family models changed how automatic prompt caching works, making it unreliable for long conversations with a stable system prompt and a growing message history — exactly the pattern of an ongoing coding session (see ChatGPT Subscription rate limits below for background). Checking this column sends explicit cache-control fields to the provider for that model: GPT-5.6+ models get an explicit cache breakpoint (limited to a 30-minute cache lifetime by the provider); older GPT models get a 24-hour cache retention hint instead. It's checked by default for GPT-5.6-family model IDs and has no effect for non-GPT models (e.g. Grok, Gemini) — their own caching, if any, is unaffected. Since this relies on provider behavior that isn't fully documented, treat it as experimental — uncheck it for a model if you notice no improvement or unexpected errors. It applies to the OpenAI Compatible connection type only: for ChatGPT Subscription the column has no effect, because the ChatGPT Codex backend rejects explicit cache-control fields — caching there is automatic, keyed to your Claude Code session.

Buttons:

Button Effect
Fetch Queries the provider's models endpoint (using the configured API key, or your signed-in ChatGPT session for ChatGPT Subscription), fills the table with discovered model IDs, and marks each as available (✓) or unavailable (✗)
Add Opens an input dialog; enter a model ID to append a new row to the table (with blank alias and no availability mark)
Rename Opens an input dialog pre-filled with the selected row's ID; confirm to update the model ID in place
↑ / ↓ Reorder rows — the order determines how models appear in the status bar model selector
Sort Sort all rows alphabetically by model ID (case-insensitive)
Delete Remove the selected row
Prune Remove all rows marked as unavailable (✗)

How to configure aliases:

  1. Click Fetch to populate the table with models available at your endpoint.
  2. For each model you want to use as a standard model (sonnet, opus, or haiku), set the corresponding alias. You can skip this step if the model ID already starts with sonnet, opus, or haiku — those are matched automatically. Claude Code also uses these aliases on its own — e.g. many subagents run on haiku and background requests on sonnet — so with ChatGPT Subscription and OpenAI Compatible profiles map all three, otherwise those requests fail with an unsupported-model error. A model mapped to an alias still appears in the model selector under its own ID.
  3. For each additional model you want to appear in the model selector, set its alias to custom. You can assign custom to as many models as you like — each will appear as a separate entry in the selector.
  4. Leave models you do not plan to use with a blank alias, or remove them with Delete / Prune.

The custom alias: Unlike the other aliases, custom is not unique — multiple models can share it. All models with the custom alias appear as individual entries in the model selector in the status bar, identified by their full provider ID. Selecting one sends /model <id> to Claude.

Note: Not all third-party models are compatible with Claude Code. Using an incompatible model may cause errors or unexpected behavior during the session.

Proxy settings

Mode Description
System managed (default) Claude Code inherits proxy settings from the IDE environment. Use this when a proxy is already configured in the system.
No proxy Forces Claude Code to connect directly, bypassing any system proxy.
Custom Specify proxy settings manually. Use this when Claude Code needs a proxy different from the system default.

Custom proxy fields:

Field Syntax Example
HTTP Proxy http://host:port http://proxy.example.com:8080
HTTPS Proxy http://host:port http://proxy.example.com:8080
NO_PROXY Empty or a comma-separated list of host patterns localhost,127.0.0.1,.example.com

Note: Claude Code communicates with the plugin via localhost. External proxies are not aware of this. If you fill in the NO_PROXY field, make sure it includes localhost — otherwise the plugin integration will stop working. If you leave the field empty, the plugin adds localhost automatically.

OpenAI-compatible API

Claude Code sends requests in Anthropic Messages API format. Many AI providers — including OpenAI, Azure OpenAI, Groq, DeepSeek, and local models via Ollama or LM Studio — use OpenAI Chat Completions format instead. The OpenAI-compatible API connection type bridges this gap by running an internal HTTP proxy inside the plugin.

How it works:

  1. When a session starts, the plugin registers an internal proxy path within the already-running MCP server.
  2. Claude Code is directed to send requests to that path (ANTHROPIC_BASE_URL=http://127.0.0.1:<mcp-port>/openai-proxy/<session-id>).
  3. The proxy translates each Anthropic Messages API request to OpenAI Chat Completions format, forwards it to your provider, and translates the response back — including streaming and tool calls.
  4. When the session stops, the proxy path is deregistered. No separate port or process is used.

Setup:

  1. Create a new profile and select OpenAI-compatible API as the connection type.
  2. Fill in Base URL — the base URL of your provider's API (e.g. https://api.openai.com/v1, http://localhost:11434/v1 for Ollama).
  3. Fill in API Key — the API key for your provider (enter any non-blank value if the provider does not require a key).
  4. Open Model Aliases… and map Claude model tiers to your provider's model names:
Alias Provider model example
sonnet gpt-4o
opus gpt-4o
haiku gpt-4o-mini

Without model aliases, Claude Code will send Anthropic model names (e.g. claude-sonnet-4-5) to your provider. Most OpenAI-compatible providers will reject these — configure aliases to avoid errors.

Provider examples:

Provider Base URL Notes
OpenAI https://api.openai.com/v1 Standard OpenAI key
Azure OpenAI https://<resource>.openai.azure.com/openai/deployments/<deployment> Azure API key
Groq https://api.groq.com/openai/v1 Groq API key
DeepSeek https://api.deepseek.com/v1 DeepSeek API key
Ollama (local) http://localhost:11434/v1 Any value for API key
LM Studio (local) http://localhost:1234/v1 Any value for API key

Limitations:

  • Not all OpenAI-compatible models support all Claude Code features (tool use, large context windows). Using an incompatible model may cause errors.
  • Images in conversations (base64 content) are forwarded in OpenAI vision format; provider must support it.
  • Changes to the profile's Base URL or API Key take effect only after restarting the session.

ChatGPT Subscription

Routes Claude Code through OpenAI's own Codex backend using your ChatGPT Free, Go, Plus, Pro, or Team subscription, instead of an OpenAI API key. Like OpenAI-compatible API, this works via the plugin's internal proxy — no changes to Claude Code CLI are required.

How it works:

The plugin never opens or waits on a browser itself, since the browser you sign in with may be on a different network path (proxy, VPN, remote machine) than the plugin. Instead:

  1. Click Copy sign in link — the plugin generates a one-time sign-in link and copies it to the clipboard.
  2. Paste the link into your own browser and sign in to your ChatGPT account there.
  3. After signing in, copy the code shown on the confirmation page and paste it back into the field in the plugin.
  4. Click Complete Sign-in. The profile now shows Signed in as <email>.

You can click Copy sign in link again at any time to cancel a stuck attempt and generate a fresh link — there is no timeout to wait out.

Setup:

  1. Create a new profile and select ChatGPT Subscription as the connection type.
  2. Sign in as described above.
  3. Open Model Aliases… and click Fetch to pull the current list of models available to your account, then assign aliases the same way as for OpenAI-compatible API above.

Limitations:

  • Only models Codex actually supports for a ChatGPT-subscription login work — arbitrary model IDs will be rejected by OpenAI's backend.
  • Usage is subject to your ChatGPT subscription's own rate limits, shared across all Codex/ChatGPT clients on that account. When the limit is reached, Claude Code now reports it immediately as a rate-limit error instead of retrying; the message doesn't currently include the exact reset time reported by the backend.
  • The /usage command shows only local, per-session statistics (tokens/cost for the current conversation) — it does not query any live account-wide usage or quota endpoint, so it never reflects your ChatGPT subscription's remaining quota or reset time, for any connection type.
  • Sign-in tokens are refreshed automatically while a session is running; if a refresh fails (e.g. the session was revoked from your OpenAI account), sign in again from the Profiles tab.

Extra environment variables

Arbitrary KEY=VALUE pairs injected into the Claude process environment. Applied last — they override all other profile variables. Use this for provider-specific configuration.

See the Claude Code environment variables reference for the full list of supported variables, and third-party integrations for compatible API providers (Amazon Bedrock, Google Vertex AI, Microsoft Foundry, and others).

Extra CLI arguments

An optional space-separated list of command-line flags and values appended to the claude command when starting a session. Use this for flags that are not exposed elsewhere in the plugin settings.

Example:

--debug --max-turns 5

Arguments that contain spaces can be wrapped in double quotes:

--system "You are a concise assistant"

Arguments are appended after all internally generated arguments. Refer to claude --help for the full list of supported flags.

Per-project profile assignment

By default, Claude Code sessions use the Default profile.

Persistent profile for a project (recommended)

To permanently assign a profile to a project:

  1. Right-click the project in the Projects window → Properties.
  2. Go to the Claude Code category.
  3. Select the desired profile from the Profile drop-down and click OK.

The selected profile is used automatically when a session is started for that project via Open with Claude Code. Selecting Default removes any project-specific assignment.

If the assigned profile no longer exists, the plugin falls back to the Default profile automatically.

Temporary profile for one session

Click the Claude Code button in the toolbar to open the session selector. Choose a project or a working directory, select a profile from the Profile combo, and click Open. The selected profile is used for that session only and does not affect project settings. See Managing Sessions for full details of the session selector panel.


13. Managing Sessions

Sessions let you save your current conversation with Claude, switch to a different task, and come back to the saved session later. For example: you are working on a refactor with Claude, need to quickly fix an unrelated bug, then want to return to the refactor — sessions make this seamless.

Session modes

Claude Code remembers your past conversations as sessions. The session mode determines which conversation is loaded — a new empty one, the most recent saved one, or a specific one you choose from a list.

Mode When to use
New session Start a fresh conversation
Continue last Resume the most recent session for this working directory
Resume specific Return to a specific past session chosen from a list

Project context menu (right-click → Open with Claude Code) — the mode is fixed by the Start new session when opening with Claude setting: checked = New session, unchecked = Continue last. Resume specific is not available from the context menu.

Toolbar button — you pick the mode explicitly in the session selector panel before opening.

Session selector panel

The session selector panel is shown in a session tab opened via the Claude Code toolbar button. It is not shown when opening via the project context menu (the session starts immediately in that case).

Fields:

  • Project — combo listing open NetBeans projects; selecting one fills the path automatically.
  • Path — editable combo with recently used paths + Browse button to pick a directory.
  • Profile — selects which API key/proxy profile to use (see Profiles).
  • Extra args — additional CLI flags for this session only. Pre-filled from the selected profile's extra CLI arguments; editable here without affecting the profile.
  • Mode — radio buttons: New session / Continue last / Resume specific.
  • Session table (visible only when "Resume specific" is selected) — lists past sessions for the chosen working directory, columns: Date/Time, Name, First Prompt. Click a row to select it, then click Open. Use the Rename button to give a session a custom title. The list is loaded when you switch to "Resume specific" mode and reloads automatically when you change the working directory or profile. The number of sessions shown is limited by the Session list limit setting (default: 30); increasing the limit may slow down loading.

Click Open to apply the settings and open the session. When "Resume specific" is selected, you can also double-click a row in the session table to open that session immediately.

Session selector panel (Resume specific mode)

Closing and switching sessions

While a session is running, you can close it and, optionally, open a different one.

Closing the tab (× on the tab header) — closes the session immediately without any confirmation. The conversation is automatically saved by Claude Code and can be resumed later using "Resume specific" mode.

Close button (⏻) in the status bar → opens the Save & Switch dialog:

  • Session name field — pre-filled with the current session name. Giving a session a descriptive name makes it easier to find it later in the session list when using "Resume specific".
  • Mode panel — choose what happens next:
    • Close only — stop the session and close the tab. The conversation is saved and can be resumed later.
    • Restart Advanced... — stop the session and return to the session selector panel in the same tab, allowing full reconfiguration (directory, profile, mode) before starting a new session.
    • New session / Continue last / Resume specific — stop and immediately start another session in the same tab. For Resume specific, a session table is shown — see Session selector panel for details.
  • Click OK to close (and optionally rename) the session and open the next one as chosen. When "Resume specific" is selected, you can also double-click a row in the session table to confirm immediately.

Save & Switch dialog

Context menu in the input area (right-click, available only during an active session) provides two quick actions:

  • Start New Session — immediately closes the current session and opens a fresh one (no rename, no dialog).
  • Switch to Session… — opens Save & Switch pre-selecting "Resume specific".

Input area context menu

Note on /clear: The /clear command clears Claude's context within the current session — after that, the previous conversation context is permanently gone and cannot be resumed. To pause your current work and switch to another task temporarily, use Save & Switch → New session instead. The original session will remain intact and can be resumed later.

When to use what:

Situation How
Save current session and start a fresh one (can return later) Via ⏻: optionally fill in a session name → New session → OK
Via context menu: right-click input area → Start New Session (no rename option)
Start fresh without being able to return to current context Type /clear in the input area and send it
Switch to a specific past session ⏻ → Resume specific → pick session → OK (or double-click the row)
or: right-click input area → Switch to Session… → pick session
Close tab, keep session for later × on the tab
or: ⏻ → Close only → OK
or: ⏻ → fill in a session name → Close only → OK
Stop session, reconfigure everything, then start ⏻ → Restart Advanced... → OK — returns to the selector panel in the same tab

Renaming a session

Sessions can be renamed in three places:

  1. Session selector table — select a row and click Rename.
  2. Save & Switch dialog → session table (when "Resume specific" is selected) — select a row and click Rename.
  3. Save & Switch dialog → Session name field — renames the currently running session when you close it.

A custom name replaces the auto-generated name in all session lists.

Session persistence across IDE restarts

When you restart the IDE, the plugin automatically restores any session tabs that were open and reopens them with the same working directory, profile, and extra args.

The session mode used on restore depends on how the session was last opened:

  • If the session was opened with Resume specific — the same specific session is resumed again (the saved session ID is restored).
  • Otherwise (New session or Continue last) — the mode is determined by the Start new session when opening with Claude setting at the time of restart.

14. IDE Tools (MCP)

The plugin exposes a set of IDE tools to Claude via an MCP (Model Context Protocol) server that runs in the background. These tools give Claude real-time access to your IDE state — open projects, open files, current selection, diagnostics — so it can give more relevant answers and take actions directly in the editor.

Available tools

Tool What it does
getWorkspaceFolders Lists all open projects with their paths
getOpenEditors Lists all currently open editor tabs
getCurrentSelection Returns the selected text and cursor position in the active editor
getDiagnostics Returns errors and warnings for specified files
openFile Opens a file in the editor
close_tab Closes an open editor tab
checkDocumentDirty Checks whether a file has unsaved changes
saveDocument Saves a file to disk
openDiff Shows a git diff for a file in the diff viewer
closeAllDiffTabs Closes all open diff viewer tabs
permission_prompt Shows proposed file changes in the diff panel and waits for your approval
show_markdown Renders markdown text directly in a Markdown Preview tab; accepts the markdown content plus optional title and file path
show_markdown_file Opens a live-updating Markdown Preview tab for an existing .md file on disk; the tab automatically refreshes when the file changes

Prompts that work well with IDE tools

Project and file context:

  • "What projects are currently open?"
  • "List all files I have open right now."
  • "Open the test file for this class."

Current selection (select code first, then send the prompt):

  • "Explain this code."
  • "Write a unit test for this method."
  • "What does this do and how can it be improved?"

Diagnostics:

  • "Fix all errors in this project."
  • "What warnings are in src/main/java/com/example/Foo.java?"
  • "There are compile errors in the open files — fix them."

Selection change notifications

As you move the cursor or change the selection in any open editor, the plugin automatically notifies Claude of the current file and position. Claude always knows what you are looking at without you needing to mention it in the prompt.

Troubleshooting MCP tools

If Claude says a tool is unavailable (e.g. "I don't have access to getWorkspaceFolders"):

  1. Check that no other application is using the MCP server port (Tools → Options → Claude Code → Advanced → MCP server port, default: 28991). Change the port if needed and restart the IDE.
  2. Enable Debug mode (Tools → Options → Claude Code → Advanced) and check the log file (~/.netbeans/<version>/var/log/messages.log) for MCP SSE server started on port.

15. Troubleshooting

Enable debug mode

Go to Tools → Options → Claude Code → Advanced and check Debug mode. This writes detailed logs of all Claude I/O (PTY bytes, MCP messages, hook calls) to the NetBeans log file.

Log file location

~/.netbeans/<version>/var/log/messages.log

For example: ~/.netbeans/28/var/log/messages.log

Common issues

Symptom Likely cause Fix
Session tab does not open claude not found on PATH Set the full path in Tools → Options → Claude Code → Advanced → Claude CLI path
Diff panel shows but Accept/Decline have no effect Claude timed out waiting for the hook response (600 s limit) Respond to the diff panel within ~9 minutes; if this happens regularly, check for blocking processes
Claude asked a question but the Choice Menu panel did not appear The plugin did not recognise the prompt format Switch to the terminal area and answer directly by typing
Choice Menu appeared but Claude did not ask anything (false trigger) The plugin mis-detected a numbered list as a menu Dismiss the panel with Esc or ignore it; Claude will continue on its own
OAuth login prompt not appearing The claude process cannot open a browser, or proxy settings mismatch Run claude manually in a terminal once to complete authentication, then restart the session. If you use a proxy, make sure the proxy settings in the plugin profile match the system/browser proxy settings.
Profile not applied to a project Project properties not saved Re-open the project properties, select the profile, and click OK. Alternatively, open the session via the toolbar and select the profile explicitly in the session selector.
Favorites shortcut not working Shortcut conflicts with another IDE action Re-assign the shortcut in Tools → Keymap (search "Claude Favorite")

Reporting bugs

Please open an issue at the project's GitHub repository and attach the relevant section of messages.log with debug mode enabled.