Verboo Code:如何用 /statusline 配置状态栏(模型、目录、分支和上下文)
返回博客
文章verboo codetutorialagente de programaçãodev toolsprodutividade

Verboo Code:如何用 /statusline 配置状态栏(模型、目录、分支和上下文)

Mafra2026年10月28日阅读约 6 分钟

你用 /model 切换了模型,换了分支,又打开了另一个目录,半小时后已经记不清自己在用哪个模型、上下文用掉了多少。状态栏就是为此准备的:Verboo Code 输入框下方固定显示的一行,内容由你决定,每次代理回复后刷新。/statusline 命令可以帮你生成这一行。

Verboo Code 的状态栏是什么?

它是输入框下方的一行文字,由你自己的 shell 命令生成。Verboo Code 运行这个命令,通过标准输入传给它一个包含会话状态的 JSON,然后显示命令打印出的内容。

在源码中,只有 settings 里存在 statusLine 键时才会显示。没有这个键,就没有状态栏。文字以暗色显示,并支持 ANSI 颜色码,所以可以用 printf 上色。

Verboo Code 状态栏流程图:/statusline 生成命令,statusLine 键以 type command 写入 ~/.verboo/settings.json,脚本从 stdin 读取 JSON 并输出一行,每次回复后刷新。如果不显示,检查脚本是否以 exit 0 退出、目录是否已被信任、disableAllHooks 是否已关闭
从 /statusline 到屏幕上的状态栏,以及不显示时的 3 项检查。已于 2026-10-28 在 v0.15.38 源码中核实。

如何用 /statusline 配置状态栏?

在会话中输入 /statusline。不带参数时,它会尝试复制你终端的提示符。带参数时,它按你的要求来做。

/statusline

不带参数时,默认请求是 Configure my statusLine from my shell PS1 configuration。一个名为 statusline-setup 的子代理(只有 Read 和 Edit 两个工具)按以下顺序查找 PS1 变量:~/.zshrc、~/.bashrc、~/.bash_profile、~/.profile。它会把 PS1 转义符转换成命令(\u 变成 $(whoami),\w 变成 $(pwd),\W 变成 $(basename "$(pwd)")),并去掉末尾的 $ 或 >。

如果你没有自定义 PS1,或者想要别的内容,直接描述:

/statusline 显示模型、目录名、git 分支和已用上下文百分比

子代理会把结果写入你的 settings.json,并保留文件其余内容。如果命令较长,它会另存一个脚本,并让 settings 指向它。如果 CLI 请求编辑文件的权限,批准即可。之后想调整,再次运行 /statusline 并写上新要求。

注意:/statusline 在非交互模式下不可用。在脚本或 CI 中,请按下一节手动配置。

如何手动配置状态栏?

创建脚本,赋予执行权限,然后让 statusLine 键指向它。一共三步。

1. 脚本。保存为 ~/.verboo/statusline.sh,用 jq 读取 JSON:

#!/usr/bin/env bash
input=$(cat)
model=$(echo "$input" | jq -r '.model.display_name')
dir=$(echo "$input" | jq -r '.workspace.current_dir')
used=$(echo "$input" | jq -r '.context_window.used_percentage // empty')
branch=$(git -C "$dir" --no-optional-locks branch --show-current 2>/dev/null)

out="$model · $(basename "$dir")"
[ -n "$branch" ] && out="$out · $branch"
[ -n "$used" ] && out="$out · ctx $(printf '%.0f' "$used")%"
printf '%s\n' "$out"

git 加上 --no-optional-locks 是源码本身的建议:状态栏每次回复后都会运行,不加这个参数,git 可能会和代理争抢仓库锁。

2. 执行权限:

chmod +x ~/.verboo/statusline.sh

3. settings。写入 ~/.verboo/settings.json(如果你设置了 VERBOO_CONFIG_DIR,则写入该目录):

{
  "statusLine": {
    "type": "command",
    "command": "~/.verboo/statusline.sh",
    "padding": 0
  }
}

