现在写代码,终端窗口比以前多很多。
一个项目开一个 Terminal,一个 worktree 开一个 Terminal,跑服务再开一个,SSH 上机器再开一个。再加上 Claude Code、Codex、Gemini CLI 这类 Agent,桌面上很快就堆出一排窗口和标签页。

命令行的麻烦
纯命令行方式最大的问题,是项目上下文和终端布局没有绑在一起。
比如一个 Android 仓库里同时开三个 worktree:main、feature/login、bugfix/crash。每个 worktree 里都要跑 ./gradlew、开日志、跑 Agent。Terminal 只知道当前目录,不知道这些目录属于同一个工作区,也不知道你上次在这个 worktree 里开了几个 pane。
切换任务时,常见动作大概是这样:
bash
cd ~/work/app-feature-login
git branch --show-current
pwd
./gradlew assembleDebug
这些命令都不复杂,但它们会反复出现。窗口多了以后,真正耗时间的是确认"我现在在哪个项目、哪个分支、哪个任务"。如果再配合 tmux,可以保留 pane 布局,但布局通常跟 session 走,不太像一个面向仓库和 worktree 的工作台。
最近用了同事推荐的一个工具------Liney,现在根本停不下来。

Liney 是什么
Liney 是一个原生 macOS 终端工作区应用,面向需要频繁在多个仓库、worktree、分支和分屏之间切换的开发者。
它的入口从仓库和 worktree 开始。先把它们放进侧边栏,选中某个仓库后,再在里面开 terminal tab、拆 pane、跑本地 shell、SSH 或 Agent。
它支持 macOS 14.6 及以上,Apple Silicon 和 Intel Mac 都能用。最新 release 是 v1.0.76,可以通过 Homebrew 安装:
bash
brew update
brew install --cask everettjf/tap/liney
也可以从 GitHub Releases 下载签名的 .dmg。如果要用 liney notify 这类命令,可以把 App 里的可执行文件挂到 $PATH:
bash
sudo ln -sf /Applications/Liney.app/Contents/MacOS/Liney /usr/local/bin/liney

仓库和 worktree
Liney 的侧边栏可以放多个本地仓库和 worktree。这个设计对现在的 Git 工作流比较友好。
Android 项目里经常会同时处理几个分支:一个线上 bug,一个需求分支,一个主干验证。如果只靠 Terminal,最后往往是多个窗口加一堆 cd。Liney 里可以直接从侧边栏切 worktree,不需要每次重新组织窗口。
更关键的是 pane layout 可以留下来。你回到某个仓库时,之前的分屏布局还在,不用重新拆成"左边跑构建、右边看日志、下面跑 Agent"。
这种能力适合长期工作的项目。比如每天都要打开同一个 Android 主仓库,固定跑 ./gradlew assembleDebug、adb logcat、Agent review、SSH 构建机。布局能跟着仓库保留下来,重复操作会少很多。
适合谁
如果你每天只开一个仓库,一个终端窗口,Liney 带来的变化不会很大。普通 Terminal、iTerm2、Warp、Ghostty 都够用。
它更适合这几类场景。
第一,多仓库和多 worktree。比如 Android 主仓库、组件仓库、脚本仓库、服务端 mock 仓库同时打开,还要在多个分支之间切换。
第二,固定分屏布局。每次打开项目都要重新摆窗口的人,可以把构建、日志、Agent、SSH 放成固定布局。
第三,AI Agent 常驻。Agent 跑一会儿经常要你确认命令、选择方案、看失败输出。liney notify 和 liney status 能把等待状态从终端滚动输出里提出来。
第四,远程机器和本地项目混用。SSH pane 和本地 pane 都在同一个 workspace 里,文件树跟随焦点 pane,远程目录不会像普通终端那样完全藏在 shell 输出里。
最后
Liney 解决的是终端工作区管理问题。仓库、worktree、分屏布局、SSH、Agent 通知都放进同一个 macOS 原生应用里。
如果你现在经常在多个 Terminal 窗口里找项目、找分支、找正在等待输入的 Agent,可以试一下 Liney。先从一个常用仓库加进去,再把构建、日志、Agent 拆成固定 pane,效果会比较明显。