Bi

终端

内置持久 shell 面板与智能体 exec 工具的边界。

Markdown 原文

Bi 里有两种「跑命令」的入口,容易混淆,先把它们分清楚:

入口 谁在用 输出去哪
终端面板 你(人) 屏幕上的终端窗口,不进入模型上下文
exec 工具 智能体(模型) 作为工具结果回到模型上下文

终端面板

界面里的「终端」是一个有状态的 shell 进程,通过 WebSocket 与前端连接,登录后可用。它专供你手动操作:

  • 每个终端会话一条独立连接,后端为它起一个持久 shell 进程
  • 工作目录取自当前会话的 project_path;未设置会话时回退到全局工作区
  • 逐行流式输出;非 UTF-8 的 GBK 输出会被转成 UTF-8,中文不乱码
  • 支持发送输入、调整行列(仅记录,用于前端排版)与发送中断信号
  • 未登录时不启用 WebSocket 终端,退回 workspace exec 的伪终端路径

它的输出只显示给你,不会自动喂给模型。

exec 工具

智能体执行的命令走 exec 工具(tools/exec.go)。它与终端面板完全独立:

  • 每次调用起一个一次性进程,在工作区根目录下执行
  • 返回 exit_code、output、error,作为工具结果进入模型上下文
  • 默认超时 5 分钟,单流输出上限 64KB,超限丢弃但记录截断
  • 受工具权限系统管控:未配置放行时每次都要你确认
  • 命令会经过拦截规则过滤

所以「命令输出进入上下文」这句只对 exec 工具成立。想要模型看到一条命令的输出,应该让它用 exec 工具跑,而不是你在终端面板里跑完再把结果贴回去。

网络命令的注意点

exec 与 websearch 类插件可以访问网络(curl、pip install、git clone、ssh 等)。这是功能的一部分,不是缺陷,但意味着:

  • 用本地模型也不等于「绝不联网」——命令本身可以发起网络请求
  • 权限确认是唯一的人为闸门,请留意要批准的 exec 调用
  • network_log_enabled 开启时,命令全文会落盘到 .bi/logs/network/(默认关闭)