# Termi：面向 macOS 和 Linux 的开源终端应用

Company: Webanion
Service: 应用开发
Period: 2026-09 - present
Tech: Electron, React.js, TypeScript, xterm.js, node-pty, electron-vite, Vitest
Web: https://termi.webanion.com
Canonical: https://webanion.com/zh/portfolio/termi-open-source-terminal-app-for-macos-and-linux

一款面向 macOS 和 Linux 的开源终端应用，由 Webanion 以 MIT 许可证发布：保存的命令可在一个标签页里并排打开最多四个终端，采用 Termi 记住的布局，并能随应用一起启动；还有拆分、重新打开、命令面板、快捷键表、内置指南，以及侧边栏里的 CPU、内存和网络数据。Electron、React、TypeScript、xterm.js 和 node-pty，用 electron-vite 构建，用 Vitest 测试，并带有一个 MCP 服务器，让助手可以管理保存的命令。源码见 github.com/webanion/termi。

## 完整故事

一条保存的命令，四个终端，记住的布局，启动时整个网格原样归位。

### 每天早上同样的八个窗口

<p>做一个项目的开发者每个工作日都要启动同样的进程：一个开发服务器，一个测试监视器，一个跑 git 的 shell，再一个留给随时冒出来的事。终端应用把它们一个一个打开，每个都要在正确的文件夹里，然后手动排好窗口，重启之后整套流程再来一遍。命令从来不变。重新敲这些命令所花的分钟也不会变。</p><p>Termi 是一款面向 macOS 和 Linux 的开源终端应用，由 Webanion 以 MIT 许可证发布。一条保存的命令记住最多四个终端、它们运行的文件夹和摆放的布局，一次点击就在一个标签页里全部打开，还能在 Termi 启动的那一刻自动运行。应用的其余部分不挡 shell 的路：拆分、重新打开、命令面板、快捷键表、内置指南，以及侧边栏底部机器的 CPU、内存和网络数据。</p>

### 一条保存的命令，四个终端

<p>名为 Termi 的保存命令在一个标签页里打开项目的四个终端：监视模式下的单元测试、git 日志、类型和 lint 检查，以及一个普通 shell，全部位于项目的文件夹。每个终端在标题栏显示的是标题而不是原始命令，运行中的标签页带着各自的快捷键排在侧边栏顶部，保存的命令排在下方，会在启动时自动运行的命令旁有一个闪电标记。</p>

### Termi 记得的布局

<p>两个、三个或四个终端的标签页可以是网格、并排、堆叠、左侧放大或顶部放大。布局在保存命令的对话框里选，或在标题栏右侧的控件里选，Termi 会为这条命令记住它，标签页回来时和离开时一模一样。这条命令需要的其他一切也都在对话框里：名称、最多四条可带可选标题的命令、文件夹，以及是否在 Termi 打开时启动。拖动两个终端之间的分隔线可以调整大小，双击则让它们重新等分。</p>

### 拆分、重新打开，还有机器的状态一目了然

<p>任何标签页都能从标题栏或键盘拆分成最多四个终端，新的 shell 在标签页的文件夹里启动；这里是产品网站的开发服务器和一次类型检查共用一个标签页。关掉保存命令中的一个终端，标题栏就会出现 Reopen，列出关掉的终端并把它放回原位，同时侧边栏显示 3 of 4。页脚每 1.5 秒读取一次 CPU、内存、下载和上传。</p>

### 一切都能从键盘完成

<p>命令面板按名称找到任何操作或运行中的终端，并在旁边显示它的按键；快捷键表把每个快捷键列在一页上。按键因系统而异是有意为之：在 macOS 上由 Command 键完成工作，在 Linux 上单独的 Ctrl 加字母总是直达 shell，所以 Ctrl+C 仍然中断，Ctrl+B 仍然是 tmux 的前缀，而 Termi 自己的快捷键用 Ctrl+Shift 加字母，Alt 加数字切换标签页，Ctrl+Page Up 和 Page Down 在标签页之间移动。保存的命令也能从键盘运行：输入名称的一部分再按 Enter，如果它已经在运行，Termi 会跳到它的标签页。</p>

### 随应用一起提供的帮助

<p>首次启动时会打开一份五页的指南，之后也可以从 Help 菜单再次打开，应用的每个部分各占一页：终端与标签页、保存的命令、拆分终端、复制与状态数据，以及 MCP 服务器。Help 菜单中的 Report an Issue 会打开一份已经填好 Termi 版本、系统和 shell 的错误报告，由使用者自己阅读并提交。Termi 自己不发送任何东西：没有遥测，没有分析，没有更新检查。</p>

### 一个页面放下所有下载

<p>termi.webanion.com 把下载、功能、布局和快捷键放在一个页面上，并优先提供访问者自己系统的构建：面向 Apple silicon 和 Intel Mac 的 dmg，面向 Debian 和 Ubuntu 的 deb，以及面向其他 Linux 发行版的 AppImage，每个版本都附有用于核对的 SHA256SUMS 文件。版本由 GitHub Actions 工作流发布，从不手工操作：它打开一个带版本号提升和根据提交写成的更新日志的 pull request，合并后构建 macOS 和 Linux 安装包，打上版本标签，并连同贡献者一起发布该版本。</p>

### 开源，来自 Webanion

<p>Termi 由 Jawad Ahbab 发起，后来由 Webanion 重构并以 MIT 许可证作为开源产品发布。Webanion 的发布工作为它带来了 electron-vite 构建、TypeScript、ESLint 和 Prettier 检查、Vitest 单元测试、针对真实 shell 的集成测试、每个 pull request 在 CI 中于 Linux 和 macOS 上对构建好的应用做的冒烟测试，以及构建并发布每个版本的工作流。</p><p>窗口之下，Electron 承载一个沙盒化的 React 页面，它只能通过经过校验的 IPC 契约触达 shell，xterm.js 绘制终端，node-pty 运行终端，设置保存在一个带版本号和迁移的 JSON 文件里，所以旧构建永远不会破坏新构建的设置。同一构建里还带着一个 MCP 服务器，因此像 Claude Code 这样的助手可以列出、添加和编辑保存的命令，但要记住指南里的提醒：保存的命令会在点击或启动时运行，所以这两个工具应当保持手动批准。源码、议题和 good first issue 都在 github.com/webanion/termi。</p>
