---
title: "终端"
description: "内置持久 shell 面板与智能体 exec 工具的边界。"
---

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，超限丢弃但记录截断
- 受工具权限系统管控：未配置放行时每次都要你确认
- 命令会经过[拦截规则](/zh/docs/advanced/intercept-rules)过滤

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

## 网络命令的注意点

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

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