原生 macOS · 基于 GhosttyNative macOS · Built on Ghostty

一个窗口,
看住所有 Agent。
One window
for every agent.

几个编程 Agent 一起跑的时候,麻烦的不是再开一个终端,而是你得不停去看:谁还在干活,谁停下来等你,关掉窗口之后那段对话去了哪。AgentDeck 把这些会话放在同一条侧边栏里。每一格都是真正的 Ghostty 终端,本地目录和 SSH 服务器排在一起。

The hard part of running several coding agents is not opening another terminal. It is seeing which one is still working, which one stopped to wait for you, and where a conversation went after the window closed. AgentDeck keeps those sessions in one sidebar. Each row is a real Ghostty terminal, local folders and SSH servers together.

macOS 14 及以上 · Apple 芯片 · 免费,MITmacOS 14 or later · Apple silicon · Free, MIT

AgentDeck

codex · shop

~/src/agentdeck main

❯ claude

● Reading Sources/UI/SidebarView.swift

+ 18 − 2 ActivityBadge

这一轮还没结束。你的 Ghostty 配置文件不会被改。Still on this turn. Your Ghostty config file is left alone.

~/src/shop

❯ codex

等你确认Waiting for you

Sources/Remote/SSH.swift

允许这次修改?Allow this edit?

y yes n no

~/src/api

❯ grok

✓ 本轮完成Turn complete

对话 id 还在。退出后再开,会回到这里。The conversation id is kept. Starting it again resumes here.

❯

~/notes

❯ gemini

进程已退出,回到了 shell。The process exited. You are back at the shell.

再启动会接着上次的对话。Starting it again continues the last conversation.

❯

~

%

ecs-prod · ubuntu · tmux

已重新挂上。原来的会话还在,里面的 Agent 也在。Reattached. The session is still there, agent included.

这台机器上没有为 AgentDeck 安装任何东西。Nothing was installed on this machine for AgentDeck.

ubuntu@ecs-prod:~/app$

可点的界面示意。点左侧会话会换掉终端内容,右上角可以打开性能面板。颜色和 App 里的状态一致。A clickable sketch. Choose a session to change the terminal, or open the performance panel at the top right. Status colors match the app.

状态Status

不用切过去,也知道该看谁。See who needs you without switching over.

每个 Agent 会话旁边有自己的状态。动效也有含义:还在干活,文字上会有一道光扫过;等你的时候,圆点外面的圈会扩出去。系统打开「减弱动态效果」后,这些动画会停。

Every agent session carries its own status, and the motion means something. While it is working, a light sweeps across the label. While it is waiting on you, a ring expands from the dot. With Reduce Motion on, the animation stops.

  1. 运行中Working

    这一轮还没结束。Claude Code 用它自己的 hooks 报告状态。AgentDeck 只在启动时加上参数,不改你的设置文件。其他 Agent 则靠回车、响铃、通知和进度来判断。

    This turn is still going. Claude Code reports through its own hooks. AgentDeck passes flags at launch and never edits your settings files. Other agents are read from generic signals: Return, the bell, notifications, and progress.

  2. 等你Needs you

    权限确认、一个问题,或一条通知。⌘⇧J 跳到下一个这样的会话。响铃和通知也会在 Dock 上标出来。

    A permission prompt, a question, or a notification. ⌘⇧J jumps to the next session that needs you. Bells and notifications also badge the Dock.

  3. 本轮完成Turn done

    这一轮结束了,会话还在。点进去可以接着看。退出之后再开,也会回到同一段对话。

    This turn is finished, and the session is still there. Open it to read the result. After it exits, starting it again returns to the same conversation.

  4. 已退出Exited

    Agent 进程结束了,你回到 shell。再启动会接着上次的对话。

    The agent process has ended and you are back at the shell. Starting it again continues the last conversation.

刚启动、还在等第一次输入时,显示「就绪」。普通 Shell 没有这些状态。SSH 断了以后会出现重连按钮,提示为「已断开」,⌘⇧R 也会重连。

Right after launch, before the first prompt, the label is 就绪. A plain shell has none of these states. A dropped SSH session gets a reconnect button, described as 已断开. ⌘⇧R reconnects too.

远程Remote

服务器上什么都不用装。Nothing to install on the server.

侧边栏的「服务器」有你添加的主机,也有 ~/.ssh/config 里的别名,Include 进来的文件也算。可以填地址、用户、端口、密钥或 ssh-agent,也支持 ProxyJump。密码放在钥匙串里。

Servers lists hosts you add and every alias in ~/.ssh/config, including files pulled in with Include. You can set the address, user, port, key or ssh-agent, and ProxyJump. Passwords go in the Keychain.

默认是自动。机器上已经有 tmux 或 zellij 就用它,没有就开一个普通登录 shell,不会催你去装。连接断了可以重连。如果当时跑在 tmux 或 zellij 里,会挂回原来的会话,里面的 Agent 还在。没有多路复用器的话,就按你配置的目录重新登录。

