If you work across more than one repo in Lanes, this release is for you.
In v0.37, the things that should belong to a project finally do. Quick commands, CLI flags, and labels are now per-repository. Your monorepo's lint shortcut won't fight your side project's deploy script anymore. They live in different places, configured separately, and that's how it should have been from the start.
Oh, and there's now a sound when an issue hits Done. The default is a gong. You can change it. We'll get to that.
Introducing .lanes for per-project configuration
For most of Lanes' life, your quick commands, CLI flags, and labels were global. One list, applied to every project on your machine.
That broke down the moment your repos started disagreeing. Your work monorepo wants pnpm test; your Rust side project wants cargo test. One repo runs Claude Code with --dangerously-skip-permissions, the other doesn't. One wants the labels Bug, P0, P1, P2; the other wants Frontend, Backend, Infra. Globally, you ended up with the union of everyone's preferences, and a context menu that grew until it stopped helping.
In v0.37, all three move into per-repository config:
- Quick commands, the prompts you launch sessions with, are now scoped to the repo they belong to.
- CLI flags for Claude Code, Codex, and other agents are per-repo, with sensible defaults out of the box.
- Labels are per-repo. Renames cascade atomically across every issue in that project.
All of this lives in plain files inside a .lanes/ directory at the root of your repo. Commit it, share it with your team, review changes in PRs. Your project's configuration travels with the code, the same way .vscode/ or .editorconfig do.
There's also a quieter fix in here that matters. Base-branch detection now prefers your local refs over origin. If your local main is ahead of remote, your worktree sync count finally tells the truth.
Open Settings > Project Settings the first time you upgrade. It walks you through the new layout, keeps your existing global settings as defaults, and lets you push them down into individual repos at your own pace.
A sound when issues are Done
Marking an issue Done now plays a sound, because finishing things should feel like finishing things.
The default is a gong. A satisfying, unhurried, "yes, that's done" gong. We tried a lot of options. The gong won.
If a gong isn't your style, we ship a small library of alternatives: Chime, Success, Tada, Fanfare, Victory, Level Up, Happy Bells, Long Pop, and Sci-fi. Or upload your own audio file (.wav, .mp3, .ogg, .m4a, .aac, .flac). Air horn. Your dog. A clip of your CEO saying "ship it." Whatever makes the moment feel right.
Find it under Configure > Notifications > Sound. There's a volume slider and a preview button, so you can dial it in before unleashing it on your standup.
UI improvements
A handful of small things that add up to a nicer day-to-day experience.
Recent issues in the sidebar. The left sidebar now has a Recent Issues section. Click one and the whole app jumps to that issue's context: the side panel updates, the board view switches to the right project tab. Bouncing between two issues you're working on is a single click now.
A sidebar that remembers itself. The file-tree expand/collapse state for each project is now saved per workspace, survives restarts, and auto-expands new projects you add.
Bell icons where you need them. Project tabs already showed a bell when an issue inside them needed attention. Now issue tabs do too, so you can spot which session is waiting on you without opening it.
An inline commit composer. The git diff view now lets you write a commit summary and description and ship a commit without leaving Lanes. No more dropping into a terminal to do the obvious thing.
Click-through to files. Click a file row in an issue's side panel and the git project view opens with that file already selected.
CLI flag snapshots per session. Flags are captured at session launch, so the side panel keeps showing what an issue actually ran with, even if you've changed your global selections since.
Plus a cleaner branch header, a redesigned git diff toolbar, a discard-file action, and a sidebar context menu for the git operations you do most.
Stability
A few things you'll feel without seeing:
- Git diff polling is now gated on sidebar visibility. We were pinging in the background even when you weren't looking. Now we don't.
- The CLI flag picker deduplicates equivalent signatures, so
--modelandmodelaren't two entries anymore. - Worktree base-branch detection no longer mis-reports sync state when local and origin diverge.
- We rolled back project-scoped attention clearing after it started leaving stale indicators around. Attention is global again.
- Various smaller layout and refresh fixes across the board view.
What's next
The next release is about getting your worktree productive faster.
We're building startup and teardown scripts for worktrees: custom commands that run automatically when you create or destroy one. The intent is simple. Stop manually running pnpm install every time you start a new branch. Stop copying .env files. Stop spinning up Docker services from memory.
This opens up some nice possibilities, like Worktree Compose for orchestrating dependent services, automated dependency installs, env propagation, and per-agent bootstrap. If you have specific workflows you want covered, tell us in Discord. We'd rather build this against real workflows than ship a narrow version.
We'd love your feedback. Join our Discord to stay updated.