Releases: nasser1941/lcode
Release list
lcode 0.6.1
Fixed
- Tools marked
free_gpu(such as ComfyUI'srun_workflow) now always run to completion (wait: true). A job left running in the background competed with lcode's reloading model for the GPU.
Upgrade
uv tool upgrade lcode-cli # or: pipx upgrade lcode-cli · Homebrew: brew upgrade lcodeFull changelog: v0.6.0...v0.6.1
lcode 0.6.0: images
lcode can see images, and make them with your local models.
❯ the layout breaks on mobile, see @screenshots/mobile.png
Added
-
Looking at images:
- Attach a screenshot, mockup or diagram with
@path, or let the model open images itself with the newview_imagetool. - A model that can see describes the image in detail, with all text transcribed and your question in mind. That's your model itself if it can see, or the original model behind lcode's text-only variant, which
lcode setupalready downloaded (vision_modelsetting;lcode doctorshows which). - Screenshots returned by MCP tools, such as Playwright's, are described too.
- Attach a screenshot, mockup or diagram with
-
Making images:
lcode mcp add comfyuigenerates and edits images with models you run locally in ComfyUI (FLUX.2 Klein, FLUX.1 Dev/Kontext, SDXL, SD 1.5, Qwen-Image), through ComfyUI's official MCP server. Only its local tools are enabled, so nothing leaves your machine. -
Sharing one GPU (
free_gpu): before MCP tools that need the GPU to themselves run, lcode unloads its own model and reloads it afterwards. It's on for ComfyUI, so image models work on a 12 GB GPU next to a large coding model.Measured on an RTX 4080 Laptop (12 GB): about 12 s per 512×512 FLUX.2 Klein image, plus about 20 s to reload qwen3.6-35b.
Docs: Images · Images with ComfyUI
Upgrade
uv tool upgrade lcode-cli # or: pipx upgrade lcode-cli · Homebrew: brew upgrade lcodeFull changelog: v0.5.0...v0.6.0
lcode 0.5.0: sandbox
An optional sandbox for the model's shell commands. Let lcode work more independently without giving it your whole machine.
lcode --sandbox # this session
lcode config set sandbox docker # every session (or podman)Added
- Isolated commands: with the sandbox on, the model's shell commands run in a container (Docker or Podman) that only sees your project folder. Your home folder, SSH keys, cloud credentials and other projects aren't there, and neither is the network unless you allow it (
/sandbox network on). - Locked down: commands run as your user (files belong to you), with no Linux capabilities and a process limit.
- File tools too: lcode's file tools are limited to the project while the sandbox is on.
- Default image: built locally on first use (about a minute), with Python, Node.js, git, build tools and ripgrep.
sandbox_imagesets your own. - Fewer prompts: in
auto-editmode, sandboxed commands run without asking. They can only reach the project, and/undotakes their changes back. - Fails safe: if the sandbox can't start, lcode stops instead of running commands without it.
Docs: Sandbox, including what it doesn't cover.
Upgrade
uv tool upgrade lcode-cli # or: pipx upgrade lcode-cli · Homebrew: brew upgrade lcodeFull changelog: v0.4.1...v0.5.0
lcode 0.4.1: Homebrew
lcode is on Homebrew.
brew install nasser1941/tap/lcode
lcode setupAdded
- Homebrew:
brew install nasser1941/tap/lcodeworks on macOS (Apple Silicon and Intel) and on Linux. The tap tests the formula on both, and updates it automatically for each release about a day after it's published. - Python 3.14 is supported and tested.
Upgrade
uv tool upgrade lcode-cli # or: pipx upgrade lcode-cli · Homebrew: brew upgrade lcodeFull changelog: v0.4.0...v0.4.1
lcode 0.4.0: MCP servers
lcode now connects to MCP servers. Your local model can work with Jira and Confluence, GitHub, AWS, Google Drive, Grafana, Google Cloud, Sentry, Linear, Notion, Postgres, Kubernetes, a browser and any other MCP server. You approve every call.
lcode mcp catalog # the ready-made servers
lcode mcp add atlassian # signs you in through the browser, then tests the connection
lcode mcp add github # offers the token from `gh auth token`
lcode mcp list # checks every server and says what's wrongAdded
-
Ready-made servers:
lcode mcp add <name>sets up and tests each one:Server Sign-in atlassian,sentry,linear,notionbrowser sign-in google-drivebrowser sign-in, with your own Google OAuth client github,grafana,postgresa token or connection URL aws,gcp,kubernetesyour local credentials aws-knowledge,context7,playwrightnothing Servers that can change things start read-only where possible.
-
Any other server: local (stdio) or remote (Streamable HTTP), configured in
~/.config/lcode/mcp.jsonin the standardmcpServersformat, so a server's README snippet can be pasted in as is. A project can share servers in.mcp.json, used only after you approve it. -
Browser sign-in: OAuth 2.1 with PKCE, automatic client registration and token refresh. Tokens are stored readable only by you.
-
Protocol versions: both the current MCP protocol (2026-07-28) and the earlier
initialize-based versions. -
Context: when tool definitions would take more than 15% of the context window, the model looks tools up on demand instead (the
mcp_toolssetting)./mcpshows servers, tools and their context cost.
Fixed
lcode bench: Ctrl+C no longer leaves a temporary folder behind, and the "already loaded" warning no longer names the model being benchmarked.
Docs: MCP servers
Upgrade
uv tool upgrade lcode-cli # or: pipx upgrade lcode-cliFull changelog: v0.3.1...v0.4.0
lcode 0.3.1
Which local model codes best on your machine? lcode bench measures it.
Added
-
lcode benchscores models on this machine with eight small coding tasks:- fixing a bug
- finding code
- writing a script from a spec
- renaming across files
- a one-line edit in a long file
- recovering from failing commands
- fixing a function to match its spec
- adding a feature across files
Each task runs in a temporary folder and has an automatic check, some with hidden tests. It reports tasks passed, time, generation and prompt speed, tool-call errors and memory use.
lcode bench model-a model-bcompares models,--jsonsaves the results (a documented, versioned format) and--markdownprints a table for a model test report.
lcode bench qwen3.6-35b qwen3.5-9b --markdownResults on an RTX 4080 Laptop GPU (12 GB) with 31 GB of RAM, 32K context:
qwen3.6-35b |
qwen3.5-9b |
qwen3.5-4b |
|
|---|---|---|---|
| Passed | 8/8 | 6/8 | 6/8 |
| Time | 3m 57s | 11m 55s | 5m 20s |
| Generation | 71.4 tok/s | 60.1 tok/s | 91.3 tok/s |
| Prompt reading | 855 tok/s | 3,507 tok/s | 5,186 tok/s |
| Tool-call errors | 0 | 9 | 1 |
Please share yours, especially from Apple Silicon Macs and other GPUs: paste the --markdown table into a model test report. Details: Benchmarking models.
Upgrade
uv tool upgrade lcode-cli # or: pipx upgrade lcode-cliFull changelog: v0.3.0...v0.3.1
lcode 0.3.0
Undo for local models. lcode now saves a checkpoint before the model changes your files, so a wrong edit or a script that went sideways is one command away from being undone.
Added
/undotakes back the file changes of the last request. Before the model first changes files in a request, lcode saves a checkpoint./undothen restores edited and deleted files and removes new ones, including changes made by shell commands./undoagain goes further back./rewind Ngoes back to before request N, optionally removing those requests from the conversation too./checkpointslists them.
- Checkpoints live in a separate git repository in lcode's state folder, so your own repository is never touched. They also work in folders that aren't git repositories. Turn them off with
lcode config set checkpoints false.
● edit_file(calc.py)
✓ Edited calc.py
● write_file(notes.md)
✓ Created notes.md (1 lines)
$ rm old.txt
↶ Checkpoint 1: 3 files changed · /undo reverts them
❯ /undo
Undoing request 1: In calc.py add a multiply(a, b) function. Also create notes.md with o…
restore calc.py
restore old.txt
remove notes.md
Done: restored calc.py, old.txt; removed notes.md.
Details: Undo and checkpoints
Upgrade
uv tool upgrade lcode-cli # or: pipx upgrade lcode-cliFull changelog: v0.2.2...v0.3.0
lcode 0.2.2
Change the context window without leaving your session.
Added
/contextnow lets you change the context window mid-session: it lists the sizes the model
supports with the memory each needs and whether it fits on the GPU, and you pick one (or type
/context 128k). If the conversation is too long for a smaller size, lcode summarizes it first.
/ctxis a shortcut for the same command.
❯ /context
In use: 14.2K of 256K tokens (5%) in 1 message; auto-compacts at 85%.
Context window for lcode-qwen3.6-35b
# Size Memory · fit
1 16K ~22 GB · GPU + RAM
2 32K ~23 GB · GPU + RAM
…
5 256K ~28 GB · GPU + RAM current, recommended
Choose a number, a size like 96k, or press Enter to keep 256K: 2
Context window set to 32K tokens. The model reloads on the next request.
Upgrade
uv tool upgrade lcode-cli # or: pipx upgrade lcode-cliFull changelog: v0.2.1...v0.2.2
lcode 0.2.1
Please upgrade if you use 0.2.0: in the default ask mode, file edits failed with IndexError: list index out of range.
Fixed
- File edits and writes failed with "IndexError: list index out of range" in the default
ask
permission mode, a regression in 0.2.0.auto-editandyolomodes were not affected. - Slow models no longer look stuck: the status line keeps counting the elapsed time while the model
thinks, answers or silently writes a long file into a tool call, and reminds you that Ctrl+C stops it.
Upgrade
uv tool upgrade lcode-cli # or: pipx upgrade lcode-cliFull changelog: v0.2.0...v0.2.1
lcode 0.2.0: web search
Highlights
The model can now search the web. When an answer depends on something newer than its training data, such as the latest version of a library, a changed API, an error message or current documentation, lcode searches and reads pages by itself, then tells you which URLs it used.
web_searchworks with Ollama web search (free key with an Ollama account), Brave Search, Tavily or your own SearXNG.web_fetchreads any page as clean text, with no key needed.- On by default. Use
lcode config set web askto approve each search, orweb off/--no-webto keep everything local. See Web search for setup and exactly what leaves your machine.
Added
- Web access for the model:
web_searchfinds current information (latest releases, docs, error
messages) through Ollama web search, Brave Search, Tavily or a self-hosted SearXNG, andweb_fetch
reads pages as clean text. On by default;lcode config set web ask|offorlcode --no-weblimits
it. Search API keys are read from environment variables only. Closes #7.
Install or upgrade
curl -fsSL https://nasser1941.github.io/lcode/install.sh | bash # new install
uv tool upgrade lcode-cli # upgrade (pipx: pipx upgrade lcode-cli)To turn on search, set up a provider, for example export OLLAMA_API_KEY=... with a free key from https://ollama.com/settings/keys, then check with lcode doctor.
Full changelog: v0.1.2...v0.2.0