跪拜 Guibai
← Back to the summary

Liney: A macOS Terminal Workspace That Binds Project Context to Pane Layouts

AI Era: Terminal Windows Piling Up Like a Mountain? This Tool Has Me Hooked

Now when writing code, there are many more terminal windows than before.

One project opens a Terminal, one worktree opens a Terminal, running a service opens another, SSHing into a machine opens yet another. Add in agents like Claude Code, Codex, Gemini CLI, and soon your desktop is filled with a row of windows and tabs.

Image

The Trouble with the Command Line

The biggest problem with a pure command-line approach is that project context and terminal layout are not bound together.

For example, an Android repository might have three worktrees open at the same time: main, feature/login, bugfix/crash. In each worktree you need to run ./gradlew, open logs, run an agent. The Terminal only knows the current directory; it doesn't know these directories belong to the same workspace, nor does it know how many panes you had open in this worktree last time.

When switching tasks, the common actions look something like this:

cd ~/work/app-feature-login
git branch --show-current
pwd
./gradlew assembleDebug

These commands aren't complicated, but they repeat over and over. Once there are many windows, what really eats time is confirming "which project, which branch, which task am I on right now." If you also use tmux, you can preserve pane layouts, but layouts usually follow sessions, not a workspace oriented around repositories and worktrees.

Recently I tried a tool recommended by a colleague—Liney—and now I can't stop using it.

Image

What is Liney

Liney is a native macOS terminal workspace application designed for developers who frequently switch between multiple repositories, worktrees, branches, and split panes.

Its entry point starts with repositories and worktrees. First, put them in the sidebar, then select a repository, and inside it open terminal tabs, split panes, run local shells, SSH, or agents.

It supports macOS 14.6 and above, both Apple Silicon and Intel Macs. The latest release is v1.0.76, installable via Homebrew:

brew update
brew install --cask everettjf/tap/liney

You can also download a signed .dmg from GitHub Releases. To use commands like liney notify, you can symlink the executable inside the app to your $PATH:

sudo ln -sf /Applications/Liney.app/Contents/MacOS/Liney /usr/local/bin/liney

Image

Repositories and Worktrees

Liney's sidebar can hold multiple local repositories and worktrees. This design is friendly to modern Git workflows.

In Android projects, you often handle several branches at once: one online bug, one feature branch, one main branch for verification. If you rely solely on the Terminal, you end up with multiple windows and a bunch of cd commands. In Liney, you can switch worktrees directly from the sidebar without reorganizing windows each time.

More importantly, pane layouts persist. When you return to a repository, the previous split-pane layout is still there—no need to re-split into "build on the left, logs on the right, agent below."

This capability suits long-term projects. For example, if you open the same Android main repository every day and routinely run ./gradlew assembleDebug, adb logcat, agent review, and SSH into a build machine, having the layout stick with the repository significantly reduces repetitive operations.

Who It's For

If you only open one repository and one terminal window each day, Liney won't make a big difference. Regular Terminal, iTerm2, Warp, Ghostty all suffice.

It's better suited for these scenarios:

First, multiple repositories and multiple worktrees. For instance, having the Android main repository, component repository, script repository, and server-side mock repository open simultaneously, while switching between multiple branches.

Second, fixed split-pane layouts. People who have to rearrange windows every time they open a project can set up fixed layouts for building, logging, agents, and SSH.

Third, AI agents that stay resident. Agents often need you to confirm commands, choose solutions, or review failure outputs after running for a while. liney notify and liney status can pull waiting states out of the terminal scroll output.

Fourth, mixing remote machines with local projects. SSH panes and local panes coexist in the same workspace; the file tree follows the focused pane, so remote directories don't stay hidden inside shell output like in a regular terminal.

Finally

Liney solves terminal workspace management. Repositories, worktrees, split-pane layouts, SSH, and agent notifications are all integrated into a single native macOS application.

If you're often searching through multiple Terminal windows for projects, branches, or agents waiting for input, give Liney a try. Start by adding one commonly used repository, then split it into fixed panes for building, logging, and agents—the effect will be noticeable.