Grok Build 使用文档
Grok Build 使用文档
依据 xAI 官方文档整理:https://docs.x.ai/build/overview
本地用户指南:~/.grok/docs/user-guide/(随 CLI 一并安装)
产品页:https://x.ai/build · 更新日志:https://x.ai/build/changelog
整理日期:2026-08-18 from grok
目录
- 它是什么
- 安装与更新
- 登录与认证
- 第一次使用
- 日常交互
- 常用启动方式
- 快捷键
- 斜杠命令
- 配置
- 项目规则 AGENTS.md
- 会话
- 权限与安全
- 沙箱
- Plan 模式
- 子 Agent 与 Persona
- Agent Dashboard
- 后台任务与定时
- 无头模式(脚本 / CI)
- ACP 与 IDE 集成
- MCP 服务器
- Skills
- Plugins
- Hooks
- 跨会话记忆
- 自定义模型
- 主题与外观
- 终端与排障
- 文件位置一览
- 推荐用法
1. 它是什么
Grok Build 是 xAI 的终端编码 Agent。当前默认模型为 Grok 4.6。
三种用法:
| 方式 | 命令 | 场景 |
|---|---|---|
| 全屏 TUI | grok | 日常写代码、改仓库、审 PR |
| 无头模式 | grok -p "..." | 脚本、CI、批处理 |
| ACP Agent | grok agent stdio / serve | 接到 IDE、SDK、自定义客户端 |
TUI 会读代码、跑命令、改文件、搜网页、管任务。也可以挂 MCP、Skill、Plugin、Hook 做扩展。
订阅门槛(官方发布说明):SuperGrok 与 X Premium Plus。
2. 安装与更新
Windows(PowerShell,推荐)
irm https://x.ai/cli/install.ps1 | iex
指定版本:
$env:GROK_VERSION="0.1.42"; irm https://x.ai/cli/install.ps1 | iex
安装器会把 %USERPROFILE%\.grok\bin 加进用户 PATH。
macOS / Linux / Git Bash
curl -fsSL https://x.ai/cli/install.sh | bash
指定版本:
curl -fsSL https://x.ai/cli/install.sh | bash -s 0.1.42
WSL 会装 Linux 二进制。
校验与更新
grok --version
grok update
关掉自动更新:启动加 --no-auto-update,或环境变量 GROK_DISABLE_AUTOUPDATER=1,或在 config.toml 写 [cli] auto_update = false。
3. 登录与认证
浏览器登录(默认)
grok
首次启动会打开浏览器,走 grok.com / auth.x.ai OAuth。凭证写在 ~/.grok/auth.json(Unix 权限 0600),之后自动刷新。没有服务端过期时间时,按 30 天算。
grok login # 重新登录 / 换账号
grok login --oauth # 同上,默认就是这条
grok login --device-auth # 无浏览器环境,打印 URL + 设备码
grok logout # 清掉本地凭证
~/.grok/auth.json 和 MCP 的 ~/.grok/mcp_credentials.json 等同于密钥:不要拷进共享盘、工单、聊天。主机建议开全盘加密(BitLocker / FileVault / LUKS)。
API Key(CI / 无浏览器)
从 console.x.ai 拿 Key:
export XAI_API_KEY="xai-..."
grok
Windows PowerShell:
$env:XAI_API_KEY="xai-..."
grok
已有交互登录时,会话 token 优先于 API Key。要用 Key,先 grok logout 或删掉 auth.json。
凭证优先级(每次请求)
config.toml里某个[model.<name>]的api_key/env_keyauth.json里的会话 token(浏览器 / OIDC / 外部认证)- 环境变量
XAI_API_KEY
登录方式优先级:外部认证脚本 → 企业 OIDC → 默认 xAI OAuth。
企业 OIDC
# ~/.grok/config.toml
[grok_com_config.oidc]
issuer = "https://acme.okta.com"
client_id = "0oa1b2c3d4e5f6g7h8i9"
或环境变量 GROK_OIDC_ISSUER / GROK_OIDC_CLIENT_ID。Redirect URI:http://127.0.0.1/callback(PKCE,无 client secret)。
外部认证脚本
无浏览器、隔离网、CI 时可把登录交给自己的二进制:
[auth]
auth_provider_command = "/usr/local/bin/my-auth-provider"
auth_provider_label = "Acme Corp"
auth_token_ttl = 3600
约定:
- stdout:只输出 token(纯字符串,或含
access_token/expires_in的 JSON) - stderr:给人看的状态、登录 URL(TUI 会把第一个
https://做成可点链接) - 退出码 0 成功;非 0 回退到交互登录
- 无头刷新时环境变量
GROK_AUTH_EXPIRED=1:不要弹窗、不要阻塞
auth.json 热加载:外部脚本改完 token,下次 API 调用就会用新凭证。
编程数据与隐私
/privacy 打开「Coding data, retention, and training」。它不改遥测开关。团队账号只有管理员能改;开了 Zero Data Retention(ZDR)后这一项会显示 ZDR,不能再改。
独立开关:
| 项 | 配置 |
|---|---|
| 产品遥测 | [features] telemetry / GROK_TELEMETRY_ENABLED |
| 会话 trace 上传 | [telemetry] trace_upload / GROK_TELEMETRY_TRACE_UPLOAD |
| 外部 OpenTelemetry | GROK_EXTERNAL_OTEL / [telemetry] otel_* |
4. 第一次使用
grok
界面两块:
- Scrollback:对话、思考、工具调用、diff、任务列表
- Prompt:底部输入框
输入后按 Enter 发送。Tab 在输入框和滚动区之间切焦点。
默认会在跑命令、改文件前问你。三种「少问」方式:
Ctrl+O切换 always-approve(YOLO)- 启动:
grok --yolo - 输入:
/always-approve
用 @ 挂文件
@src/main.rs # 整个文件
@src/main.rs:10-50 # 第 10–50 行
@src/ # 浏览目录
@!.github # 搜隐藏路径(默认尊重 .gitignore,并藏 dotfile)
@!.env # 挂 .env
@ 会打开模糊文件选择器。
内置工具(模型自己会调)
| 工具 | 作用 |
|---|---|
read_file / search_replace | 读文件、按行精确改 |
grep | 全库正则搜索(ripgrep) |
list_dir | 列目录 |
run_terminal_command | 跑 shell |
web_search / web_fetch | 搜网、拉 URL |
todo_write | 任务清单 |
spawn_subagent | 并行子 Agent |
memory_search | 搜跨会话记忆 |
扩展靠 MCP。
5. 日常交互
发送与插话
| 动作 | 默认 | VS Code / Cursor / Windsurf / Zed | Apple Terminal |
|---|---|---|---|
| 发送 | Enter | 同左 | 同左 |
| 换行 | Shift+Enter / Alt+Enter | 同左 | 同左 |
| 多行模式 | Ctrl+M(焦点在输入框时) | 同左 | 同左 |
| 回合进行中排队后续 | 普通 Enter | 同左 | 同左 |
| 立刻打断并发送 | Ctrl+Enter(备选 Ctrl+I) | Ctrl+L | Ctrl+O |
默认 [ui].follow_up_behavior = "queue":回合没结束时 Enter 只排队。改成 "steer" 会在下一个安全间隙把排队内容塞进去。
取消、清空、回退
| 状态 | 按键 | 效果 |
|---|---|---|
| 回合进行中(默认全屏,非 Vim 滚动) | Esc | 立刻取消,草稿保留 |
| 回合进行中 + 全屏 Vim 滚动 | Esc | 不取消;用 Ctrl+C |
| 回合进行中 + 有草稿 | Ctrl+C | 先清草稿,再按一次才取消 |
| 空闲 + 输入框有内容 | 800ms 内按两次 Esc | 清空输入(进历史) |
| 空闲 + 输入框空 + 已有对话 | 800ms 内按两次 Esc | 打开 /rewind |
Ctrl+C 与 Esc 不要混用:前者先清草稿,后者取消并保留草稿。
贴图
| 操作 | macOS | Linux | Windows |
|---|---|---|---|
| 从资源管理器拖图进输入框 | 可以 | 可以 | 可以 |
| 复制文件后粘贴 | Cmd+V | Ctrl+V | Ctrl+V |
| 剪贴板里的截图 /「复制图像」 | Cmd+V | Ctrl+V | Alt+V |
Windows Terminal 默认 Ctrl+V 只贴纯文本。要用 Ctrl+V 贴图,在 settings.json 的 actions 里加 { "command": null, "keys": "ctrl+v" }。
非图片文件粘贴后变成绝对路径文本,不是 chip。
滚动区
- 点选条目、滚轮滚动、点输入框聚焦
- 选中后
←/→折叠 / 展开;Enter全屏查看 - Vim 模式:
j/k移动,h/l折叠,y复制内容,Y复制元数据(例如刚跑的命令) - 开 Vim:
/vim-mode,或[ui] vim_mode = true
注意:simple_mode 管的是输入框编辑方式(readline / vim),vim_mode 管的是滚动区导航。两套互不影响。
6. 常用启动方式
# 打开 TUI,并把这句话当作第一轮
grok "fix the failing auth test and run it"
# 在新 git worktree 里开(必须用 --worktree=,否则后面的字会被当成 worktree 名)
grok --worktree=feat "refactor module X"
# worktree 基于 main,而不是当前 HEAD
grok -w --ref main "implement feature from main"
# 指定工作目录
grok --cwd ~/projects/my-app
# 本会话附加规则
grok --rules "Always use TypeScript. Prefer functional components."
# 全部自动批准
grok --yolo
# 指定模型
grok -m grok-build
# 恢复某次会话
grok --resume <session-id>
# 继续当前目录最近一次会话
grok -c
# 实验性:滚动区原生 / 极简模式(会记住上次选择)
grok --minimal
grok --fullscreen
# 无头
grok -p "Explain this codebase"
--minimal / --fullscreen 只影响这次会话,不写 config.toml。要改默认,用 /settings → Default screen mode,或设 [ui] screen_mode。
极简模式没有主题、没有 Dashboard、/theme 不可用;颜色跟终端自己的 16 色盘走。
7. 快捷键
绑定写死,目前不能改键。
几乎随时能用
| 键 | 作用 |
|---|---|
Ctrl+P 或 ? | 命令面板(快捷键、斜杠命令、Skill) |
Ctrl+M | 滚动区:模型选择器;输入框:多行开关 |
Ctrl+O | 切换 always-approve |
Ctrl+S | 会话选择器 |
Ctrl+N | 新会话(1 秒内按两次确认) |
Ctrl+Q / Ctrl+D | 退出(VS Code 系只用 Ctrl+D) |
Ctrl+\ | Agent Dashboard |
Ctrl+B | 把正在跑的前台命令丢到后台 |
Ctrl+T | TODO 面板 |
Ctrl+G | 全屏:任务面板;极简模式:用外部编辑器改草稿 |
Ctrl+L | 非 VS Code 系:扩展弹窗;VS Code 系:回合中插话 |
Shift+Tab | 循环模式:Normal → Plan → Always-approve |
F2 / Ctrl+, | 设置 |
Ctrl+. / Ctrl+X | 快捷键帮助(多数终端 Ctrl+X 更稳) |
! | 空输入框进入 shell 模式 |
回到欢迎页没有快捷键,用 /home(别名 /welcome)。
滚动区(焦点在对话上)
| Vim | 普通 | 作用 |
|---|---|---|
j / k | ↓ / ↑ | 下 / 上一条 |
⇧L / ⇧H | Shift+→ / Shift+← | 下一 / 上一轮用户消息 |
g / ⇧G | 顶 / 底 | |
h / l | ← / → | 折叠 / 展开 |
e / ⇧E | 切换折叠 / 全部展开或折叠 | |
Ctrl+E | 思考块全部展开或折叠 | |
y / ⇧Y | 复制内容 / 复制元数据 | |
Enter | 全屏查看 |
未开 vim_mode 时,单独按字母会直接跳回输入框并打出这个字母。
阻塞卡片(提问 / 权限 / 取消回合)
Tab / Shift+Tab 在卡片内循环,不会跑出去。Esc 先清卡片内部状态;提问卡和权限卡会把键盘停到滚动区(卡片还在),Tab 回来。权限卡 Esc 不会回答或关掉请求。
权限卡额外:← / → 调整 “Always” 的记住范围;e 手改 always-allow 模式(bash);Ctrl+O 开 always-approve。
欢迎页
| 键 | 作用 |
|---|---|
Ctrl+S | 恢复会话 |
Ctrl+W | 新 worktree(仅 git 仓库内) |
Ctrl+I | 导入 Claude 设置 |
Ctrl+Shift+I | 关掉 Claude 导入提示 |
破坏性操作
Ctrl+N、Ctrl+Q 要在 1 秒内按两次才生效,避免误关会话。
8. 斜杠命令
输入 / 打开菜单,模糊匹配。来源:shell 内置、pager 内置、以及 user-invocable: true 的 Skill。
Skill 和内置重名时,内置占裸名(如 /login),Skill 变成 /plugin-name:login。菜单会标 built-in / skill · …。
会话
| 命令 | 作用 |
|---|---|
/new(/clear) | 新会话 |
/resume | 恢复历史会话 |
/dashboard(/sessions) | 本进程里的活动会话看板 |
/compact [备注] | 压缩上下文;85% 会自动压(可配) |
/context | 上下文占用明细 |
/session-info(/status) | 认证、模型、轮次、上下文 |
/fork | 从当前历史分出新 Agent |
/rewind(/undo) | 回到更早一轮(不回滚磁盘文件) |
/copy [N\|路径] | 复制最近回复;也可写到文件 |
/export | 导出对话 |
/quit(/exit) | 退出 |
/home(/welcome) | 回欢迎页 |
/delete | 删当前会话(先确认) |
/rename(/title) | 改标题;/rename --auto 交还自动起名 |
模型与模式
| 命令 | 作用 |
|---|---|
/model <名>(/m) | 换模型,可带 effort |
/effort | 只改当前模型的推理强度 |
/always-approve | 开关「全自动批准」 |
/auto | 分类器批准安全工具(功能开启时才有) |
/multiline(/ml) | 多行输入 |
/history | 搜本会话提示词历史 |
/vim-mode | Vim 滚动导航 |
/minimal / /fullscreen | 切换渲染模式 |
/plan [描述] | 进入 Plan 模式 |
/view-plan | 看已保存计划 |
全屏才有:/find、/jump、/timeline、/theme、/tutorial、/workflows、/dashboard。
极简才有:/expand、/edit-prompt。
记忆(需开启 Memory)
/memory、/flush、/dream、/remember。/remember 始终可用。
扩展
/hooks、/plugins、/marketplace、/skills、/mcps 打开同一个扩展弹窗的不同页。
其它常用
| 命令 | 作用 |
|---|---|
/imagine / /imagine-video | 文生图 / 文生视频 |
/loop [间隔] <提示> | 定时重复跑(最短 60s,7 天后过期) |
/goal | 自主目标(需开启) |
/deep-research <查询> | 后台调研工作流 |
/workflow / /workflows | 启动 / 管理 Rhai 工作流 |
/theme(/t) | 换主题 |
/feedback | 反馈 |
/btw | 旁路问一句,不打断当前任务 |
/doctor | 终端、剪贴板、颜色、沙箱诊断 |
/docs | 内置指南;/docs web 开官方站 |
/tutorial | 约 30 秒一篇的入门 |
/import-claude | 导入 ~/.claude |
/config-agents(/agents) | Agent 定义 / Persona |
/login /logout /usage /privacy | 账号、用量、隐私 |
/settings | 交互改配置 |
工作流脚本:项目 .grok/workflows/*.rhai,用户 ~/.grok/workflows/*.rhai。进程重启后的 run 不能恢复。
9. 配置
优先级(高 → 低)
- CLI 参数(
--yolo、--model、--sandbox) - 环境变量(
XAI_API_KEY、GROK_MEMORY) requirements.toml/ MDM(组织硬限制,夹死下面所有层)GROK_CONFIG/GROK_CONFIG_PATH覆盖层~/.grok/config.tomlmanaged_config.toml(组织默认)- 内置默认
GROK_CONFIG 是 JSON 覆盖,不是随便注入任意键:只放行少量软设置(模型、features、收窄的 toolset、环境过滤)。不能用来提权、改认证、加发现源。
主配置 ~/.grok/config.toml
文件不存在就用默认值,只写要改的项。
[cli]
auto_update = true
[models]
default = "grok-4.5"
web_search = "grok-4.5"
[ui]
simple_mode = true # 输入框 readline;false = 实验性 vim 编辑
vim_mode = false # 滚动区 vim 键
show_thinking_blocks = true
group_tool_verbs = true
collapsed_edit_blocks = false
page_flip_on_send = true
follow_up_behavior = "queue" # 或 "steer"
screen_mode = "fullscreen" # 或 "minimal"
theme = "auto"
permission_mode = "ask" # ask / auto / always-approve
remember_tool_approvals = false
default_selected_permission = "always_allow_all_sessions"
[features]
telemetry = false
codebase_indexing = true
remote_fetch = true
[session]
auto_compact_threshold_percent = 85
load_envrc = true
[tools]
respect_gitignore = false
项目级 .grok/config.toml 只贡献 [mcp_servers]、[plugins]、[permission](以及 [mcp] max_output_bytes)。其它段只从用户主配置读。
MCP / Plugin 优先级:当前目录 .grok/config.toml > 仓库根 .grok/config.toml > ~/.grok/config.toml。[permission] 是合并,不是覆盖:deny > ask > allow。
外观 ~/.grok/pager.toml
管 padding、滚动条、动画、块样式、是否进备用屏。改完重启生效。
[terminal]
alt_screen = "auto" # auto | always | never
常用环境变量
| 变量 | 作用 |
|---|---|
XAI_API_KEY | API Key |
GROK_HOME | 配置根目录,默认 ~/.grok |
GROK_MEMORY | 1 开 / 0 关跨会话记忆 |
GROK_SUBAGENTS | 子 Agent |
GROK_WORKFLOWS | 后台工作流(默认开) |
GROK_SANDBOX | 沙箱档位 |
GROK_LOG_FILE | 日志文件绝对路径 |
RUST_LOG | 日志级别;无头模式默认关 stderr 日志 |
GROK_THEME | 强制主题或 auto |
GROK_AGENT_DASHBOARD | 0 关掉 Dashboard |
兼容 Claude / Cursor
默认会扫对方的 skills、rules、MCP、hooks:
[compat.claude]
skills = true
rules = true
agents = true
mcps = true
hooks = true
[compat.cursor]
skills = true
rules = true
agents = true
mcps = true
hooks = true
欢迎页 Ctrl+I 可导入 Claude 设置。
10. 项目规则 AGENTS.md
在仓库里放 Markdown,Grok 启动时读入并当作项目指令。不必每轮重讲约定。
每个目录按这个顺序找(能匹配的都会加载):
Agents.md → Claude.md → CLAUDE.md → CLAUDE.local.md → AGENT.md → AGENTS.md
另外还会扫:
<dir>/.grok/rules/*.md<dir>/.claude/rules/、<dir>/.cursor/rules/(兼容开关打开时)~/.grok/rules/、~/.claude/rules/、~/.cursor/rules/
发现顺序:家目录规则 → 仓库根到当前目录的每一层。越深越优先(后出现覆盖冲突项)。
被 .gitignore 忽略的文件不会被发现。个人覆盖建议 gitignore CLAUDE.local.md。
一次性规则,不写文件:
grok --rules "Always use TypeScript."
整段替换系统提示(连默认提示一起丢掉):
grok --system-prompt-override "You are a code reviewer. Do not edit files."
grok inspect 能看到加载了哪些规则和大致 token 数。
建议:根目录写全局约定;monorepo 各包自己再放一份;写可执行的短句,不要把 README 复制进去。
11. 会话
每次对话都是一个 session,自动存到 ~/.grok/sessions/<编码后的工作目录>/<session-id>/。
里面主要有:summary.json(索引)、updates.jsonl(权威对话日志)、chat_history.jsonl、plan.json、rewind_points.jsonl。
标题:第一轮后自动生成,前几轮会再改一次然后冻结。/rename 之后不再自动改;/rename --auto 交还自动起名。
恢复
grok --resume <session-id-或标题>
grok --resume # 当前目录最近一次
grok -c # 继续最近一次
TUI 里:/resume 或欢迎页列表。按标题匹配时忽略大小写;UUID 形状的值永远当 ID。脚本请用 JSON 里的 sessionId。
/rewind 注意
只截断对话历史,磁盘上的文件改动不会还原。
/compact
长会话主动压上下文。可加备注告诉它该留什么。默认上下文用到 85% 自动压。Plan 模式压缩后状态会保留。
CLI 列会话
grok sessions list
grok sessions list --limit 50
grok sessions search "rate limit"
Worktree 与磁盘
grok du # ~/.grok 占用
grok worktree gc --max-age 7d --dry-run
grok worktree gc --max-age 7d
grok worktree rm --dry-run <path>
克隆 worktree 和源仓库共享存储,报表总和可能大于真实占用。未登记的 worktree,gc 不会碰,要用 grok worktree rm。
恢复会话到新 worktree:grok -w -r <session-id>。
12. 权限与安全
权限是「模型能不能请求这件事」;沙箱是「就算批准了,内核允不允许进程这么干」。两层建议一起用。
模式
| 模式 | 不询问时能跑什么 | 适合 |
|---|---|---|
default(ask) | 只读工具 + 内置只读命令 | 日常交互 |
acceptEdits | 改文件不问 | 本地写代码、事后看 diff |
auto | 安全检查放行的;其余拦截或升级 | 想少弹窗 |
dontAsk | 只跑预先允许的 | 严格 CI 白名单 |
bypassPermissions(always-approve) | 大体都跑(deny / hook / 部分 shell ask 仍生效) | 脚本、CI、Agent 服务 |
Always-approve 与 auto 互斥,同时开以 always-approve 为准。
设置方式:Shift+Tab / Ctrl+O / /always-approve / /auto / /settings,或:
grok --always-approve -p "Run the test suite"
grok --permission-mode auto
[ui]
permission_mode = "always-approve"
组织可在 requirements.toml 锁死 always-approve:
[ui]
disable_bypass_permissions_mode = true
一次工具调用怎么过关
PreToolUsehook(可直接 deny)- 规则:
deny>ask>allow - 本项目记住的交互授权
- 内置只读自动放行
- 当前模式的询问策略
Always-approve 在第 2 步之后短路:deny / hook / 命中 shell 段的 ask 仍有效。
默认不问的操作
只读工具:read_file、list_dir、grep、web_search、todo_write、子 Agent 控制、调用 Skill。
只读命令(按 && || ; 管道切开后,主命令命中才算):ls、cat、pwd、git status / log / diff 等、rg(不含 --pre)、kubectl get / logs / describe。
tee、cargo check 不在只读名单里。rm、chmod、git push 等危险命令即使有「记住的前缀」也会再问;配置里的显式 allow 和 always-approve 仍会放行。
规则写法
# 项目 .grok/config.toml
[permission]
allow = [
"Bash(git *)",
"Bash(npm run build)",
]
deny = [
"Bash(rm -rf *)",
"Read(/Users/you/private/**)",
"Edit(/Users/you/private/**)",
]
ask = [
"Edit",
]
CLI:
grok -p "Review the API" \
--allow 'Bash(git *)' \
--allow 'Read' \
--deny 'Bash(rm -rf *)'
也兼容 .claude/settings.json 的 permissions.allow/deny/ask 和 defaultMode。
规则在会话启动时读一次,改完要新开会话。
Bash(git *) 的 allow 匹配整串命令,所以 git status && rm -rf / 会被当成以 git 开头而放行。窄 allow 必须配 deny。deny / ask 会拆段检查。
路径:* / ? 不跨 /,** 跨目录。Read(src/*) 不含嵌套;整树用 Read(src/**)。
MCP:MCPTool(linear__*)。也认 Claude 写法 mcp__linear__get_issue。
交互「总是允许」
默认关。打开:
[ui]
remember_tool_approvals = true
记住的授权按仓库存在本机,不进 git。要给团队看的白名单,写进项目 .grok/config.toml。
项目里的 permission allow 没有单独的信任提示。陌生仓库先看 .grok/config.toml 和 .claude/settings.json,再干活。
13. 沙箱
默认关。用内核原语限制进程:Linux 是 Landlock(需 5.13+),macOS 是 Seatbelt。限制打在整个 grok 进程上,不可运行时放松。
grok --sandbox workspace
grok --sandbox read-only
grok --sandbox strict
| 档位 | 读 | 写 | 子进程网络 | 场景 |
|---|---|---|---|---|
off | 不限 | 不限 | 不限 | 默认 |
workspace | 全盘 | CWD + ~/.grok/ + 临时目录 | 允许 | 日常开发 |
devbox | 全盘 | 除 /data 外的顶层目录 | 允许 | 一次性开发机 |
read-only | 全盘 | 仅 ~/.grok/ + 临时目录 | Linux 拦 | 只看不改 |
strict | CWD + 系统路径 | CWD + ~/.grok/ + 临时目录 | Linux 拦 | 不信任代码 |
子进程断网只在 Linux 用 seccomp;macOS 上是空操作。进程内的 web_search、LLM API 始终能上网。
自定义(~/.grok/sandbox.toml 或项目 .grok/sandbox.toml):
[profiles.project]
extends = "workspace"
restrict_network = true
read_only = ["/data"]
read_write = ["/tmp/scratch"]
deny = ["**/.env", "**/*.pem"]
grok --sandbox project
deny 是内核级读写/重命名拒绝。Linux 上 glob 只展开启动时已存在的文件;之后新建的匹配文件盖不住,关键路径请写死。缺 bubblewrap 且 deny 非空时,Grok 拒绝启动。
会话一旦用了某个沙箱档,终身绑定。恢复时不能换档;要换就开新会话。
沙箱开着时不会走共享 leader 进程。workspace / read-only / strict 会写保护 ~/.grok/hooks/(仍可读)。
环境变量过滤(防止命令读到你 shell 里的密钥):
[shell_environment_policy]
inherit = "core" # all | core | none
ignore_default_excludes = false
exclude = ["ACME_*"]
include_only = ["PATH", "HOME"]
默认 inherit = "all",行为与没配一样。
事件日志:~/.grok/sandbox-events.jsonl。
14. Plan 模式
先探代码、写方案,批准前不改业务文件。适合有真实架构分歧的任务,不适合「加个按钮」「改个错字」。
进入:
- Agent 自己调
enter_plan_mode(要你批准) /plan或/plan 做登录Shift+Tab切到 Plan
计划写在会话目录的 plan.md。Plan 模式下只有这个文件能改(自动批准);改其它文件直接失败。这条在 always-approve 下也成立。
注意:Plan 只拦编辑工具,不检查 bash 重定向写文件。子 Agent 不受父会话 Plan 闸门约束。
批准界面:
| 键 | 作用 |
|---|---|
a | 批准并开始实现(有批注则一并送出) |
s | 要求修改 |
c | 给选中行加评论 |
y | 复制全文 |
q | 放弃计划并退出 Plan 模式 |
/view-plan 以后还能再看。状态会落盘,重启后仍在(Pending / ExitPending 会收成 Inactive)。
15. 子 Agent 与 Persona
子 Agent 是独立子会话:自己的上下文,干完把摘要交回父 Agent。默认开启。关:GROK_SUBAGENTS=0 或 [subagents] enabled = false。
只能一层:子 Agent 不能再 spawn。
Agent vs Persona
| Agent | Persona | |
|---|---|---|
| 配什么 | 整场会话:模型、工具、系统提示 | 叠在子 Agent 提示上的行为层 |
| 范围 | 主会话或子会话 | 仅子 Agent |
| 例子 | explore、plan、grok-build | researcher、concise |
内置类型:
| 类型 | 能力 |
|---|---|
general-purpose | 全套工具 |
explore | 读、搜、跑命令,不改文件 |
plan | 探代码出方案,不改文件 |
能力模式:read-only / read-write / execute / all。
隔离:none(共享工作区)或 worktree(独立 git worktree,改完再 merge)。
MCP 默认继承父会话已连上的服务器。Agent frontmatter mcpInheritance:all / none / named / except。插件 Agent 不能自己声明 mcpServers、hooks,也不能 permissionMode: bypassPermissions。
TUI:Ctrl+G 看任务/子 Agent;滚动区点开子 Agent 块进全屏只读回放。
管理定义:/config-agents;Persona:/personas。
[subagents.toggle]
plan = false
[subagents.models]
explore = "grok-build"
[subagents.personas.researcher]
instructions = "You are a thorough researcher. Always cite specific file paths."
16. Agent Dashboard
本 pager 进程里所有顶层会话的看板(不含子 Agent)。
打开:grok dashboard、/dashboard、Ctrl+\。极简模式没有。关:GROK_AGENT_DASHBOARD=0 或 [dashboard] enabled = false。
它不是 /config-agents(定义),也不是 /resume(磁盘历史),也不是 /workflows。
底部输入框永远是新开会话。选中一行是导航,要对话请打开该 Agent,或用 peek 的 ❯ reply。
常用键:Enter 打开,Ctrl+S 发送并挂上,Ctrl+/ 搜索,Ctrl+R 改名,Ctrl+T 钉住,Ctrl+G 按状态/目录分组,Ctrl+X 取消回合 / 连按两次删除。
搜索前缀:a:名称、s:working|idle|…、#标签。
17. 后台任务与定时
后台命令
run_terminal_command 设 background: true 立刻返回 task_id。TUI 里 Ctrl+B 把正在跑的前台命令丢到后台。
查结果:get_command_or_subagent_output。多任务:wait_commands_or_subagents(最多 20 个)。杀掉:kill_command_or_subagent。
/loop
/loop 5m Check if the test suite passes
/loop 2h Summarize new commits since the last check
间隔:Ns(最短 60)/ Nm / Nh / Nd。创建后立刻跑一次,然后按间隔重复。最多 50 个,7 天后过期。
底层是 scheduler:scheduler_create / list / delete。durable: true 可跨会话。
monitor
把长命令的每一行 stdout/stderr变成对话通知。管道里必须用 grep --line-buffered,否则缓冲会拖几分钟。事件太多会被自动停掉,收紧过滤再开。persistent: true 跟会话同寿。
后台还在跑、主 Agent 看似空闲时,输入框上方会有:
◎ 1 command · 2 monitors · 1 loop · 1 subagent still running
这时发消息会打断等待,立刻处理你的输入。
18. 无头模式(脚本 / CI)
grok -p "Your prompt here"
--prompt-json、--prompt-file 也会进无头。不读管道 stdin;外部内容用命令替换或 --prompt-file。
关键参数
| 参数 | 作用 |
|---|---|
-p | 提示词 |
-m | 模型 |
-r / --resume | 恢复已有会话(不存在就报错) |
-c | 继续当前目录最近会话 |
-s | 新建指定 UUID 的会话(已存在则报错;不用于恢复) |
--fork-session | 与 -r/-c 一起:分叉到新 ID |
--output-format | plain / json / streaming-json / streaming-messages-json |
--yolo / --always-approve | 不问批准 |
--tools / --disallowed-tools | 工具白/黑名单(仅无头) |
--max-turns | 最多回合(仅无头) |
--allow / --deny | 权限规则 |
--sandbox | 沙箱 |
--rules | 附加规则 |
--agent | Agent 定义 |
# 只要只读工具
grok -p "Explain this codebase" --tools "read_file,grep,list_dir"
# 禁止所有子 Agent
grok -p "Fix this bug" --disallowed-tools "Agent"
# CI 审代码
grok -p "Review changes for bugs" --output-format json --yolo | jq -r '.text'
--disallowed-tools 里工具 ID 是内部名,shell 是 run_terminal_cmd 不是 bash。Agent / Agent(explore) 控制子 Agent。
JSON 输出
完成后一个对象:text、stopReason、sessionId、requestId,以及用量(usage、num_turns、modelUsage、费用)。
usage.input_tokens 是未命中缓存的输入。total_tokens = 未缓存输入 + 缓存读 + 缓存写 + 输出。没有费用字段表示服务端没给出完整账单,不是免费。usage_is_incomplete 为真时不要当完整账单用。
失败非 0 退出,stderr 可有 error 对象。
跨调用保持上下文
ID=$(grok -p "Review the PR" --output-format json | jq -r '.sessionId')
grok -p "Now check security" --resume "$ID"
退出码
| 码 | 含义 |
|---|---|
| 0 | 正常结束 |
| 1 | 认证 / 网络 / 运行错误 |
| 130 | SIGINT |
| 143 | SIGTERM |
中断会保存到最后一个完成的工具调用;文件改动不回滚。接着跑:grok -p "continue" --resume "<id>"。
CI 认证
export XAI_API_KEY="xai-..."
export GROK_DISABLE_AUTOUPDATER=1
grok -p "Run the test suite" --yolo --no-auto-update
无浏览器机器也可用 grok login --device-auth。只读挂载 ~/.grok 时会话落盘会静默失败。
大 monorepo 里不要把 --cwd 指到很深的子目录还让它往上找到巨型 .git——发现范围会变成整个仓库,启动变慢。指到真正要改的子项目。
19. ACP 与 IDE 集成
长时间跑的 Agent 服务,走 Agent Client Protocol(JSON-RPC)。一次性打印用 grok -p。
# 本地 stdio(IDE / SDK 最常见)
grok agent --always-approve stdio
# WebSocket 服务(自己架,不是 xAI 托管沙箱)
grok agent --always-approve serve --bind 127.0.0.1:2419 --secret <token>
参数写在 agent 和模式名之间。开了非 off 沙箱会拒绝 leader 模式,工具必须留在本进程。
会话 _meta:
{
"cwd": "/path/to/project",
"mcpServers": [],
"_meta": { "yoloMode": true }
}
流式更新类型:agent_message_chunk、agent_thought_chunk、tool_call、tool_call_update、plan。另有 x.ai/fs/*、x.ai/git/*、x.ai/git/worktree/* 等扩展。
已支持客户端:Zed、Neovim(CodeCompanion / avante.nvim)、Emacs(agent-shell)、marimo。JetBrains 标注为即将支持。
SDK:TypeScript @agentclientprotocol/sdk,以及 Rust / Python / Go / Kotlin 的 ACP 库。
20. MCP 服务器
按 Model Context Protocol 把外部工具接进来。工具名带命名空间:github__create_issue。
模型侧用 search_tool 发现、use_tool 调用。
配置
# 本地进程
[mcp_servers.github]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]
env = { GITHUB_PERSONAL_ACCESS_TOKEN = "ghp_xxx" }
startup_timeout_sec = 30
# 远程 HTTP(优先用 url,不要再包一层 mcp-remote)
[mcp_servers.linear]
url = "https://mcp.linear.app/mcp"
enabled = true
密钥用 ${VAR},不要写进要提交的项目配置:
headers = { "Authorization" = "Bearer ${INTERNAL_MCP_TOKEN}" }
Windows 上 npx 是 .cmd,Grok 会按 PATHEXT 解析,不必手写 cmd /c。
CLI
grok mcp list
grok mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem /path
grok mcp add postgres -e DATABASE_URL=postgres://localhost/db -- npx -y @modelcontextprotocol/server-postgres
grok mcp add --transport http sentry https://mcp.sentry.dev/mcp
grok mcp remove github
grok mcp enable github
grok mcp disable github
grok mcp doctor
--scope project 写到 .grok/config.toml,可提交给团队。同名时项目配置整段替换全局,不合并。
TUI:/mcps。Space 开关,i 做 OAuth,r 刷新,a 添加,x 删除。
OAuth token 存在 ~/.grok/mcp_credentials.json(0600)。
结果默认截断到 20_000 字节,完整内容落到会话的 mcp/ 目录。可用 [mcp] max_output_bytes 或 GROK_MAX_MCP_OUTPUT_BYTES 改。
冷启动 npx/uvx 常超过 30s:设 startup_timeout_sec,或 GROK_MCP_STARTUP_TIMEOUT_SECS / MCP_TIMEOUT(后者是毫秒,兼容 Claude)。
也兼容 ~/.claude.json、.cursor/mcp.json、项目 .mcp.json。合并顺序:config.toml > Claude > Cursor > .mcp.json。
stdio 失败看 ~/.grok/logs/mcp/<server>.stderr.log。
项目 / 插件 MCP 要过目录信任(和 Hook、LSP 同一把闸):/hooks-trust 或启动 --trust。关文件夹信任:GROK_FOLDER_TRUST=0。
21. Skills
可复用的提示词包:一个目录 + SKILL.md。适合「比 AGENTS.md 更具体、又不想每次重打」的流程。
发现顺序(高 → 低):当前目录 .grok/skills/ → 仓库 .grok/skills/ → ~/.grok/skills/,并兼容 .agents/skills/、.claude/skills/、.cursor/skills/。同名高优先级覆盖。commands/ 下的扁平 *.md 会变成斜杠命令。
Skill 发现不看 .gitignore。要藏:[skills] ignore。
---
name: commit
description: Create well-formatted git commits following conventional commit standards. Use when the user wants to commit changes or asks for /commit.
---
# Git Commit Skill
...
description / when-to-use 决定会不会自动调用。只要斜杠、不要自动:disable-model-invocation: true。不要出现在 / 菜单:user-invocable: false。
交互创建:/create-skill。项目技能建议提交 .grok/skills/。
/commit fix the build
/local:commit
/user:commit
grok inspect
内置技能缓存在 ~/.grok/bundled/skills/,不会写进你的 ~/.grok/skills/。
22. Plugins
把 Skill、命令、Agent、Hook、MCP、LSP 打成可安装包。流程:加 marketplace → 安装插件 → 信任后 Hook/MCP 才真正跑。
grok plugin marketplace add my-org/team-plugins
grok plugin install deploy-tools --trust
grok plugin list
grok plugin update
grok plugin enable <name>
grok plugin disable <name>
grok plugin uninstall <name> --confirm
grok plugin validate [<path>]
不加 --trust 会警告后停下。~/.grok/plugins/ 自动信任;项目 .grok/plugins/ 要信任。
TUI:/plugins。Space 启用,r 重载,a 添加。
[plugins]
paths = ["~/my-plugins/custom-tools"]
enabled = ["gdrive"]
disabled = ["user/a1b2c3d4/noisy-plugin"]
插件默认关,要进 enabled 或在 UI 里打开。
自建 marketplace:仓库里 .grok-plugin/marketplace.json + 每个插件一个目录。组织分发用 managed_config.toml / managed-settings.json(可锁 marketplace、锁允许的 MCP、强制 pin commit SHA)。
插件交付的是文件,不是运行时。Skill 调的 Python/二进制,机器上得已经有。
23. Hooks
在生命周期节点跑脚本或 HTTP。用途:拦危险命令、审计、通知、改完自动 format、会话开始导出环境变量。
位置:
| 范围 | 路径 | 是否信任 |
|---|---|---|
| 全局 | ~/.grok/hooks/*.json | 始终 |
| 项目 | /.grok/hooks/*.json | 要信任 |
| 配置 | config.toml / managed / requirements | 始终 |
| 插件 | 插件包内 | 按插件 |
项目 Hook 第一次要 /hooks-trust 或 --trust,记在 ~/.grok/trusted_folders.toml(MCP/LSP 同一份)。这是为了防恶意仓库在打开时跑任意代码。
主要事件:
| 事件 | 何时 | 能否拦住 |
|---|---|---|
SessionStart / SessionEnd | 会话开/关(子 Agent 自己的会话不触发 Start) | 否 |
UserPromptSubmit | 你提交提示 | 否(退出码被忽略) |
PreToolUse | 工具马上跑 | 能 deny / 改 input |
PostToolUse / PostToolUseFailure | 工具成功 / 失败 | 否 |
Stop / SubagentStop | 回合真正结束 | 能挡住结束、让 Agent 继续干 |
StopFailure / StopCancelled | API 错 / 被取消 | 否 |
Notification | 需要你看一眼 | 否 |
PreCompact / PostCompact | 压缩前后 | 否 |
失败默认 fail-open:超时、崩溃、输出坏了只记日志,不拦工具。只有明确 {"decision":"deny"} 才拦。当安全边界用时,脚本必须自己处理错误并给出 deny。
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{ "type": "command", "command": "bin/safe-shell.sh", "timeout": 5 }
]
}
]
}
}
stdin 是 JSON 事件。PreToolUse stdout:
{"decision": "allow"}
{"decision": "deny", "reason": "Unsafe command"}
退出码 2 = 明确拒绝。matcher 认 Claude 别名:Bash → run_terminal_command,Read → read_file 等。
Stop 挡住结束后,原因会当用户消息喂回模型。同一回合最多续 8 次。默认超时 600 秒(方便跑测试)。会话结束也会再打一次观察用 Stop,脚本请判断 reason == "end_turn"。
HTTP hook:{ "type": "http", "url": "https://hooks.example.com/grok-event" },POST 整个事件。
管理:/hooks。r 重载,Space 启用。
24. 跨会话记忆
实验功能,默认关。
export GROK_MEMORY=1
[memory]
enabled = true
会话内:/memory on / off(只影响本会话,不写配置)。
存哪儿:
| 路径 | 范围 |
|---|---|
~/.grok/memory/MEMORY.md | 全局偏好 |
~/.grok/memory/<项目>-/MEMORY.md | 本仓库(同一 origin 的 clone / worktree 共用) |
…/sessions/ | 每会话摘要 |
默认全文检索;配了 embedding 模型才有向量检索。
- 会话结束会写一份不调模型的元数据摘要(太短的会话跳过)
/flush:用模型总结重要内容,压缩前建议跑/remember …:立刻记一条(会弹出确认)/dream:把碎片收成主题;也可按间隔自动跑- 直接改
~/.grok/memory/下的文件,watcher 会重建索引
grok memory clear # 清当前工作区
grok memory clear --global
grok memory clear --all --yes
新会话第一轮会按相关度注入记忆。若先开了会话再开 Memory,用 /new 重来。
25. 自定义模型
grok models
grok -p "Hello" -m grok-build
TUI:/model grok-build,或滚动区 Ctrl+M。
[models]
default = "grok-4.5"
web_search = "grok-4.5"
temperature = 0.7
extra_headers = { "X-Request-Tags" = "team=example" }
[model.my-model]
model = "model-id"
base_url = "https://api.example.com/v1"
name = "Display Name"
env_key = "XAI_API_KEY"
api_backend = "chat_completions" # 或 responses / messages
context_window = 128000
密钥:api_key > env_key > 登录 token > XAI_API_KEY。
三种后端:chat_completions(默认,OpenAI)、responses、messages(Anthropic)。Claude 要把 Key 放进 extra_headers 的 x-api-key。
覆盖内置模型只写要改的字段:
[model.grok-build]
temperature = 0.5
企业网关:
export GROK_MODELS_BASE_URL="https://api.acme.com/v1"
export XAI_API_KEY="xai-..."
设了 models_base_url 就走 Bearer,不再需要 grok login。
本地 Ollama 例:
[model.ollama-codellama]
model = "codellama"
base_url = "http://localhost:11434/v1"
name = "CodeLlama (Ollama)"
新模型若不写 context_window,自动压缩按 200_000 token 估。请按供应商真实窗口填写。
26. 主题与外观
内置:
| 主题 | 配置名 | 说明 | 要 truecolor |
|---|---|---|---|
| GrokNight | groknight / dark | 默认深色 | 否 |
| GrokDay | grokday / light | 浅色 | 否 |
| TokyoNight | tokyonight | 蓝调深色 | 是 |
| RosePineMoon | rosepine | 玫瑰松 | 是 |
| OscuraMidnight | oscura | 深紫 | 是 |
/theme
/theme tokyonight
[ui]
theme = "auto"
auto_dark_theme = "tokyonight"
auto_light_theme = "grokday"
auto 跟系统深浅色(Windows 读个性化注册表)。SSH 可用 GROK_APPEARANCE=dark,或 grok wrap ssh … 带上本地外观。
NO_COLOR 则单色。/compact-mode 收紧边距,适合小屏。
极简模式无视主题设置。
27. 终端与排障
/doctor
/doctor fix
grok doctor
grok doctor --json
检查颜色、剪贴板、键盘、通知、沙箱冲突。别名:/terminal-setup、/terminal-check、/terminal-info。
Windows
- 推荐 Windows Terminal
- 截图粘贴用
Alt+V - VS Code / Cursor 集成终端:退出用
Ctrl+D;插话用Ctrl+L;半页下滚是Shift+D Ctrl+;的备选是Ctrl+'(有的控制台会丢掉标点上的 Ctrl)
常见问题
| 现象 | 处理 |
|---|---|
| 认证失败 | grok logout 再 grok login |
| 颜色发灰 | /doctor;tmux 要 terminal-features ",*:RGB" 且重载后再 attach |
| 复制不到剪贴板 | /doctor 看 native / tmux / OSC 52;失败会写 ~/.grok/last-copy.txt |
| SSH 复制 | grok wrap ssh user@host(实验性);或 /copy out.txt |
| WezTerm 的 Ctrl+Enter 无效 | 开 enable_kitty_keyboard = true |
| Zellij 抢快捷键 | 用 Unlock-First (non-colliding) 预设 |
| 项目 Hook / MCP 不跑 | /hooks-trust 或 --trust |
| 调试日志 | RUST_LOG=debug GROK_LOG_FILE=C:\temp\grok.log grok |
无头模式 RUST_LOG 默认 off,要日志请显式设级别,日志在 stderr。
版本钉扎(企业):
[cli]
minimum_version = "0.2.109" # 更新器不下探
required_minimum_version = "0.2.100" # 低于此拒绝启动
minimum_version 不再阻止启动,只约束更新器。硬下限用 required_minimum_version。
28. 文件位置一览
Windows 下 ~ 即 %USERPROFILE%,默认 C:\Users\<你>\.grok。可用 GROK_HOME 改。
| 路径 | 内容 |
|---|---|
~/.grok/config.toml | 主配置 |
~/.grok/pager.toml | TUI 外观 |
~/.grok/sandbox.toml | 自定义沙箱 |
~/.grok/auth.json | 登录凭证 |
~/.grok/mcp_credentials.json | MCP OAuth |
~/.grok/trusted_folders.toml | 目录信任 |
~/.grok/sessions/ | 会话 |
~/.grok/memory/ | 跨会话记忆 |
~/.grok/skills/ | 用户 Skill |
~/.grok/plugins/ | 用户插件(自动信任) |
~/.grok/agents/ | 用户 Agent 定义 |
~/.grok/hooks/ | 用户 Hook |
~/.grok/workflows/ | 用户工作流 |
~/.grok/logs/ | 内部日志;MCP stderr 在 logs/mcp/ |
~/.grok/worktrees/ | git worktree |
~/.grok/bin/ | CLI 本体 |
~/.grok/docs/user-guide/ | 本机官方英文指南 |
.grok/config.toml | 项目 MCP / 插件 / 权限 |
.grok/skills/ .grok/hooks/ .grok/agents/ | 项目级扩展 |
.grok/workflows/ | 项目工作流 |
AGENTS.md | 项目指令 |
29. 推荐用法
- 日常写代码:
grok,默认 ask;常用命令写进项目[permission] allow。需要少打断再开/auto或 always-approve。 - 先想清楚再改:有架构分歧时
/plan,看完plan.md再a批准。 - 危险仓库 / 审计:
--sandbox read-only或strict,再加deny和 Hook。不要只靠「只读命令名单」,那不是安全边界。 - CI:
XAI_API_KEY+grok -p … --yolo --output-format json,用--deny/ Hook 钉死红线。用-r接上下文,不要依赖-s恢复。 - 团队约定:仓库根
AGENTS.md+.grok/skills/+.grok/config.toml(MCP 与权限)。密钥用${ENV},不要提交。 - 长会话:主动
/compact;重要结论/flush或/remember。/rewind只回对话,不回文件。 - 并行调研:让主 Agent spawn
explore;改文件用worktree隔离。 - 接 GitHub / Linear / 数据库:优先 HTTP MCP 的
url形式,配完/mcps里i登录。 - 从 Claude / Cursor 过来:欢迎页
Ctrl+I,或保留~/.claude/.cursor让兼容层自己扫。 - 出问题先
/doctor和grok inspect。
附录:官方入口
| 资源 | 地址 |
|---|---|
| 总览 | https://docs.x.ai/build/overview |
| 本机指南 | ~/.grok/docs/user-guide/(01–24) |
| 产品 | https://x.ai/build |
| 更新日志 | https://x.ai/build/changelog |
| 源码说明 | https://github.com/xai-org/grok-build |
| 控制台 / API Key | https://console.x.ai |
| ACP | https://agentclientprotocol.com |
| MCP | https://modelcontextprotocol.io |
| ZDR | https://docs.x.ai/developers/faq/security#how-to-enable-zdr |
在 TUI 里也可以 /docs 或 /docs web 打开官方文档。
本文按官方用户指南转写,命令、路径、键位保持原文。产品仍在迭代,以当前安装的 grok --version 与 /release-notes 为准。
JavaWeb
Spring
MyBatis
linux
消息队列
JavaSE
工具
片段
AI
搜索
dy