Jcode Providers: Claude, OpenAI, Gemini and Local Models

Checked 12 October 2026 · Jcode 0.95.0 · macOS Apple Silicon

I separate three decisions when connecting Jcode: the provider that receives the request, the login method that grants access, and the exact model ID. A familiar model name does not tell me which service will bill the request. This hub shows the eight routes I checked and the internal guide I use for each next action.

My test boundary: I verified provider selection for seven named providers and created a custom profile. I completed fresh response-only tests for Ollama and the custom profile. I did not authenticate every cloud account, test LM Studio inference, or establish coding-tool reliability with these checks.

1. I check the Jcode build before copying commands

jcode --version

I tested a separate official 0.95.0 binary. My existing PATH copy was 0.90.0-dev, so I did not assume that typing jcode selected the release I intended. If the command is missing, I start with the installation guide; I use the release guide to distinguish source builds from releases.

My test binary identifies itself as Jcode 0.95.0.
My test binary identifies itself as Jcode 0.95.0. I keep the captured image unchanged; the arrow is a page overlay. Tap to open the raw screenshot.

2. I choose the account and provider route

ProviderJcode selectorWhat I prepareWhat I verifiedInternal walkthrough
ClaudeclaudeClaude login flow; the API-key route is also exposed as anthropic-api.Selection checked; no new Claude response test.My Claude selection check
OpenAI / ChatGPTopenaiChatGPT/Codex sign-in; direct API use is a separate openai-api route.Selection checked; no new OpenAI response test.My OpenAI selection check
GeminigeminiGemini Code Assist OAuth; gemini-api is a separate route.Selection checked; no Google login completed.My Gemini selection check
GitHub CopilotcopilotGitHub device login and an account with model access.Selection checked; no Copilot response test.My Copilot selection check
OpenRouteropenrouterOpenRouter API key and exact provider/model ID.Selection checked here; earlier authentication and tool tests are in the spoke.Tested OpenRouter setup
OllamaollamaRunning local server and a model already installed on that server.Fresh response test passed with qwen3:0.6b.Tested Ollama setup
LM StudiolmstudioRunning Local Server and the exact loaded model ID.Selection checked; LM Studio is not installed on this Mac.My LM Studio selection check
Custom endpoint--provider-profile guide-localNamed OpenAI-compatible profile; base URL, model ID, and authentication as required by the server.Profile creation and a local response test passed.Tested custom endpoint walkthrough

Every row links to an internal walkthrough or a selection check below. A selection check confirms how Jcode resolves a command; it does not prove that an account can authenticate or that a model request will succeed.

I verify the route before sending a prompt

jcode provider current --provider claude

I read requested_provider, resolved_provider, and selected_model together. The model shown by this command is a selected value, not proof of entitlement or a list of models available from the server.

Claude

I use the Claude login flow for the account route. If I intend to use a direct Anthropic API key, I choose the API route explicitly instead of treating a subscription and API billing as interchangeable.

jcode login --provider claude
jcode provider current --provider claude
My Claude selection check; account login and inference were not tested in this run.
My Claude selection check; account login and inference were not tested in this run. I keep the captured image unchanged; the arrow is a page overlay. Tap to open the raw screenshot.

OpenAI / ChatGPT

I use this route for ChatGPT/Codex sign-in. For an OpenAI API key I choose openai-api. I check the resolved provider again after login because these are different credential and billing routes.

jcode login --provider openai
jcode provider current --provider openai
My OpenAI / ChatGPT selection check; account login and inference were not tested in this run.
My OpenAI / ChatGPT selection check; account login and inference were not tested in this run. I keep the captured image unchanged; the arrow is a page overlay. Tap to open the raw screenshot.

Gemini

I use this for Gemini Code Assist OAuth. I keep it separate from gemini-api and from google, which the provider list describes as Google/Gmail access.

jcode login --provider gemini
jcode provider current --provider gemini
My Gemini selection check; account login and inference were not tested in this run.
My Gemini selection check; account login and inference were not tested in this run. I keep the captured image unchanged; the arrow is a page overlay. Tap to open the raw screenshot.

GitHub Copilot

I follow the GitHub device-login instructions printed by Jcode. I check the model picker after signing in; the selection shown below is not a guarantee that my GitHub account can use that model.

jcode login --provider copilot
jcode provider current --provider copilot
My GitHub Copilot selection check; account login and inference were not tested in this run.
My GitHub Copilot selection check; account login and inference were not tested in this run. I keep the captured image unchanged; the arrow is a page overlay. Tap to open the raw screenshot.

OpenRouter: I keep the model’s provider prefix

I use jcode login --provider openrouter, then copy the complete model ID. A suffix such as :free is part of the ID when the selected variant uses it. I follow the OpenRouter account, key, model and tool-test walkthrough for the tested flow and its recorded error cases.

My OpenRouter route check; the separate guide records the earlier live account tests.
My OpenRouter route check; the separate guide records the earlier live account tests. I keep the captured image unchanged; the arrow is a page overlay. Tap to open the raw screenshot.

Ollama: I select an installed model explicitly

