
OpenCode 非交互式模式完整指南-p 参数、JSON 输出与工作流集成【免费下载链接】termaiA powerful AI coding agent. Built for the terminal.项目地址: https://gitcode.com/gh_mirrors/te/termai把 AI 助手写进脚本第一件事就会被卡住OpenCode 默认启动的是一个全屏的交互式界面没有地方让你敲回车也没有打印一行结果就退出的出口。解决办法是它的非交互式模式带上-p参数传一个提示词程序跑完就返回、进程退出stdout 里只剩答案。下面直接围绕这个模式展开。哪些任务适合切到非交互模式判断标准很简单这次调用需不需要人盯着屏幕。批量处理对一整个目录的代码做重复操作统一检查、统一改写注释你不需要每次回答是否允许修改文件。CI/CD 流水线在持续集成构建里嵌入一个代码审查或文档生成步骤流水线没有终端 UI只需要一行命令加一个退出码。给其他程序当后端Python、Node 或其他 Go 服务通过子进程调用它拿回结构化文本。只要结构化日志调用方是脚本而不是人输出必须是可解析的 JSON 而不是终端花屏。跑通第一条命令最小可用命令长这样opencode -p 用 Go 写一个读取 JSON 文件的示例 opencode -p 分析这段代码的时间复杂度 -f json用到的参数一共五个-p提示词也是触发非交互模式的开关不带它就直接进交互界面-f输出格式text默认或json写错值会直接报错退出-q隐藏运行中的转圈指示器spinner 是任务执行时的等待动画批量跑时输出更干净-d打开调试日志-c指定工作目录等于先cd再执行适合批处理时锁定项目路径提示词本身建议写得像给同事的任务单说清楚目标文件和期望输出比一句帮我看看代码有用得多。把输出变成可解析的 JSON加上-f json后成功时 stdout 是一个 JSON 对象结构比很多文档吹的要简单——就一个字段{ response: 时间复杂度为 O(n log n)排序发生在 merge 步骤…… }AI 的回答放在response里转义、缩进都由程序处理你只管按这个结构去解包。错误则走完全不同的路不会输出一段错误 JSON。当 agent 处理失败时模型不可用、请求被中断等进程以非零退出码结束错误信息打在 stderrstdout 为空。所以程序化解析的完整判法是先看退出码等于 0 再解析response非零就记为失败别去 parse stdout。接入你自己的工作流Python 里当工具函数用subprocess 调一下拿到 JSON 再解包import subprocess, json r subprocess.run( [opencode, -f, json, -q, -p, 分析 requirements.txt 的依赖冲突], capture_outputTrue, textTrue, checkFalse, ) if r.returncode ! 0: raise RuntimeError(r.stderr) print(json.loads(r.stdout)[response])注意-q别省spinner 会往 stderr 写动画字符混进日志很难看关掉它 stdout 才是纯 JSON。Shell 里批量扫文件for f in $(find ./internal -name *.go); do opencode -f json -q -c . -p 检查 $f 的并发安全问题只输出结论 done配合-c固定工作目录循环里就不用担心相对路径漂移。想落盘就重定向到文件想即时看就让它直接打屏。在 CI 里做审查门禁在流水线里加一步opencode -f json -q -p 审查本次 diff 的安全风险 review.json。然后单独写一个校验步骤退出码非零就exit 1让流水线失败退出码为零再解析review.json发通知。关键习惯是把调用和校验拆成两步别在一条命令里又跑又判。内部到底发生了什么理解这条链路后排查问题会快很多。顺序是cmd/root.go 的RunE读到-p非空确认走非交互分支同时校验-f的值是否合法加载配置环境变量带OPENCODE_前缀 项目根目录的.opencode.json 全局默认值逐层合并连本地数据库SQLite负责会话持久化创建一个新会话非交互模式下该会话的权限请求被自动批准不会再弹是否允许执行命令internal/app/app.go 的RunNonInteractive起 spinner-q时不起把提示词交给 coder agent 执行拿到回复后按-f格式输出到 stdout进程退出也就是说即使没有界面OpenCode 依然是完整的 agent能读写文件、跑 shell只是不再问你。几个容易踩的坑参数优先级命令行参数 OPENCODE_前缀的环境变量 .opencode.json 内置默认。配置写在文件里又被环境变量覆盖时用-d跑一次看日志加载的是哪个文件。编码JSON 输出是 UTF-8中文内容无需额外处理终端乱码先检查终端 locale 是否为 UTF-8而不是怀疑工具。长提示词超过 shell 单条命令长度限制时把提示词写进文件再$(cat prompt.txt)注入比转义引号可靠。.opencode.json里没有的输出格式项output-format只能通过-f传别往配置文件里写不存在的键模型选择agents、API Keyproviders、contextPaths这些才是配置该管的事。收尾几条实践脚本里永远带-f json -q给人看的调用才用默认文本模式先判退出码再解析 JSON失败分支处理 stderr用contextPaths或opencode.md把项目约定沉淀下来减少每条提示词里的重复背景批处理固定-c指定工作目录避免路径漂移【免费下载链接】termaiA powerful AI coding agent. Built for the terminal.项目地址: https://gitcode.com/gh_mirrors/te/termai创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考