CLI的复兴与交互式困境

PayPal开发者工具负责人Mark Lummus与技术主管Naveen Kumar指出,尽管命令行界面(CLI)曾被视为过时技术,但在AI Agent时代迎来了复兴。Mark回顾了自己职业生涯早期使用VT10终端和MS-DOS的经历,强调CLI作为人与计算机交互的基础方式并未消失。随着Claude Code等代码生成工具的流行,开发者纷纷添加CLI工具以便Agent访问其能力。然而,交互式CLI与当前大多数Agent框架存在兼容性风险。虽然Agent经常通过Bash调用工具,但如果遇到交互式提示符(如需要用户输入或选择),许多运行环境无法妥善处理这种交互,导致静默失败(Silent Failure)。Agent看到的不是问题提示,而是终端重绘循环的乱码或状态丢失,且没有任何错误反馈。

"If they don't handle it very well, they'll fail quietly. You won't know. No errors, no nothing."(如果处理不好,它们会静默失败。你什么都不知道,没有错误,什么都没有。)

标志位(Flags)的局限性与Agent的特性

传统的CLI设计倾向于使用标志位(Flags)来预设所有可能的流程分支,这在简单、单次的自动化脚本中非常有效。然而,对于能够推理、反应和重试的Agent而言,这种静态设计显得捉襟见肘。Mark指出,当答案取决于上下文或实时事件时,标志位无法应对。例如,CLI调用API后根据返回结果动态提出问题,这种基于决策树的交互路径无法通过预先定义的独立标志位来实现。与预置所有逻辑的自动化脚本不同,Agent具备在决策树中行走的能力。因此,解决交互式CLI问题的关键不在于增加更多标志位,而在于借鉴无障碍访问(Accessibility)领域的理念:为Agent提供类似人类使用的结构化交互体验,同时保留必要的引导和护栏(Guard Rails),而不是假设Agent拥有与人类相同的UI处理能力。

实战挑战:改造Bris Barista 9000

为了深入解决这一问题,演讲者发起了一项名为“Burn Your Flags”的实战工作坊。参与者将获得一个名为Bris Barista 9000的示例CLI工具,该工具模拟咖啡订单流程,但因依赖交互式提示符而无法被Agent正确调用。挑战规则要求参与者修改该CLI的代码,使其能在Agent工作流中正常运行,并将结果发送至服务器以更新排行榜。Naveen Kumar回顾了从Eclipse到VS Code再到Cursor等AI IDE的演变,指出CLI在AI时代并未消亡,而是成为了Agent的核心接口。他鼓励参与者自由发挥("hack as much as possible"),通过实际改造来理解如何让CLI更好地服务于Agent。获胜者将获得一台Mac Mini作为奖励,这一挑战旨在通过动手实践揭示如何让CLI从“人类友好”转向“Agent友好”的核心技术路径。

挑战目标:让中等模型驾驭 CLI

本次活动的核心仓库为 PayPal cafe,参与者需下载其中的基础命令行界面(CLI)工具。主要任务是注册用户名或昵称后,通过指令“冲泡咖啡”。这不仅仅是一个简单的操作练习,更是一次针对 AI Agent 创新方法的探索。演讲者强调,目前处于早期阶段,尚无定论的“最佳实践”,而是通过分享“好主意”来共同学习。参与者被鼓励从 Agent 的视角思考问题,尝试不同的交互路径。

“我们不想浪费高推理能力的 token 去运行一个 CLI 工具。真正的挑战在于,能否让 Haiku、Sonnet 或同等级别的中等模型来运行你的 CLI?”

这一设定旨在解决当前团队对 token 预算的考量。虽然使用最先进的 LLM(大语言模型)的高思考模式可能通过暴力破解完成任务,但这在成本上不可持续。活动旨在验证中等速度、较低成本的模型是否具备高效执行 CLI 任务的能力,而非依赖顶级算力。参与者需在技术问题解决期间自行探索,演讲者承诺每隔 15-20 分钟分享一个“好主意”,而非标准答案。

工具推荐:Tmux 的多会话优势

针对 CLI 交互,演讲者首先推荐了 Tmux(Terminal Multiplexer)作为关键工具。对于不熟悉 Tmux 的观众,这是一个支持多终端会话和分屏功能的强大管理器。Tmux 允许 Agent 在后台保持 CLI 运行,并通过 tmux detach 将会话分离,从而在不中断任务的情况下进行其他操作。这种机制对于需要长时间运行的 Agent 活动至关重要。

