交互会话
stdout 是 TTY 时,crystal 打开备用屏幕:记录、可选覆盖层、可选固定待办、可选进度行、状态栏和多行输入框。重定向的输出保持顺序。
OpenAI Chat Completions、DeepSeek、Responses 或 Anthropic 模型设置了 imageInput: true 时,运行 /attach <workspace-image-path>,或按 Ctrl+V。audioInput 和 videoInput 不附加音频或视频。
| 平台 | 剪贴板读取器 | 格式 |
|---|---|---|
| Windows | PowerShell | 原始 PNG,然后是位图 |
| macOS | osascript |
PNG、JPEG、GIF |
| Linux | wl-paste 或 xclip |
声明的 PNG、JPEG、GIF 和 WebP |
读取器缺失与剪贴板里没有图像是两条不同的报告。同一批按键里,Ctrl+V 在随后的 Enter 之前处理。输入框和记录显示 [Image #N]。粘贴的标记颜色不同,并且是一个编辑单元。键入相同文本不会附加图像。原始字节不进入渲染文本。每张图像最多 20 MiB。接受 PNG、JPEG、GIF 和 WebP。
多模态插件工具可以返回 Crystal ImageContent,它会在下一轮发给模型。设置了 imageModel 时,Plan 和 Work 包含 describe_image,请该视觉模型描述文件。问题来自 image.system.md 和 image.user.md。接受图像的模型还会得到 view_image,它返回文件本身。截图、设备控制和坐标协议属于外部插件,不属于 Crystal Code。
状态栏显示审批、模型支持时的思考、已设置时的 Tier <token> 和 Speed <token>、所选预算(Context 272K)、模型、工作区、上下文百分比(CTX)、IN / OUT、有空间时的 Title Case 合计、工具数和已用时间。命名标签是 Title Case。短缩写是大写。Plan 或 Work 在输入框提示上,不在状态栏重复。
回合进行时,进度行在状态栏上方:Awaiting Approval · 5s、Running Command · 2m18s、Thinking · 1m16s · ~1.2k Tokens、Retrying In 8s (Attempt 1)、Compacting。前缀是盲文旋转指示,与状态栏圆点分开。输出是 UTF-8,Windows 不会把这些帧换成 ?。~N Tokens 估计只在 estimatedTokens 打开时出现。有后续请求等待时显示排队计数。
会话有待办时,固定的 Todos 栏在进度行上方,显示前四项。/todos 打印完整列表。会话启动和 /cd 在操作者工具集加载时于该行显示 Loading Tools。
助手文本在流式输出时和提交后都渲染为 markdown。用户、思考、工具、结果和压缩摘要是圆角面板。界面里的工具名是 Title Case。edit 和 write 的审批卡片显示短的 + / - 预览。
成功面板用三个开关。verboseResults 是父开关。verboseTools 和 verboseCommands 只在父开关打开时生效。它们都不隐藏失败、审批卡片、思考面板、询问覆盖层或 Tool 卡片。Tool 卡片是调用本身(Read、Grep、Edit、Bash、Apply Patch),画在结果之前。
| 命令 | 效果 |
|---|---|
/verbose calls |
显示或隐藏 Tool 卡片。除非 verboseCalls 为 false,否则打开。隐藏调用仍可以留下 Edited … 行。crystal run 不读这个设置 |
/verbose results |
打开或关闭父开关。省略 on 和 off 时切换。除非 verboseResults 为 false,否则打开 |
/verbose tools、Ctrl+O |
在空输入框上切换工具细节 |
/verbose commands、Ctrl+G |
切换命令细节 |
/verbose |
打印这些开关 |
verboseResults 关闭时,每个成功结果都被省略:read、search、skill、edit、write 和 bash 工具。其他开关仍保存,在 /verbose results on 之前不再绘制结果。此时 Ctrl+G 不展开输出,因为面板是被省略,不是折叠。本会话已有的卡片跟随开关。
父开关打开时:
verboseTools |
verboseCommands |
成功结果 |
|---|---|---|
| 开 | 开 | 全文 |
| 关 | 开 | 省略 read、search 和 skill。Edit、write 和命令输出保留 |
| 开 | 关 | 命令输出折叠为隐藏行提示和最后一行。其他结果保留 |
| 关 | 关 | 上面两个关闭行同时生效 |
crystal run 不读 verboseResults。它的纯文本日志仍会自行缩短长命令输出。
| 键 | 动作 |
|---|---|
| Enter | 空闲时提交。回合进行时把后续请求入队 |
| 已有后续请求时的空 Enter | 中断回合,或在压缩仍在进行时中断压缩,并立即发送队列 |
| 队列为空时的空 Enter | 什么都不做 |
Ctrl+J,或 \ 然后 Enter |
插入换行 |
| Backspace | 删除一个字符 |
| Ctrl+W、Alt/Option+Backspace | 删除一个词。Windows 上是 Ctrl+Backspace |
| Tab | 切换 Plan/Work,或补全 / 命令及其参数 |
| Shift+Tab | 切换 Plan/Work |
空输入框上的 ? |
显示快捷键和命令 |
| Up / Down | 在输入框中移动。在第一行或最后一行浏览提示历史。选择器打开时移动选择。以 / 开头的已召回提示在你编辑它之前留在历史中 |
| Escape | 清空输入框 |
| 滚轮、PageUp / PageDown、Ctrl+Up/Down | 滚动记录 |
| 模型显示文本、推理、工具调用或重试之前的 Ctrl+C,输入框和队列都为空 | 取消回合,并把该消息放回 |
| 回合中更晚的 Ctrl+C | 取消。消息保留 |
| 空闲时的 Ctrl+C | 清空输入框 |
| 空输入框上按两次 Ctrl+C | 退出 |
crystal run 不把消息放回去。会话不再持有的受信任图像标记留在记录中,该 Ctrl+C 只取消。排队的后续请求也会保留消息。
备用屏幕启用括号粘贴和鼠标报告(1000,SGR 1006),关闭备用滚动,并在会话打开期间重复这些模式。这段时间 Windows 的快速编辑关闭,滚轮到达记录。会话关闭时恢复先前的控制台模式。滚轮从不变成 Up/Down。鼠标报告打开时,按住 Shift 选择文本(某些 macOS 终端是 Option 或 Fn)。你向回滚动时到达的行不移动画面。粘贴文本丢掉控制字符、不可见字符和双向格式字符。调整大小时画面重绘。不是粘贴包裹的转义序列不当作粘贴。审批和问题覆盖层使用同一输入循环,因此滚动和调整大小仍然有效。
问题提示可以有一个或多个带标签的问题、带描述的选项、单选或多选,以及自定义答案。自定义输入默认打开。单个单选答案立即提交。多个问题或多选使用 Confirm 标签。
| 键 | 动作 |
|---|---|
Up/Down、J/K |
移动 |
| Enter | 选择。编辑自定义答案时保存它 |
| Space | 切换一个多选项 |
| Left/Right、Tab | 在问题之间移动 |
| Escape | 驳回。编辑自定义答案时回到选项,不改变答案 |
编辑自定义答案时,文本和光标在面板内。面板高于屏幕时,滚轮、PageUp、PageDown 和 Ctrl+Up/Down 滚动其中的行。标题和边框保持。移动高亮或光标会把该行带回视野。手动滚动保持到高亮或光标移动。滚过任一端,或面板已经放得下时用这些键,会滚动记录。
后续请求队列
Section titled “后续请求队列”回合进行时输入框保持打开。带文本的 Enter 把后续请求入队(FIFO)。排队项留在 Queued 面板中。当前工具批次结束,或回合结束时发送队列。已有后续请求时的空 Enter 中断回合,或在压缩仍在进行时中断压缩。中断不丢弃已排队的文本。
/quit、/clear、/resume 和 /fork 在运行前停止忙碌的回合。/clear、/resume 和 /fork 留在队列中,按键入顺序运行。这三者各自丢掉仍在等待的后续请求文本。压缩期间它们被拒绝,消息与回合进行时的 /cd 同类。其他改变会话、工作区或模型的命令因同一原因被拒绝。/status、/help、/todos 以及其他只报告状态或调整显示的命令立即运行。/quit 仍然退出。
- 快照记录和当前工具定义。
- 流式发送一次聊天请求。增量到达时渲染。
- 模型没有正常结束时,在工具之前停止。截断输出和内容过滤保留文本并结束回合。其他异常结束原因使回合失败。这些停止不运行工具,也不压缩。
- 候选含有工具调用时,整批通过执行器运行。先审批。
- 追加精确的工具结果。
- 重复,直到没有工具调用、某个上限停止回合,或你取消。估计或上一轮超预算时,宿主可以在模型轮次前压缩。压缩无法再缩减时,回合停止。
- 完成的回合之后再考虑一次压缩。
/compact立即总结较早的上下文并打印摘要。