内容
# AgentBar
一款轻量级的macOS菜单栏应用程序,用于监控和清理AI助手进程 — **Claude**、**Codex**、**Gemini** 和 **MCP 服务器**。
不要让遗忘的 `claude`、`codex`、`gemini-cli` 和 `node` MCP-server 进程在漫长的一天AI辅助编码后堆积。AgentBar 显示正在运行的进程、每个代理的CPU/内存占用情况,并允许您一键终止它们。
> 使用SwiftUI的 `MenuBarExtra` (macOS 13+)构建。没有Dock图标,约300 KB二进制文件,每3秒轮询 `ps` 。

## 功能
### 进程监控
- **实时菜单栏计数** ,显示正在运行的AI代理进程
- **按代理分组** — 分别统计Claude/Codex/Gemini/MCP的计数
- **进程详情** — PID、CPU%、内存占用、终端位置
- **僵尸进程检测** — 用红色徽章标记`Z`状态的进程
- **终止按钮** — 对每个进程发送SIGTERM,3秒后若仍存活则转为SIGKILL
- **批量终止** — 一键终止所有进程或某一类型的代理
- **复制进程信息** — 一键复制代理/PID/CPU/命令,以便粘贴到AI助手
### 终端集成
- **点击聚焦** — 点击进程行跳转到其终端窗口或tmux面板
- **tmux支持** — 检测会话/窗口/面板,聚焦时闪烁面板,在UI中按tmux窗口分组进程
- **MCP父进程检测** — MCP服务器行显示其所属代理,点击聚焦该代理的终端
### 端口选项卡
- **监听端口** — 显示所有打开TCP/UDP端口的进程(通过 `lsof` )
- **代理徽章** — 标记被识别的AI代理占用的端口
- **隐藏系统端口** — 过滤掉已知的macOS守护进程(sshd、mDNSResponder、sharingd等)
- **按端口终止** — 终止占用特定端口的进程;系统进程终止需确认
### 设置和显示
- **排序方式** — CPU占用、最近的PID或tmux窗口/面板
- **设置窗口** — 原生macOS设置UI,含选项卡(常规、端口、关于)
- **无Dock图标** — 适当的后台`LSUIElement`应用
## 安装
### 一键安装(推荐)
```bash
curl -fsSL https://raw.githubusercontent.com/CenCiviC/AgentBar/main/install.sh | bash
```
安装到 `~/Applications/AgentBar.app` 并启动应用。再次运行相同命令进行更新。
### 从源码构建
需要 macOS 13+、Swift 5.9+ 命令行工具(或 Xcode 15+)。
```bash
git clone https://github.com/CenCiviC/AgentBar.git
cd AgentBar
./Scripts/build-app.sh
open build/AgentBar.app
```
### 登录时启动
将 `AgentBar.app` 拖到 **系统设置 → 通用 → 登录项**。
## 工作原理
AgentBar 每3秒运行一次 `ps -axo pid,pcpu,rss,stat,comm,command` ,并将每个进程与模式规则匹配:
| 代理 | 基名 | 命令子串 |
|--------|------|----------------|
| Claude | `claude`、`claude-code` | `@anthropic-ai/claude-code`、`anthropic-ai/claude` |
| Codex | `codex` | `@openai/codex`、`openai/codex` |
| Gemini | `gemini`、`gemini-cli` | `@google/gemini`、`google/gemini-cli` |
| MCP | — | `mcp-server`、`@modelcontextprotocol`、`mcp-` |
端口扫描并发运行 `lsof -nP -iTCP -iUDP -sTCP:LISTEN` ,并将PID与代理进程列表进行交叉引用。
## 添加新代理
1. 在 `Sources/AgentBar/Models/AgentKind.swift` 中添加一个新案例
2. 设置 `color` 和 `rules` (基名 + 命令子串)
UI会自动识别。
## 开发
```bash
./Scripts/dev.sh # 构建调试二进制文件并运行(首先终止现有实例)
./Scripts/lint.sh # 运行SwiftLint
./Scripts/format.sh # 运行SwiftFormat
```
要构建本地发布包而不发布:
```bash
./Scripts/build-app.sh
open build/AgentBar.app
```
## 发布
```bash
./Scripts/release.sh patch # 1.0.0 → 1.0.1
./Scripts/release.sh minor # 1.0.0 → 1.1.0
./Scripts/release.sh major # 1.0.0 → 2.0.0
```
更新 `version.env` 、提交、构建、压缩并发布到GitHub Releases。
## 贡献
1. 分叉并创建功能分支
2. 运行 `swift build` 确认编译通过
3. 通过运行 `swift run` 并验证菜单栏UI进行测试
4. 打开一个带有简短描述和UI更改截图的PR
欢迎提出错误报告和功能请求 — 请打开一个问题。
## 许可证
[MIT](./LICENSE)