“发送按键并捕获面板(send keys and capture pane)能带你走得很远。”

Tmux 的分屏功能使得 Agent 可以同时处理多个任务或监控不同状态。更重要的是,Tmux 能够记录会话上下文并在需要时恢复,这有助于多个 Agent 实例之间的通信和协调。通过将 CLI 置于 Tmux 会话中,Agent 可以更稳定地管理输入输出流,避免因终端关闭或网络波动导致的状态丢失。这是提升 Agent 鲁棒性的基础技巧之一。

交互优化:侧信道与结构化输出

除了 Tmux,另一个关键建议是使用 IPC Side Channels(进程间通信侧信道)。传统方法依赖屏幕抓取(screen scraping)进行视觉推理,但这效率低下且易出错。侧信道允许定义箭头键等输入指令,使 Agent 能够更精确地控制 CLI 界面。这种方法比视觉解析更为直接和可靠。

“Agent 需要知道输出是 JSON。这在整场演讲中变得非常关键,因为现在我们要同时服务人类和 Agent 两种人格。”

演讲者强调,输出格式的结构化(如 JSON)是 CLI 设计的关键。随着 AI Agent 成为主要用户群体,CLI 不仅要考虑人类用户的可读性,更要优化机器可解析的结构。Agent 需要明确的、结构化的数据输入,以便准确理解状态和执行下一步操作。这种双重视角(Human + Agent)的设计思路,是构建未来交互式 CLI 的核心原则。参与者应尝试让 CLI 输出易于机器解析的数据格式,从而提升 Agent 的执行效率。

侧信道类比与结构化输入的重要性

演讲者将“Side Channel”(侧信道)概念类比为Web应用中的REST API:正如网站为人类提供可视化界面,API则为机器提供结构化接口。在CLI(命令行界面)场景中,这意味着不能仅向Agent展示人类看到的视觉信息,而应提供机器可读的数据结构。例如,在使用 barista brew --agent 命令时,输入数据(如咖啡大小:小、中、大)应以结构化格式提供。这种机器可读的输入方式让Agent能够准确理解参数,而非依赖模糊的自然语言描述。演讲者强调,不同的Prompt配合不同“大脑”的Agent会产生差异化的结果,因此必须跳出人类视角的思维定式,专门设计适合Agent处理的数据格式。

上下文注入与Persona分离策略

CLI的设计需区分人类用户与Agent两种“人格”(Personas)。虽然底层命令相同,但交互逻辑截然不同:人类用户倾向于通过选项菜单逐步操作,而Agent则适合接收包含所有必要信息的单一输入文件。这里引入了“上下文注入”(Context Injection)技术,即预先向Agent提供背景信息以引导其决策。例如,当系统检测到燕麦奶库存仅剩两加仑时,CLI应通过上下文告知Agent这一限制。Agent随后需基于此背景向用户确认:“两盎司是否足够?”或“是否需要推荐替代品?”。这种基于上下文的主动询问机制是构建高效Agent交互的关键,它利用了CLI作为工具的精确定位能力。

从屏幕抓取到技能注入的演进路径

PayPal的技术旅程经历了从T-Max(基于屏幕抓取的低努力方案)向注入技能的转变。虽然T-Max易于实现,但Side Channel和上下文注入能提供更丰富的反馈机制和多场景处理能力。演讲者指出,这些高级技术解决了人类交互中无法覆盖的复杂逻辑问题。在演示环节,现场展示了实时排行榜,显示大量参与者分数接近5,000分。演讲者Mark提到,高分竞争异常激烈,且存在通过极低延迟(接近零秒)完成订单的极端案例。这表明当前的基准测试不仅考察准确性,还隐含了对响应速度的严苛要求。

基准测试的博弈与确定性CLI的价值

在问答环节,一位参与者透露其通过“暴力破解”和确定性解析器(Deterministic Parser)在极短时间内获得高分,这虽然符合规则但可能违背了挑战初衷。对此,演讲者Mark提出了一个核心观点:CLI应当是确定性的工具,而Agent(LLM)才是非确定性部分。如果将不确定的逻辑嵌入CLI并交给另一个Agent调用,会导致结果不可预测。因此,理想的CLI应像一把“锋利的小工具”,每次执行相同命令都返回一致响应。这种确定性设计原则确保了Agent在调用工具时的可靠性,避免了因CLI内部逻辑波动导致的错误。尽管存在刷分现象,但高分与低延迟的结合仍是当前排行榜的主要评判标准。