type 只接受 "command"。padding 可选,用于设置这一行的左右间距。只想在某个项目生效,就在仓库根目录使用 .verboo/settings.json。无需重启:settings 中的命令一变,状态栏会立即重新计算。

使用前如何测试脚本?

通过标准输入传一个假的 JSON。能打印出那一行,就说明可以用了。

echo '{"model":{"display_name":"deepseek-v4-pro"},"workspace":{"current_dir":"'"$PWD"'"},"context_window":{"used_percentage":42.7}}' | ~/.verboo/statusline.sh

在 main 分支的 git 仓库中,输出如下:

deepseek-v4-pro · my-project · main · ctx 43%

会话第一次回复之前,used_percentage 为 null。jq 中的 // empty 和 [ -n "$used" ] 判断会让上下文部分直接不显示,而不是显示 ctx null%。

状态栏的 JSON 包含哪些字段?

主要字段如下,来自 src/components/StatusLine.tsx 中的构造逻辑:

字段含义何时出现
model.display_name 和 model.id当前回答的模型始终。用 /model 切换时变化
workspace.current_dir当前目录始终
workspace.project_dir会话启动时的目录始终
workspace.added_dirs用 /add-dir 添加的目录始终(列表,可能为空)
context_window.used_percentage已用上下文百分比,0 到 100第一次回复前为 null
context_window.remaining_percentage剩余上下文百分比第一次回复前为 null
context_window.context_window_size当前模型的上下文窗口大小(token)始终
session_name用 /rename 设置的会话名仅当会话有名字时
output_style.name当前输出风格始终(未设置时为 default)
vim.modeINSERT 或 NORMAL仅在开启 vim 模式时
worktree.name 和 worktree.branch会话的 worktree 和分支仅在 --worktree 会话中
versionVerboo Code 版本始终

未发送的可选字段在 JSON 中直接缺失,所以在 jq 里始终加上 // empty,避免屏幕上出现 null 字样。

状态栏什么时候刷新?

代理有新回复时,以及你切换权限模式、vim 模式或模型时。它不是时钟:这些都不变,命令就不会再次运行。

源码在最后一次变化后等待 300 毫秒再运行命令,并且新的运行开始时会取消正在进行的那次。实际效果:慢脚本不会卡住界面,但显示时间的状态栏(date +%H:%M)只显示上次刷新的时间,而不是当前时间。

状态栏为什么不显示?

几乎总是以下六种原因之一。脚本出错会被静默忽略,所以状态栏只是消失,没有任何提示。

现象源码中的原因怎么办
提示 statusline skipped · restart to fix目录尚未被标记为可信。在此之前不会运行任何用户命令接受目录信任对话框,然后重启会话
状态栏为空,脚本看起来没问题脚本以非 0 退出码结束。只有 exit 0 的输出才会显示用假 JSON 测试,并检查 echo $?
状态栏为空,exit 0stdout 没有输出。空行会被丢弃用 printf 或 echo 输出到 stdout,而不是 stderr
测试时出现 jq: command not found没有安装 jq,脚本失败brew install jq 或 sudo apt install jq
测试时出现 Permission denied脚本没有执行权限chmod +x ~/.verboo/statusline.sh
所有目录都不显示settings 中的 "disableAllHooks": true 会同时关闭 hooks 和状态栏删除该键或改为 false

命令在 bash 中运行。在 Windows 上它通过 Git Bash 执行,所以在那里也请用 bash 语法写脚本。

可以上色或显示多行吗?

可以。只要用 printf,ANSI 颜色码就能生效:

printf '\033[35m%s\033[0m · %s\n' "$model" "$(basename "$dir")"

想显示多行,就打印多行。Verboo Code 会保留所有行,只丢弃空行。注意状态栏以暗色显示,太深的颜色不容易看清。

上下文百分比显示在屏幕上,你就知道该在会话变慢之前运行 /compact。在 Verboo Code 上 token 不限量,所以这是你唯一需要关注的数字:在 verboo.ai 创建账号,打开 CLI,运行 /statusline。

喜欢这篇文章吗?
把知识分享给你的朋友。
// 继续阅读

相关文章