Add a folder the way you'd cd to it.
The picker ranks folders with zoxide's z, completes cd paths with Tab, and browses like Finder.
Run Claude Code, Codex, Devin, Grok, Antigravity or any CLI you configure in real terminals, across every project, from one Mac app.
Lanes, open on Claude fixing a flaky checkout test in checkout-api. The sidebar lists four projects and their sessions.
Caption: Your CLI. Your terminal.
The Add project dialog: typing z sea finds search-service by its zoxide rank, and it joins the sidebar.
Caption: Open projects with the tools you already use.
Codex, in a second checkout-api session, finishes documenting the refund webhooks and takes a follow-up prompt in its own terminal.
Caption: Real coding CLIs in real terminals.
A close-up of the sidebar, where every session shows the state its CLI reported.
Caption: Status comes from each CLI’s own hooks.
Claude stops to ask before running a database migration. Its session moves to the Needs-you list and a notification appears; opening it and answering y lets it carry on.
Caption: See which agent needs you.
Four panes in a two-by-two split: Claude in checkout-api, Codex in dashboard, Devin in mobile-app and Grok in infra.
Caption: Up to four agents, side by side.
The New session dialog in search-service: one title and prompt, with Run with a second agent ticked.
Caption: Give two agents the same task.
Claude and Codex side by side, each on its own lanes/faster-index-rebuild branch: one caches tokenised documents, the other tokenises in a worker pool.
Caption: Keep both approaches in view.
Lanes’ background service restarts. A Reconnecting bar shows, then the same two panes come back with both agents still running.
Caption: Sessions keep running. Pick up exactly where you left off.
The end card: the Lanes logo, “Local-first. Free. MIT licensed.” and getlanes.dev.
No caption
Lanes doesn't put your agents behind a chat box. Each one runs in a real terminal, so slash commands, skills, hooks and every CLI's own interface work the way they always have.
~/.lanes/config.toml, which reloads on save.[profiles.gemini]
label = "Gemini"
command = "gemini"
Every agent lives in its own holder process. Quit the app, restart Lanes or install an update, and you come back to the exact screen you left, with every agent still running.
Status comes from each CLI's own hooks, with an idle and bell fallback for the rest. When an agent needs you, it joins the Needs-you list, the Dock badge counts it and a native notification tells you. The session you're already looking at stays quiet.
Split the window into up to four panes in a two-by-two grid, from any project and any provider. Say, the four repos you share with a teammate, a terminal each, side by side.
Write one prompt and pick two agents. Each gets its own git worktree and branch, and they run side by side, so you can compare the two approaches before you keep one.
Speed up the search index rebuild
lanes/faster-index-rebuild-45f0-claude
lanes/faster-index-rebuild-45f0-codexcd to it.The picker ranks folders with zoxide's z, completes cd paths with Tab, and browses like Finder.
Start a session in its own git worktree and branch, so agents working in parallel each work in their own checkout.
maincheckout-api
fix/flaky-checkout
worktree ~/.lanes/docs/refund-webhooks
worktree ~/.lanes/Keep projects in a sidebar, or as tabs along the top. ⌘\ switches.
Jump to any session or project, or run a command, from the quick switcher.
Not in Lanes today. These are the next two things we're building.
Coming
A web app you add to your home screen, reaching your Mac over Tailscale, with push notifications when an agent needs you.
Coming
See what an agent changed and commit it without leaving Lanes.
Questions or feedback: hey@getlanes.dev