AI工具配置 55

无头模式:用脚本和 CI 驱动 Grok Build

不带参数执行 grok,Grok Build 打开的是全屏、能点鼠标的 TUI。脚本、CI、机器人里没人盯着屏幕点批准,这时改走无头模式:把提示词交给 -p,跑完就退出,stdout 留给你解析。

什么时候该用无头模式

无头适合三类活:脚本里调一次 agent、流水线里自动跑、接到别的应用当机器可读的一步。它和 TUI 是同一套能力,只是不占全屏、不等你交互。

最短的写法是 -p(全称 --single),发一条提示,处理完打印结果,进程结束:

bash
grok -p "Explain this codebase"
grok -p "Your prompt here"

机器上没有浏览器时,先准备 API Key,再跑无头。远程机器也可以走设备码登录:

bash
export XAI_API_KEY="xai-..."
grok -p "Explain this codebase"
bash
grok login --device-auth

不想让它切到 alternate screen、把终端刷成全屏,加上 --no-alt-screen,进程就在当前终端里内联跑:

bash
grok --no-alt-screen -p "Explain this codebase"

工作目录不对时,用 --cwd 指到仓库,不必先 cd

三种输出格式

--output-format 只认三个值。人在终端里看,用 plain,就是一段可读文本。脚本要一次性拿走结果,用 json,整轮结束后吐一个 JSON 对象。要边跑边处理事件,用 streaming-json,每行一个 JSON,事件到了就写一行。

bash
grok -p "List TODO comments" --output-format json
grok -p "Explain the architecture" --output-format streaming-json

json 适合接 jq、再决定下一步。对象里有 sessionId,可以抽出来续同一段对话,做成多步流水线:

bash
SID=$(grok -p "Review the changes in this PR" --output-format json | jq -r '.sessionId')
grok -p "Now check for security issues" --resume "$SID"

只要最终文本时,把 .text 取出来即可:

bash
grok -p "Review changes for bugs" --output-format json --always-approve | jq -r '.text'

streaming-json 是换行分隔的事件流,增量往外推。日志采集、进度展示、按事件类型分发,走这条,不要等整轮结束再拆那个大对象。

会话在无头里怎么续

默认每次 grok -p 都是新会话。要带着上文往下问,用这三个开关;记录落在 ~/.grok/sessions

开关 作用
-s, --session-id <UUID> 会话指定一个 UUID
-r, --resume [<ID>] 按 ID 恢复已有会话;省略 ID 则恢复最近一次
-c, --continue 继续当前目录里最近的那一次会话

-s 只用来开新会话。值必须是 UUID,不要拿它当「按名字恢复」。续旧的用 -r-c。脚本里优先把上一步 JSON 里的 sessionId 交给 --resume,比靠「最近一次」稳。

bash
grok -p "hello" --session-id "$(uuidgen | tr '[:upper:]' '[:lower:]')" --output-format json
grok -p "Continue where we left off" --resume "<id>"
grok -p "What were we doing?" -c

同一段历史要分岔、又不想改原来那条,续跑时加上 --fork-session。它会从旧会话分出一个新 ID,后续写在分出来的这条上。

bash
grok -p "Try a different approach" --resume "<id>" --fork-session

CI 里常用的安全与稳定性开关

流水线里没有人点「允许」。--always-approve(别名 --yolo)会自动放行工具调用,否则无头进程会卡在权限提示上。

bash
grok -p "Review changes for bugs" --always-approve --output-format json

全放开之前,先收一收范围。--allow--deny 写权限规则,--sandbox <PROFILE> 套一层沙箱。规则语法和档位名各自有专门说明,这里只要知道 CI 里这三项经常和 --always-approve 一起出现。

--max-turns <N> 限制这一次最多跑多少轮 agent。N 按任务自己定。

脚本和 CI 里应跳过后台更新检查。单次跑带 --no-auto-update;这台机器以后都不要检查,写进用户配置:

bash
grok --no-auto-update -p "Review the diff"
toml
[cli]
auto_update = false

auto_update 放在 ~/.grok/config.toml[cli] 段。无头和 grok agent stdio 都可以用 --no-auto-update

选模型和临时规则

换模型用 -m / --model。推理强度用 --effort <LEVEL>,档位以当前模型菜单里实际列出的为准。

bash
grok -p "Hello" -m my-model

这一次只要追加几条约束,用 --rules,文本会接到系统提示后面。要整段换掉系统提示,用 --system-prompt-override,原来的默认提示不会再拼上去。

bash
grok -p "Refactor this module" --rules "Always use TypeScript. Prefer functional components."

自定义模型先写进用户级配置,再在无头里用 -m 点名。路径是 ~/.grok/config.toml(Windows 为 %USERPROFILE%\.grok\config.toml):

toml
[model.my-model]
model = "model-id"
base_url = "https://api.example.com/v1"
name = "Display Name"
env_key = "API_KEY"

[models]
default = "my-model"

改完先在仓库里跑 grok inspect,看当前目录到底吃进了哪些配置来源,再:

bash
grok -p "Hello" -m my-model

模型名和配置节里的 my-model 对上即可。TUI 里换模型仍是 /model <name>,和无头的 -m 是同一套目录。

感谢阅读,如果这篇文章对你有帮助,欢迎继续浏览同栏目内容。

返回 AI工具配置