The local gateway for agentic coding.
Quick Start · Agents · Providers · Editors & Apps · Optional Features · Manage
Independent open-source project. Not affiliated with or endorsed by Anthropic. Claude and Claude Code are trademarks of Anthropic.
What is luicode?
luicode is a local gateway that lets your favorite coding agents run against one unified catalog of provider models: free tiers, subscriptions, and local servers. You configure everything in one place, a browser-based Admin UI, and every agent you connect uses the same setup.
Highlights
- 55 ToS-friendly providers, 1.3B+ free tokens every month. Use free, paid, subscription, and local models from one searchable UI without putting your account at risk. luicode follows provider terms and removes integrations if they stop being allowed. (Free-tier availability and limits are set by each provider and may change.)
- 10 coding agents, one model catalog. Use the same models in Claude Code, Codex, Pi, OpenCode, Cline, Hermes, DeepSeek Harness, Grok Build, Muse Code, and Aider.
- Keeps working through provider outages. After retries are exhausted, luicode automatically tries your next configured model without making you restart the turn, across every client.
- Up to 90% fewer terminal-output tokens. Optional RTK filters common command output, while five built-in optimizations handle quota probes, command-prefix detection, titles, suggestions, and filepaths without calling a provider.
- Native Code sessions in your browser. Choose a folder and run Codex in the browser, with real-time and background support. Switch providers and models freely within the same session. (Switching harnesses in the same session is coming soon.)
- Terminal, desktop, IDE, or phone. Work through native launchers, VS Code, Codex App, JetBrains, Discord, or Telegram.
- Voice notes in, code out. Talk to your agent using local Whisper or NVIDIA NIM transcription.
- Agent capabilities stay intact. Streaming, tool use, native interleaved thinking, and image input all keep working. You can also route Fable, Opus, Sonnet, and Haiku tiers independently to compatible models.
- Browser automation (optional). Let agents navigate, click, fill forms, and extract data from web pages via Chrome DevTools Protocol, powered by the same engine as JEV-Ultrafast.
- One-call web tasks (optional). Connect Jev Ultrafast in the Admin UI and your agent gets a single
browse_web(url, goal)tool: it delegates the whole task to a browser agent and continues the same turn with the result.
How It Works
luicode runs one local gateway process, luicode-server. Coding agents connect to it through luicode-* launchers or IDE/app integrations. The gateway then routes each request to the provider and model you picked, applying fallbacks, reasoning control, and token-saving optimizations along the way.
Table of Contents
- Quick Start
- Supported Coding Agents
- Choose a Provider
- Connect Editors and Apps
- Optional Features (messaging bots, voice notes, browser automation)
- Manage Your Installation (update, uninstall)
- Project Links and License
Quick Start
Getting running takes four steps: install → start the server → add one provider key → launch an agent.
1. Install
Pick your platform and run the command. The installer will ask you to choose at least one coding agent, and optionally RTK. You can review the scripts first: install.sh · install.ps1.
macOS / Linux
curl -fsSL "https://raw.githubusercontent.com/Luigibarte4563/luicode/main/scripts/install.sh" | sh
Windows (PowerShell)
& ([scriptblock]::Create((irm "https://raw.githubusercontent.com/Luigibarte4563/luicode/main/scripts/install.ps1")))
Android (Termux)
Install Termux from F-Droid first, then run the same single command as macOS/Linux:
curl -fsSL "https://raw.githubusercontent.com/Luigibarte4563/luicode/main/scripts/install.sh" | sh
What the Termux installer does
The installer detects Termux automatically and:
- updates the Termux package lists and installs only the packages you are missing (
python,git,curl) - checks that Python is new enough (3.14 or newer)
- keeps the source checkout in
~/.luicode-src, never in~/.luicode, which holds your configuration and data - installs luicode into that checkout with
pip install -e . - adds the directory holding
luicodeandluicode-serverto yourPATHfrom~/.bashrcor~/.zshrc, inside a single managed# >>> LUICode PATH >>>block so reruns never duplicate it - verifies that both commands run, and prints the web interface URL
Open a new Termux session afterwards.
Good to know
- Coding agents (Claude Code, Codex, OpenCode, …) are installed separately with the Linux installer. The Termux one-command install covers the gateway itself.
termux-wake-lockis never run for you. The installer only prints it as an optional tip.- Local Whisper and browser automation are not available on Android.
See docs/android.md for persistence, wake locks, auto-start (Termux:Boot), notifications (Termux:API), LAN access, and how to update or uninstall.
2. Start luicode
| Platform | How to start |
|---|---|
| Windows | Open luicode from your desktop or Start menu. |
| macOS | Open luicode from your desktop or Applications folder. |
| Linux | Run luicode-server in a terminal. |
| Android (Termux) | Open a new Termux session, then run luicode-server. |
luicode is an alias for the same server, so either command works.
The server listens on port 8082 by default, so the Admin UI is at http://127.0.0.1:8082/admin. Change the port with PORT in ~/.luicode/.env.
luicode opens the Admin UI after starting:
- Windows / macOS: use the tray or menu-bar icon to open Admin, restart, or quit.
- Android: use
termux-open-urlto open the Admin UI. For background persistence, runtermux-wake-lockfirst and disable battery optimization. - Terminal (
luicode-server): keep the terminal open while you work.
3. Configure your first provider (NVIDIA NIM)
NVIDIA NIM is the default and works well as a first provider.
- Create an API key at build.nvidia.com/settings/api-keys.
- Open the Admin UI URL shown in the server log.
- Paste the key into
NVIDIA_NIM_API_KEY. - Leave
MODELon the defaultnvidia_nim/nvidia/nemotron-3-super-120b-a12b, or search the model dropdown and pick another model. - Click Apply.
Tip: To protect the local proxy with a bearer token, enable Proxy Authentication in Admin.
Want a different provider? See Choose a Provider.
4. Run a coding agent
In a new terminal, run the launcher for the agent you installed, for example:
luicode-claude
The full list of launchers is in the next section.
Supported Coding Agents
Start luicode-server first, then run the matching launcher in your terminal.
| Agent | Launcher |
|---|---|
| Claude Code | luicode-claude |
| Codex | luicode-codex |
| Pi | luicode-pi |
| OpenCode 2 | luicode-opencode |
| Cline | luicode-cline |
| Hermes | luicode-hermes |
| DeepSeek Harness (Web) | luicode-dsh |
| Grok Build | luicode-grok |
| Muse Code | luicode-muse |
| Aider | luicode-aider |
| jcode | luicode-jcode |
OpenCode notes
- Use
luicode-opencodefor coding and sessions. Use plainopencodefor other commands such as upgrades, service management, ACP, and MCP setup. - Upgrading from OpenCode 1: close OpenCode, then rerun the luicode installer with OpenCode selected. It upgrades the native installation in
~/.opencode/bin. If you installed OpenCode through npm or another package manager, follow OpenCode's migration instructions first. For npm v1, runnpm uninstall -g opencode-ai, then rerun the luicode installer. OpenCode manages its own data upgrades. - RTK integration is temporarily unavailable for OpenCode 2. RTK continues to work with all other supported agents.
Choose a Provider
Setup steps
- Open a provider link in the catalog below to get its key, models, or setup instructions.
- In the Admin UI, fill in the listed setting. (For OpenAI / ChatGPT subscription access, use Providers → OAuth providers instead.)
- Search the
MODELdropdown and select a model. If the provider can't list models, type<provider-id>/<exact-provider-model-id>manually. - Click Apply.
Optional: add an ordered Fallback Models list under Model config. It applies to every connected client. A failed request may reach, and consume usage from, more than one provider before succeeding.
Provider catalog
Sign-in providers (subscription accounts)
| Provider | Admin UI setting | Example MODEL |
|---|---|---|
| OpenAI / ChatGPT | Connect ChatGPT in the Admin UI | openai/<model-id> |
| GitHub Copilot | Connect GitHub Copilot in the Admin UI | github_copilot/<model-id> |
API-key providers
| Provider | Admin UI setting | Example MODEL |
|---|---|---|
| NVIDIA NIM | NVIDIA_NIM_API_KEY |
nvidia_nim/nvidia/nemotron-3-super-120b-a12b |
| OpenRouter | OPENROUTER_API_KEY |
open_router/openrouter/free |
| Groq | GROQ_API_KEY |
groq/llama-3.3-70b-versatile |
| ClinePass | CLINE_API_KEY |
cline_pass/cline-pass/kimi-k3 |
| OpenAI API | OPENAI_API_KEY |
openai_api/gpt-5.6-sol |
| xAI (Grok) | XAI_API_KEY |
xai/grok-4.5 |
| QwenCloud Token Plan | QWENCLOUD_API_KEY |
qwencloud/qwen3.7-plus |
| QwenCloud Coding Plan | QWENCLOUD_CODING_API_KEY |
qwencloud_coding/qwen3.7-plus |
| Together AI | TOGETHER_API_KEY |
together/zai-org/GLM-5.2 |
| DeepInfra | DEEPINFRA_API_KEY |
deepinfra/deepseek-ai/DeepSeek-V4-Flash |
| SiliconFlow | SILICONFLOW_API_KEY |
siliconflow/Qwen/Qwen3-32B |
| Nebius Token Factory | NEBIUS_API_KEY |
nebius/Qwen/Qwen3-30B-A3B |
| Chutes | CHUTES_API_KEY |
chutes/Qwen/Qwen3-32B-TEE |
| Featherless AI | FEATHERLESS_API_KEY |
featherless/Qwen/Qwen3-32B |
| Agnes AI | AGNES_API_KEY |
agnes/agnes-2.0-flash |
| ZenMux | ZENMUX_API_KEY |
zenmux/deepseek/deepseek-v4-flash-free |
| W&B Inference | WANDB_API_KEY |
wandb/openai/gpt-oss-20b |
| Azure OpenAI | AZURE_OPENAI_API_KEY and AZURE_OPENAI_BASE_URL |
azure_openai/<deployment-name> |
| Google AI Studio (Gemini) | GEMINI_API_KEY |
gemini/models/gemini-3.1-flash-lite |
| Google Vertex AI | VERTEX_PROJECT_ID + ADC |
vertex/google/gemini-3.5-flash |
| DeepSeek | DEEPSEEK_API_KEY |
deepseek/deepseek-chat |
| Mistral La Plateforme | MISTRAL_API_KEY |
mistral/devstral-small-latest |
| Mistral Codestral | CODESTRAL_API_KEY |
mistral_codestral/codestral-latest |
| OpenCode Zen | OPENCODE_API_KEY |
opencode_zen/gpt-5.3-codex |
| OpenCode Go | OPENCODE_API_KEY |
opencode_go/minimax-m2.7 |
| Vercel AI Gateway | AI_GATEWAY_API_KEY |
vercel/openai/gpt-5.5 |
| Amazon Bedrock | AWS_BEARER_TOKEN_BEDROCK |
bedrock/openai.gpt-oss-120b |
| Hugging Face Inference Providers | HUGGINGFACE_API_KEY |
huggingface/Qwen/Qwen3-Coder-480B-A35B-Instruct:fastest |
| Cohere | COHERE_API_KEY |
cohere/command-a-plus-05-2026 |
| Wafer | WAFER_API_KEY |
wafer/DeepSeek-V4-Pro |
| Kimi API | KIMI_API_KEY |
kimi/kimi-k2.5 |
| Kimi Code | KIMI_CODE_API_KEY |
kimi_code/k3 |
| MiniMax | MINIMAX_API_KEY |
minimax/MiniMax-M3 |
| Cerebras Inference | CEREBRAS_API_KEY |
cerebras/gpt-oss-120b |
| SambaNova | SAMBANOVA_API_KEY |
sambanova/Meta-Llama-3.3-70B-Instruct |
| Kilo.ai | KILO_API_KEY |
kilo/kilo-auto/free |
| Fireworks AI | FIREWORKS_API_KEY |
fireworks/accounts/fireworks/models/llama-v3p3-70b-instruct |
| Novita AI | NOVITA_API_KEY |
novita/deepseek/deepseek-v4-flash-0731 |
| Cloudflare Workers AI | CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID |
cloudflare/@cf/moonshotai/kimi-k2.6 |
| Z.ai Coding Plan | ZAI_API_KEY |
zai/glm-5.2 |
| Z.ai API (pay as you go) | ZAI_API_KEY |
zai_api/glm-4.7-flash |
| TokenRouter | TOKENROUTER_API_KEY |
tokenrouter/moonshotai/kimi-k3-free |
| NaraRoute | NARAROUTE_API_KEY |
nararoute/kimi-k3-free |
| Poolside AI | POOLSIDE_API_KEY |
poolside/poolside/laguna-s-2.1 |
| LLM7.io | LLM7_API_KEY |
llm7/default |
| Scaleway | SCW_SECRET_KEY |
scaleway/deepseek/deepseek-v4-flash |
| Lightning AI | LIGHTNING_API_KEY |
lightning/lightning-ai/Qwen3.8-27B |
| Experiential Labs | EXPLABS_API_KEY |
experiential/union-alpha |
| Cheaper Inference | CHEAPER_INFERENCE_API_KEY |
cheaperinference/gpt-5.4-mini |
| Ollama Cloud | OLLAMA_API_KEY |
ollama_cloud/qwen3-coder:480b |
Local servers (no API key)
| Provider | Admin UI setting | Example MODEL |
|---|---|---|
| LM Studio | LM_STUDIO_BASE_URL |
lmstudio/<model-id> |
| llama.cpp | LLAMACPP_BASE_URL |
llamacpp/<model-id> |
| Ollama | OLLAMA_BASE_URL |
ollama/<model-tag> |
LM Studio — Start LM Studio's local server, load a tool-capable model, and use the identifier LM Studio shows, with the lmstudio/ prefix. Default URL: http://localhost:1234/v1.
llama.cpp — Start llama-server with its OpenAI-compatible Chat Completions API and enough context for the model. Use the local model ID with the llamacpp/ prefix. LLAMACPP_BASE_URL defaults to http://localhost:8080/v1; luicode accepts either the server root or an explicit /v1 suffix.
Ollama — Pull and serve a model:
ollama pull llama3.1
ollama serve
Use the tag shown by ollama list with the ollama/ prefix. OLLAMA_BASE_URL defaults to http://localhost:11434; luicode accepts either the root URL or an explicit /v1 suffix.
Provider-specific setup notes
General: prefer tool-capable models for coding agents. Local models also need enough context for the agent's system prompt and tool definitions.
Subscription sign-in
-
OpenAI / ChatGPT uses your ChatGPT subscription instead of an API key. Go to Providers → OAuth providers → OpenAI / ChatGPT → Connect in the Admin UI and finish signing in through your browser. Restart any already-running agent after connecting.
-
GitHub Copilot uses your signed-in GitHub account and subscription.
- Install Copilot CLI 1.0.83 and make sure it's on your
PATH. - Choose Providers → OAuth providers → GitHub Copilot → Connect. luicode reuses the native profile or shows a GitHub device code when sign-in is needed. (You can also sign in first with
copilot login --device-code.) - Select a concrete
github_copilot/<model-id>from the discovered list. Available models and quotas depend on your subscription and organization policies. - Restart any already-running agent.
Disconnect stops luicode's use and leaves the native login intact. luicode pins its SDK and CLI compatibility because direct endpoint access is experimental.
- Install Copilot CLI 1.0.83 and make sure it's on your
Cloud and API providers
- OpenAI API uses a separate Platform API key. Enter it under Providers → Cloud providers → OpenAI API → Configure. The model list may include IDs that can't handle coding requests, so choose a text-generation model.
- Azure OpenAI uses the deployment names from your resource. Set
AZURE_OPENAI_BASE_URLto the complete v1 endpoint (for examplehttps://YOUR-RESOURCE-NAME.openai.azure.com/openai/v1/) and select a deployment that supports Chat Completions. If the deployment doesn't appear in the dropdown, enter its name as a custom model slug. - Amazon Bedrock: set
BEDROCK_BASE_URLto the URL for the same region as your API key, then select one of the listed models. - Vertex AI uses Google Application Default Credentials instead of an API key. Locally, run
gcloud auth application-default loginonce (service-account files and attached service accounts also work). SetVERTEX_PROJECT_ID, and optionally changeVERTEX_LOCATIONfrom itsglobaldefault. - Cloudflare requires both its API token and account ID.
- Mistral Codestral uses a separate key from Mistral La Plateforme.
- Ollama Cloud: use the exact model IDs shown in the model picker. Local Ollama uses the separate
ollama/prefix. - OpenCode Zen and OpenCode Go share
OPENCODE_API_KEYbut use the explicitopencode_zen/andopencode_go/model prefixes.
Plans that have two kinds of keys (the keys and endpoints are not interchangeable)
- Kimi: subscription keys (Kimi Code) use
kimi_code/; API credit keys usekimi/. Kimi Code plans are for personal interactive coding-agent use under Kimi's community guidelines. - QwenCloud: Coding Plan keys use
qwencloud_coding/; Token Plan keys useqwencloud/. The Coding Plan is for local, personal, interactive coding-agent use under the Coding Plan terms.
Advanced model settings
Model-tier routing
MODEL is the fallback for every request. To override an individual Claude Code tier, select a model for MODEL_FABLE, MODEL_OPUS, MODEL_SONNET, or MODEL_HAIKU. Select None to use MODEL.
Reasoning control
Open Admin UI → Model config → Reasoning and choose a behavior:
| Selection | Behavior |
|---|---|
| From client (default) | Use the effort sent by your coding agent. If none is sent, keep the provider default. |
| Off | Request reasoning to be disabled. |
| Low, Medium, High, X-High, or Max | Override the client with the selected reasoning level. |
| Inherit (Fable, Opus, Sonnet, and Haiku only) | Use the root Reasoning selection. |
Providers that don't support a selected control keep their own behavior.
Connect Editors and Apps
Terminal: start luicode-server, then run a launcher from Supported Coding Agents.
Editors and desktop apps: install the client, start luicode, open Admin UI → Integrations, and click Connect on its card.
| Integration | Before you connect |
|---|---|
| Claude Code in VS Code | Install the Claude Code extension. |
| Claude Desktop | Install Claude Desktop. Fully quit it before connecting or disconnecting, then reopen it. Disconnect returns to normal Claude sign-in. |
| Codex in VS Code and App | Install the Codex extension or the Codex App. |
| Claude Code in JetBrains (ACP) | Install Claude Agent in JetBrains AI Assistant and start it once, then click Connect in luicode. Reopen the IDE, select Claude Code (LUICODE), and start a new chat. After JetBrains updates the agent, restart luicode before starting a new chat. Requires a local IDE in its standard installation locations. |
After connecting
- Reload VS Code, or restart the app/IDE.
- In Codex and Claude Desktop, pick a luicode model from the model picker.
- luicode keeps connected integrations up to date when it starts. Reload or restart the client when luicode reports updated settings.
- To remove an integration, use Disconnect on the same card.
Run luicode on the same computer and in the same user environment as the client you're configuring.
Optional Features
Messaging bots (Discord and Telegram)
Configure bots under Admin UI → Messaging, then click Apply.
Discord bot setup
- Create a bot in the Discord Developer Portal.
- Enable Message Content Intent, and invite the bot with read, send, message-history, and Manage Messages permissions (so
/clearcan remove user prompts). - Set Messaging Platform to discord.
- Enter Discord Bot Token, Allowed Discord Channels, and an absolute Allowed Directory.
- Apply the settings and restart the server if requested.
Telegram bot setup
- Create a bot with @BotFather.
- Get your numeric user ID from @userinfobot. In groups, grant the bot permission to delete messages.
- Set Messaging Platform to telegram.
- Enter Telegram Bot Token, Allowed Telegram User ID, and an absolute Allowed Directory.
- Apply the settings and restart the server if requested.
Bot commands
| Usage | Behavior |
|---|---|
/stats |
Show session state. |
Standalone /stop |
Cancel all work. |
Reply with /stop |
Cancel only the selected request while other queued requests continue. |
Standalone /clear |
Reset all luicode state and remove every tracked message in that chat: user prompts, voice notes, luicode replies, Telegram's online notice, and the clear command itself. |
Reply with /clear |
Delete the selected message and its literal platform reply subtree, preserving its ancestors and siblings. |
Voice notes
NVIDIA NIM transcription is included in every installation. Local Whisper is optional.
Option A: NVIDIA NIM (remote transcription)
- In Admin UI → Messaging → Voice, enable voice notes.
- Select
nvidia_nimand choose a supported model. - Configure your NVIDIA NIM API key on the Providers page (
NVIDIA_NIM_API_KEY).
This is the only option on Android/Termux.
Option B: Local Whisper (CPU or CUDA)
Not available on Android. Rerun the installer with the local voice option.
macOS / Linux
# CPU or CUDA
curl -fsSL "https://raw.githubusercontent.com/Luigibarte4563/luicode/main/scripts/install.sh" | sh -s -- --voice-local
# CUDA 13.0
curl -fsSL "https://raw.githubusercontent.com/Luigibarte4563/luicode/main/scripts/install.sh" | sh -s -- --voice-local --torch-backend cu130
Windows (PowerShell)
# CPU or CUDA
& ([scriptblock]::Create((irm "https://raw.githubusercontent.com/Luigibarte4563/luicode/main/scripts/install.ps1"))) -VoiceLocal
# CUDA 13.0
& ([scriptblock]::Create((irm "https://raw.githubusercontent.com/Luigibarte4563/luicode/main/scripts/install.ps1"))) -VoiceLocal -TorchBackend cu130
Then restart luicode-server. In Admin UI → Messaging → Voice, enable voice notes, select cpu, cuda, or nvidia_nim, and choose the Whisper model. Gated local models need HUGGINGFACE_API_KEY.
Browser automation
Lets coding agents interact with web pages through Chrome DevTools Protocol (CDP) via browser-harness, the same engine that powers JEV-Ultrafast. This is optional: luicode works fully without it, and no API keys are required (it uses a local Chrome instance).
Not available on Android/Termux (no embeddable Chromium).
Install, requirements, and capabilities
Install
uv sync --extra browser
This installs browser-harness and cdp-use. You can also select the browser automation option in the installer, where available on your platform.
Requirements
- Chrome or Chromium with remote debugging enabled (managed automatically by browser-harness)
- The browser-harness daemon starts on first use
What agents can do
- Navigate to URLs and wait for page load
- Observe page state: interactive elements (buttons, inputs, dropdowns, links) with labels and metadata
- Click elements by their observed index
- Fill text into inputs, textareas, and comboboxes
- Select options from dropdown menus
- Scroll the page up or down
- Wait for the page to settle after interactions
- Run multi-step tasks as a sequence of actions
Notes
- The browser runs in a background tab with focus emulation to prevent throttling.
- TypeSafe integration for structured decision-making is not included in this MVP.
Browser Agent: one-call web tasks with Jev Ultrafast
Instead of driving the browser step by step, you can hand a whole web task to a
browser agent. LUICode injects a single browse_web(url, goal) tool into the
request; when the model calls it, the gateway runs
Jev Ultrafast in a worker thread,
returns the result to the model as a tool_result, and continues the same turn.
Setup (all in the Admin UI)
- Open Browser Agent at
http://127.0.0.1:8082/admin/browser. - Click Connect. The dialog lists every file and setting that will change before anything is written.
- Enter your TypeSafe API key, an optional text-model key, and an optional domain allowlist, then confirm.
There are no terminal steps: Connect installs Jev (from its git repository, since it is not published to PyPI), saves the keys to the managed environment, and enables the tool. Disconnect disables it and clears both keys.
Settings
| Setting | Default | Meaning |
|---|---|---|
JEV_ENABLED |
false |
Master switch for the browse_web tool |
TYPESAFE_API_KEY |
empty | Key for Jev's action model |
TEXT_MODEL_API_KEY |
empty | Key for the typing helper |
JEV_TEXT_MODEL |
inception/mercury-2.5 |
Model used only when text must be written |
JEV_ALLOWED_DOMAINS |
unset | Comma-separated allowlist |
JEV_MAX_STEPS |
30 |
Step cap per task |
JEV_TIMEOUT_SECONDS |
60 |
Time cap per task |
JEV_DEDICATED_PROFILE |
true |
Use a separate Chrome profile |
Privacy — please read this first
Jev drives a real Chrome profile and sends page state to an outside service. This feature is off by default, opt-in, and deliberately locked down:
- Browsing is limited to an allowlist. With an empty list, each new domain needs approval in the Admin UI.
- Private and loopback addresses are blocked unless the host is explicitly
allowlisted, so
localhosttesting still works. - Only
httpandhttpsURLs are accepted. - The Connect dialog states that page state is processed by TypeSafe and the text-model provider, and requires confirmation. LUICODE's usual "all processing local" claim does not cover this feature.
- API keys are stored in the managed environment, masked in the UI, never logged, and cleared on Disconnect.
- Page text is wrapped as untrusted data so a page cannot issue instructions to your agent.
Current limits
- Interception works for the Anthropic Messages protocol. OpenAI Responses and Chat Completions are not covered yet.
- No MCP server is exposed yet.
- Run history appears on the Browser Agent tab, not in the Usage dashboard.
- Requires the
browserextra above, plus a TypeSafe key.
Not available on Android/Termux (no embeddable Chromium).
For developers
Browser automation is exposed through the BrowserToolsPort protocol in the application layer:
from luicode.application.browser_tools.ports import BrowserToolsPort
# In your handler/service
async def my_handler(browser_tools: BrowserToolsPort):
await browser_tools.navigate("https://example.com")
state = await browser_tools.observe()
# state.elements contains indexed interactive elements
await browser_tools.click(node_id=5) # Click the 5th element
await browser_tools.fill(node_id=3, text="search query")
await browser_tools.wait()
The runtime implementation (BrowserToolsClient in luicode.runtime.browser_tools) handles:
- CDP session management via browser-harness
- Atomic DOM snapshots with element indexing
- Staleness detection (page fingerprint guards)
- Post-input observation (autocomplete suggestions, animations)
- Screenshot capture (optional)
The higher-level Browser Agent is a separate path. BrowserWebInterceptor
(luicode.application.browser_agent.interception) injects the browse_web schema,
detects the model's call, delegates to JevBrowserAgent, and re-enters the
provider with a tool_result. Policy lives in BrowserAgentService.check_url,
and every task is recorded for run history.
Manage Your Installation
Check your version without starting luicode:
luicode-server --version
Update
Stop all running luicode commands first, then choose one:
| Command | What you get |
|---|---|
luicode-update |
The newest code from the main branch. |
luicode-upgrade |
The newest published release tag, pinned to that release. Tells you if you're already on it. |
Pinned installations only receive fixes when the next release is published, so luicode-update warns you that it is moving you back to main.
- Using local voice? Include
--voice-local(macOS/Linux) or-VoiceLocal(Windows), plus your--torch-backend/-TorchBackendoption if you used one. - If your installation doesn't have
luicode-updateorluicode-upgradeyet, run the installer once to add them.
Muse Code on native Windows
Rerunning luicode's Windows installer with Muse Code selected installs or updates luicode's managed Muse executable. To install or update only Muse Code:
& ([scriptblock]::Create((irm "https://raw.githubusercontent.com/Luigibarte4563/luicode/main/scripts/install-muse.ps1")))
To remove the Muse Code copy installed by luicode (your data is kept):
& ([scriptblock]::Create((irm "https://raw.githubusercontent.com/Luigibarte4563/luicode/main/scripts/uninstall-muse.ps1")))
luicode's ordinary uninstaller (below) leaves Muse Code installed.
Uninstall
Stop every running luicode command first.
| Removes | Keeps |
|---|---|
luicode, including its desktop launcher and commands; ~/.luicode/ |
uv and Python; your coding agents and RTK |
macOS / Linux
curl -fsSL "https://raw.githubusercontent.com/Luigibarte4563/luicode/main/scripts/uninstall.sh" | sh
Windows (PowerShell)
& ([scriptblock]::Create((irm "https://raw.githubusercontent.com/Luigibarte4563/luicode/main/scripts/uninstall.ps1")))
Project Links
License
MIT License. See LICENSE for details. luicode is an independent continuation of the Free Claude Code project; the original author retains the copyright as recorded in the MIT license notice.
Metadata
Release files for luicode 1.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| luicode-1.7.0.tar.gz | 2.7 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| luicode-1.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 4.6 MB
Release files / luicode-1.7.0.tar.gz
| Download URL | luicode-1.7.0.tar.gz |
|---|---|
| Size | 2.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8917eed05615482fdc56cb95548505e5d40057bc702c548965a1762719af16cf
|
|
BLAKE2b-256 checksum How to use checksums |
875cac94efb33224ec926457fac79efd97fdbf928d6818aaac981d8360f527a1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / luicode-1.7.0-py3-none-any.whl
| Download URL | luicode-1.7.0-py3-none-any.whl |
|---|---|
| Size | 1.8 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
17ed6dc1a06b1bfd5b216ebbb5299f9d8f565b09b7083714c626a0afd52eb6b8
|
|
BLAKE2b-256 checksum How to use checksums |
2038d7538bb249d1cacbcff3656abe05ee267eebb742a092dec235fa14f2ed50
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.13 {"installer":{"name":"uv","version":"0.12.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|