OpenCode run 命令入门 — 非交互式单任务、-f 文件附加、--thinking 思维链
简介
在前两篇中,我们完成了 OpenCode 的安装认证和模型选择配置。现在,是时候进入实战环节了。OpenCode 不仅提供了强大的交互式 TUI 模式,还配备了
run子命令——这是将 AI 编程能力整合到自动化工作流、CI/CD 管道和日常脚本中的核心工具。
run 命令以非交互方式执行一次性任务:你给它一段指令,它返回结果,然后退出。没有多余的对话,没有等待用户输入的交互循环。这种模式看似简单,却蕴含着极大的灵活性——通过 -f 参数附加文件、通过 --thinking 启用思维链推理、通过管道串联多个工具,run 命令可以胜任从简单代码补全到复杂项目分析的各种任务。
本篇将带你从零开始掌握 run 命令的方方面面:基本用法、文件附加技巧、思维链模式、输出控制、管道集成,以及在实际开发中的真实应用场景。无论你是想用 AI 自动化代码审查,还是想在 CI 中自动生成文档,本篇都能给你实用的指导。
目录
- run 命令基础
- 基本用法:执行单条指令
- -f 文件附加参数详解
- 附加多个文件
- 使用通配符批量附加
- --thinking 思维链模式
- 输出控制与格式
- 管道集成与自动化
- 实战场景演示
- 高级技巧与最佳实践
- 常见问题排查
- 总结与下篇预告
run 命令基础
什么是 run 命令?
run 是 OpenCode 的非交互式执行模式。与默认的交互模式(你输入、AI 回复、你再输入、AI 再回复)不同,run 模式是「一次性」的:
输入指令 → AI 处理 → 输出结果 → 退出这种模式特别适合:
- 自动化脚本:在 shell 脚本中调用 AI 完成特定任务
- CI/CD 集成:在持续集成流程中加入 AI 代码审查
- 批量处理:对多个文件执行相同的 AI 操作
- 编辑器集成:在编辑器中通过快捷键触发 AI 操作
- 快速验证:不需要完整对话,只要一个答案
run vs 交互模式
| 维度 | 交互模式 (opencode) |
运行模式 (opencode run) |
|---|---|---|
| 交互性 | 多轮对话 | 单次执行 |
| 适用场景 | 探索性编程、学习 | 自动化、脚本、CI/CD |
| 输出 | TUI 界面 | 标准输出 |
| 退出时机 | 用户手动退出 | 任务完成后自动退出 |
| 管道支持 | 有限 | 完整支持 |
| 退出码 | 不适用 | 有意义(0=成功) |
基本语法
opencode run [选项] <prompt>基本用法:执行单条指令
最简单的用法
直接将要执行的指令作为参数传入:
# 解释一段代码
opencode run "解释以下 Python 代码的作用:print([x**2 for x in range(10)])"
# 生成代码
opencode run "用 Go 写一个 HTTP 健康检查端点,返回 JSON 格式的状态信息"
# 修复 bug
opencode run "找出并修复以下代码中的 bug:def divide(a, b): return a / b"指定模型执行
# 用轻量模型处理简单任务(省钱)
opencode run --model openai:gpt-4o-mini \
"将以下代码从 Python 翻译成 JavaScript: def factorial(n): return 1 if n <= 1 else n * factorial(n-1)"
# 用强大模型处理复杂任务
opencode run --model anthropic:claude-sonnet-4-20250514 \
"分析以下架构设计方案的优缺点,并给出改进建议"设置工作目录
# 在特定目录下执行(自动附带该目录的上下文)
cd /path/to/project
opencode run "分析项目结构并生成 README.md"
# 或者使用 -C 参数指定目录
opencode run -C /path/to/project "列出所有 TODO 注释"-f 文件附加参数详解
-f(或 --file)参数允许你将文件内容作为上下文附加到指令中,这是 run 命令最强大的功能之一。
附加单个文件
# 审查单个文件
opencode run -f src/main.py "审查这个文件的代码质量和潜在问题"
# 解释文件内容
opencode run -f config.yaml "解释这个配置文件的作用,每个字段的含义是什么"
# 要求改写
opencode run -f src/utils.py "将这个文件改写为 TypeScript"指定文件别名
# 给文件起个名字,方便在指令中引用
opencode run -f main.py:app -f config.py:cfg \
"解释 app 和 cfg 两个文件的关系"从标准输入读取文件
# 管道输入
cat src/main.py | opencode run -f - "审查这段代码"
# 等价写法
opencode run -f - "审查这段代码" < src/main.py文件编码与大小
- 编码:OpenCode 自动检测文件编码,支持 UTF-8、ASCII、Latin-1 等
- 大小限制:默认单文件最大 100KB,可通过配置调整
- 文件类型:支持所有文本文件,二进制文件会被自动忽略
附加多个文件
多次使用 -f
# 附加多个独立文件
opencode run \
-f src/auth.py \
-f src/models.py \
-f src/routes.py \
"分析这三个文件之间的依赖关系,画出一个架构图"附加目录中的所有文件
# 使用 shell 展开
opencode run -f src/*.py "为整个 src 目录生成文档字符串"
# 使用 find(更灵活)
find src -name "*.py" | xargs -I {} opencode run -f {} "检查代码风格"排除文件
某些文件(如 node_modules、.git、pycache)不应该被附加。可以通过以下方式排除:
# 使用 find 过滤
find src -name "*.py" ! -path "*/tests/*" ! -path "*/__pycache__/*" \
| xargs -I {} opencode run -f {} "检查类型注解完整性"使用通配符批量附加
通配符展开
# 附加所有 Markdown 文件
opencode run -f docs/*.md "生成一份完整的 API 文档"
# 附加特定模式的文件
opencode run -f src/controllers/*.ts -f src/services/*.ts \
"生成模块依赖关系图"递归附加
# 使用 ** 递归匹配(需要 shell 支持 globstar)
shopt -s globstar # bash
opencode run -f src/**/*.py "分析整个项目的代码架构"--thinking 思维链模式
--thinking 是 OpenCode 的一个高级选项,它要求模型在给出最终答案之前,先展示其思考过程。这对于理解 AI 的决策逻辑、调试复杂问题非常有帮助。
基本用法
# 启用思维链模式
opencode run --thinking \
"为什么这段代码会产生内存泄漏?给出详细的分析过程"
# 思维链 + 文件附加
opencode run --thinking -f src/memory_manager.py \
"分析内存管理逻辑,找出可能的泄漏点"思维链 vs 普通模式
普通模式(直接给出答案):
这段代码的内存泄漏在于第 42 行的缓存没有设置上限,
导致随着时间推移,缓存会无限增长。
建议使用 LRU 缓存替换策略...思维链模式(展示推理过程):
让我逐步分析这段代码的内存管理逻辑:
1. 首先,我看到代码在第 15 行创建了一个全局缓存字典...
2. 在第 42 行的 write_cache() 函数中,数据被添加到缓存...
3. 我检查了整个文件,没有找到任何清理缓存的逻辑...
4. 这意味着每次调用 write_cache() 都会增加缓存大小...
5. 在高并发场景下,缓存会以每秒 N 条的速度增长...
6. 解决方案有两个方向:
a. 添加缓存大小限制 + LRU 淘汰策略
b. 使用 TTL 缓存,自动清理过期数据
综合以上分析,我建议采用方案 a + b 的组合...思维链的适用场景
| 场景 | 推荐 --thinking | 原因 |
|---|---|---|
| 简单补全 | ✗ | 不需要推理 |
| Bug 定位 | ✓ | 需要逐步排查 |
| 架构分析 | ✓ | 需要系统性思考 |
| 安全审计 | ✓ | 需要严谨推理 |
| 代码生成 | ✗ | 直接给出结果即可 |
| 性能优化 | ✓ | 需要分析瓶颈 |
思维链与模型的关系
不是所有模型都支持思维链模式。支持度参考:
| 模型 | 思维链支持度 | 效果 |
|---|---|---|
| claude-sonnet-4 | ★★★★★ | 推理过程清晰严谨 |
| o1 | ★★★★★ | 深度推理,步骤详尽 |
| claude-opus-4 | ★★★★★ | 分析最全面 |
| gemini-2.5-pro | ★★★★ | 推理过程较详细 |
| gpt-4o | ★★★ | 有一定推理能力 |
| deepseek-reasoner | ★★★★★ | 专为推理设计 |
| gpt-4o-mini | ★★ | 简单任务可用 |
输出控制与格式
纯文本输出(默认)
# 默认输出到标准输出
opencode run "生成一个 Fibonacci 函数的 Python 实现"
# 重定向到文件
opencode run "生成一个 Fibonacci 函数的 Python 实现" > fibonacci.pyJSON 格式输出
# JSON 格式(适合程序化处理)
opencode run --format json \
"将以下代码中的函数提取出来,返回函数名和参数列表"
# 输出示例:
# {
# "content": "function1(arg1, arg2)\nfunction2(arg3)",
# "model": "gpt-4o",
# "tokens": {"prompt": 150, "completion": 45, "total": 195}
# }安静模式
# 只输出结果,不输出元信息
opencode run --quiet -f src/main.py "提取所有 import 语句"流式输出
# 流式输出(逐步显示,适合长任务)
opencode run --stream \
"分析整个项目的代码架构并生成详细报告"管道集成与自动化
与 shell 管道结合
# Git diff + AI 代码审查
git diff HEAD~1 | opencode run -f - "审查这些变更"
# 查找 TODO 并让 AI 处理
grep -rn "TODO" src/ | opencode run -f - "将这些 TODO 整理成任务清单"
# 错误日志 + AI 诊断
tail -100 /var/log/app.log | opencode run -f - "分析最近的错误日志"在脚本中使用
#!/bin/bash
# ai-review.sh — AI 自动化代码审查脚本
FILE=$1
if [ -z "$FILE" ]; then
echo "用法: $0 <file>"
exit 1
fi
echo "=== AI 代码审查报告 ==="
echo "文件: $FILE"
echo "时间: $(date)"
echo ""
opencode run \
--model anthropic:claude-sonnet-4-20250514 \
--thinking \
-f "$FILE" \
"请对以下代码进行全面审查,包括:
1. 代码质量(命名、结构、可读性)
2. 潜在 bug
3. 安全漏洞
4. 性能问题
5. 改进建议
请按以上 5 个维度逐一分析,给出具体代码行号。"
echo ""
echo "=== 审查完成 ==="在 CI/CD 中使用
# GitHub Actions 示例
name: AI Code Review
on: [pull_request]
jobs:
review:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install OpenCode
run: npm install -g opencode-ai
- name: AI Review Changed Files
env:
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
run: |
git diff --name-only origin/main...HEAD | while read file; do
if [[ "$file" == *.py || "$file" == *.ts || "$file" == *.go ]]; then
echo "## Review: $file" >> review.md
opencode run \
--model anthropic:claude-sonnet-4-20250514 \
--thinking \
-f "$file" \
"审查此文件的代码变更,重点关注 bug 和安全问题" \
>> review.md
echo "" >> review.md
fi
done
- name: Post Review Comment
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const review = fs.readFileSync('review.md', 'utf8');
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: review
});实战场景演示
场景 1:自动生成文档
# 为 Python 模块生成 docstring
opencode run --thinking -f src/database.py \
"为以下 Python 模块中的每个类和函数生成完整的 Google 风格 docstring,
包括参数说明、返回值、异常、使用示例。直接输出修改后的完整代码。" \
> src/database_documented.py场景 2:批量代码审查
# 审查所有 Python 文件
for file in $(find src -name "*.py" ! -path "*/tests/*"); do
echo "审查中: $file"
opencode run \
--model openai:gpt-4o-mini \
--quiet \
-f "$file" \
"找出以下代码中的问题(bug、安全漏洞、性能瓶颈),
如果没有问题,回复'无问题'。
如有问题,按'文件:行号: 问题描述'格式输出。"
done > review-report.txt场景 3:代码翻译/迁移
# Python 转 Go
opencode run -f src/fetcher.py \
"将以下 Python 代码翻译为 Go,保持相同的功能和逻辑结构。
使用 Go 的惯用写法,添加必要的错误处理。" > src/fetcher.go
# 检查翻译后的代码
opencode run --thinking -f src/fetcher.go \
"检查这段 Go 代码是否有问题,特别是并发安全和资源泄漏"场景 4:Git 提交信息生成
# 根据变更生成提交信息
git diff --cached | opencode run -f - \
"根据以下代码变更,生成一条符合 Conventional Commits 规范的提交信息。
格式:<type>(<scope>): <description>
type 可选:feat, fix, refactor, docs, test, chore
只输出一行提交信息,不要其他内容。"场景 5:安全扫描
# 安全审计
opencode run --thinking --model anthropic:claude-opus-4-20250514 \
-f src/auth.py \
-f src/middleware.py \
"对以下认证和安全相关代码进行全面的安全审计,
检查:
1. SQL 注入
2. XSS 漏洞
3. CSRF 防护
4. 认证绕过
5. 敏感信息泄露
6. 加密算法安全性
每个问题给出:严重程度(高/中/低)、具体位置、修复方案。"场景 6:性能分析
# 性能瓶颈分析
opencode run --thinking -f src/data_processor.py \
"分析以下代码的性能瓶颈,包括:
1. 时间复杂度分析
2. 空间复杂度分析
3. 可能的优化方案
4. 优化后的代码实现
优先考虑 Python 特有的优化技巧(如列表推导式、生成器、内置函数等)。"高级技巧与最佳实践
技巧 1:使用提示词模板
将常用任务保存为提示词模板,提高效率:
# ~/.opencode/prompts/review.txt
审查以下代码,关注:
1. 代码可读性
2. 潜在 bug
3. 性能问题
4. 安全漏洞
如有问题,给出具体行号和修复建议。
# 使用
opencode run -f src/main.py "$(cat ~/.opencode/prompts/review.txt)"技巧 2:组合多个 run 命令
# 第一步:生成代码
opencode run "用 Python 写一个快速排序实现" > quicksort.py
# 第二步:审查生成的代码
opencode run --thinking -f quicksort.py \
"审查这段代码的边界情况和性能"
# 第三步:生成测试
opencode run -f quicksort.py \
"为这段代码生成 pytest 单元测试,覆盖所有边界情况" > test_quicksort.py技巧 3:使用退出码判断
#!/bin/bash
# 在脚本中检查 AI 是否成功执行
opencode run --model openai:gpt-4o-mini -f "$1" "检查语法错误" > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "✓ AI 分析完成"
else
echo "✗ AI 分析失败"
exit 1
fi技巧 4:控制输出长度
对于长文件,可以先让 AI 总结,再针对重点部分深入分析:
# 第一步:总结
SUMMARY=$(opencode run --model openai:gpt-4o-mini -f src/large_module.py \
"用 3 句话总结这个模块的功能")
# 第二步:基于总结提问
opencode run --thinking -f src/large_module.py \
"这个模块的功能是:$SUMMARY。请找出其中潜在的性能瓶颈。"最佳实践清单
- 简单任务用轻量模型:
gpt-4o-mini或gemini-2.5-flash处理简单任务,省钱又快速 - 复杂任务启用 thinking:Bug 定位、架构分析等需要推理的任务开启
--thinking - 合理使用 -f:只附加必要的文件,避免上下文过大导致成本上升
- 输出重定向:将结果重定向到文件,便于后续处理
- 错误处理:在脚本中检查退出码,妥善处理 AI 执行失败的情况
- 提示词精确:指令越具体,结果越好。避免模糊描述
- 分批处理:大项目分批处理,不要一次性附加过多文件
常见问题排查
问题 1:`run: command not found`
原因:OpenCode 未正确安装或不在 PATH 中。
解决方案:
# 检查安装
which opencode
# 如果未安装
npm install -g opencode-ai问题 2:文件找不到
原因:文件路径错误或权限不足。
解决方案:
# 检查文件是否存在
ls -la src/main.py
# 检查文件权限
file src/main.py
# 确保使用正确的路径
opencode run -f ./src/main.py "..." # 注意相对路径的 .问题 3:输出被截断
原因:模型输出达到 token 上限。
解决方案:
# 在配置文件中增加 maxTokens
{
"providers": {
"openai": {
"options": {
"maxTokens": 16384
}
}
}
}
# 或在指令中要求模型精简输出
opencode run -f src/large.py "用要点形式输出分析结果,控制在 500 字以内"问题 4:管道输入为空
原因:管道前面的命令没有输出。
解决方案:
# 检查管道上游
git diff HEAD~1 # 确认有变更
# 使用临时文件调试
git diff HEAD~1 > /tmp/diff.txt
cat /tmp/diff.txt | opencode run -f - "审查这些变更"问题 5:思考过程太长
原因:--thinking 模式下模型输出了过长的推理过程。
解决方案:
# 要求模型精简思考过程
opencode run --thinking -f src/buggy.py \
"用不超过 5 个步骤分析这个 bug 的原因。"
# 或者关闭 thinking 模式
opencode run -f src/buggy.py "直接给出 bug 修复方案"问题 6:API 速率限制
原因:短时间内发送了过多请求。
解决方案:
# 在批量处理中添加延迟
for file in src/*.py; do
opencode run -f "$file" "..." >> report.txt
sleep 2 # 每次请求间隔 2 秒
done
# 或使用并行限制
find src -name "*.py" | xargs -P 3 -I {} \
sh -c 'opencode run -f "$1" "..."; sleep 1' _ {}总结与下篇预告
本篇我们全面掌握了 OpenCode 的 run 命令。核心要点回顾:
- run 命令本质:非交互式的单次任务执行模式,适合自动化、脚本和 CI/CD 集成。
- -f 文件附加:支持单文件、多文件、标准输入、通配符等多种方式,是
run命令最核心的参数。 - --thinking 思维链:要求模型展示推理过程,适合 Bug 定位、架构分析、安全审计等需要深度推理的任务。
- 输出控制:支持纯文本、JSON、安静模式、流式输出等多种格式,满足不同场景需求。
- 管道集成:与 shell 管道、Git diff、CI/CD 等工具无缝集成,实现真正的自动化 AI 编程。
- 实战场景:文档生成、代码审查、代码翻译、提交信息生成、安全扫描、性能分析——
run命令几乎可以胜任所有自动化编码任务。
掌握了 run 命令之后,你已经可以将 OpenCode 整合到日常开发工作流中了。但 OpenCode 的能力远不止于此——它还支持工具调用(Tool Use)、MCP 协议集成、自定义 Agent 行为配置等高级功能。这些功能让 OpenCode 不仅能「说」,还能「做」——读写文件、执行命令、调用外部 API,真正成为你的 AI 编程搭档。