I start the Ollama server, check ollama list, then use jcode login --provider ollama for setup. My clean selection check below displayed anthropic/claude-sonnet-4 even though I had chosen Ollama. I therefore pass my installed local tag explicitly in the next step.

My clean Ollama route check showed a selected model that was not my local test model.
My clean Ollama route check showed a selected model that was not my local test model. I keep the captured image unchanged; the arrow is a page overlay. Tap to open the raw screenshot.

LM Studio: I read the Local Server model ID

I start LM Studio’s Local Server and load a chat model before using jcode login --provider lmstudio. I copy the model ID shown by that server and pass it with --model. The usual local API base is http://localhost:1234/v1; I check the address shown in my app if I changed its port.

jcode provider current --provider lmstudio
jcode --provider lmstudio --model "YOUR_LOADED_MODEL_ID" run "Reply exactly READY"

The second command is a template: I replace YOUR_LOADED_MODEL_ID. I did not install LM Studio or run inference through it. My selection check below is the limit of this row’s test.

My LM Studio selection check; I still need an installed server and a loaded model for inference.
My LM Studio selection check; I still need an installed server and a loaded model for inference. I keep the captured image unchanged; the arrow is a page overlay. Tap to open the raw screenshot.

3. I run one response test before giving the model tools

I used the already-installed qwen3:0.6b model on Ollama 0.35.0. This intentionally small test answers “Can Jcode get a response from this exact route?” I disabled tools, so it cannot establish file-editing or browser-control quality. For this isolated test I set JCODE_OPENAI_COMPAT_LOCAL_ENABLED=1 in the test process; I show that setting explicitly below.

JCODE_OPENAI_COMPAT_LOCAL_ENABLED=1 jcode --no-update run --provider ollama --model qwen3:0.6b \
  --tool-profile none --json \
  "Reply with exactly JCODE_PROVIDER_OK and nothing else. /no_think"
My fresh local test returned JCODE_PROVIDER_OK through the Ollama route.
My fresh local test returned JCODE_PROVIDER_OK through the Ollama route. I keep the captured image unchanged; the arrow is a page overlay. Tap to open the raw screenshot.

I check the JSON provider, model, and text, not just the process exit code. Once the response is right, I move to a small task in a disposable project. The Ollama guide shows why a successful response and a successful tool validation are separate outcomes.

4. I give a custom endpoint its own named profile

I tested the custom OpenAI-compatible route against the same local Ollama server. That keeps the server and model constant while changing how Jcode reaches them. I used a new profile name and did not set it as my global default.

jcode provider add guide-local \
  --base-url http://localhost:11434/v1 \
  --model qwen3:0.6b \
  --no-api-key
jcode provider current --provider-profile guide-local
My created profile resolves to guide-local and selects qwen3:0.6b.
My created profile resolves to guide-local and selects qwen3:0.6b. I keep the captured image unchanged; the arrow is a page overlay. Tap to open the raw screenshot.

I use --no-api-key only because this local test server does not require a token. For a hosted endpoint I use the server’s actual base URL, exact model ID and required authentication; --api-key-env or --api-key-stdin avoids putting a literal key in the command. A chat website address is not an API base URL.

JCODE_OPENAI_COMPAT_LOCAL_ENABLED=1 jcode --no-update run --provider-profile guide-local \
  --tool-profile none --json \
  "Reply with exactly JCODE_CUSTOM_OK and nothing else. /no_think"
My named custom endpoint returned JCODE_CUSTOM_OK from the local model.
My named custom endpoint returned JCODE_CUSTOM_OK from the local model. I keep the captured image unchanged; the arrow is a page overlay. Tap to open the raw screenshot.

The bare openai-compatible route failed my clean check because it had no API key configured. The named local profile resolved that test’s configuration explicitly. I have not tested arbitrary remote gateways merely because this localhost profile worked.

What I check when a provider fails

SymptomMy next check
Wrong model after switching providerI inspect provider current, then pass the exact model with –model.
401 / authentication failureI check the selected credential route and key or login state before changing models.
404 / model not foundI compare the model ID with the selected server’s model list.
Connection refused on localhostI check that the local server is running and that its port matches the profile.
Text response works but tools failI treat tool use as a separate test; I do not mark the whole agent workflow as passed.

How I verified this hub

I captured the screenshots in a browser displaying saved command output. They are real screenshots of recorded stdout/stderr, not native Terminal captures or generated interface images. I preserve the raw captures and put arrows above them. My test copy reports commit 6487bbd7e; I checked its archive against the release’s SHA-256 digest. I used isolated Jcode settings for provider tests and read the existing browser setup without changing browser permissions.

I verified that the published lossless PNG copies preserve the raw capture pixels. I also keep the original screenshot files in this ZIP, with file hashes for comparison.

I checked the provider commands against the 0.95.0 CLI and its versioned README. The cloud selection screenshots are configuration evidence, not account-access evidence. For my next workflow I use the Jcode usage guide, command reference, or browser setup checks.

Planning a budget? I separate software, hosting and model charges in Is Jcode free?, with official pricing checked on 13 October 2026.