Repository navigation
Terminal Tool
英文名:
terminal-tool· 领域:工具 · 返回功能索引
Bash 工具一次只跑一条命令、等它结束就拿结果,遇到需要来回交互的程序就没办法了,比如 Python / Node REPL、数据库命令行、vim、要你按 y 确认的安装脚本。
Terminal 工具给 Claude 一个一直开着的终端(PTY):它可以先启动程序,再一句一句地输入、看屏幕、按特殊键、调整窗口大小,最后关掉。终端在后台运行,你在底部任务栏里随时能看到它的实时画面。
1. Claude 打开一个终端。 启动程序(这里是 python3 -q)和跑 Bash 命令一样要你批准:

2. 终端在后台运行。 回合结束时显示 1 Terminal still running,底部多出 1 Terminal · ↓ to manage:

3. Claude 往终端里输入。 每次按回车提交一行时,这一整行也会按 Bash 规则检查;不想每行都问,可选第 2 项,本项目内不再询问 Terminal:

4. Claude 查看屏幕。 capture-pane 读取当前画面,结果以方框显示在对话里,只显示有内容的行:

5. 你也可以看。 按 ↓ 选中任务栏,Enter 打开 Terminal details:上面是命令、参数、工作目录,下面是最近的屏幕内容(窗口矮时只保留最新的几行)。Esc 返回:

6. 用完退出。 Claude 发 Ctrl+D(或 kill-pane)后,进程结束,对话里出现一次 Terminal term-1 completed,最终输出会被保留:

| 操作 | 作用 |
|---|---|
new-session |
启动程序,可指定 command、args、cwd、env、cols、rows;不写 command 时用你的默认 shell |
send-keys |
输入文字(text),可加回车(enter),或发特殊键 ENTER TAB ESC BACKSPACE UP DOWN LEFT RIGHT CTRL_C CTRL_D CTRL_L
|
capture-pane |
读取屏幕;compact(默认,精简)、full(完整)、save_file(写到文件,只回预览) |
resize-pane |
改窗口大小,测试 TUI 布局时用 |
send-signal |
发 SIGINT / SIGTERM 给进程(想模拟键盘 Ctrl+C 请用 send-keys 的 CTRL_C) |
display-message / list-panes
|
查看某个终端 / 列出还开着的终端 |
kill-pane |
关闭终端,force: true 强制 |
-
new-session把command + args当成一条 Bash 命令检查,send-keys在回车提交时把这一整行当成命令检查,所以分几次输入也会命中你的Bash(...)allow / ask / deny 规则;还没按回车的部分只检查 deny 规则。 -
capture-pane、display-message、list-panes是只读的,直接放行;resize-pane、send-signal、kill-pane不走 Bash 规则。 - 选「don't ask again for Terminal commands」会在项目
.claude/settings.local.json里写入"Terminal"allow 规则。 - 开了 Bash 沙箱(
sandbox.enabled)时,new-session的命令在沙箱里启动,限制和 Bash 一样;命中excludedCommands或带dangerouslyDisableSandbox(且设置允许)时在沙箱外启动。Linux 上沙箱里的命令仍有自己的 PTY,Ctrl+C和resize-pane照常可用;终端关闭时清理沙箱。 - 不管是否在沙箱里,sandbox 的自动放行对 Terminal 都无效,仍按上面的规则确认;自动模式 下
Terminal的 allow 规则会被暂时搁置,交给分类器判断。
| 按键 | 位置 | 作用 |
|---|---|---|
↓ |
输入框为空时 | 进入底部任务栏 |
Enter |
任务栏 | 打开 Terminal details |
← / Esc / Enter
|
Terminal details | 返回 |
| 配置项 | 写法 | 说明 |
|---|---|---|
permissions.allow |
"Bash(python3:*)"、"Terminal"
|
按 Bash 规则放行特定程序,或整体放行 Terminal |
permissions.deny |
"Bash(rm:*)" 等 |
同样作用于终端里提交的每一行 |
后台轮询跟踪真实进程状态:自然退出时只通知一次,并按退出情况区分 completed、failed、killed,记录退出码和信号;退出前最后的输出也会被读完再保存。已结束的终端过一段时间自动回收。
画面来自实际运行(全屏渲染,110×44),模型回复由测试用假 API 生成(FAKE_DONE;提示词里的 DO<<…>> 是让假 API 调用工具的指令)。
本页由 docs/features/terminal-tool.md 自动同步,请在仓库中修改。
- Agent SDK 与 stream-json 控制协议
- Agent Teams
- Agent 与后台任务
- 自动模式(Auto mode)
- 背景会话、daemon 与 agents 视图
- 自定义 UI / Branding 与 Status line
- 构建、发布与终端验收工具
- Channels
- Codex Apps
- 自动压缩窗口
- 调试日志
- /diff 视图
- Direct Connect
- Effort 档位
- 自主 Goal
- Hooks 事件、匹配与输出校验
- 快捷键与 Vim 模式
- MCP 配置与认证
- 记忆:auto memory 与 SQLite FTS5 检索
- 模型自动发现与 Gateway
- Mods 远程客户端(stream-json)
- Mods / Function Hooks
- Monitor 工具
- OpenAI / Codex provider
- 独立会话通信
- 权限规则、权限模式与 Safe mode
- 插件与 Marketplace
- Prompt context 与 Tool search
- 请求韧性:重试、回退模型与默认模型
- Bash 沙箱
- 定时任务:Cron、/loop 与 ScheduleWakeup
- 会话命令
- Skills
- SSH Remote
- 遥测与反馈
- 终端程序状态(OSC 7501)
- Terminal 工具
- 用量、成本与状态
- VS Code 插件
- Dynamic Workflow