CLI:终端只是一个宿主

从参数解析、运行模式、TUI streaming 到 project trust,理解 Pi 的 CLI-native 体验如何建立。

ANALYSIS SNAPSHOTPi v0.82.15bc1c2c0

CLI-native 不等于只有命令行参数

Pi 把终端当作持续工作的操作台:一边显示模型增量,一边接受快捷键、命令、打断与补充消息。

四种宿主模式

模式 输入/输出 适合
interactive TUI + 键盘 人与 Agent 协作
print 一次 prompt + 文本 shell 管道
json JSONL event stream 日志与轻量集成
rpc 双向 JSONL protocol IDE/应用嵌入

关键不是提供四套 Agent,而是四种 adapter 共享 AgentSession

packages/coding-agent/src/main.ts:100-120resolveAppMode()

Streaming UI

pi-tui 使用差分渲染:组件产生终端行,renderer 只更新变化区域。coding-agent 把 message_update、tool execution 和 session events 转换为消息块、spinner、status、overlay 等可见状态。

这种设计让 thinking delta、text delta 和 tool progress 能在同一交互中更新,而不必不断清屏打印完整历史。

输入也是运行时信号

  • 普通输入:成为下一条 user message。
  • 运行中输入:根据模式进入 steering 或 follow-up queue。
  • Esc / abort:触发 abort signal。
  • /command:由内建命令或 extension command 处理。
  • !command:直接执行 shell,并可决定是否把结果送入 context。

Project Trust 的位置

Trust 判断发生在加载项目 resources 之前。交互模式默认可以询问;print/json/rpc 没有 UI,不会弹窗,而是根据 global default 或 --approve / --no-approve 决定。

这说明 trust 是 startup loading policy,不是 tool permission prompt。

packages/coding-agent/docs/security.md:5-35project trust + no sandbox

Trade-off

CLI 带来低延迟、可组合管道与开发环境亲和力,但终端宽度、键盘差异、颜色能力和非交互模式都会扩大测试矩阵。Pi 通过共享 session/runtime、分离 mode adapter 来控制复杂度。