ワンクリックで
using-opencode-cli
当 Codex 需要调用 OpenCode CLI 做本地 Agent 任务时使用,包括代码审核、结构分析、方案规划、替代 Claude Code,以及需要持续利用 DeepSeek Pro 1M 长上下文的多轮项目线程。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
当 Codex 需要调用 OpenCode CLI 做本地 Agent 任务时使用,包括代码审核、结构分析、方案规划、替代 Claude Code,以及需要持续利用 DeepSeek Pro 1M 长上下文的多轮项目线程。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
当用户需要制作或编辑固定分页 HTML、InDesign 演示文稿、建筑汇报或排版文档,转换 HTML 与 InDesign,修改现有 INDD,或填充既有 InDesign 模板时使用。
在任何创造性工作前使用:创建功能、构建组件、增加能力或修改行为。用于在实现前澄清用户意图、需求和设计。
当用户要求在 SA-AIAPP 项目中询问 ChatGPT/GPT Pro、让外部模型审核当前 GitHub 分支、做画布/前端/后端/架构二次审查时使用。
遇到 2 个及以上彼此独立、无需共享状态或串行依赖的任务时使用
当你已有书面实施计划,并准备在单独会话中按评审检查点执行时使用
当实现完成、测试全部通过且需要决定如何集成成果时使用;它会引导你在合并、提 PR 或清理分支之间做结构化选择
| name | using-opencode-cli |
| description | 当 Codex 需要调用 OpenCode CLI 做本地 Agent 任务时使用,包括代码审核、结构分析、方案规划、替代 Claude Code,以及需要持续利用 DeepSeek Pro 1M 长上下文的多轮项目线程。 |
pwsh。不要用 Windows PowerShell 5.1。deepseek/deepseek-v4-pro。--variant max。sessionID。DeepSeek Pro 有 1M 长上下文。相关任务不要频繁新开线程;上下文积累较多时,它通常更适合做大仓库、多文件、多轮复核。只有任务主题已经切换,或旧上下文会污染判断,才新开线程。想借旧上下文但不污染原线程时,用 --fork 或脚本的 -ForkSession。
| 场景 | 模式 | 默认做法 |
|---|---|---|
| 单次正式调用、用户想看过程、可能人工接管 | 人工观察 | 脚本打开外部 Windows Terminal,可用 -Prompt 或 -TaskPath |
| 多轮持续调用、长时间审核、需要反复查询状态 | 脚本托管 | 后台运行,返回 RunDir,再按状态摘要查询 |
| 1-2 分钟短问、连通性测试 | 前台托管 | 原生 opencode run --format json,过滤后只打印 SESSION: 和正文 |
不要把三轮、五轮循环包进同一个 PowerShell 命令里。那样 Codex 不能基于上一轮反馈临场改下一轮提示词。
不要把前台托管用于正式长任务。Codex 的 shell 命令有外层等待限制,且长时间没有正文时看起来像“无输出”。单次正式调用默认用人工观察;需要多轮持续调用或长时间后台任务时,才用脚本托管;短问或连通性测试才用前台托管。
不要用顶层 TUI 入口 opencode [project] 作为观察模式。该入口当前命令行不接收 --variant,会导致推理深度不能锁定 max。
这是单次正式调用的默认入口。人工观察会打开外部 Windows Terminal,并在 Codex 前台稀疏监控摘要。窗口里能看到 OpenCode 过程,用户也能接管。
直接提示词,适合“一句话 + 任务文档路径 + 临时补充”:
$repoRoot = (Get-Location).ProviderPath
$runner = Join-Path $repoRoot '.codex\skills\using-opencode-cli\scripts\run-opencode-task.ps1'
$prompt = @'
请读取这个任务文档并执行:docs/AI协作/本地Agent/进行中/[目录]/任务_[主题]_OpenCode.md
额外说明:这次只做交互式审核,先不要写输出文档,直接在当前会话说结论。
'@
& $runner -Prompt $prompt -RepoRoot $repoRoot -Mode observe
完整提示词文件:
$repoRoot = (Get-Location).ProviderPath
$taskPath = 'docs/AI协作/本地Agent/进行中/[目录]/任务_[主题]_OpenCode.md'
$runner = Join-Path $repoRoot '.codex\skills\using-opencode-cli\scripts\run-opencode-task.ps1'
& $runner -TaskPath $taskPath -RepoRoot $repoRoot -Mode observe
默认监控:
session.idle 后,前台监控会读取最后摘要并停止。MaxUpdates 只是防止无限等待的兜底。常用参数:
# 调整监控频率
& $runner -Prompt $prompt -RepoRoot $repoRoot -Mode observe -WatchIntervalSeconds 90 -WatchMaxUpdates 20
# 只打开窗口,不让 Codex 自动监控
& $runner -Prompt $prompt -RepoRoot $repoRoot -Mode observe -NoWatch
# 续指定线程
& $runner -Prompt $prompt -RepoRoot $repoRoot -Mode observe -SessionId 'ses_xxx'
只有需要多轮持续调用、长时间后台运行、状态摘要、统一清理临时文件时,才用脚本托管。
$repoRoot = (Get-Location).ProviderPath
$runner = Join-Path $repoRoot '.codex\skills\using-opencode-cli\scripts\run-opencode-task.ps1'
& $runner -Prompt '请用中文检查 desktop-electron/src/... 有没有明显风险。' -RepoRoot $repoRoot -Mode managed
续同一线程:
& $runner -Prompt '请继续上一轮审核。' -RepoRoot $repoRoot -Mode managed -SessionId 'ses_xxx'
查询状态:
$status = Join-Path $repoRoot '.codex\skills\using-opencode-cli\scripts\get-opencode-task-status.ps1'
& $status -RunDir 'tmp/local-agent-runs/[run-dir]' -RepoRoot $repoRoot
单独监控已知线程:
$watch = Join-Path $repoRoot '.codex\skills\using-opencode-cli\scripts\watch-opencode-task-output.ps1'
& $watch -SessionId 'ses_xxx' -RepoRoot $repoRoot -IntervalSeconds 60 -MaxUpdates 30 -OnlyOnChange -HeartbeatUpdates 5
监控不是读取外部窗口屏幕文本,而是临时执行 opencode export [sessionID] 后提取轻量摘要。插件 plugins/codex-opencode-signal.js 只写 session.created、session.idle、session.error 这种轻量信号。
只用于短问、连通性测试、快速复核。不用于正式长任务。输出只保留线程 ID 和 DeepSeek 正文;完整 JSON 不直接展示。
$repoRoot = (Get-Location).ProviderPath
$prompt = @'
请用中文回答两句话:确认 OpenCode 可用,并说明不需要读取项目文件。
'@
$seenSession = $false
$prompt | opencode run --model deepseek/deepseek-v4-pro --variant max --format json --dir $repoRoot | ForEach-Object {
if ([string]::IsNullOrWhiteSpace($_)) { return }
try {
$event = $_ | ConvertFrom-Json
if (-not $seenSession -and $event.sessionID) {
"SESSION: $($event.sessionID)"
$seenSession = $true
}
if ($event.type -eq 'text' -and $event.part.text) {
$event.part.text
}
} catch {
$_
}
}
人读的协作文档默认放 docs/AI协作/,但这只是默认建议,不是固定路径。
docs/AI协作/本地Agent/进行中/YYYY-MM-DD_主题/
├── 任务_主题_OpenCode.md
└── 输出_主题_OpenCode.md
输出文档是可选的。需要长期留档、人读复盘、正式审核时才要求 OpenCode 写输出文档。普通任务可以只在会话里输出结论。
机器过程文件放 tmp/,不得进入 git:
tmp/local-agent-runs/YYYY-MM-DD_HHMMSS_主题_hash/
├── metadata.json
├── status.json
├── opencode-summary.txt
├── opencode-hook-status.json
└── opencode-stderr.log
opencode-events.ndjson 默认不保留。只有调试时显式加 -KeepEvents,并且不要把它读进 Codex 上下文。
shell_command 外层如果用 @' ... '@ 包整段命令,内层 $prompt 不要再用 @' ... '@,改用 @" ... "@。外层和内层不要使用同一种 here-string。opencode run [message] 参数。提示词文件模板:
# [任务标题]
## 背景
[仓库、分支、相关文档、已知验证结果]
## 任务目标
[检查清单、输出要求、重点文件范围]
## 边界
- 可以读取仓库文件。
- 默认不修改业务代码。
- 如需留档,写入指定输出路径;未指定时可用默认建议路径。
- 如无需留档,直接在当前会话输出最终结论。
常用命令:
opencode session list
opencode export ses_xxx
规则:
sessionID。--continue 或脚本的 -ContinueMostRecent。--fork 或脚本的 -ForkSession。如果 opencode models deepseek --refresh 提示 Provider not found: deepseek,先升级:
opencode upgrade latest
如果仍没有 deepseek provider,再检查项目或全局 opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"provider": {
"deepseek": {
"npm": "@ai-sdk/openai-compatible",
"name": "DeepSeek",
"options": {
"baseURL": "https://api.deepseek.com/v1",
"apiKey": "{env:DEEPSEEK_API_KEY}"
},
"models": {
"deepseek-v4-pro": {
"name": "DeepSeek V4 Pro"
}
}
}
}
}
验证:
opencode --version
opencode models deepseek --refresh
opencode run --model deepseek/deepseek-v4-pro --variant max --format json "Return one short hello."
| 错误 | 处理 |
|---|---|
忘记 --variant max | 停止重跑,正式分析必须锁定 max |
| 每次追问都新开线程 | 续同一专项的 sessionID |
| 把多轮循环包进一个 shell 命令 | 改成一轮一个命令,由 Codex 读反馈后决定下一轮 |
| 正式长任务用前台托管硬等 | 改用脚本托管,拿 RunDir 后查询状态 |
| PowerShell here-string 嵌套后命令直接退出 | 外层 @' ... '@ 时,内层 $prompt 用 @" ... "@ |
| 直接提示词里塞太多背景 | 改用提示词文件 |
| 不需要长期留档却强制写输出文档 | 让 OpenCode 直接在会话里输出结论 |
| 想监控观察模式却去抓窗口 | 用 watch-opencode-task-output.ps1 或观察模式默认监控 |
把 opencode-events.ndjson 放进 docs/AI协作/ | 移到 tmp/local-agent-runs/,默认不保留 |