Repository navigation
Releases
Lanes 0.0.9 (preview)
Install or update:
| On | Command |
|---|---|
| macOS, Linux, WSL | brew install autter-dev/tap/lanes, or curl -fsSL https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.sh | sh |
| Windows | winget install Autter.Lanes, scoop install lanes (after scoop bucket add autter https://github.com/Autter-dev/scoop-bucket), or irm https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.ps1 | iex |
| Anywhere with Node | npm install -g @autter/lanes |
More ways, and how to check a download, at https://lanes.autter.dev/download.
Verify an archive: gh attestation verify <file> --repo Autter-dev/lanes, or compare it with SHA256SUMS.
Changes
GitHub Copilot on Windows, fixed. Copilot's hooks on Windows do nothing when lane isn't there, so removing Lanes no longer leaves the Copilot CLI turning down every tool, and VS Code on Windows now turns down copies of the repo like everywhere else. Still a preview.
lane setup --yes # on Windows, writes Copilot's hooks again after you upgradeIn this version:
- Copilot's hooks on Windows run
laneby its full path and do nothing if it has gone, the same in cmd.exe, Windows PowerShell and PowerShell 7. An editor started before Lanes was installed still finds it. - VS Code on Windows turns down copies of the repo. In 0.0.8 PowerShell turned the hook's exit 2 into 1, which VS Code takes as a warning, so copies went ahead.
- Upgrading on Windows: hooks written by 0.0.8 count as out of date.
lane setup --yes, the welcome inlaneandlane doctor --fixwrite them again, andlane doctorsays when they need it. macOS and Linux keep the hooks they have.
Known issues:
- Gemini CLI and GitHub Copilot are checked against their documented hook formats, not yet in live sessions.
Not yet:
- No checkpoints or undo, no promote to a pull request, and no database per lane.
2026-10-18
18:35Fixed: on Windows, GitHub Copilot's hooks do nothing whenlanecan't be found, so the Copilot CLI no longer turns down every tool after Lanes is removed (the known issue in 0.0.8).- They run
laneby the absolute pathlane setupfound, so an editor whose PATH is from before the install still finds it, and they work the same whether Copilot runs them in PowerShell or cmd.exe. A path that one of those shells would read differently falls back tolane.exeon PATH. - VS Code on Windows now turns down copies of the repo too: PowerShell had turned the hook's exit 2 into 1, which VS Code takes as a warning.
lane setup, the welcome andlane doctor --fixnotice hooks from 0.0.8 and write them again.lane doctorsays when Copilot's hooks are from 0.0.8, or run alanethat isn't there any more, and thatlane setup --yesupdates them.lane setup --yes --agents offstill takes the file away, and macOS and Linux keep the hooks they had. (8ae07c3)
- They run
17:58Changed: the website offers 0.0.8. The guide shows Gemini CLI and GitHub Copilot making lanes,lane mcpfor agents' tools, andlanedbehind the terminal app. (b029a36)
Lanes 0.0.8 (preview)
Install or update:
| On | Command |
|---|---|
| macOS, Linux, WSL | brew install autter-dev/tap/lanes, or curl -fsSL https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.sh | sh |
| Windows | winget install Autter.Lanes, scoop install lanes (after scoop bucket add autter https://github.com/Autter-dev/scoop-bucket), or irm https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.ps1 | iex |
| Anywhere with Node | npm install -g @autter/lanes |
More ways, and how to check a download, at https://lanes.autter.dev/download.
Verify an archive: gh attestation verify <file> --repo Autter-dev/lanes, or compare it with SHA256SUMS.
Changes
Five agents, Lanes' own tools for them, and a daemon that keeps it all in step. Gemini CLI and GitHub Copilot now put their work in lanes on their own, lane mcp gives agents tools to read the repo and make lanes, and laned makes every change to lanes and keeps the terminal app live. Still a preview.
lane setup # puts Gemini CLI and GitHub Copilot in lanes too
claude mcp add lanes -- lane mcp # Lanes' tools for Claude Code; any MCP client works
lane daemon status # whether laned is running, and the changes it has madeIn this version:
- Gemini CLI and GitHub Copilot (the Copilot CLI and VS Code's agent mode) put their work in lanes on their own, set up once per machine like Claude Code, Codex and Cursor. The worktrees they make become ready-to-run lanes, and copying the repo is turned down with a pointer to
lane new. Their settings files keep their comments, andlane setup --yes --agents offgives each one back byte for byte. lane mcp: an MCP server over stdio withrepo.read,repo.outline,repo.grep,lane.newandlane.list, so agents read code and make lanes through tools. Lanes adds it to no agent's settings;claude mcp add lanes -- lane mcpadds it to Claude Code.laned, the daemon, is the one writer. While it runs, every change to lanes, from your commands, agents' hooks or the terminal app, is made there, one at a time per repo, with your environment, and install output comes back as it happens. It keeps the terminal app live, sending only what changed. Your own commands start it; agents' sessions, hooks and CI only use it if it's running. It keeps nothing of its own, so stopping it loses nothing, and it leaves by itself after half an hour with nobody connected.lane daemonshows, starts and stops it.
Known issues:
- On Windows, removing Lanes without first running
lane setup --yes --agents offleaves the Copilot CLI with a hook it can't run, and the Copilot CLI then turns down every tool. Run that command before you uninstall, or delete~/.copilot/hooks/lanes.json. - Gemini CLI and GitHub Copilot are checked against their documented hook formats, not yet in live sessions.
Not yet:
- No checkpoints or undo, no promote to a pull request, and no database per lane.
2026-10-18
17:20Changed:lanedis the one writer. While it runs,lane new,lane rmandlane adopt, agents' hooks,lane doctor --fixand the terminal app send it their changes, and it makes them one at a time per repo (0b0a6d4).- Install output comes back to your terminal as it happens, and installs run with your environment (PATH, package manager settings), not the daemon's.
- Results and errors are exactly as before: the same output,
--json, exit codes and hints. - Once it has a change it finishes it, even if the command that asked is stopped, so no lane is left half made. If it stops mid-change, the command says so and how to check where it got to.
- Your own
lane new,rmandadoptstart it when it isn't running. Agents' sessions, hooks and CI only use it if it's running, andLANE_DAEMON=0keeps anything from starting it. Without it, everything runs inlaneas before. lane daemon statuscounts the changes it has made.
17:14Added: Gemini CLI and GitHub Copilot put their work in lanes on their own, set up once per machine bylane setupand the welcome, like Claude Code, Codex and Cursor. (281b48f)- Gemini CLI, in
~/.gemini/settings.json: a SessionStart hook makes a worktreegemini -wmade a lane, a BeforeTool hook onrun_shell_commandturns down copies of the repo with the reason shown to the model, andAGENTS.mdjoinscontext.fileName(keepingGEMINI.md). - GitHub Copilot: the Copilot CLI and VS Code's agent mode both read Lanes' own
~/.copilot/hooks/lanes.json, with sessionStart and preToolUse hooks; a turned-down command exits 2 so the model sees why. VS Code's user settings getchat.useAgentsMdFileunless you've set it. lane hook gemini session-start|before-toolandlane hook copilot session-start|pre-tool-useanswer in each agent's documented format.lane doctor, the welcome andlane initlist both agents.- Their settings allow comments, so Lanes edits them as text, and
lane setup --yes --agents offgives each file back byte for byte. Lanes notes the values it set (agent-settings.json, next to its settings) and puts back what was there, unless you've changed them since. The guide shows the guidedlane initwith its Y/n questions, the terminal app and what lanes saved,lane doctor --fix, and what the install count sends withlane telemetry. (4e7be85)
- Gemini CLI, in
17:05Added:lane mcp, an MCP server over stdio, so coding agents read the repo and make lanes through tools:repo.read(a file or some of its lines, and nothing outside the repo),repo.outline(top-level definitions and their line numbers, best effort for Rust, TypeScript, JavaScript, Python and Go),repo.grep(git grep, so.gitignoreis respected),lane.newandlane.list. A tool's errors say what to do next, as the commands do. Add it to Claude Code withclaude mcp add lanes -- lane mcp; Lanes doesn't change any agent's settings for it. Built onrmcp, the official Rust MCP SDK. (0d3a709)17:02Added:laned, the daemon, keeps the terminal app live, andlane daemonshows, starts and stops it (e1b9b5a).- One runs per user. The terminal app starts it; agents' hooks, scripts and CI never do, and
LANE_DAEMON=0stops the app from starting it too. It stops by itself after half an hour with nobody connected. - It reads each repo's lanes once, however many terminal apps watch, and sends them only what changed. The app's status bar says "daemon running". If the daemon goes away, the app carries on by reading Lanes' state itself.
- It keeps nothing of its own, so killing it loses nothing. A daemon from another Lanes version is replaced when the app or
lane daemon startconnects. - It listens on a local socket (a named pipe on Windows). On macOS and Linux it only talks to the same user's processes. A second copy leaves at once, and
lane doctorreports whether it's running. - Making and removing lanes don't go through it yet: they work as before, safely, with or without it.
- One runs per user. The terminal app starts it; agents' hooks, scripts and CI never do, and
17:02Fixed: the README listedlane telemetryunder commands coming next; it shipped in 0.0.7.14:58Changed: the website offers 0.0.7. The guide shows the guidedlane initwith its Y/n questions, the terminal app and what lanes saved,lane doctor --fix, and what the install count sends withlane telemetry. (4e7be85)
Lanes 0.0.7 (preview)
Install or update:
| On | Command |
|---|---|
| macOS, Linux, WSL | brew install autter-dev/tap/lanes, or curl -fsSL https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.sh | sh |
| Windows | winget install Autter.Lanes, scoop install lanes (after scoop bucket add autter https://github.com/Autter-dev/scoop-bucket), or irm https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.ps1 | iex |
| Anywhere with Node | npm install -g @autter/lanes |
More ways, and how to check a download, at https://lanes.autter.dev/download.
Verify an archive: gh attestation verify <file> --repo Autter-dev/lanes, or compare it with SHA256SUMS.
Changes
Setup that does the work for you, and your lanes live in the terminal app. lane init and lane doctor --fix now set things up themselves and ask Y/n where the choice is yours, and lane shows every lane live, with what lanes saved you. Still a preview.
lane init # set up this repo, asking Y/n before each step, then say what's left
lane doctor --fix # fix what Lanes can fix by itself, asking first
lane # every lane, live, and what lanes saved you
lane telemetry # exactly what the anonymous install count sends from your machineIn this version:
lane initin a terminal walks through each step and asks before it:lane.tomlfor your team, putting this machine's agents in lanes, the Git hook, theAGENTS.mdnote, Claude Code for this repo, and installing dependencies ahead of time so the first lane is ready in seconds. It ends with what's left for you to do.--yestakes every default, and agents, scripts and CI are never asked anything.lane doctor --fixfixes agents not in lanes yet, this repo's Git hook and lanes whose folders have gone, asking first. The install scripts offer to set Lanes up when they finish.- The terminal app lists every lane with its agent, status (running when its app answers), URL, changed files, last test run and extra disk, and updates as things change. "Saved by lanes" compares the disk lanes take with a worktree plus an install for each, and counts the installs they skipped.
?shows the keys,:or Ctrl-K opens a command palette,nmakes a lane anddremoves one. - The anonymous install count is sent from this version on: once Lanes is set up and once after each upgrade, a random install id, the version, your OS and CPU type, and how you installed it. Nothing else, never from CI, and off with
lane telemetry offorDO_NOT_TRACK=1. It goes to a small open-source service in this repo (services/install-count) that keeps no IP addresses.
Not yet:
- No background daemon: the terminal app reads Lanes' state every two seconds instead, and its status bar says so.
- Lanes made before 0.0.7 show no savings, because Lanes measures each lane as it makes it.
- No checkpoints or undo, no promote to a pull request, and no database per lane.
2026-10-18
14:34Added: the install count's backend is live athttps://lanes-count.autter.dev, on the D1 databaselanes-install-count. Checked end to end: a count sent bylanearrived with exactly its five fields, andDELETEremoved it.14:23Changed: the install count's backend keeps counts in Cloudflare D1, not Postgres, so it runs entirely on Cloudflare with no database to host elsewhere.npm run deployappliesmigrations/and deploys; its tests run the SQL on a local D1.13:59Added: the install count's backend, inservices/install-count: a Cloudflare Worker that keeps counts in D1 (b1f8c8e).POST /v1/installsaccepts the five fieldslanesends and nothing else.DELETE /v1/installs/<id>deletes everything kept about one install.- It never keeps IP addresses, user agents or request logs. Cloudflare's rate limiter allows 20 requests a minute per address.
queries.sqlhas the usual questions, and the README says how to host it atlanes-count.autter.dev, where release builds oflanenow send the count.
13:19Added: the anonymous install count, andlane telemetryto see and switch it (04e5ef2).- Once Lanes is set up (the welcome or
lane setup), and once after each upgrade, it sends exactly what the welcome lists: a random install id, the Lanes version, the OS and CPU type, and how Lanes was installed (Homebrew, npm, Scoop, winget, cargo or the install scripts). Nothing is sent before the setting is chosen. - Never from CI, and never with
lane telemetry off,LANE_TELEMETRY=0orDO_NOT_TRACK=1. It's sent in the background with a 1-second limit, and no command, or anything reading its output, waits for it. lane telemetryshows exactly what this machine sends;lane telemetry onandoffswitch it, and--jsonprints it for scripts.- Release builds send it to the service below; development builds and test runs never do.
- Once Lanes is set up (the welcome or
12:09Added: the terminal app's home screen shows your lanes live, and what they saved (677d880).- Every lane with its agent (Claude Code, Codex, Cursor), status (running when its app answers on its port), URL, changed files, last test run through
lane exec, and the extra disk it takes. Narrow terminals drop the agent and tests columns. - Saved by lanes: disk as two bars on one scale, a worktree plus its own install for each lane against what the lanes really take, plus the installs lanes skipped and the time that saved. Lanes measures each new lane as it makes it, so lanes made before this show nothing rather than a guess.
- A status bar: sign-in, the daemon, cores, apps running and disk saved. The daemon doesn't run yet, so the bar says so, and the screen watches Lanes' state instead, redrawing only when something changed.
- Keys:
?shows them all;:or Ctrl-K opens a command palette you can filter;nmakes a lane anddremoves one (asking first), in the background;oopens the lane's app,ccopies its folder andlshows the log.
- Every lane with its agent (Claude Code, Codex, Cursor), status (running when its app answers on its port), URL, changed files, last test run through
07:36Added: setup does everything it can by itself and asks Y/n where the choice is yours, then says what's left.lane initin a terminal walks through each step and asks before it: writelane.tomlfor your team; put this machine's agents (Claude Code, Codex, Cursor) in lanes; add or update the Git hook; add the note toAGENTS.md; set up Claude Code for this repo only, if not for the machine; and install dependencies now in a clean copy, so the first lane is ready in seconds. Steps already in place aren't asked about. It ends with what's left: trusting the hooks in Codex once, thegit add, the firstclaude -w, and getting instant lanes where this disk copies them.--yestakes every default without asking.lane doctor --fixfixes what Lanes can fix by itself, asking first: agents not in lanes yet, this repo's Git hook, and lanes whose folders have gone. What only you can do (install Git, move a repo to a Dev Drive, change PATH) keeps its steps.--fix --yesmakes every fix without asking.- The install scripts ask at the end whether to set Lanes up now, and run
lane setupif you say yes.--no-setuporLANES_NO_SETUP=1skips it. - After the welcome, Lanes prints what's next:
lane initin the repo you're in, trusting Codex's hooks once, and how to get instant lanes. - Agents, scripts and CI are never asked anything: without a terminal,
lane initdoes what it did before.LANE_INTERACTIVE=1asks even where Lanes can't tell it's a terminal (some Windows terminals);LANE_INTERACTIVE=0never asks.
07:22Changed: the website offers 0.0.6, and the guide has a step for when something's off:lane doctorandlane logs.
Lanes 0.0.6 (preview)
Install or update:
| On | Command |
|---|---|
| macOS, Linux, WSL | brew install autter-dev/tap/lanes, or curl -fsSL https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.sh | sh |
| Windows | winget install Autter.Lanes, scoop install lanes (after scoop bucket add autter https://github.com/Autter-dev/scoop-bucket), or irm https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.ps1 | iex |
| Anywhere with Node | npm install -g @autter/lanes |
More ways, and how to check a download, at https://lanes.autter.dev/download.
Verify an archive: gh attestation verify <file> --repo Autter-dev/lanes, or compare it with SHA256SUMS.
Changes
See what Lanes did, and what could stop it. Two new commands, lane doctor and lane logs. A small update to 0.0.5, and still a preview.
lane doctor # what could stop lanes working, and how to fix each thing
lane logs # what Lanes did: lanes made and removed, agents' hooks, installs
lane logs fix-auth # only what happened to one laneIn this version:
lane doctorchecks your machine (Git, whether your disk clones files, free space), thatlaneis on PATH for agents' hooks, which agents put their work in lanes, this repo's Git hook, lanes whose folders have gone, the daemon, and recent errors. Each problem says what to do next. It exits 1 only when something must be fixed, and takes--json.lane logsshows what Lanes did, newest last: lanes made and removed, agents' worktrees that became lanes, copies of the repo it turned down, and dependency installs. Lanes keeps the log in a file next to its state. Inside an agent's hook, problems and install output now go there instead of into the agent's view.- CI runs every test on Btrfs, XFS and ReFS disks too, and a lane there must be cloned, never copied.
Not yet:
- Gemini CLI, Copilot and other agents get lanes only when they make a Git worktree, through the hook
lane initadds. - There's no background daemon, no checkpoints or undo, no promote to a pull request, and no database per lane.
2026-10-18
03:00Added:lane doctorchecks what could stop lanes working, and says how to fix each thing. Exit code 1 when something must be fixed, and--jsonfor scripts. (d742748)- Everything
lane setupchecks (Git, whether this disk clones files, disk space). - That
laneis on PATH, because agents' hooks run it by name. - Which agents put their work in lanes, and which aren't set up yet.
- This repo's Git hook: in place, an older copy to update, or missing (Husky and lefthook included).
- Lanes whose folders have gone (a tool cleaned up its own worktrees) or that were left half-made, with the
lane rmto run. - The daemon, and errors in the log.
- Everything
03:00Added:lane logs [<lane>]shows what Lanes did, newest last: lanes made and removed, agents' hooks (worktrees that became lanes, copies turned down), dependency installs and failures. Lanes keeps one line per event inlane.lognext to its state, and moves it aside past 2 MB. Inside an agent's hook, problems and an install's own output now go to the log instead of the agent's view.-n,--pathand--jsontoo. (d742748)03:00Changed: CI runs every test, not only the clone tests, on its Btrfs, XFS and ReFS disks, with the test repos and their lanes on those disks. Lanes there must be cloned, never copied; macOS (APFS) is held to the same rule. (d742748)
2026-10-17
18:51Changed: the website offers 0.0.5, and the guide is rewritten around agents making lanes on their own: set it up once, start your agents as usual (Claude Code, Codex, Cursor), see the lanes and run the app. Making a lane by hand andlane initare now optional steps.
Lanes 0.0.5 (preview)
Install or update:
| On | Command |
|---|---|
| macOS, Linux, WSL | brew install autter-dev/tap/lanes, or curl -fsSL https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.sh | sh |
| Windows | winget install Autter.Lanes, scoop install lanes (after scoop bucket add autter https://github.com/Autter-dev/scoop-bucket), or irm https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.ps1 | iex |
| Anywhere with Node | npm install -g @autter/lanes |
More ways, and how to check a download, at https://lanes.autter.dev/download.
Verify an archive: gh attestation verify <file> --repo Autter-dev/lanes, or compare it with SHA256SUMS.
Changes
Your agents put their work in lanes on their own. Run lane once, and Claude Code, Codex and Cursor get a lane for each task, in every repo, ready to run. Nobody types lane new. Still a preview.
lane # once: checks your machine and puts your agents in lanes
cd your-repo
claude -w fix-auth # or start a Codex or Cursor agent in a worktree of its own
lane list # each agent's lane, with its ports and folderIn this version:
- Setup happens once per machine. The welcome (and
lane setup --yes) adds Lanes to each agent's own user settings. It's a switch, and--agents offtakes it back out exactly. Set up Lanes before 0.0.5? Runlane setuponce more. - Claude Code:
claude -w, subagents and background sessions get lanes in every repo, withoutlane init. Alanesskill has Claude start a task in a lane of its own. - Codex and Cursor: when a session starts in a worktree they made, it becomes a lane (
codex-<id>,cursor-<id>), and the agent is told which lane it's in. In Codex, open/hooksonce to trust Lanes' hooks. - Lanes from agents are ready to run: dependencies are cloned from a clean copy, and each lane gets its own ports and
.env. A repo doesn't need alane.tomlfor this. - Agents are turned down when they try to copy the repo (
git worktree add, agit cloneof it,cp -r), with a pointer tolane new. lane inithandles repos whose Git hooks belong to Husky or lefthook.
Not yet:
- Gemini CLI, Copilot and other agents get lanes only when they make a Git worktree, through the hook
lane initadds. - There's no background daemon, no checkpoints or undo, no promote to a pull request, and no database per lane.
2026-10-17
18:32Added: the home screen says when an agent installed here isn't in lanes yet (say, after an update from 0.0.4), and to runlane setup.18:18Added: agents get lanes on their own, with nothing to set up per repo: Claude Code, Codex and Cursor. (dd754be,cc529ae)- Once per machine: the first-run welcome and
lane setup --yesput your agents in lanes, in each agent's own user settings. It's a switch on the welcome's last screen (a), on by default.lane setup --yes --agents offtakes back exactly what was added, and nothing else in those files changes.- Claude Code: its hooks in
~/.claude/settings.jsonand thelanesskill in~/.claude/skills/lanes, soclaude -wmakes a lane in every repo withoutlane init. - Codex: hooks in
~/.codex/hooks.json. Codex makes its worktrees with Git hooks off, so when a Codex session starts in one, it becomes a lane (codex-<id>), ready to run, and Codex is told which lane it's in. Copies of the repo are turned down. Codex runs new hooks only once you trust them, solane setupsays to open/hooksin Codex once. - Cursor: hooks in
~/.cursor/hooks.json. When a Cursor agent starts in a worktree Cursor made, it becomes a lane (cursor-<id>), ready to run, and the agent is told which lane it's in. Copies of the repo are turned down with a message the agent reads. - Codex and Cursor share the skill in
~/.agents/skills/lanes.
- Claude Code: its hooks in
- A
lanesskill: tells an agent to start each task in a lane of its own (lane new <task> --print-path, or Claude Code's EnterWorktree), to run dev servers withlane exec, and never to copy the repo. The Claude Code plugin carries it too. - No
lane.tomlneeded: in a repo without one, Lanes uses whatlane initwould find (install steps, dev command,.envtemplate), so a lane an agent makes is ready to run. Alane.tomlstill wins when there is one. - Worktrees other tools make are ready to run: the Git hook now makes each one ready, like a lane from
lane new. Dependencies (node_modules,.venv) are cloned from the clean_basecopy when the lockfiles match, and installed in the worktree when they don't. The lane gets its own.envtoo.lane adopt --readydoes the same by hand. The hooklane initadded in 0.0.4 is upgraded the next timelane initruns.
- Once per machine: the first-run welcome and
17:17Added: a guide on the website, lanes.autter.dev/guide, from install to two agents in their own lanes, in nine steps. It's written for your system: it picks macOS, Linux or Windows from your browser, with that system's commands, shell, folders and example output, and a switch to see another. It remembers your pick. On a phone it says Lanes runs on a computer. Without JavaScript, every system shows, each labelled. The nav's "Get started", the home page and the download page link to it.17:15Added:lane initsets up the post-checkout hook in repos whose Git hooks belong to Husky or lefthook, so worktrees other tools make become lanes there too. (047f922)- Husky 9 (
core.hooksPathis.husky/_): one line goes at the top of.husky/post-checkout, which is made if it isn't there. The file is checked in, solane initsays so and puts it in itsgit addstep. Wherelaneisn't installed the line does nothing, and it never fails a checkout. - lefthook with a post-checkout hook: nothing is written, because lefthook moves aside hooks it didn't write and never runs them.
lane initprints thelanescommand to add to lefthook's config, in its format (YAML, TOML or JSON). When lefthook doesn't run post-checkout, the hook goes in.git/hooksas before. - Any other
core.hooksPath, Husky 8 and older included: nothing is written, andlane initprints the line to add. lane hook git post-checkout: what that line and that command run. A new worktree becomes a lane. Branch switches, the repo's own folder and Lanes' own worktrees are left alone.- In
--json, an entry inagentshascheck_inwhen its file belongs in Git, andsnippetwith the text to add by hand.
- Husky 9 (
17:15Added: Claude Code is turned down when it tries to copy the repo, not only when it runsgit worktree add. In a Lanes repo, thepre-tool-usehook also turns down the two below. (047f922)- A
git cloneof this repo: by one of its folders (.,.., a path,cd .. && git clone app app-2,git -C), by itsoriginURL however it's written (https://,git@host:,ssh://), by"$(git remote get-url origin)", or withgh repo clone owner/repo. Clones of other repos, and--bareor--mirrorclones, run as usual. - A recursive copy of one of the repo's folders:
cp -r,-Ror-a;xcopy /Eor/S;robocopy /E,/Sor/MIR;Copy-Item -Recurseand PowerShell'scp -r; also insidebash -c,cmd /candpwsh -Command. Copies of a subfolder, and copies that leave.gitout (robocopy /XD .git), run as usual. - Each has its own reason, pointing to
lane new <name> --print-path. A copy's reason also points togit archivefor an export. - Most commands still return before any Git or disk work. A session told about lanes now hears that clones and copies are out too.
- A
17:01Changed: the website offers 0.0.4: the download page's archives, and a 0.0.4 entry on the releases page.
Lanes 0.0.4 (preview)
Install or update:
| On | Command |
|---|---|
| macOS, Linux, WSL | brew install autter-dev/tap/lanes, or curl -fsSL https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.sh | sh |
| Windows | winget install Autter.Lanes, scoop install lanes (after scoop bucket add autter https://github.com/Autter-dev/scoop-bucket), or irm https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.ps1 | iex |
| Anywhere with Node | npm install -g @autter/lanes |
More ways, and how to check a download, at https://lanes.autter.dev/download.
Verify an archive: gh attestation verify <file> --repo Autter-dev/lanes, or compare it with SHA256SUMS.
Changes
Claude Code works in lanes. Run lane init once, then claude -w <name> starts a session in a lane of its own, with its own ports. Still a preview.
cd your-repo
lane init # writes lane.toml, and sets up Claude Code's hooks
claude -w fix-auth # a new lane; the session starts in it with PORT and LANE_URL set
lane list # fix-auth, with its ports and folderIn this version:
claude -w <name>makes a lane and works in it. Subagents withisolation: worktreeand background sessions get lanes too, and removing the worktree removes the lane.- A session in a lane starts with
PORT,VITE_PORTandLANE_URLset, and knows which lane it's in. - If Claude Code tries
git worktree addin a Lanes repo, it's pointed tolane newinstead. lane initputs Claude Code's hooks in.claude/settings.local.json, which stays on your machine and out of Git. It also adds a Git hook that turns any other tool's new worktree into a lane, and a short note inAGENTS.md.--no-agentsskips all of it.- For every repo at once, there's a Claude Code plugin:
/plugin marketplace add Autter-dev/lanes, then/plugin install lanes@autter.
Not yet:
- Other agents (Cursor, Codex, Gemini CLI, Copilot) get lanes only through the Git hook: no session context and no
git worktree adddeny. - Repos with Git hooks under
core.hooksPath(Husky, lefthook) don't get the Git hook yet;lane initsays so. - There's no background daemon, no checkpoints or undo, no promote to a pull request, and no database per lane.
2026-10-17
16:43Added: Claude Code works in lanes.claude -w fix-authmakes a lane, and the session works in it, with no other steps oncelane inithas run. Checked end to end with Claude Code 2.1.300 on Windows. (20d009c)lane hook claude <event>: what Claude Code's hooks run, reading its JSON on stdin.worktree-create: makes the lane (or finds the one with that name) and prints its folder. Names likeFix Authbecomefix-auth. Subagents withisolation: worktreeand background sessions get lanes too.worktree-remove: removes the lane and frees its ports.session-start: putsPORT,VITE_PORT,LANE_URLand the rest in the session's environment, and tells the agent which lane it's in and how to start the app.pre-tool-use: turns downgit worktree addin a Lanes repo, pointing tolane new <name> --print-path.- Session start and the deny never stop a session: outside a Lanes repo, or if anything goes wrong, they stay silent.
lane initsets up agents:- Claude Code's hooks go in
.claude/settings.local.json, kept out of Git, so a teammate withoutlaneisn't affected. This happens only when the repo has.claude/orCLAUDE.md, orclaudeis on your PATH. - A Git
post-checkouthook turns a worktree any other tool makes into a lane. An existing hook still runs after it. Withcore.hooksPathset (Husky, lefthook), nothing is written, and init says why. AGENTS.mdgets a short note on working in lanes, andCLAUDE.mdgets an@AGENTS.mdline.- Running it again changes nothing.
--no-agentsskips it all.
- Claude Code's hooks go in
lane newcopies.claude/settings.local.jsoninto the lane, so a session started inside a lane has the hooks too.- A Claude Code plugin in this repo, for every repo at once:
/plugin marketplace add Autter-dev/lanes, then/plugin install lanes@autter. It runs the same hooks.
16:28Changed: the website offers 0.0.3: the download page's archives, and a 0.0.3 entry on the releases page. (3f0efa4)
Lanes 0.0.3 (preview)
Install or update:
| On | Command |
|---|---|
| macOS, Linux, WSL | brew install autter-dev/tap/lanes, or curl -fsSL https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.sh | sh |
| Windows | winget install Autter.Lanes, scoop install lanes (after scoop bucket add autter https://github.com/Autter-dev/scoop-bucket), or irm https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.ps1 | iex |
| Anywhere with Node | npm install -g @autter/lanes |
More ways, and how to check a download, at https://lanes.autter.dev/download.
Verify an archive: gh attestation verify <file> --repo Autter-dev/lanes, or compare it with SHA256SUMS.
Changes
Lanes now tells you what to run next. A small update to 0.0.2, for testers.
lane new fix-auth
# Made lane fix-auth in 0.4 s ...
# Next:
# cd ~/code/app.lanes/fix-auth start your agent here, so it works only in this lane
# lane exec fix-auth -- npm run dev -- --port 4100 run the app at http://fix-auth.localhost:4100In this version:
lane new,lane adopt,lane init,lane rmand an emptylane listend with a short "Next:" block. It names the lane's own folder, dev command and URL. With--json, the same steps are innext, so agents can follow them too.- The home screen lists your lanes with their URLs, and says what to do next:
lane initin a repo that isn't set up yet,lane newin one with no lanes. - The welcome's last screen no longer calls
lane initandlane new"soon". lane --helpstarts you off in three commands.- The download page puts the quickest install for your system at the top.
2026-10-17
16:18Added: every command that changes something ends by saying what to run next.- After
lane newandlane adopt:cdinto the lane to start your agent there, andlane exec <name> -- <dev command>with the port written out, and the URL it serves. - After
lane init:lane new fix-auth, andgit add lane.tomlso teammates get the same lanes. - After
lane rm, or an emptylane list:lane list, or how to make the first lane. - A repo without
lane.tomlis told to runlane initfirst. - With
--json: the same steps are innext, as{"run", "why"}.
- After
16:18Added: the home screen lists the lanes of the repo you're in (every lane outside a repo), with their URLs and state. It also gives one next step: set up the repo, make the first lane, or run the app in one.16:18Fixed: the welcome's "You're set" screen markedlane initandlane newas "soon", though both work since 0.0.2.16:18Fixed: the README and the website said to openhttp://fix-auth.localhost. Until the daemon serves lane URLs, the address needs the lane's port, likehttp://fix-auth.localhost:4100. The README's command table now splits what works from what's coming.lane exec --helpquotes'$PORT', so your own shell leaves it for Lanes.16:18Changed: the download page starts with the quickest install for your system, then each system's options. On Windows the PowerShell script comes first, with nothing to install beforehand. The note about unsigned builds moved below the archives, where its one extra step applies.15:25Changed: the website offers 0.0.2: the download page's archives, and a 0.0.2 entry on the releases page above 0.0.1.
Lanes 0.0.2 (preview)
Install or update:
| On | Command |
|---|---|
| macOS, Linux, WSL | brew install autter-dev/tap/lanes, or curl -fsSL https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.sh | sh |
| Windows | winget install Autter.Lanes, scoop install lanes (after scoop bucket add autter https://github.com/Autter-dev/scoop-bucket), or irm https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.ps1 | iex |
| Anywhere with Node | npm install -g @autter/lanes |
More ways, and how to check a download, at https://lanes.autter.dev/download.
Verify an archive: gh attestation verify <file> --repo Autter-dev/lanes, or compare it with SHA256SUMS.
Changes
The lane commands work: try them on your own repo. Still a preview: agents don't land in lanes on their own yet, which comes next.
cd your-repo
lane init # writes lane.toml from what it finds
lane new fix-auth # an instant, ready-to-run copy with its own ports
lane exec fix-auth -- npm run dev
lane list
lane rm fix-authIn this version:
lane new <name>makes a lane from a clean copy ofmain, with dependencies installed once.- It's a real Git worktree:
git statusandgit diffwork there, and no branch is created. - Files are copy-on-write clones on APFS, Btrfs, XFS and Windows Dev Drives, and plain copies elsewhere, with a note saying so.
- It's a real Git worktree:
lane exec,lane env,lane list,lane rmandlane adoptall work.- Each lane gets its own
PORT,VITE_PORTandLANE_URL(http://<name>.localhost:<port>), so two lanes can run the same dev server at once.
- Each lane gets its own
lane initfinds your package manager, dev command and.envtemplate, and writeslane.toml.- Every command has
--jsonand stable exit codes. Writes take--request-id, so a retried command never makes a second lane.
Not yet:
- Agents don't land in lanes on their own: start them inside a lane's folder for now.
- There's no background daemon, no checkpoints or undo, and no promote to a pull request.
- There's no database or Compose project per lane.
*.localhostURLs work in browsers and curl, but not in every Windows tool.
2026-10-17
15:07Added: lanes run things. Every command in the CLI now works.lane exec [<name>] -- <command>: runs a command in a lane with its own ports and URL.PORT,VITE_PORT,LANE_URL,LANE_NAME,LANE_ID,LANE_PORTSandLANE_PATHare set.$PORT,${PORT}and%PORT%in arguments are filled in without a shell.- It exits with the command's own code.
- On Windows it finds npm-style
.cmdand.ps1launchers. - Inside a lane, the name is optional.
- Two lanes ran the same dev server at once on ports 4100 and 4110.
lane env [<name>]: prints those variables for sh, PowerShell, cmd or dotenv, or as--json.lane init: looks at the repo and writes a commentedlane.toml, running and installing nothing.--printand--forceare there too.- It finds the package manager (pnpm, npm, Yarn, Bun, uv, Poetry, Bundler, Go, Cargo), the dev command and its usual port, the
.envtemplate, a Compose file and migration tools (Prisma, Drizzle, Rails, Django, Alembic). - Frameworks that don't read
PORTget--port $PORT.
- It finds the package manager (pnpm, npm, Yarn, Bun, uv, Poetry, Bundler, Go, Cargo), the dev command and its usual port, the
- The lane's
.env: a lane gets one from[env] template, with its ownPORTandLANE_URLand every other line kept. [dev] commandinlane.toml.
14:21Added: the lane engine:lane new,lane rmandlane adoptwork.lane new <name>: makes a lane from a clean_basecopy of the base branch (main), with dependencies installed once from[setup] installinlane.toml.- Files are cloned where the disk can, and copied otherwise, with a note saying so.
- The lane is a real Git worktree on a detached HEAD:
git statusandgit diffwork there at once, and no branch is created. - Each lane gets its own block of ports.
_basefollowsmain, and reinstalls only when a lockfile or the install commands change.- Python virtualenv paths are pointed at the lane.
--print-pathprints just the folder, for agent hooks.
lane rm <name>: removes the folder and worktree record and frees the ports.--keep-fileskeeps the folder.lane adopt [<path>]: turns a worktree you already have into a lane.- Retries and failures: all three take
--jsonand--request-id. A failedlane newremoves everything it made, so a retry starts clean. lane list: shows each lane's state, and works from inside a lane too.
14:05Added: clone backends, the part oflane newthat copies files.- How it copies: every file is a copy-on-write clone where the disk supports it (APFS, Btrfs, XFS, and ReFS on a Windows Dev Drive), and a plain parallel copy everywhere else (NTFS, ext4, …), behind one
CloneBackendtrait. - Probe and report: a probe tests each folder for real, and the report counts cloned, copied and empty files separately, so Lanes never claims a clone it didn't get.
- Faithful copies: modification times and permissions are kept, so builds don't redo everything, and symlinks stay symlinks.
- Measured on a 13,826-file tree (this repo plus the website's
node_modules, 247 MB):- Windows Dev Drive: about 2.7 s per lane, every file cloned, about 120 MB of disk per lane;
- NTFS plain copy: 7.6 s and a full copy.
- New CI job: runs the clone tests on Btrfs and XFS loop disks and a ReFS virtual disk; APFS is covered by the macOS job.
- How it copies: every file is a copy-on-write clone where the disk supports it (APFS, Btrfs, XFS, and ReFS on a Windows Dev Drive), and a plain parallel copy everywhere else (NTFS, ext4, …), behind one
13:33Added: the foundations the lane engine builds on, pluslane list.- Errors: one error type for every command. Each has a stable
code, its exit code and a hint saying what to do next. --jsoncontract: exactly one JSON object on stdout, the result or{"error": {code, message, hint, exit}}, and nothing else. Unbuilt and unknown commands answer the same way.lane.tomlv1:[lanes],[ports],[setup],[env]and[cleanup]. A missing file means the defaults; typos and files from a newer Lanes are refused with what to fix.- State store: per-user SQLite (WAL mode) with a single-writer lock, so port blocks never clash across repos. Reads never create files.
--request-id/LANE_REQUEST_ID: a retried write returns the first result instead of running twice.lane list: shows this repo's lanes (--allfor every repo) with their ports, and has--json.- The minimum Rust version is now 1.89.
- Errors: one error type for every command. Each has a stable
13:25Changed:AGENTS.mdnames the anonymous install count as the one exception to "no network calls unless the user ranlane login". It's on by default, opt-out withlane telemetry off,LANE_TELEMETRY=0orDO_NOT_TRACK=1, and never sent from CI. Nothing sends it yet.12:34Added: the download page says up front that builds aren't code-signed yet, and what that means on each system. macOS needs onexattrcommand, only for archives downloaded in a browser. Windows 11 with Smart App Control on may blocklane.exe(WSL2 works meanwhile). Linux needs nothing extra.11:47Added: an "All releases" page at lanes.autter.dev/download/releases. It lists every version, newest first, with its summary, the six archives and their checksums, the installers, a link to the release notes, and the command to install that exact version. The download page has a "Past releases" list linking to it, and the footer links it too. On phones, file tables stack one file per row.11:42Added: Lanes is on npm:npm install -g @autter/lanesinstalls only the build for your system, with signed provenance. A newnpmworkflow publishes an existing release from its own archives, and the installers check now installs through every live channel (both scripts, Homebrew, Scoop and npm) on macOS, Linux and Windows. The download page lists npm as live; winget is still waiting for Microsoft's review.11:19Added: Lanes 0.0.1 is out as a preview. It installs withbrew install autter-dev/tap/lanes, with Scoop from the Autter bucket, with the one-line scripts (curl -fsSL https://lanes.autter.dev/install.sh | sh,irm https://lanes.autter.dev/install.ps1 | iex), or from GitHub Releases. Each one was checked by a real install on macOS, Linux and Windows. The download page and the README show the live options; npm and winget are marked "coming soon" until they're published. A new installers check reinstalls every release the way users do.
Lanes 0.0.1 (preview)
Install or update:
| On | Command |
|---|---|
| macOS, Linux, WSL | brew install autter-dev/tap/lanes, or curl -fsSL https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.sh | sh |
| Windows | winget install Autter.Lanes, scoop install lanes (after scoop bucket add autter https://github.com/Autter-dev/scoop-bucket), or irm https://github.com/Autter-dev/lanes/releases/latest/download/lanes-installer.ps1 | iex |
| Anywhere with Node | npm install -g @autter/lanes |
More ways, and how to check a download, at https://lanes.autter.dev/download.
Verify an archive: gh attestation verify <file> --repo Autter-dev/lanes, or compare it with SHA256SUMS.
Changes
The first preview. In this version:
laneopens the first-run welcome, then the home screen.lane setupchecks your machine, walks you through fixes, and saves your settings (also with--json).--helpand--versionwork.- The lane commands (
init,new,list,exec,rm) are listed but not built yet, and exit with code 3.
It runs on macOS, Linux and Windows, on x64 and arm64.
2026-10-17
10:26Added: release pipeline and a download page. (81fe630)- Release workflow: pushing a
v<version>tag builds macOS, Linux and Windows on x64 and arm64, and publishes a GitHub release. It includeslanes-<version>-<target>archives, SHA-256 checksums, build attestations, and one-line installers (lanes-installer.sh,lanes-installer.ps1) with the version stamped in. - Channel files: the same run renders the Homebrew formula, the Scoop manifest and the winget manifests. Once enabled, it also publishes
@autter/lanesto npm, with one package per platform so npm downloads only yours. - Tap and bucket: starting files for the Homebrew tap and the Scoop bucket in
packaging/seeds/. Each copies its file from the latest release and tests an install. - Website: a download page at lanes.autter.dev/download that puts your system first, with every channel, the archives and checksums, how to verify a file, and how to uninstall. The home page's install command now matches your system, and short URLs
lanes.autter.dev/install.shand/install.ps1point at the latest installers.
- Release workflow: pushing a
09:51Added: the website, lanes.autter.dev, is linked from the top of the README and from the repo's About box. (22e5ab1)09:37Changed: install commands now name the six channels Lanes ships on, calledlaneseverywhere:brew install autter-dev/tap/lanes,winget install Autter.Lanes,scoop install lanes(from the Autter bucket),npm install -g @autter/lanes, one-line installers for macOS, Linux and Windows, and archives on GitHub Releases. Each installs the samelanecommand.cargo installis no longer listed. On phones, the website's install command now wraps only between words. (a8c012d)06:06Fixed: CI is green again. The website stays on TypeScript 6 (@astrojs/checkdoesn't support 7 yet, sonpm cifailed), Dependabot skips TypeScript major versions until it does, and clippy no longer fails on macOS over a cast that's only redundant there. (202ef78)05:52Added: guided fixes on the "Your machine" step. Each!or✗that has a fix shows one (↑↓to choose,fto open), as plain numbered steps written for this machine: move the repo to the Dev Drive you already have (with the exactgit clonecommand), or create one (oopens Settings › Disks & volumes, with the free space it needs); move a repo from/mnt/cinto WSL; install or update Git with the right command for your OS (winget, Homebrew, Xcode tools, apt, dnf, pacman…); free up disk with Storage Sense.ccopies the command, andrchecks again live and says whether it's fixed. Lanes never runs a command for you. Right after a Git install on Windows, it spots Git that this terminal can't see yet and says to open a new one.lane setupprints the same steps, andlane setup --jsonincludes them asfix. (15d1209)05:26Added: motion and character in the terminal app: "Lanes." in big block letters on the welcome and home screens, a step marker that glides between stops, small running lanes while checks finish, a packet lane on the privacy step, and Autter's otter in its captain's hat (swimming on the welcome, blinking beside sign-in, reaching the finish on the last step).LANE_NO_ANIM=1keeps every screen still. (6df848a)
2026-10-16
20:43Added: the first-run welcome. Runninglanein a terminal the first time opens a six-step terminal app (ratatui): a welcome with moving lanes; live checks of this machine (OS, whether instant copies work on this disk, Git, the repo, the stack, agents onPATH, free disk), each with what to do next; a four-step "how a lane works"; a privacy step that shows exactly what the install count sends and respectsDO_NOT_TRACK; an optional sign-in that's shown but disabled until the gateway opens; and next steps for the folder you're in. After that,laneopens a home screen.lane setupreruns it,lane setup --jsonprints the checks, andlane setup --yes [--telemetry on|off]saves without the app. It never opens in pipes, CI,--jsonor agent sessions. Settings live in~/.config/lane/config.toml(%APPDATA%\laneon Windows), saved atomically. (6df848a)19:47Added: repo setup: bug and feature issue forms (OS, filesystem and command asked up front), a pull request template with the checks to run, weekly grouped Dependabot updates for Cargo, the website and Actions, CI on Windows next to Linux and macOS, a website build job, and.gitattributeskeeping LF line endings everywhere.18:53Added: website "Runs where your agents run" section (macOS, Linux, Windows and WSL2, cloud agent sandboxes, GitHub then GitLab and Bitbucket) and a "What's being built" status lane that fills as you scroll, plus a Status link in the nav.18:27Added: website "Built-in guardrails" segment (edits checked against the latest version, approval codes for protected files, named agents, lanes from any branch) with an animated approval session, and a "Coming next on the gateway" section (lanes your team can open, agents with their own access, merging after checks). (5214dd3)05:31Changed: README and website now say macOS, Linux and Windows at launch (fastest on a Windows 11 Dev Drive, regular NTFS drives supported, WSL2 uses the Linux build), instead of "Windows later". (5214dd3)04:57Added: website segments for the Lanes gateway (an animated flow from your lanes, through the opt-in gateway, to Autter's checks), how an Autter review runs on a lane, and how Lanes works with Autter (a pinned write, check, ship, fix loop). The README now explains that Autter reviews run entirely in Autter's cloud: the lane stays on your machine and the gateway lets the review read its changes.04:57Changed: website type is now Supreme and Martian Mono; the footer animates as you reach it; the hero puts "Star on GitHub" first and marks the install command as pre-release; hero headlines no longer wait for an animation to appear.04:57Fixed: the gateway flow animation now runs in order (lanes reach the gateway before anything leaves it), and the gateway page headline can no longer stay hidden when the page loads in a background tab.
2026-10-15
20:44Added: the Lanes website insite/(Astro, GSAP, Lenis): a grainy, minimal home page where scrolling runs four agents in their own lanes, a pinned "How it works" diagram drawn by scroll in four chapters, grayscale lane photography, a gateway page, a designed 404, and full reduced-motion and keyboard support.19:18Added: README section on the Lanes gateway: how it connects your lanes to Autter, what it gives teams, where it's going, and a diagram in light and dark. The README and FAQ now say Autter is never required, and that Lanes is maintained independently of Autter or any other product. (f5c6ba2)19:13Changed: README redesigned in a minimal, editorial style: no emoji, numbered sections, and monochrome images with one mint accent, each in light and dark versions that follow the viewer's GitHub theme. The footer shows the Autter wordmark instead of the illustrated banner. (d2f7d68)19:08Added: README illustrations inassets/: an animated hero, a "How it works" diagram, a preview of the terminal app and an Autter banner in the footer. (7318e17)19:04Changed: Lanes is now licensed under the GNU AGPL-3.0 (AGPL-3.0-only) instead of Apache-2.0. Code released before this change stays available under Apache-2.0. (7318e17)18:53Fixed: README links to @sagnik_ghosh_11 on X instead of a placeholder handle. (c259a35)18:50Changed: README restyled with a centered header, badges, a feature grid, status markers and a collapsible FAQ. (41e651c)18:50Added: this changelog, plus a rule inAGENTS.mdandCONTRIBUTING.mdto keep it updated. (41e651c)18:41Added: README footer linking to Autter. (026670c)17:18Changed: README sayslane loginsigns in to Autter and connects the Lanes gateway. (ffd255b)16:34Added: README covers the terminal app, optional sign-in and the anonymous install count, whichlane telemetry offorDO_NOT_TRACK=1turns off. (835c156)16:29Added: agent instructions (AGENTS.md,CLAUDE.md),CONTRIBUTING.mdandSECURITY.md. (66176ce)16:29Added: CI on Linux and macOS running rustfmt, clippy and tests, plus acargo-denylicense allowlist. (e24e977)16:29Added: Rust workspace with thelaneCLI, thelaneddaemon andlane-core. Both binaries print their version and help; other commands exit with code 3 (not built yet). Exit codes are stable from here on. (54f0b2f)16:29**Add...