@@ -91,16 +91,16 @@ sandbox exec feat-xxx
9191``` bash
9292# 进入容器后,直接使用
9393claude # Claude Code(首次需容器内 OAuth 登录)
94- codex # OpenAI Codex(自动预植入宿主机凭据 )
95- opencode # OpenCode(自动预植入宿主机凭据 )
96- gemini # Gemini CLI(自动预植入宿主机凭据 )
94+ codex # OpenAI Codex(实时同步宿主机凭据 )
95+ opencode # OpenCode(实时同步宿主机凭据 )
96+ gemini # Gemini CLI(实时同步宿主机凭据 )
9797
9898# 也可以直接开发
9999mvn clean install
100100python3 script.py
101101```
102102
103- > ** 认证差异** :Codex、OpenCode、Gemini CLI 创建沙箱时会自动从宿主机预植入认证凭据,可直接使用 ;Claude Code 首次需要在容器内完成一次 OAuth 登录(之后免登录)。详见[ 认证机制说明] ( #ai-工具认证机制 ) 。
103+ > ** 认证差异** :Codex、OpenCode、Gemini CLI 的认证文件通过实时挂载(live mount)与宿主机双向同步,宿主机刷新 token 后容器自动生效 ;Claude Code 首次需要在容器内完成一次 OAuth 登录(之后免登录)。详见[ 认证机制说明] ( #ai-工具认证机制 ) 。
104104
105105## 多容器并发工作流
106106
@@ -142,6 +142,188 @@ exit
142142docker stop fit-dev-feat-xxx
143143```
144144
145+ ## 命令行模式(非交互式)
146+
147+ 除了打开 TUI 界面,每个 AI 工具都支持直接在命令行传入 prompt 并获取输出,适合脚本自动化、快速提问和管道组合。每个工具还支持会话管理,可以在命令行实现多轮对话。
148+
149+ ### Claude Code
150+
151+ ``` bash
152+ # 单次提问(-p = print mode,不打开 TUI)
153+ claude -p " 解释一下这个项目的架构"
154+
155+ # 管道输入
156+ cat src/main/java/App.java | claude -p " 审查这段代码的安全性"
157+
158+ # 指定输出格式(text / json / stream-json)
159+ claude -p " 列出所有 TODO" --output-format json
160+
161+ # 指定模型
162+ claude -p --model opus " 设计一个缓存方案"
163+
164+ # 限制轮次和预算
165+ claude -p --max-turns 3 --max-budget-usd 1.00 " 重构数据库模块"
166+
167+ # 跳过所有权限确认(CI/脚本场景)
168+ claude -p --dangerously-skip-permissions " 运行所有测试并汇报结果"
169+
170+ # ── 多轮对话(会话管理)──
171+
172+ # 预先生成 session ID,从第 1 轮起就使用(推荐)
173+ SID=$( uuidgen)
174+
175+ # 第 1 轮:指定 session ID 开启对话
176+ claude -p --session-id " $SID " " 分析认证模块的架构"
177+
178+ # 第 2 轮:恢复同一个会话继续对话
179+ claude -p --resume " $SID " " 重构登录函数"
180+
181+ # 第 3 轮:继续同一个会话
182+ claude -p --resume " $SID " " 为重构后的代码补充单元测试"
183+
184+ # 快捷方式:继续当前目录下最近一次对话(无需 session ID)
185+ claude -p -c " 为刚才的修改补充单元测试"
186+
187+ # 从已有会话分叉出新会话(不影响原会话)
188+ claude -p --resume " $SID " --fork-session " 尝试另一种实现方案"
189+ ```
190+
191+ ### Codex
192+
193+ ``` bash
194+ # 单次提问(exec 子命令 = 非交互模式)
195+ codex exec " 为 User 类生成单元测试"
196+
197+ # 管道输入
198+ echo " 解释这个报错信息" | codex exec -
199+
200+ # JSON 事件流输出
201+ codex exec --json " 列出所有 API 端点"
202+
203+ # 指定模型
204+ codex exec -m o4-mini " 优化这个排序算法"
205+
206+ # 全自动模式(无需确认,可写工作区)
207+ codex exec --full-auto " 给所有 API 路由添加错误处理"
208+
209+ # 将最终结果写入文件
210+ codex exec -o result.txt " 分析项目依赖关系"
211+
212+ # ── 多轮对话(会话管理)──
213+ # Codex 不支持预指定 thread ID,需从首轮 JSON 输出获取
214+
215+ # 第 1 轮:启动会话,通过 JSON 事件流获取 thread_id
216+ TID=$( codex exec --json " 分析数据库模块" 2> /dev/null \
217+ | jq -r ' select(.type=="thread.started") | .thread_id' )
218+
219+ # 第 2 轮:通过 thread_id 恢复会话(注意 resume 是 exec 的子命令)
220+ codex exec resume " $TID " " 添加连接池"
221+
222+ # 第 3 轮:继续同一个会话
223+ codex exec resume " $TID " " 补充单元测试"
224+
225+ # 快捷方式:恢复最近一次会话
226+ codex exec resume --last " 继续上次的任务"
227+ ```
228+
229+ ### OpenCode
230+
231+ ``` bash
232+ # 单次提问(run 子命令 = 非交互模式)
233+ opencode run " 解释 JavaScript 闭包的工作原理"
234+
235+ # 指定模型(格式:provider/model-name)
236+ opencode run -m anthropic/claude-sonnet-4-20250514 " 审查这段代码"
237+
238+ # 指定 Agent
239+ opencode run --agent plan " 分析项目结构并给出改进建议"
240+
241+ # JSON 输出
242+ opencode run --format json " 列出所有 API 端点"
243+
244+ # 附加文件到 prompt
245+ opencode run --file src/auth.ts " 审查这个文件的安全性"
246+
247+ # ── 多轮对话(会话管理)──
248+ # OpenCode 不支持预指定 session ID,需从首轮 JSON 输出获取
249+
250+ # 第 1 轮:启动会话,通过 JSON 输出获取 sessionID
251+ SID=$( opencode run --format json " 设计认证模块" | jq -r ' .sessionID' )
252+
253+ # 第 2 轮:通过 session ID 恢复会话
254+ opencode run -s " $SID " " 添加 JWT 校验"
255+
256+ # 第 3 轮:继续同一个会话
257+ opencode run -s " $SID " " 补充单元测试"
258+
259+ # 快捷方式:继续最近一次对话(无需 session ID)
260+ opencode run -c " 为刚才的修改补充单元测试"
261+
262+ # 查看历史会话列表
263+ opencode session list
264+ opencode session list -n 10 # 只显示最近 10 个
265+
266+ # 从已有会话分叉
267+ opencode run -s " $SID " --fork " 尝试另一种实现方案"
268+ ```
269+
270+ ### Gemini CLI
271+
272+ ``` bash
273+ # 单次提问(-p = prompt 模式,不打开 TUI)
274+ gemini -p " 解释一下 Docker 的工作原理"
275+
276+ # 管道输入
277+ cat src/auth.py | gemini -p " 审查这段代码的安全性"
278+
279+ # 指定输出格式(text / json / stream-json)
280+ gemini -p " 列出所有 TODO" --output-format json
281+
282+ # 指定模型
283+ gemini -p -m gemini-2.5-flash " 快速解释这段代码"
284+
285+ # 自动确认所有工具调用
286+ gemini -p --yolo " 运行测试并汇报结果"
287+
288+ # 将项目所有文件纳入上下文
289+ gemini -p --all-files " 分析这个项目的架构"
290+
291+ # ── 多轮对话(会话管理)──
292+ # Gemini CLI 不支持预指定 session ID,需从首轮 JSON 输出中提取。
293+
294+ # 第 1 轮:启动会话,通过 JSON 输出获取 session_id
295+ SID=$( gemini --output-format json -p " 分析项目的整体架构" | jq -r ' .session_id' )
296+
297+ # 第 2 轮:通过 session_id 恢复会话
298+ gemini --resume " $SID " " 针对刚才的分析,重构认证模块"
299+
300+ # 第 3 轮:继续同一个会话
301+ gemini --resume " $SID " " 补充单元测试"
302+
303+ # 快捷方式:恢复最近一次会话(--resume 不带参数,仅适合非并发场景)
304+ gemini --resume " 继续上次的对话"
305+
306+ # 查看当前项目所有会话
307+ gemini --list-sessions
308+ ```
309+
310+ > ** 注意** :Gemini CLI 的会话按项目(工作目录)隔离,切换目录后 ` --list-sessions ` 显示的是不同项目的会话。` -s ` 是 ` --sandbox ` 的缩写(安全沙箱),不是会话管理,会话管理使用 ` -r ` / ` --resume ` 。
311+
312+ ### 快速对比
313+
314+ | 功能 | Claude Code | Codex | OpenCode | Gemini CLI |
315+ | ------| ------------| -------| ----------| ------------|
316+ | 非交互标志 | ` -p ` | ` exec ` 子命令 | ` run ` 子命令 | ` -p ` |
317+ | 管道输入 | ` cat f \| claude -p ` | ` echo x \| codex exec - ` | ` --file ` 附加文件 | ` cat f \| gemini -p ` |
318+ | JSON 输出 | ` --output-format json ` | ` --json ` | ` --format json ` | ` --output-format json ` |
319+ | 指定模型 | ` --model opus ` | ` -m o4-mini ` | ` -m provider/model ` | ` -m gemini-2.5-flash ` |
320+ | 跳过确认 | ` --dangerously-skip-permissions ` | ` --full-auto ` | — | ` --yolo ` |
321+ | 预指定会话 ID | ` --session-id <UUID> ` | — | — | — |
322+ | 恢复指定会话 | ` --resume <ID> ` | ` exec resume <ID> ` | ` -s <ID> ` | ` --resume <ID> ` |
323+ | 继续最近会话 | ` -c ` | ` exec resume --last ` | ` -c ` | ` --resume ` (无参数) |
324+ | 查看会话列表 | — | — | ` session list ` | ` --list-sessions ` |
325+ | 分叉会话 | ` --fork-session ` | — | ` --fork ` | — |
326+
145327## 沙箱管理
146328
147329``` bash
@@ -203,7 +385,7 @@ sandbox vm start --cpu 6 --memory 8 # 自定义资源启动
203385- 路径简短清晰
204386- 不在项目目录内,天然被 ` .gitignore ` 排除
205387
206- 每个沙箱拥有独立的 AI 工具配置目录(如 ` ~/.codex-sandboxes/{branch}/ ` ),避免并发冲突和会话污染。Codex、OpenCode、Gemini CLI 创建沙箱时自动从宿主机预植入认证凭据 ;Claude Code 首次需在容器内 OAuth 登录一次。
388+ 每个沙箱拥有独立的 AI 工具配置目录(如 ` ~/.codex-sandboxes/{branch}/ ` ),避免并发冲突和会话污染。Codex、OpenCode、Gemini CLI 的认证文件通过实时挂载(live mount)与宿主机双向同步,宿主机刷新 token 后容器自动生效 ;Claude Code 首次需在容器内 OAuth 登录一次。
207389
208390> 详细的认证机制说明、注册表字段参考和添加新工具指南请参阅 [ DEVELOPMENT.md] ( DEVELOPMENT.md ) 。
209391
0 commit comments