00:00:00随着编程 CLI 的兴起,现在市面上出现了大量不同的工具,
00:00:06可以帮助你管理 AI 代理来替你编写代码。
00:00:10在今天的视频中,我将向大家展示其中几种主流工具,并进行对比。
00:00:16我目前日常使用的是 Conductor,但它的灵活性很高,我经常在不同工具间切换。
00:00:23其他开始流行起来的工具包括 SuperSet、C-Mux,Codex 应用其实也很不错,
00:00:27此外,还有很多人直接在 Ghosty、Warp 或 iTerm 等常规终端中编写代码。
00:00:31当然,大家也还在使用 Cursor 或 VS Code。
00:00:36本期视频我将重点介绍 Conductor、SuperSet 和 C-Mux,因为这些是比较新的工具,尝试过的人还不算多。
00:00:40大家都知道怎么用 VS Code 或 Cursor,所以我就不深入讲解了。
00:00:44首先是 Conductor。这实际上就是你现在在我屏幕上看到的这个。
00:00:48你可以看到我有好几个不同的对话在并行运行。
00:00:50这是我目前为 Inbox Zero 开发的真实工作。
00:00:53侧边栏的每一个对话都是一个不同的工作树(work tree)。
00:00:58如果你不熟悉工作树,它们是因为 AI 代理的并行运行而变得非常流行的。
00:01:03它的作用是提取你的核心项目,并将其克隆到电脑上的一个新文件夹中。
00:01:08在这里你可以看到我有 Inbox Zero 的仓库,并且在电脑上存了好多副本。
00:01:10这一个叫 Belgrade,那个叫 Algiers。
00:01:15每一个都有不同的名字,基本上就是你在侧边栏看到的这些。
00:01:18每一个基本上都是我可以进行开发的一个独立分支。
00:01:20它还有自己对应的 PR。
00:01:25因此,这里的更改不会影响到那里的任何更改。
00:01:30这就好像你有七个不同的员工在为你工作,也就是不同的 AI 代理,
00:01:35每一个都在修改不同的文件,可以并行工作而互不干扰。
00:01:38现在带大家看看 Conductor 是如何运作的,它其实就是一个普通的聊天界面。
00:01:43你可以看到我有一个正在进行的任务,我正在告诉 AI 继续它的工作。
00:01:49你可以看到一旦任务就绪并完成,我就可以去检查它关联的 PR。
00:01:51我也可以点击这里进行合并。
00:01:59我可以点击这里的评审按钮,它会启动一个新的代理,在一个新标签页中去评审这个工作树或分支中的更改。
00:02:01我还可以查看不同的文件。
00:02:03比如这里是 .env.example 文件。
00:02:07而在右边,我有一个常规的终端。
00:02:13现在,由于工作树的工作方式是将你的主项目复制粘贴到一个新位置,
00:02:17这通常意味着你需要为该文件夹重新进行设置。
00:02:24所以你在今天涵盖的所有这些项目中都会看到,有一个设置脚本(setup script)和一个运行脚本(run script)。
00:02:35设置脚本的意思是,当我点击加号开始在一个新的工作树中开发新功能时,它会自动执行类似 pnpm install 甚至在新的端口上运行项目等操作。
00:02:36如何使用这些脚本完全取决于你。
00:02:46但通常你会看到,设置脚本可能是执行 pnpm install,然后运行脚本是真正启动应用,接着你就可以在 localhost:3000 或其他端口访问它。
00:02:50你可以让每一个工作树都运行在不同的端口上。
00:02:54这是必要的,因为每个工作树都有不同的代码更改。
00:03:00如果你只在一个文件夹里运行项目,显然它不会显示你电脑上另一个文件夹里的更改。
00:03:04现在,另一个非常棒的功能是你可以查看“检查”(checks)。
00:03:07也就是你的构建状态或 GitHub 评论。
00:03:15这里你可以看到我有很多正在运行的检查,还有来自 Kubik 和 Baz 的评论,它们是 AI 代码评审工具。
00:03:19如果我点击其中一个,你可以看到这是它作为评审的一部分给我的建议。
00:03:25如果我想,我甚至可以将所有这些评论添加到这里的对话中,点击发送,让 AI 自动修复它们。
00:03:28下一步我要向大家展示的是 Superset。
00:03:30你可以看到它的理念非常相似。
00:03:32侧边栏运行着你所有的不同代理。
00:03:39坦白说,我认为很多不同的项目都受到了 Conductor 的启发,这就是为什么你会看到它们的界面都在向相似的方向靠拢。
00:03:41你可以看到右侧有提交(commit)功能。
00:03:44这里有项目的不同文件。
00:03:49这里有趣的一点是,它为终端提供了更高级的一等公民体验。
00:03:54所以如果你喜欢运行常规的 Claude Code 或 Codex,你也可以这样做。
00:03:56这里你可以看到一个已经发生的常规运行。
00:03:58他们也有自己的聊天界面。
00:04:00如果你更偏好那种方式,我觉得这挺新颖的。
00:04:04Conductor 强迫你使用他们的自定义聊天界面,而使用 Superset,
00:04:06你拥有这种灵活性。
00:04:13现在,你可能想要使用 Claude Code 或 Codex 的真实版本,原因在于它会拥有所有最新的功能。
00:04:18我的意思是,比如 Codex 更新了一个新的斜杠命令。
00:04:22你在 Conductor 中输入斜杠,它可能不会出现,因为他们还没有更新 Conductor。
00:04:29它很大程度上是对 Claude Code 和 Codex 的封装,但因为你用的是他们的聊天界面,所以并不是完全对等的。
00:04:36但在 Superset 这边,虽然理念类似也是用他们的聊天界面,但你也可以直接使用 CLI。
00:04:40在 Superset 中你还会发现,你也可以在主分支(main branch)上工作。
00:04:43令人惊讶的是,这在 Conductor 中做起来有点麻烦。
00:04:47据我所知,你无法在 Conductor 中直接操作 main 分支。
00:04:52你必须在 Cursor 或 VS Code 之类的工具中打开项目。
00:04:54顺便提一下,Conductor 也有完全相同的功能。
00:05:01但在这里你可以看到,我可以从 Superset 直接在其他编辑器(如 Zed 或任何你选择的编辑器)中打开项目。
00:05:03完全一样的理念。
00:05:06我可以在访达或 Ghosty 或任何我想用的地方打开它。
00:05:15Superset 另一个酷炫的地方是你可以打开浏览器标签页,这里可以看到 Inbox Zero,它直接在 Superset 内部运行。
00:05:18如果你在做前端代码开发,这会非常有帮助。
00:05:22我应该还提到,这两个应用都支持与 Linear 和 GitHub 同步。
00:05:27比如你可以根据一个 Linear 的 issue 来创建一个新的工作树。
00:05:29这里是 Superset 拥有的其他一些功能。
00:05:34我认为当云端工作空间和移动应用发布时,这些功能会变得非常有趣。
00:05:36我假设 Conductor 也会做类似的事情。
00:05:39你可以想象,这些应用的更新速度非常快。
00:05:42我们今天在这里看到的,三个月后可能就是完全不同的景象了。
00:05:50如果我向大家展示我们是如何实际使用 Superset 的,你可以看到我可以在 Codex、Claude Code 之间选择,坦白说还有很多其他选项,比如 Open Code。
00:05:54我猜这是 Superset 相对于 Conductor 的另一个优势。
00:05:57在 Conductor 中,你被限制只能使用 Codex 和 Claude Code。
00:05:59而在这里,我有许多其他选项可以使用。
00:06:03那么让我们去修改一下,创建一个工作空间。
00:06:06你可以看到工作空间正在设置中,正在执行一些操作。
00:06:15它在这里打开了 Codex,你可以看到与此同时,它在另一个窗格中执行 pnpm install。
00:06:19现在完成了,我要让它创建一个 PR。
00:06:22顺便说一下,如果你注意侧边栏,我们的分支已经被重命名了。
00:06:26我们可以在浏览器中打开它的预览,这很不错。
00:06:27你可以看到 PR 已经准备好了。
00:06:29它已经在这里为我关联好了。
00:06:37但我也可以在侧边栏看到我们处于 PR 1915,检查正在运行,体验和 Conductor 非常相似。
00:06:40我还可以点击这里查看更改或提交。
00:06:48如果我想看 diff,我可以点击这里,希望能在这里看到 diff,你可以看到 CI 检查也在运行。
00:06:52这是在 GitHub Actions 和我连接的其他机器人中发生的。
00:07:00你可以看到 Vercel 机器人和 Socket Security 已经完成了,而 AI 代码评审员以及一些端到端测试仍在运行。
00:07:03使用 Superset 和 Conductor 时需要注意一点。
00:07:07你可以搜索文件,但我认为目前还没有办法搜索特定的单词。
00:07:10所以你经常需要在另一个编辑器中打开代码。
00:07:12假设我想在项目中找到这个词。
00:07:17我觉得今天在 Conductor 或 Superset 里还没法这么做。
00:07:24这虽然不是特别重要,但确实有很多时候我会打开另一个编辑器来更深入地查看情况。
00:07:29但在大多数时间里,我只是在 Conductor 中管理侧边栏的这些代理。
00:07:31顺便说一下,看这个。
00:07:33这个更改现在已经创建好了。
00:07:37我可以点击创建 PR,也可以点击评审,它就会继续流程。
00:07:42所以它有很多好用的内置按钮,让整个工作流变得简单得多。
00:07:44接下来我们要看的是 Cmux。
00:07:46但在那之前,我们先快读看看 Ghosty 是什么样的。
00:07:48Ghosty 只是另一个终端。
00:07:49它很酷,推荐下载。性能非常强,是用 Zig 编写的。
00:07:51这里你可以看到 Codex 在 Ghosty 中运行。
00:07:53完全一样的东西。这是 Claude Code 在 iTerm2 中运行。
00:07:56这里你可以看到我们在运行 Warp。
00:08:00也是一个很酷的终端。这个比较突出,因为你可以在终端里使用 AI。
00:08:04它还可以做很多其他事情,比如代理式编程。
00:08:07我没怎么深用过,所以就不细说了。
00:08:10但它确实是一个非常好用的终端,可以通过自然语言交互,而不需要手动输入命令。
00:08:16这里你可以看到 Warp 在实际应用中的样子。
00:08:18现在切回到 Cmux,我们可以看到 Cmux 是一个基于 Ghosty 的原生 macOS 应用。
00:08:24它有垂直标签页、当代理需要注意时会发出的通知环、分屏窗格以及用于自动化的 Socket API。
00:08:30这就是它的样子。你可以看到侧边栏有很多正在运行的任务。
00:08:33你也可以看到这里有很多正在运行的窗格。
00:08:37你甚至可以看到一个正在运行的浏览器标签页。
00:08:39这是你第一次打开 Cmux 时的实际样子。
00:08:43它就是一个非常流畅的 Ghosty 终端,这很棒,但接着你可以开始做其他事情。
00:08:48它的工作方式更像是 Tmux。如果你不熟悉 Tmux,这就是 Tmux 的理念。
00:08:53这里你可以看到 Tmux 在我的终端里运行。
00:08:55我可以执行类似在 Tmux 内部开不同窗格的操作。它是一个终端里的终端。
00:09:00也被称为终端复用器。
00:09:03你可以看到我其实已经在 Cmux 里运行了 Tmux,不过我们先退出那个。
00:09:08现在 Cmux 正在运行。你可以看到我可以不断地把它切分成不同的窗口。
00:09:13所以这真的很棒。如果我想并行运行四个不同的 Codex,我可以直接开搞。
00:09:18而且我不需要管理四个不同的独立窗口。
00:09:21当然,我可以在这边再开一个终端,然后在不同终端之间来回切换。
00:09:27Cmux 真正酷的一点是,它是一个你可以调用的 CLI。
00:09:32例如,在这里输入 cmux new split left,我可以让它为我创建一个新标签页。
00:09:37你可以想象如果你在使用 Claude Code,它可以为你自动在多个不同的标签页中启动多个代理。
00:09:44你还可以让 Claude Code 使用 Cmux CLI 来控制其他事情。
00:09:49比如,在这里你可以看到我们在 PR 1905 上。
00:09:52我只需要告诉 Claude Code:“嘿,我想在侧边栏看到这个 PR”,就能完成设置。
00:09:59你还可以让它自动处理通知并进行自定义。
00:10:04例如,当 Claude Code 或 Codex 完成任务时,它们可以调用 Cmux CLI 发送通知,告诉你任务在哪个标签页以及已经完成了。
00:10:14你还可以用它来运行浏览器和执行浏览器自动化。
00:10:18例如,在这里我执行了 cmux browser open getinboxzero.com。
00:10:21你可以看到它在这里的一个新标签页里弹出来了。
00:10:24想了解更多功能,请查看文档。
00:10:27这里你可以看到浏览器自动化 CLI。
00:10:30这里可以看到它是如何为你管理通知的。
00:10:33cmux notify。让我们试一下这个。
00:10:36你可以看到我们收到了一个新通知。太棒了。
00:10:39现在,Cmux 和 Tmux 之间还是有一些区别的。
00:10:42Tmux 非常适合做远程会话工作。
00:10:46即使你的会话与服务器断开了连接,Tmux 也会保持运行。
00:10:50而 Cmux 仅限 Mac 使用,所以它可能没法在你的服务器上运行。
00:10:54这也意味着如果你在电脑上运行它,然后想在手机上继续工作,它帮不了你。
00:11:00我个人在手机上使用一个叫 Echo 的工具。它很便宜,只要三美元。
00:11:05但它基本上可以让你通过 SSH 登录电脑。
00:11:08如果你已经有一个正在运行的 Tmux Claude Code 会话,你就可以直接在手机上继续。
00:11:14你可以让你的电脑和手机处于同一个 Tailscale 网络中来完成设置。
00:11:18你可以看到那种体验是什么样的。其实非常不错。
00:11:21虽然我不经常用,但这个应用本身非常简洁精美。
00:11:25所以我建议大家也去了解一下。
00:11:27视频到这里就结束了。我希望这能让你对
00:11:31目前存在的各种不同工具有所了解,并知道如何使用它们。
00:11:34坦白说,它们的功能几乎都大同小异。
00:11:37最终,你只是通过稍微不同的界面在与 AI 交流。
00:11:41对我来说,最重要的事情是我能不能并行运行多个代理?
00:11:45我发现最简单的方法就是使用工作树。
00:11:48所以我应该提一下,Cmux 没有任何原生支持工作树的功能。
00:11:52所以你确实需要寻找一些脚本来完成相关设置。
00:11:55但如果你在使用 Claude,你只需要输入 claude work tree,
00:11:58它就会在一个新的工作树中为你设置好一切。
00:12:01工作树是 Git 内置的功能,所以理论上你使用的每一个应用都可以使用它们。
00:12:05但在像 Conductor 或 Superset 这样的工具中,你只需点击加号,
00:12:09你就能得到一个新的工作树,而且一切都会自动为你设置好,
00:12:11你完全不用操心。这非常方便。
00:12:14如果你在使用 Cmux 之类的工具,网上有一些脚本可以帮你实现同样的功能。
00:12:17坦白说,几行代码就能搞定。
00:12:20希望你喜欢这个视频并觉得它很有趣。
00:12:23记得订阅以观看未来的视频。如果你想帮我个忙,
00:12:26请访问 GitInboxZero.com。在 GitHub 上点个 star。它是完全开源的。
00:12:31它是一款 AI 邮件助手,能帮你管理邮件并助你快速实现收件箱清零。