黑客松闭幕与 Bonk Agent 的制胜策略

随着比赛进入最后阶段,主持人宣布再等待五分钟即可结束。此时,观众席中有人高呼“Bonk”,这一名字迅速成为全场焦点。Bonk 是一个基于 Cloud Agent SDK 构建的 AI Agent,它独立完成了整个项目的开发工作。在正式比赛前,该 Agent 已经具备了一种评估基准技能(eval bench skill),能够自动创建环境并进行优化。最终,它成功构建了一个确定性的 CLI 求解器(deterministic CLI solver),并直接运行在 T-Max API 上。这种从环境搭建到最终执行的全自动化流程,展示了 Agent 在复杂任务中的强大能力。

“Bonk is just an agent thing built on top of cloud agent SDK. Um, it built the whole thing.”

在性能表现上,Bonk 取得了令人瞩目的成绩。据开发者透露,其响应时间曾达到惊人的 29 毫秒。这一极低延迟主要得益于网络因素,因为开发环境与服务器位于同一区域。整个系统完全基于 Claude Agent SDK 驱动,并通过 Slack 界面进行交互控制。值得注意的是,该 CLI 本身是完全确定性的(deterministic),而 Agent 的作用在于构建并调度它在 T-Max API 上运行。这种架构不仅保证了结果的一致性,还通过优化网络路径实现了极致性能。

Danny 的“氛围编程”与迭代优化过程

另一位获奖者 Danny 展示了截然不同的开发路径。作为一名自称完全不懂代码的“氛围编程”(Vibe coder)用户,Danny 并没有直接编写脚本,而是利用 AI Agent 来解决难题。他向助手下达了指令:“嘿,这是问题所在,读一下然后修复它。”Danny 的核心策略是让 Agent “像对五岁孩子一样”解释问题,并自动修复错误,从而无需自己处理复杂的调试过程。他使用了 Cloud Code 在 VSCode 中运行两个脚本,第一个脚本达到了 49.98 的成绩。

为了进一步突破极限,Danny 采取了迭代优化的策略。他让 Agent “复制一份并给出建议”,目标是将成绩提升至 49.99。这种自动化程度极高的工作流,使得他只需在初期提供起点和终点信息,后续的问题修复和优化建议均由 Agent 自动完成。Danny 的案例证明了即使没有编程背景,通过合理的提示词工程和迭代反馈,也能利用 AI 构建出高性能的 CLI 工具。

核心经验总结与最终结果确认

在讨论环节,现场收集到的主要建议高度一致:让 Agent 自己解决问题。主持人总结了基于指令和推荐的三大关键要素:提供充足的上下文(good context)、利用侧信道(side channel),以及明确指示使用 T-Max 技术。这些建议为未来的 AI 辅助开发提供了清晰的指导方向。

关于最终冠军归属,现场出现了短暂的确认环节。尽管有人询问是否仍由 Monk 保持领先,但主持人明确表示比赛在五分钟前已经正式结束(called it)。因此,之前的判定结果保持不变,Bonk 团队作为获胜者上台领奖并合影。这一过程强调了在技术竞赛中明确截止时间和结果确认的重要性,同时也展示了 AI 工具在实际应用中的巨大潜力。

“Takeaway for us based on our instructions, our recommendations. Give it good context, give it a side channel, and tell it to use T-Mox.”

结论

PayPal的实战证明,交互式CLI在AI Agent时代并未消亡,但必须从“人类友好”重构为“Agent友好”。核心策略是摒弃依赖标志位的静态设计,转而采用确定性CLI架构配合结构化输出(如JSON)及侧信道机制。通过Tmux维持会话状态,并注入上下文以分离人类与Agent的交互逻辑,可显著降低对高算力模型的依赖。

基准测试显示,中等模型在优化后的CLI中表现优异。Bonk凭借确定性求解器实现29毫秒极低延迟,Danny通过迭代优化达成高分,验证了该路径的可行性。然而,过度依赖暴力破解或确定性解析器可能违背设计初衷。最终结论是:CLI应作为确定性的执行工具,将非确定性推理留给Agent,以此在成本与性能间取得平衡。