For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt, and this page is available as Markdown at /guide/start/configuration/config.md.
  • 简体中文
  • config.toml

    控制 Hunea 本身的行为。一般不需要做太多配置,默认值已经适合绝大部分使用情况。默认值(给出的就是默认值)和可改示例如下:

    # 当两者同时存在时,项目级配置会覆盖用户级配置。
    # 修改配置后需要重启 hunea 才会生效。
    #
    # 补充:如果工作区 `.hunea/` 下存在 `portable.marker`,会进入便携模式,
    # 只读该工作区的配置/会话,不再叠加全局 `~/.config/hunea/`。
    # 首次启动若全局配置目录不可用,precheck 也可能引导你创建这个标记。
    
    [tui]
    # `motion` 控制 TUI 的装饰性动画。
    # - "full":启用完整动画,是默认值。
    # - "reduced":关闭 entrance、toast transition、stream activity tick 与 tool marker blink;
    #   toast 的信息展示时限仍然保留。
    motion = "full"
    
    # `scroll_animation` 控制滚轮平滑滚动的手感档位(分帧推进 + 快速连滚加速度)。
    # - "off":关闭平滑滚动,滚轮恢复固定 3 行/格的瞬时跳变,无加速度。
    # - "snappy":接近瞬时,仅柔化大幅滚动。
    # - "fast":快速收敛,少量动画。
    # - "smooth":均衡档位,是默认值。
    # - "gentle":更长的滑动。
    # - "glide":最长的滑动。
    # 注意:`motion = "reduced"` 时无论此项取值,滚动均为瞬时。
    scroll_animation = "smooth"
    
    # `diff_display` 控制工具活动 diff 的着色范围,以及主界面是否渲染 hunk 行。
    # - "full_line":行前景 + 整行背景铺满 widget 行宽 + 行内强调,是默认值。
    # - "content":只给 gutter 与有字格子上背景,行尾空白不染色;行内强调保留。
    # - "text":不用任何背景或反色,Insert/Delete 仍用行级前景色,强调段仅 Bold。
    # - "summary":主界面只保留 header 的 +N/−M 计数,不渲染 hunk;`ctrl+t` overlay 仍按 full_line 看完整 diff。
    diff_display = "full_line"
    
    # `command_menu_mode` 控制命令菜单(斜杠命令)的触发方式。
    # - "slash":仅在输入框以 `/` 开头时内联触发斜杠命令菜单,是默认值。
    # - "floating":`/` 不再触发菜单(视为普通文本),改由 `Ctrl+O` 打开悬浮命令菜单。
    # - "both":两种方式同时可用,`/` 内联菜单与 `Ctrl+O` 悬浮菜单互不干扰。
    command_menu_mode = "slash"
    
    # `command_menu_rows` 控制 `Ctrl+O` 悬浮命令菜单一次显示的命令行数,
    # 超出的命令可上下滚动,浮窗右侧显示滚动条。
    # 取值范围 7..21,默认 7 行。
    command_menu_rows = 7
    
    # 可选值:
    # `user_input_style` 控制“输入中的用户内容”和“发送后的用户消息”的展示风格。
    # - "cx":当前 framed 样式。composer 与用户消息会在足够高的窗口里显示 surface frame。
    # - "cc":整行着色的紧凑样式。关闭上下 surface frame,但保留整行用户消息背景。
    # - "ms":最原始的旧主题。用户消息按内容范围着色,不做整行补齐,也不显示 surface frame。
    user_input_style = "cx"
    
    # `status_line` 控制输入框下方状态行中要显示的信息。
    # 顺序会直接影响从左到右的显示顺序。
    # 当前支持的值:
    # - "git-branch":当前工作目录所在 Git 仓库的分支名
    # - "current-dir":当前工作目录的短路径,home 前缀会缩写为 ~
    # - "current-model":当前选择的模型,格式为 provider/model
    # - "throughput":最近一次成功请求的 LLM 每秒输出 token 数,例如 139tps
    # - "latency":最近一次成功请求的首 token 延迟,例如 0.53s
    # - "context-used":最近一次成功请求后的上下文已用百分比,例如 Context 42% used
    # - "context-remaining":最近一次成功请求后的上下文剩余百分比,例如 Context 58% left
    #
    # 未配置时不显示状态行;如果配置了但配置项都拿不到可以显示的内容时,
    # 状态行也会保持隐藏。
    # status_line = ["git-branch"]
    
    # `status_line_2` 使用与 `status_line` 相同的数组格式,用于配置第二行状态行。
    # 如果第二行与第一行配置了相同项目,第一行优先显示,第二行会自动跳过重复项。
    # 未配置或显式写成 [] 时,不显示第二行。
    # status_line_2 = ["current-dir"]
    
    # `external_editor` 控制 Ctrl+G 打开的外部编辑器命令。
    # 使用 TOML 数组原生表达 argv,例如:
    # - ["code", "--wait"]
    # - ["cursor", "--wait"]
    # - ["zed", "--wait"]
    # - ["subl", "-w"]
    # - ["open", "-W", "-n", "-t"]
    # - ["nvim"]
    #
    # 对于 VS Code、Cursor、Zed、Sublime Text 这类 GUI 编辑器,
    # 需要显式带上“等待关闭后再返回”的参数;否则 hunea 会在编辑器刚启动时就回到 TUI。
    # macOS 的 `open` 也需要同时带上 `-W` 与 `-n`。
    #
    # 未配置或显式写成 [] 时,会退回到自动探测模式:
    # 依次尝试 VISUAL、EDITOR,以及平台常见编辑器命令。
    # external_editor = ["code", "--wait"]
    
    # `show_external_editor_helper` 控制多行草稿时是否显示
    # “ctrl+g to edit in …” 这条短暂提示。
    # 默认开启;如果已经熟悉 Ctrl+G 工作流,可以关闭以减少干扰。
    show_external_editor_helper = true
    
    # `copy_on_mouse_selection_release` 控制鼠标左键拖拽选区完成后,
    # 是否在释放按键时自动复制选中的内容。
    # 默认关闭;开启后会更接近一些终端里的“选中即复制”手感。
    copy_on_mouse_selection_release = false
    
    # `swap_enter_and_send` 控制是否交换“换行”和“发送消息”的按键语义。
    # 默认关闭;开启后:
    # - Enter 改为插入换行
    # - Ctrl+J 与 Shift+Enter 改为发送消息
    swap_enter_and_send = false
    
    # `ctrl_c_clears_input` 控制在输入框已有草稿时,
    # 单击 Ctrl+C 是否直接清空草稿。
    # 默认开启;关闭后,Ctrl+C 会恢复为退出确认语义。
    ctrl_c_clears_input = true
    
    # `composer_undo_limit` 控制输入框 Ctrl+Z 可撤回的草稿快照数量。
    # 仅保存在当前 TUI 进程内,不会写入会话或配置;Ctrl+Y 的 kill buffer 仍只保存最近一次 kill。
    # 取值范围 1..200,默认 50。
    composer_undo_limit = 50
    
    # `message_history_limit` 控制全局 message history 最大保留条数(跨项目)。
    # 具体是影响 /resend 界面的容量上限
    # 取值范围 100..1000,默认 100。
    message_history_limit = 100
    
    # `esc_interrupt_presses` 控制当前对话 turn 运行中,
    # 需要连续按多少次 Esc 才会中断当前 native 请求。
    # 可选值为 1、2、3;默认 2。
    esc_interrupt_presses = 2
    
    # `show_esc_interrupt_hint` 控制等待行是否显示 `esc 2x to interrupt`
    # 这类打断提示。默认开启。
    show_esc_interrupt_hint = true
    
    # `file_picker_popup_height` 控制 @ 聚合搜索浮窗总高度(含空行和 footer)。
    # 文件与 skill 共用该浮窗;固定使用完整终端宽度,垂直方向以 @ 位置为锚点,空间不足时自动翻转。
    # 取值范围 3..21,默认高度 9 行。
    file_picker_popup_height = 9
    
    # `branch_picker_list_rows` 控制对话树分支选择浮窗的可见分支行数。
    # 取值范围 3..14,默认 7 行。
    branch_picker_list_rows = 7
    
    # `print_transcript_on_exit` 控制退出 TUI 后,是否把当前对话内容
    # 回放打印到终端 scrollback。
    # 这个功能许久没有维护,建议保持默认也就是关闭
    print_transcript_on_exit = false
    
    # `show_reasoning_content` 控制思考模型返回 reasoning / thinking 内容时,
    # 是否在助手消息正文前显示这段内容。
    # 默认关闭;关闭时仍会把 reasoning 输出计入等待行 tokens,并在 reasoning 流式输出期间
    # 显示临时 `thinking` 状态。
    # 意思是,默认是不显示思维链内容,并且 ctrl+t 界面也不会看到思考内容
    # 但是 /tree 界面还是会保留显示思维链内容
    show_reasoning_content = false
    
    # `reasoning_content_display` 控制 show_reasoning_content = true 时,
    # 思维链内容进入 transcript 后的默认展示状态。
    # 未配置时,show_reasoning_content = true 会默认使用 `expanded`。
    # `expanded-simplified` 是 `expanded` 的长内容 compact 变体:短内容完整显示;
    # 长内容保留前后各 4 行,中间以 `… +N lines (ctrl + t to view transcript)` 提示,
    # Ctrl+T 进入 transcript overlay 后显示完整内容。
    # 可选值:`collapsed`、`expanded`、`expanded-simplified`、`snippet`。
    reasoning_content_display = "collapsed"
    
    # 控制空输入框、且当前没有流式输出时,连按两次 Esc 使用哪一种回溯,
    # 以及斜杠菜单中显示 /tree 还是 /sends-back(二者不会同时出现)。
    #
    # 默认 coarse:
    # - 双击 Esc → 按某轮用户消息编辑/重发(截断该条之后的内容,并将正文回填到输入框)
    # - 菜单显示 /tree
    # 配置为 entry:
    # - 双击 Esc → 打开 /tree(会话节点级精确回溯 / 创建分支)
    # - 菜单显示 /sends-back(保留「编辑用户消息」入口)
    esc_rewind_mode = "coarse"
    
    # `keyboard_enhancement` 控制是否启用 kitty keyboard protocol 增强键位。
    # - "auto":按环境自动判断(例如 WSL 内的 VSCode 终端会禁用),是默认值。
    # - "on":强制开启。
    # - "off":强制关闭。
    # 多数情况下保持 auto 即可;如果组合键或修饰键行为异常,可以显式关闭后再试。
    keyboard_enhancement = "auto"
    
    [runtime]
    # `request_retry_attempts` 控制 runtime 请求失败后最多重试几次。
    # 当前 native chat 会使用该策略。
    # 可选值为 1..10;默认 3。
    request_retry_attempts = 3
    
    # `request_retry_delays` 控制每次重试前等待的秒数。
    # 每个值范围为 1..1800。
    # 例如 [1, 3, 5] 表示第 1 次重试前等待 1s,第 2 次等待 3s,
    # 第 3 次等待 5s。列表短于 request_retry_attempts 时,会复用最后一个值补齐。
    request_retry_delays = [1, 2, 3]
    
    # `request_timeout_seconds` 控制**单次 provider HTTP 请求**的 idle timeout(秒):
    # 用于限制建连等待,以及流式响应中相邻数据块之间的空闲间隔;收到数据后会重置计时。
    # 它**不限制**整轮 turn 的总时长。只要响应过程中持续有数据到达,就不会仅因总耗时超过 120s 而中断。
    # 超时后会进入上面的重试流程;每次重试都会重新获得完整的 idle timeout。
    # 可选值为 1..7200;默认 120。
    request_timeout_seconds = 120
    
    # `tool_max_turns` 控制 agent multi-turn 工具调用轮次上限。
    # 默认不限制;设置为正整数后,超过该轮次会终止本次请求。
    # tool_max_turns = 32
    
    # `allow_managed_rg` 记录是否允许 hunea 在系统 PATH 和 bundled binary
    # 都不可用时,下载、校验并安装 pin 版本的 `rg`。
    # 缺省表示实际需要下载时询问;true 允许下载/重建,false 禁用 managed ripgrep。
    # false 时仍优先使用 PATH/bundled ripgrep;两者都不可用时使用 Rust backend。
    # allow_managed_rg = true
    
    [debug]
    # `enabled` 控制是否显示仅用于本地调试 TUI 效果的斜杠命令。
    # 默认关闭;开启后会显示 `/tool-debug` 等临时调试入口。
    # 这个其实是一个被我忽略的功能,后续会考虑移除或者将其完善化
    enabled = false

    快速开始里也写了我个人自用的一份精简推荐配置,见快速开始

    相关页面: