What's New in v0.49: Astra Is a Banger, and Codex Got a Lot Better

7 min read Original article ↗

v0.49 is here, and the headline is pretty simple: GPT 6 Astra is in Lanes.

Claire Vo called Astra "a banger" in Lenny's Newsletter, after it one shot tasks she had been throwing at previous models for months. We wanted it in Lanes right away, and it is there now.

This release turned out to be a lot more than a model picker update, though. Codex sessions are far more reliable, History properly understands Codex transcripts, session state can be reported directly through an optional Codex hook, and your issue board now shows what happened to the pull request after the coding stopped.

Here is what changed.


The issue board got a revamp

Branches on the board can now tell you what happened after the agent finished coding. If a branch has a pull request, its chip shows the current state:

  • Green means open
  • Purple means merged
  • Red means closed
  • Draft pull requests stay neutral

If there is no pull request, there is no icon. Hover over one and Lanes shows the pull request and its state.

A merged pull request stays visible after the worktree has been cleaned up, so you do not lose the connection between the task and what eventually landed. That makes the board useful for more than tracking what an agent is doing right now: you can see where its work ended up.

The rest of the board reads more clearly too. The leading icon on an issue is the harness actually running it, Claude, Codex, or a terminal for a plain shell, and it carries the session state through its tint. Planning uses cyan now, so it is easier to tell apart from completed work. And two indicators that used to look alike now mean different things at a glance: orange is commits in a worktree its base branch does not have, blue is remote sync.


History is easier to read

History reads like a conversation now, with much better formatting throughout.

Tool calls are presented as the work they actually performed. Instead of a generic exec, Lanes recovers the shell command, file operation, or patch behind it and shows that directly. A call the agent is still waiting on stays visibly active, then settles once it finishes.

It also loads progressively. Opening a very long session only loads the messages you need for the first screen, with Load earlier when you want to go further back.

History reads either harness's transcript, too, so a Codex session shows its activity the same way a Claude Code one does.


GPT 6 Astra is now in the model picker

Lanes now asks your installed Codex binary which models it supports, and uses that list directly in the session picker.

That means GPT 6 Astra is available now, and whatever OpenAI ships next can appear without waiting for another Lanes release.

There is nothing new to configure. Pick Codex, choose the model you want, and start the session.

If Codex is not installed, Lanes still falls back to its built in model list.

We refreshed the Claude presets at the same time: claude-fable-5-1, claude-opus-5, claude-sonnet-5, claude-fable-5, and claude-opus-4-8.


Codex session enhancements

Codex now has a hooks system, and v0.49 uses it. When Codex is your harness and the Lanes hook is not installed, a prompt in the app explains how to enable it.

With the hook in place:

  • Sessions resume reliably. Lanes gets the session id straight away, so a session you close early, before the first message even, is still resumable.
  • Plan mode shows on the board. Switch a Codex session into Plan mode with /plan and Lanes moves the issue into Planning automatically, the way it already does for Claude Code. Codex still cannot be launched into Plan mode from the command line, and Lanes now says so rather than quietly starting a normal session.
  • Idle detection is more accurate, with a cleaner signal for when Codex is working and when it is waiting.

The hook is optional, and installing it does not grant trust: Codex handles that itself the next time it starts. Settings, then Agentic Coding, then Harness shows installation and trust separately, so you can see what is missing. Until it is trusted, Lanes uses the existing transcript based behavior.


Worktrees are easier to manage

Completing or deleting an issue can involve cleaning up its worktree, and Lanes now asks what you want rather than deciding for you:

  • Remove the worktree and its branch
  • Remove the worktree but keep the branch
  • Keep everything

If there is uncommitted or unmerged work, Lanes names it before anything is removed, and the dialog stays open until the cleanup has actually finished instead of disappearing into the background after you click.

A few smaller things too. The worktree picker has a search field that matches both worktree names and branch names. Selecting a worktree changes what the Changes pane is showing without checking anything out, since checkout is a separate action now, shown only when it makes sense. And you can clear an issue's branch association with No worktree, behind a confirmation.

The board also distinguishes two states that used to look almost identical: a live worktree attached to the issue, and a branch reference whose worktree has already been removed. So you can tell whether the folder is still there, or whether the issue is simply remembering the branch it came from.


Agents can link worktrees they created themselves

Agents do not have to rely on Lanes to create every worktree anymore.

lanes_update_issue now accepts a branch, which means an agent can create a worktree itself with Git and then attach that branch to the issue.

There is also a new lanes_list_worktrees tool so an agent can see what already exists before creating or choosing one.

This is useful for more autonomous workflows where the agent is managing part of the repository structure itself.


Also in v0.49

Codex sessions no longer disappear.

Recent Codex versions compress older session transcripts into .jsonl.zst. Lanes only understood the original format, so a compressed session could lose its History and statistics, stop resuming, and sit on the board looking busy. Lanes reads both formats now.

Resume returns to the mode you were actually using.

If you changed session mode after starting, Resume now restores that mode instead of reverting to the original one.

Claude sessions use their real title.

Lanes now replaces the temporary title created at startup with the title Claude Code actually gives the session.

Update checks understand Homebrew installs.

If your coding CLI came from Homebrew, the update checker now understands that installation path and stops suggesting updates that brew upgrade cannot actually install.

New terminals show the correct icon immediately.

Opening a plain terminal no longer briefly flashes the Claude icon before switching.

The local MCP endpoint is stricter about where requests come from.

Lanes already binds the endpoint locally. It now also validates the request origin and host so browser based requests from outside the expected local context cannot reach it.

Idle detection does much less work.

Session activity tracking is now incremental and runs away from the UI thread, significantly reducing unnecessary CPU usage on boards with several idle sessions.


Tell us what your board should show

v0.49 closes a lot of the gap between using Claude Code and Codex inside Lanes, but the pull request state on the issue board is a new direction for us.

It is the first time the board is showing something that happened outside the local agent session itself.

We would love to know what else belongs there. Should the board show CI status? Reviews? Deployment state? Something else entirely?

Join us on Discord and tell us how you use it.