| name | using-claude-code-cli |
| description | 当 Codex 需要在本仓库调用 Claude Code CLI 做独立代码分析、诊断、审核、规划,并把报告写入 docs/AI协作/本地Agent 时使用。 |
调用 Claude Code CLI
默认
- 模型:
--model deepseek-v4-pro,不要使用 opus 作为间接映射。
- DeepSeek V4 Pro 约 1M 上下文,适合代码探索、长代码审核、多文件链路复核。
- 推理深度:必须
--effort max,不允许使用更低参数。
- 权限:
--permission-mode bypassPermissions。
- 边界:靠任务文件和提示词约束,只写
docs/AI协作/本地Agent/进行中/... 下的报告,不改业务代码。
- 启动:必须用外部 Windows Terminal + PowerShell 可见窗口,方便人类用户观察过程。
- 默认加
--bare,避免自动加载仓库 .mcp.json。
硬规则
- 禁止在 Codex 内置终端里直接运行
claude ... 来派发任务。
- 禁止用阻塞式 shell 调用 Claude Code。
- 禁止默认使用
-p 非交互模式。
- 派发任务必须通过
Start-Process wt.exe ... run-claude-code-task.ps1 打开外部可见窗口。
- 如确实必须在 Codex 内置终端里运行,必须先向用户请示并说明原因;未获确认时一律使用外部窗口。
- 只有在用户明确要求“不要开窗口 / 后台跑 / 非交互跑”时,才允许偏离外部窗口方式,并要先说明不可见过程的代价。
- 仓库根目录必须取当前 Codex 所在目录,兼容 worktree;禁止把
D:\AI\SA-AIAPP 当成固定根目录写死。
- 本环境实测
--model opus 会落到 deepseek-v4-flash;必须直接传 deepseek-v4-pro。
文件
docs/AI协作/本地Agent/进行中/YYYY-MM-DD_主题/
├── 任务_主题_ClaudeCode.md
└── 报告_主题_ClaudeCode.md
任务文件里写清:
# [任务标题]
## 背景
[把子 Agent 想交给 Claude Code 的完整背景写在这里]
## 任务目标
[把完整提示词、检查清单、输出要求都写在这里]
## 边界
- 可以读取仓库文件。
- 不修改业务代码。
- 只把报告写入:
`docs/AI协作/本地Agent/进行中/[目录]/报告_[主题]_ClaudeCode.md`
不要把大段提示词直接拼进启动命令,也不要另建独立 prompt 文件。子 Agent 要传给 Claude Code 的内容全部写入 任务_主题_ClaudeCode.md。
中文路径可以作为 -TaskPath 参数传给 runner。注意不要把中文提示词或中文路径直接写进临时 .ps1 脚本文本里;runner 脚本固定为 ASCII 英文提示,只引用 TaskPath。之前成功生成报告的调用就是中文 TaskPath。
启动命令
从 Codex 启动一个保留窗口的外部 Windows Terminal。脚本会用交互模式启动 Claude Code,不用 -p:
$repoRoot = (Get-Location).ProviderPath
$taskPath = 'docs/AI协作/本地Agent/进行中/[目录]/任务_[主题]_ClaudeCode.md'
$runner = Join-Path $repoRoot '.codex\skills\using-claude-code-cli\scripts\run-claude-code-task.ps1'
$cmdLine = "new-tab -d `"$repoRoot`" powershell.exe -NoExit -ExecutionPolicy Bypass -File `"$runner`" -TaskPath `"$taskPath`" -RepoRoot `"$repoRoot`" -Model deepseek-v4-pro"
Start-Process -FilePath wt.exe -ArgumentList $cmdLine
续聊派发
优先续指定会话,不长期依赖最近会话。
如果只是借用旧线程上下文做新任务,不想污染原线程,加 -ForkSession。它对应 Claude Code 的 --fork-session。
获取最近会话 ID:
$repoRoot = (Get-Location).ProviderPath
Get-Content "$env:USERPROFILE\.claude\history.jsonl" -Encoding UTF8 |
ConvertFrom-Json |
Where-Object { $_.project -eq $repoRoot } |
Select-Object timestamp, project, sessionId, display |
Sort-Object timestamp -Descending |
Select-Object -First 20
续指定会话:
$repoRoot = (Get-Location).ProviderPath
$taskPath = 'docs/AI协作/本地Agent/进行中/[目录]/任务_[主题]_ClaudeCode.md'
$runner = Join-Path $repoRoot '.codex\skills\using-claude-code-cli\scripts\run-claude-code-task.ps1'
$sessionId = '[从 history.jsonl 查到的 sessionId]'
$cmdLine = "new-tab -d `"$repoRoot`" powershell.exe -NoExit -ExecutionPolicy Bypass -File `"$runner`" -TaskPath `"$taskPath`" -RepoRoot `"$repoRoot`" -Model deepseek-v4-pro -ResumeSessionId `"$sessionId`""
Start-Process -FilePath wt.exe -ArgumentList $cmdLine
从旧会话派生新会话:
$cmdLine = "new-tab -d `"$repoRoot`" powershell.exe -NoExit -ExecutionPolicy Bypass -File `"$runner`" -TaskPath `"$taskPath`" -RepoRoot `"$repoRoot`" -Model deepseek-v4-pro -ResumeSessionId `"$sessionId`" -ForkSession"
Start-Process -FilePath wt.exe -ArgumentList $cmdLine
只在人工确认“当前目录最近会话就是目标会话”时,才用最近会话:
$cmdLine = "new-tab -d `"$repoRoot`" powershell.exe -NoExit -ExecutionPolicy Bypass -File `"$runner`" -TaskPath `"$taskPath`" -RepoRoot `"$repoRoot`" -Model deepseek-v4-pro -ContinueMostRecent"
Start-Process -FilePath wt.exe -ArgumentList $cmdLine
Claude Code 原生命令对应关系如下,仅用于人工排查参数,不作为 Codex 派发任务的默认方式:
claude --bare --model deepseek-v4-pro --effort max --permission-mode bypassPermissions --resume [sessionId] "[一句话:读取任务文档并执行]"
claude --bare --model deepseek-v4-pro --effort max --permission-mode bypassPermissions --continue "[一句话:读取任务文档并执行]"
claude --bare --model deepseek-v4-pro --effort max --permission-mode bypassPermissions --resume [sessionId] --fork-session "[一句话:读取任务文档并执行]"
环境变量说明
Windows Terminal 是从当前 Codex 进程启动的。子进程只继承父进程环境,不会自动重新读取刚改过的系统环境变量。
所以启动脚本会先从 Machine / User 环境变量读取配置,再注入当前进程。逻辑在:
.codex/skills/using-claude-code-cli/scripts/run-claude-code-task.ps1
交互模式说明
脚本实际调用:
claude --bare --model deepseek-v4-pro --effort max --permission-mode bypassPermissions [--resume sessionId 或 --continue] [--fork-session] $prompt
不用 -p,因为非交互模式像黑盒,过程不可见。交互模式对人类用户更友好,必要时用户可以直接在窗口里接管输入。
如需单独检查,可用:
foreach ($name in @('ANTHROPIC_API_KEY','ANTHROPIC_BASE_URL','ANTHROPIC_AUTH_TOKEN','ANTHROPIC_MODEL','ANTHROPIC_SMALL_FAST_MODEL','CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC')) {
[pscustomobject]@{
Name = $name
Process = [bool][Environment]::GetEnvironmentVariable($name, 'Process')
User = [bool][Environment]::GetEnvironmentVariable($name, 'User')
Machine = [bool][Environment]::GetEnvironmentVariable($name, 'Machine')
}
}