Auto is the default. If the machine already has tmux or zellij, AgentDeck uses it. If not, you get a normal login shell, with no prompt to install anything. Reconnecting a tmux or zellij session attaches again, so the agent is still there. Without a multiplexer, it logs in again, in the directory you set.

性能面板跟着当前会话。看 SSH 会话时,采样的是那台服务器:只开一条 SSH,用一小段 POSIX shell 去读 /proc。服务器上仍然不用装东西。远程采样目前只支持 Linux。

The performance panel follows the selected session. For SSH it samples that server over one connection: a small POSIX shell loop reading /proc. Still nothing to install. Remote sampling currently supports Linux only.

对话Conversations

关掉窗口,对话还在。Close the window. The conversation stays.

Claude Code 和 Grok 在启动时就带上 AgentDeck 分配的对话 id。Codex 会在启动之后,从它自己的 ~/.codex/sessions 里对上 id。重启 App,或者一个已经退出的 Agent 再开,都会回到这段对话。⇧⌘O 按文件夹列出这个 Agent 过去的对话。

Claude Code and Grok start with a conversation id AgentDeck assigns. Codex is matched, after launch, to an id in its own ~/.codex/sessions directory. Relaunching the app, or starting an agent that had exited, resumes that conversation. ⇧⌘O lists past conversations for a folder.

分屏、分组和 SSH 连接也会按退出前的样子回来。第一次打开、没有可恢复的内容时,会在家目录开一个 shell。

Splits, groups, and SSH connections come back the way you left them. With nothing to restore, AgentDeck opens a shell in your home directory.

快捷键Keys

手不用离开键盘。Keep your hands on the keyboard.

⌘⇧J

跳到下一个等你的会话Jump to the next session that needs you

⌘⇧[⌘⇧]

上一个 / 下一个会话Previous / next session

⌘1⌘9

跳到对应的会话Jump to a session by number

⌘D⌘⇧D

向右分屏 / 向下分屏Split right / split down

⌘F

在回滚里查找Find in the scrollback

⌘V

把截图或文件贴成路径Paste a screenshot or file as a path

⌘⇧R

重新连接 SSHReconnect SSH

⇧⌘O

恢复这个文件夹里以前的对话Resume an earlier conversation for this folder

⌥⌘P

打开性能监视器Open the performance panel

⌘,

设置Settings

还有这些Also

  • 内置 Claude Code、Codex、Grok、Gemini 和 Shell。其他命令行工具可以自己加。还没安装的,会给出安装命令。命令是打进登录 shell 的,Agent 退出以后,你还在那个 shell 里。Built in: Claude Code, Codex, Grok, Gemini, and a shell. Any other CLI can be added. Ones that are not installed come with an install command. The command is typed into your login shell, so when the agent exits you are still in that shell.
  • 剪贴板里如果是截图,⌘V 会先存成 PNG,再贴上路径,这样就能把图交给 Agent。拷进来或拖进来的文件,会变成 shell 转义后的路径。If the clipboard holds a screenshot, ⌘V saves a PNG and pastes the path, which is how you hand an image to an agent. Copied or dragged files paste as shell-escaped paths.
  • 中文、日文、韩文输入法可以用,候选窗贴着光标。Chinese, Japanese, and Korean input methods work, with the candidate window anchored at the cursor.
  • 会话可以重命名,也可以放进分组。分组是侧边栏里可折叠的一段。Sessions can be renamed or moved into a group. A group is a collapsible section in the sidebar.
  • 性能面板里还有 Docker。可以看容器日志、进容器开一个 shell,也可以启动、停止或重启。从容器打开的会话,下次启动 App 时不会恢复。The performance panel also lists Docker containers. You can open logs, a shell inside a container, and start, stop, or restart one. Sessions opened from a container are not restored on the next launch.
  • 每天会查一次更新,菜单里也可以自己检查。更新来自 GitHub Releases,要有 EdDSA 签名,并且 Developer ID 得和当前这个 App 一致。如果有 Agent 正处在这一轮里,重启前会先问你。AgentDeck checks for an update once a day, and you can check from the menu. Updates come from GitHub Releases. Each one is EdDSA-signed and must carry the same Developer ID as the app you have. If an agent is mid-turn, it asks before restarting.

分屏移动、查找步进和其他细节在 功能说明 里。Moving between panes, stepping through matches, and the rest are in the feature notes.

下载Download

合用就拿去。Take it if it fits.

这是照着一个人自己的工作流做的,开源出来。可以从 Releases 下载签过名的包,也可以自己构建。

Built for one person's workflow, and open-sourced in case it fits yours. Download a signed build from Releases, or build it yourself.

  • 系统SystemmacOS 14 或更高macOS 14 or later
  • 芯片Chip目前只有 Apple 芯片Apple silicon only, for now
  • 远程采样Remote stats目前只支持 LinuxLinux only, for now
  • 许可LicenseMIT。终端引擎是 GhosttyMIT. The terminal engine is Ghostty