Seahelm:用 libghostty 写的 macOS 原生 agent 控制台,管多个 Claude Code / Codex

查看 12|回复 0
作者:zhoujinliang   
做了大半年,自己每天在用,拿出来分享一下。
解决的问题
同时开五六个 Claude Code / Codex 在不同 git worktree 里干活的时候,我不知道该看哪个窗口。终端长得都一样,只能一个个切过去看最后一行输出。
tmux 能管窗口,但它不知道「 agent 在等你确认」这件事。对 tmux 来说,卡在权限询问的 Claude 和正在写代码的 Claude 没有区别。
怎么做的
终端渲染直接嵌 libghostty ( Ghostty 的 C 接口),Swift + AppKit ,不是 Electron 。会话持久化用 zmx ,退出 App 或者重启之后 agent 还在原地。每个 repo 一个 tab ,每个 worktree 一张卡片,卡片上只显示 running / waiting / broken 三种状态。
状态判断是一个优先级梯子:进程退出状态 > OSC 133 shell 集成标记 > 文本正则匹配。正则那一层是数据驱动的,每个 agent 一份 JSON manifest ,可以在 ~/.config/seahelm/agents/ 下覆盖。
Claude Code 和 Codex 接了原生 hook ,所以「在等你」是一个真实事件,不是从屏幕文字猜出来的。目前 12 个 agent 有状态识别:claude 、codex 、opencode 、gemini 、cursor 、aider 、amp 、cline 、goose 、kiro 、pi 、agent 。
agent 可以反过来操作它
每个 pane 都有 SEAHELM_PANE_ID ,配一个控制 socket 和 CLI:
    seahelm pane split  --direction right
    seahelm pane run  "npm test"
    seahelm wait agent-status  --status Idle
所以一个 agent 能自己开一个兄弟 pane 、把活派过去、等它做完。这是目前我自己用得最多的功能。
安装
    curl -fsSL https://seahelm.dev/install.sh | sh
macOS 14+,Apple Silicon 和 Intel 都支持。
源码和 Release: https://github.com/BetaYao/seahelm
官网: https://seahelm.dev
有什么用着别扭的地方欢迎直接说。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部