Blog
/Product

What's New in v0.48: Dictation, a Lighter App, and a Working Folder That Behaves

The longest thing anyone writes in Lanes is the prompt a session starts from, and it is the part where typing costs the most. v0.48 puts a microphone on it.

Under that, this run of releases, up to v0.48.3, was mostly about weight. The app boots on a fifth of the JavaScript it used to, opens files it previously refused outright, and the working folder now moves, duplicates, and multi-selects like the file manager you already use.


Talk instead of typing

The microphone is the leftmost button in the footer, on an issue description and on a running session, and it sits in workspace chat too. Click to start, click again to stop. Words appear as you speak rather than all at once at the end, and a ring spins around the stop button while a phrase is in flight, so a pause looks different from a stall.

Lanes never submits for you. In an issue, the transcript goes in at your cursor, so you can dictate into the middle of something you already wrote. In a session, it goes into the agent's own input line with no trailing Enter. You read it, edit it, and send it yourself.

That is also what makes it work with any harness. Lanes writes plain bytes to the terminal and knows nothing about which CLI is drawing the input line, so Claude Code, Codex, and whatever you run next all behave the same.

Set it up in one page

Open Settings, then Voice. Until a key is set, the microphone buttons do not appear.

Pick a preset, paste your key, and press Record a test. The preset fills in the base URL and a matching model together, which is the pair people get wrong: a model id from one provider is a 404 on another.

PresetBase URLModel
OpenAIhttps://api.openai.com/v1whisper-1
Groqhttps://api.groq.com/openai/v1whisper-large-v3-turbo
Local serverhttp://localhost:8080/v1whisper-1

Anything that accepts a POST to /audio/transcriptions works, including a whisper server on your own machine. Your key goes in ~/.lanes/integrations.json next to your GitHub and Linear tokens, and the request is made by the app rather than the page, so it never passes through the web view. Your audio goes to the base URL you configured and nowhere else.

Teach it your vocabulary

The Vocabulary field is the highest-value setting on the page. It is a list of names and jargon to expect, and for a coding tool that is the difference between

lanes, taury, zoo stand, work tree

and

Lanes, Tauri, zustand, worktree

Put your stack, your repo names, and the words you say all day into it. Two more things it does without being asked: silence is discarded before it is sent, because speech models fed silence invent a plausible sentence rather than return nothing, and a recording stops itself after three minutes so a microphone left open by accident does not stay open.

Full setup in the Voice Dictation docs.


Lighter, quicker, and it opens the file anyway

The editor used to stat a file and refuse anything over 5MB outright. Nothing refuses to open now. Lanes reads one window, shows a banner naming the real size, and extends on demand, so the 31MB CSV that used to be refused now opens. A partly loaded file is read-only and the Edit button is hidden, deliberately: saving a prefix would write it over the whole file on disk. Past 512KB the minimap, folding, and bracket colorization turn off, because at that size they cost more than the file does.

Startup got the same treatment. The app used to load 6.7MB of JavaScript and CSS before it could paint anything, plus 1.6MB of syntax grammars the moment the entry chunk ran, for editors, terminals, and settings pages a given launch may never open. It now boots on 1.4MB, and the whole build dropped from 26MB across 325 files to 18.7MB across 75.

The rest is memory that was never coming back:

  • Disposed terminals stayed reachable through the commands store, one retained buffer for every terminal you had ever opened.
  • A session that exited on its own leaked its full 512KB of scrollback for the life of the app. Only an explicit kill freed it.
  • The PTY batch buffer grew without limit while paused, next to a ring buffer that had been capped all along.
  • The Changes pane left one shell per directory running, invisible to both the Process Manager and Kill All.

Session state detection also stopped polling serially, so its cost no longer scales with how many sessions you have open, and it reads the last few kilobytes of scrollback instead of base64-encoding half a megabyte to look at 2KB of it.


A working folder that behaves like a file manager

The Working Folder tree used to do one thing to a file: rename it.

  • Drag rows onto a folder to move them. Folders spring open when you hover one, and the tree auto-scrolls at its edges. Dropping in from Finder still copies, as before.
  • Duplicate, Cut, Copy, Paste, and Copy Relative Path are in the right-click menu, with Cmd+D, Cmd+X, Cmd+C, and Cmd+V behind them.
  • Cmd-click and Shift-click build a selection, and every one of those actions works on all of it.
  • Collapse All and Reveal open file sit in the header, for when the tree has got away from you.

Renaming a folder no longer strands the file you had open or orphans everything expanded beneath it, which is what happened when the tree tracked absolute paths and only the file rename remapped them.


Also new since v0.46

  • One Identity panel, GitHub and Google Cloud. The header panel answered "who am I" for gh only. It now has two tabs, so switching gcloud accounts, reading the active project, and refreshing ADC no longer mean leaving the app for a terminal. Accounts in both tabs are a wrapping row of badges, checked when active.
  • Lanes Link installs and updates with the app. The Install and Update buttons on the Lanes Link card now get pressed for you, once per launch, when the app is fresh or has been updated since it last ran.
  • An honest mark on a stale connection. A connection whose vendor has stopped accepting the stored credential gets an amber mark and a Reconnect action, instead of reporting itself active until every call 401s.
  • lanes://settings opens the app straight to a settings page.
  • Emerald is the accent. Gold is gone, across the app, the focus rings, and the terminal cursor.

Dictation is the one we most want to hear about, because a speech model's idea of your stack's vocabulary is very personal. Join our Discord and tell us what yours gets wrong.

Latest Posts