English | 中文
Mori 是给同时跑多个 git 分支的开发者做的 macOS 终端。不用再翻匿名标签页,也不用担心切换上下文时 tmux 状态丢掉——每个分支有自己的独立环境,侧边栏点一下就切过去。 ## 截图 | 浅色 | 深色 | Lazygit | Yazi | 设置 | |---|---|---|---|---| |  |  |  |  |  | ## 功能 - **侧边栏管所有分支** — 项目和工作树都在侧边栏,不用再找匿名标签页对应哪个分支 - **关掉再开,状态还在** — Mori 退出后 tmux 继续跑,第二天打开接着用 - **分支真正隔离** — 每个工作树有独立目录和 tmux 会话,`main` 和 `feat/auth` 同时跑互不影响 - **本地和 SSH 都支持** — 本地目录或远程服务器都能连,Mac 原生界面 - **GPU 渲染** — 用 Ghostty 的 libghostty 引擎,Metal 加速 - **终端拖放** — 拖入文件、URL 或文本,自动插入适用于 shell 的路径和内容 - **CLI + 适合 Agent** — `mori` 命令行通过 Unix socket 控制一切,脚本和 AI Agent 工作流都好用 - **MoriRemote** — 不在 Mac 旁边时,用 iPhone/iPad 通过 SSH 连进来 ## 工作原理 Mori 把开发的层级结构直接映射到 tmux:每个 git 工作树是一个 tmux 会话,会话里有窗口(标签页)和面板(分屏)。关掉 Mori,明天回来,里面跑的东西一个不少。 ``` Project 项目(git 仓库) └── Worktree 工作树(分支) ← tmux 会话 例如 myapp/feat-auth ├── Window 窗口(标签页) ← tmux 窗口 例如 "shell" │ ├── Pane 面板(左侧分屏) ← tmux 面板 │ └── Pane 面板(右侧分屏) ← tmux 面板 └── Window 窗口(标签页) ← tmux 窗口 例如 "logs" └── Pane 面板 ``` - **Project(项目)** — 一个 git 仓库,用根路径和短名称标识。 - **Worktree(工作树)** — `git worktree` 检出的分支目录,对应一个 tmux 会话(`<项目>/<分支>`)。 - **Window(窗口)** — 会话里的 tmux 窗口,就是标签页。 - **Pane(面板)** — 窗口里的 tmux 面板,就是分屏。 侧边栏列出所有项目和工作树,点一下就接上对应会话,切换是即时的。 ## 安装 ```bash brew tap vaayne/tap brew install --cask mori ``` 也可以从 [GitHub Releases](https://github.com/vaayne/mori/releases) 下载。MoriRemote iOS 版在 [TestFlight](https://testflight.apple.com/join/k2GFJPC2)。