AI时代终端窗口堆成山?这款工具让我爱不释手

📅 2026/6/26 22:39:51
AI时代终端窗口堆成山?这款工具让我爱不释手
现在写代码终端窗口比以前多很多。一个项目开一个 Terminal一个 worktree 开一个 Terminal跑服务再开一个SSH 上机器再开一个。再加上 Claude Code、Codex、Gemini CLI 这类 Agent桌面上很快就堆出一排窗口和标签页。命令行的麻烦纯命令行方式最大的问题是项目上下文和终端布局没有绑在一起。比如一个 Android 仓库里同时开三个 worktreemain、feature/login、bugfix/crash。每个 worktree 里都要跑./gradlew、开日志、跑 Agent。Terminal 只知道当前目录不知道这些目录属于同一个工作区也不知道你上次在这个 worktree 里开了几个 pane。切换任务时常见动作大概是这样cd~/work/app-feature-logingitbranch --show-currentpwd./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 安装brew update brewinstall--caskeverettjf/tap/liney也可以从 GitHub Releases 下载签名的.dmg。如果要用liney notify这类命令可以把 App 里的可执行文件挂到$PATHsudoln-sf/Applications/Liney.app/Contents/MacOS/Liney /usr/local/bin/liney仓库和 worktreeLiney 的侧边栏可以放多个本地仓库和 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效果会比较明显。[#macOS](javascript: [#Terminal](javascript: [#AI编程](javascript: [#开发工具](javascript: