启动非交互式会话

非交互式会话提供了一种直接从命令行使用 Bob Shell 而无需进入交互式会话的方式,适用于自动化、脚本编写和批处理任务。

何时使用非交互式会话

非交互式会话最适合:

  • 将 Bob Shell 集成到自动化脚本中。
  • 用单个命令处理多个文件。
  • 无需启动交互式会话即可快速获取洞察。
  • 从代码生成文档。
  • 需要结构化 JSON 输出的 CI/CD pipeline。

启动非交互式会话

使用 bob run 子命令从命令行以非交互方式运行 Bob Shell。

语法

bob run [options] [prompt...]

您也可以通过 stdin 管道传入提示词:

echo "Explain this project" | bob run

高效使用技巧

  • 处理大型文件或项目时,请明确指定需要分析的文件。
  • 在脚本中使用 --format json--format stream-json 进行可靠解析。
  • 在自动化工作流中使用 --max-cost--max-turns 限制资源使用。
  • 对于多行提示词,将其保存到文件后管道传给 bob run
cat prompt.txt | bob run

基本用法

直接运行提示词

bob run "Explain this project"

管道输入内容

您可以将文本内容通过管道传给 Bob Shell:

cat buildError.txt | bob run "Explain this build error"

将结果保存到文件

重定向输出以保存结果:

bob run "Review @bigFile.java" > review.md

引用项目文件

使用 @ 符号引用项目中的文件:

bob run "Summarize the functionality in @src/main.js"

设置费用和轮数限制

bob run --max-cost 0.50 --max-turns 10 "Refactor @app.js"

会话管理

恢复之前的会话

bob run --resume <task-id> "Continue from where we left off"
bob run --resume latest "Keep going"

通用实用标志

某些标志直接通过 bob 调用,而非 bob runbob chat。要列出已保存的任务,请运行以下命令:

bob --list-tasks

可用标志如下:

标志描述
--list-tasks [n|all]列出当前工作区的已保存任务并退出。默认为 20。传递数字或 all 以控制显示数量。
--limit <n>使用 --list-tasks 显示的最大任务数。
--show-license显示 IBM 许可协议并退出。

机器可读输出

当 stdout 不是 TTY 时——例如,当您通过管道或重定向输出时——--list-tasks 会从人类可读的表格切换为 NDJSON,每行一个 JSON 对象。

每行的格式如下:

{"id":"<uuid>","title":"<string>","status":"<string>","workspace":"<file-uri>","updatedAt":<unix-ms>}
字段类型描述
idstring (UUID)唯一任务标识符,可与 --resume 一起使用
titlestring任务标题,回退到第一条消息,然后是 id
statusstring任务状态(activecompletedpaused
workspacestring (file URI)工作区的绝对路径,格式为 file: URI
updatedAtnumber最后更新时间戳(Unix 毫秒)

示例

# 通过管道传递给 jq
bob --list-tasks all | jq '.id'

# 保存到文件后处理
bob --list-tasks 100 > tasks.ndjson

# 显示许可协议
bob --show-license

输出格式

--format 选项控制 bob run 的输出方式。在脚本或 CI pipeline 中捕获输出时请使用此选项。

pretty(默认)

适合在终端显示的人类可读文本输出。

json

会话完成后输出单个 JSON 对象。使用此格式可捕获完整结果以供程序化处理。

Schema:

字段类型描述
typestring始终为 "result"
timestampstringISO 8601(日期时间标准)完成时间戳
statusstring"success""error"
statsobject会话统计信息——详见以下字段
stats.task_idstring已完成任务的唯一标识符
stats.total_tokensnumber总 token 使用量
stats.input_tokensnumber输入 token 使用量
stats.output_tokensnumber输出 token 数量
stats.cache_read_tokensnumber从缓存读取的 token 数
stats.cache_write_tokensnumber写入缓存的 token 数
stats.cache_rationumber缓存命中率
stats.duration_msnumber会话持续时间(毫秒)
stats.session_costsnumber会话总费用
stats.tool_callsnumber工具调用次数
last_messagestring最后一条助手消息

示例:

bob run --format json "What is the entry point?" > result.json

stream-json

以换行分隔 JSON(NDJSON)的形式输出——每行一个事件对象——随会话进行实时输出。使用此格式可将输出流式传入 pipeline 或实时处理事件。

事件类型:

事件类型关键字段描述
messagerole, content, isReasoning?用户或助手消息
tool_usetool_name, tool_id, parametersBob 发起的工具调用
tool_resulttool_id, status, output?, error?工具返回的结果
errorseverity, message达到费用/轮数限制
resultstatus, stats, last_message会话结束时输出的最终摘要

Pipeline 示例:

bob run --format stream-json "Audit @src/" \
  | grep '"type":"result"' \
  | jq '.last_message'
注意:

使用 bob run 非交互运行时,所有工具均已预先批准。执行过程中不会提示您批准工具调用。

选项

选项描述
--format <format>输出格式:pretty(默认)、jsonstream-json
--mode <mode>启动模式(例如 agentplanask
--max-cost <bobcoins>会话停止前的最大 Bobcoins 消费上限
--max-turns <n>会话停止前的最大代理轮数
--disable-mcp禁用本次会话的所有 MCP 服务器
--disable-subagents禁用本次会话的子代理生成
--disable-tool-groups <groups>禁用特定工具组(逗号分隔,例如 execute,mcp
--workspace <path>覆盖工作区根目录
--log-level <level>日志详细程度:errorwarninfodebugtrace
--resume <task-id>通过任务 ID 恢复之前的任务
--resume latest恢复最近的任务
--team-id <id>在特定团队上下文下运行(使用 general 类型 API key 时必须提供)
--trust将当前文件夹标记为受信任
--accept-license接受 IBM 许可协议并跳过提示
这个主题怎么样?