别再到处找 YOLO 开关了:6 个 AI Agent 一键进入高自主模式
先说结论
AI Agent 工具里的
yolo,本质不是“更聪明”,而是“少问你”。它会减少或跳过工具调用确认框,让 Agent 更像无人值守脚本一样连续执行。问题在于,不同工具的叫法完全不统一:Codex 是危险旁路 approval 和 sandbox;Claude Code 是跳过权限检查或使用 bypass 权限模式;Gemini CLI 和 Qwen Code 有--approval-mode=yolo;OpenCode 是--auto加 permission 规则;Aider 是--yes-always。这篇文章给出一个统一做法:不要偷偷覆盖原来的
codex、claude、gemini命令,而是安装一个显式的agent-yolo启动器。你想高自主时才输入agent-yolo codex、agent-yolo claude、agent-yolo gemini。这样一次搞定常见 Agent 的 YOLO 命令,又不会把日常安全模式改坏。文中脚本覆盖 Windows 11、Ubuntu 26.04、macOS 26,不依赖第三方服务,不安装缺失工具,也不包含任何真实内网地址、完整计算机名、私有域名、令牌或密钥。

图 1:AI 生成封面。YOLO 模式不是魔法按钮,更像带护栏的高速通道。
一、问题背景:为什么每个 Agent 都有自己的“别问我,直接干”
用 AI Agent 写代码、改配置、整理仓库时,最常见的卡顿不是模型不会做,而是它每隔几步就停下来问你:能不能读这个文件?能不能改这个文件?能不能跑这条命令?能不能安装依赖?能不能执行测试?
这些确认框有价值。它们像家门口的门禁:陌生人来敲门,先问一句很合理。但如果你已经在自己的临时项目、一次性沙箱、干净测试仓库里,让 Agent 连续做几十个机械步骤,每一步都问,就像你搬家时每拿一个纸箱都要刷一次门禁。安全是安全,效率也确实被打断。
所以很多 Agent 工具都提供了“高自主模式”。大家口头上常把它叫 YOLO。这个词在这里不是鼓励鲁莽,而是代表“自动批准更多动作”。真正麻烦的是,每个工具的开关名字不同,有的叫 --yolo,有的叫 --approval-mode=yolo,有的叫 --dangerously-skip-permissions,有的根本不叫 yolo。
如果只靠记忆,很容易出现三类问题:
第一,找错参数。你给 OpenCode 加 --yolo,它可能根本不认;你给 Gemini 继续用旧 --yolo,虽然还能用,但官方已经把统一写法放到 approval mode 上。
第二,过度放权。你只是想让 Agent 自动改项目文件,却顺手关掉了 sandbox,让它拿到和你终端一样大的权限。
第三,隐式污染。你把 codex 直接 alias 成危险模式,几天后忘了这件事,在重要仓库里随手启动,风险就变成了默认值。

图 2:推荐流程不是“永久改默认”,而是显式进入、留下记录、任务结束后回到安全档。
二、问题表现:你只是想一键 YOLO,最后变成了一堆散装参数
我自己遇到的典型场景是这样的:一个项目要做批量改造,比如统一格式化、补测试、批量改 Markdown 链接、迁移配置字段。这类任务不难,但步骤多。让 Agent 一步步做,它会频繁请求确认;手工确认到最后,人比 Agent 更累。
于是你开始查命令:
codex --dangerously-bypass-approvals-and-sandbox
claude --dangerously-skip-permissions
gemini --approval-mode=yolo
qwen --approval-mode=yolo
opencode --auto
aider --yes-always
看起来也不多,但真正用起来会出问题。工具一多,你会忘记哪个是下划线、哪个是短横线、哪个是旧别名、哪个还会顺便启用 sandbox、哪个只是自动回答确认问题。更现实的是,Windows、Linux、macOS 三台机器上 shell 不一样,PowerShell、Bash、Zsh 的别名和 profile 写法也不一样。
这就像家里有六把遥控器:电视、空调、投影、音响、机顶盒、灯光。每个遥控器都能用,但你每次都要找半天。最好的办法不是把所有遥控器拆了重焊,而是放一个清楚标注的万能遥控器,并且保留原遥控器。
本文的 agent-yolo 就是这个万能遥控器。它不安装模型,不改 API,不替你申请账号,不联网调用服务。它只做一件事:把“我现在明确要高自主运行某个 Agent”这件事变成一条统一命令。

图 3:同一个目标,不同工具的实现并不一样。不要把所有工具都想象成同一个 --yolo。
三、问题分析:YOLO 模式到底放开了什么
理解 YOLO 模式,可以把 Agent 想象成一个很能干的实习生。普通模式下,实习生每次要拿钥匙、开柜子、动文件、跑机器,都会问你一句。YOLO 模式下,你相当于提前说:“这间实验室里的常规动作,我都先批准了。”
这会提高效率,但也改变了风险模型。
Codex 的帮助信息把 --dangerously-bypass-approvals-and-sandbox 写得很直白:跳过确认提示,并在没有 sandbox 的情况下执行命令,且标注为极度危险,只适合外部已经做好隔离的环境。换句话说,它不只是“少问”,还可能是“把护栏也拆了”。如果你的目标只是减少交互,优先考虑在一次性容器、临时目录、干净 worktree 中使用。

图 4:Codex 的高自主开关必须当成危险操作看待,尤其要注意 approval 与 sandbox 是两件事。
Claude Code 的命令行也很明确:--dangerously-skip-permissions 会绕过权限检查,并建议只在无互联网访问的沙箱中使用。新版 Claude Code 还提供 --permission-mode,其中包含 bypassPermissions 这类模式。这里的重点不是“哪条更酷”,而是你要知道自己在绕过什么。

图 5:Claude Code 可以用危险跳过权限,也可以通过 permission mode 表达会话权限。
Gemini CLI 的情况更像“官方把旧叫法收束到新叫法”。它仍有 -y / --yolo,但帮助信息里同时给出 --approval-mode,可选值包括 default、auto_edit、yolo、plan。如果写自动化脚本,我更推荐 gemini --approval-mode=yolo,因为它直接说明这是 approval mode,不只是一个口号。

图 6:Gemini CLI 仍支持 --yolo,但 --approval-mode=yolo 更适合写进统一启动器。
OpenCode 则不同。它的官方文档把 permission 规则分成 allow、ask、deny,并提供 --auto 自动批准未被明确拒绝的权限请求。这个模型更像公司门禁白名单:你可以规定哪些门直接放行、哪些门必须问保安、哪些门永远不许进。

图 7:OpenCode 的核心不是一个叫 yolo 的按钮,而是 permission 规则和 --auto。
Aider 更直接,配置项里有 --yes-always,意思是总是对确认问题回答 yes。它适合明确知道自己要让 Aider 连续执行的场景,但仍然要注意当前 Git 仓库是否干净、是否有可回滚提交。

图 8:Aider 的 --yes-always 更像自动按确认键,不等于自动帮你理解所有风险。
四、问题根因:大家都叫“自动批准”,但安全边界不是一回事
这类混乱的根因,是我们把三件不同的事情都叫成了 YOLO。
第一件事是 approval,也就是“是否需要人点确认”。Gemini、Qwen 的 approval-mode 主要表达这个意思。default 是要问,auto_edit 是自动批准编辑类工具,yolo 是更多工具都自动批准。
第二件事是 sandbox,也就是“就算批准了,命令能不能碰到真实系统”。Codex 把危险旁路和 sandbox 放在一起警告,就是因为 approval 和 sandbox 都很关键。你可以允许 Agent 自动跑命令,但仍然把它关在容器里;也可以让它少问,但只允许写当前项目目录。
第三件事是 permission rules,也就是“哪些动作永远允许、哪些动作永远禁止、哪些动作要问”。OpenCode 这类工具更强调规则。它不是问“要不要 YOLO”,而是问“哪些权限规则应该怎样解析”。
打个小学生也能懂的比方:approval 是老师每次问不问你“能不能去操场”;sandbox 是操场有没有围栏;permission rules 是规定哪些区域能去、哪些区域不能去。只说“放学自由活动”是不够的,因为自由活动也可能是在操场里自由,或者是整个城市里自由,风险完全不是一个级别。
所以我的解决思路是:不要强行把所有工具配置成同一种内部状态,只把入口统一。入口叫 agent-yolo,里面根据不同工具调用它自己的官方参数。这样既能一键,又不撒谎。
五、如何解决:人工自动执行
下面三套脚本分别适配 Windows 11、Ubuntu 26.04、macOS 26。它们默认只预演,不真正安装。确认输出后,再加执行开关。脚本只创建一个 agent-yolo 启动器,不安装缺失工具,不调用任何 AI API,不修改真实项目文件。
安装后常用方式如下:
agent-yolo list
agent-yolo codex
agent-yolo claude
agent-yolo gemini
agent-yolo qwen
agent-yolo opencode
agent-yolo aider
5.1 Windows 11:PowerShell 一键安装脚本
保存为 Install-AgentYolo-Windows11.ps1,先预演:
powershell -ExecutionPolicy Bypass -File .\Install-AgentYolo-Windows11.ps1
确认后安装:
powershell -ExecutionPolicy Bypass -File .\Install-AgentYolo-Windows11.ps1 -Install
脚本如下:
param(
[switch]$Install,
[string]$TargetDir = "$HOME\bin"
)
$ErrorActionPreference = "Stop"
$Launcher = Join-Path $TargetDir "agent-yolo.ps1"
$DryRun = -not $Install
$LauncherBody = @'
param(
[Parameter(Position=0)]
[string]$Tool,
[Parameter(ValueFromRemainingArguments=$true)]
[string[]]$Rest
)
function Show-Usage {
Write-Host "Usage:"
Write-Host " agent-yolo.ps1 list"
Write-Host " agent-yolo.ps1 codex [args...]"
Write-Host " agent-yolo.ps1 claude [args...]"
Write-Host " agent-yolo.ps1 gemini [args...]"
Write-Host " agent-yolo.ps1 qwen [args...]"
Write-Host " agent-yolo.ps1 opencode [args...]"
Write-Host " agent-yolo.ps1 aider [args...]"
}
function Require-Command($Name) {
if (-not (Get-Command $Name -ErrorAction SilentlyContinue)) {
throw "$Name is not installed or not in PATH. This launcher does not install AI tools."
}
}
if ([string]::IsNullOrWhiteSpace($Tool)) {
Show-Usage
exit 2
}
switch ($Tool.ToLowerInvariant()) {
"list" {
foreach ($name in "codex","claude","gemini","qwen","opencode","aider") {
$cmd = Get-Command $name -ErrorAction SilentlyContinue
if ($cmd) { "{0,-10} {1}" -f $name, $cmd.Source } else { "{0,-10} not found" -f $name }
}
}
"codex" {
Require-Command codex
& codex --dangerously-bypass-approvals-and-sandbox @Rest
}
"claude" {
Require-Command claude
& claude --dangerously-skip-permissions @Rest
}
"gemini" {
Require-Command gemini
& gemini --approval-mode=yolo @Rest
}
"qwen" {
Require-Command qwen
& qwen --approval-mode=yolo @Rest
}
"opencode" {
Require-Command opencode
& opencode --auto @Rest
}
"aider" {
Require-Command aider
& aider --yes-always @Rest
}
default {
Show-Usage
exit 2
}
}
'@
Write-Host "Mode: $(if ($DryRun) { 'DRY-RUN' } else { 'INSTALL' })"
Write-Host "Launcher: $Launcher"
Write-Host "The original codex/claude/gemini/qwen/opencode/aider commands will not be overwritten."
if ($DryRun) {
Write-Host "Dry-run only. Re-run with -Install to create the launcher."
exit 0
}
New-Item -ItemType Directory -Force -Path $TargetDir | Out-Null
Set-Content -LiteralPath $Launcher -Value $LauncherBody -Encoding UTF8
$UserPath = [Environment]::GetEnvironmentVariable("Path", "User")
if (($UserPath -split ";") -notcontains $TargetDir) {
[Environment]::SetEnvironmentVariable("Path", "$UserPath;$TargetDir", "User")
Write-Host "Added $TargetDir to the user PATH. Open a new terminal before using agent-yolo.ps1."
}
Write-Host "Installed. Try:"
Write-Host " powershell -ExecutionPolicy Bypass -File $Launcher list"
Write-Host " powershell -ExecutionPolicy Bypass -File $Launcher gemini"
Windows 下我没有强行创建名为 codex-yolo、claude-yolo 的一堆别名,因为 PowerShell profile 每个人不一样。统一用一个 agent-yolo.ps1,更容易审计,也更容易删除。
5.2 Ubuntu 26.04:Bash 一键安装脚本
保存为 install-agent-yolo-ubuntu2604.sh,先预演:
bash install-agent-yolo-ubuntu2604.sh
确认后安装:
EXECUTE=1 bash install-agent-yolo-ubuntu2604.sh
脚本如下:
#!/usr/bin/env bash
set -euo pipefail
EXECUTE="${EXECUTE:-0}"
TARGET_DIR="${TARGET_DIR:-$HOME/.local/bin}"
LAUNCHER="$TARGET_DIR/agent-yolo"
PROFILE_FILE="${PROFILE_FILE:-$HOME/.bashrc}"
echo "Mode: $([ "$EXECUTE" = "1" ] && echo INSTALL || echo DRY-RUN)"
echo "Launcher: $LAUNCHER"
echo "Profile: $PROFILE_FILE"
echo "Original AI agent commands will not be overwritten."
if [ "$EXECUTE" != "1" ]; then
echo "Dry-run only. Re-run with: EXECUTE=1 bash $0"
exit 0
fi
mkdir -p "$TARGET_DIR"
cat > "$LAUNCHER" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
tool="${1:-}"
if [ -z "$tool" ]; then
cat <<'USAGE'
Usage:
agent-yolo list
agent-yolo codex [args...]
agent-yolo claude [args...]
agent-yolo gemini [args...]
agent-yolo qwen [args...]
agent-yolo opencode [args...]
agent-yolo aider [args...]
USAGE
exit 2
fi
shift || true
need() {
command -v "$1" >/dev/null 2>&1 || {
echo "$1 is not installed or not in PATH. This launcher does not install AI tools." >&2
exit 127
}
}
case "$tool" in
list)
for name in codex claude gemini qwen opencode aider; do
if command -v "$name" >/dev/null 2>&1; then
printf '%-10s %s\n' "$name" "$(command -v "$name")"
else
printf '%-10s not found\n' "$name"
fi
done
;;
codex)
need codex
exec codex --dangerously-bypass-approvals-and-sandbox "$@"
;;
claude)
need claude
exec claude --dangerously-skip-permissions "$@"
;;
gemini)
need gemini
exec gemini --approval-mode=yolo "$@"
;;
qwen)
need qwen
exec qwen --approval-mode=yolo "$@"
;;
opencode)
need opencode
exec opencode --auto "$@"
;;
aider)
need aider
exec aider --yes-always "$@"
;;
*)
echo "Unknown tool: $tool" >&2
exit 2
;;
esac
EOF
chmod 0755 "$LAUNCHER"
if ! printf '%s' "$PATH" | tr ':' '\n' | grep -Fxq "$TARGET_DIR"; then
touch "$PROFILE_FILE"
if ! grep -Fq "$TARGET_DIR" "$PROFILE_FILE"; then
{
echo ''
echo '# agent-yolo launcher'
echo 'export PATH="$HOME/.local/bin:$PATH"'
} >> "$PROFILE_FILE"
fi
echo "Added PATH line to $PROFILE_FILE. Open a new shell or run: source $PROFILE_FILE"
fi
echo "Installed. Try:"
echo " agent-yolo list"
echo " agent-yolo gemini"
Ubuntu 上建议在临时 worktree、一次性容器或至少 Git 状态干净的项目中使用。agent-yolo codex 这种命令非常明确,别人看 shell history 也能知道你当时是高自主运行,而不是普通运行。
5.3 macOS 26:Zsh 一键安装脚本
保存为 install-agent-yolo-macos26.sh,先预演:
zsh install-agent-yolo-macos26.sh
确认后安装:
EXECUTE=1 zsh install-agent-yolo-macos26.sh
脚本如下:
#!/usr/bin/env zsh
set -euo pipefail
EXECUTE="${EXECUTE:-0}"
TARGET_DIR="${TARGET_DIR:-$HOME/.local/bin}"
LAUNCHER="$TARGET_DIR/agent-yolo"
PROFILE_FILE="${PROFILE_FILE:-$HOME/.zshrc}"
echo "Mode: $([[ "$EXECUTE" == "1" ]] && echo INSTALL || echo DRY-RUN)"
echo "Launcher: $LAUNCHER"
echo "Profile: $PROFILE_FILE"
echo "Original AI agent commands will not be overwritten."
if [[ "$EXECUTE" != "1" ]]; then
echo "Dry-run only. Re-run with: EXECUTE=1 zsh $0"
exit 0
fi
mkdir -p "$TARGET_DIR"
cat > "$LAUNCHER" <<'EOF'
#!/usr/bin/env zsh
set -euo pipefail
tool="${1:-}"
if [[ -z "$tool" ]]; then
cat <<'USAGE'
Usage:
agent-yolo list
agent-yolo codex [args...]
agent-yolo claude [args...]
agent-yolo gemini [args...]
agent-yolo qwen [args...]
agent-yolo opencode [args...]
agent-yolo aider [args...]
USAGE
exit 2
fi
shift || true
need() {
command -v "$1" >/dev/null 2>&1 || {
echo "$1 is not installed or not in PATH. This launcher does not install AI tools." >&2
exit 127
}
}
case "$tool" in
list)
for name in codex claude gemini qwen opencode aider; do
if command -v "$name" >/dev/null 2>&1; then
printf '%-10s %s\n' "$name" "$(command -v "$name")"
else
printf '%-10s not found\n' "$name"
fi
done
;;
codex)
need codex
exec codex --dangerously-bypass-approvals-and-sandbox "$@"
;;
claude)
need claude
exec claude --dangerously-skip-permissions "$@"
;;
gemini)
need gemini
exec gemini --approval-mode=yolo "$@"
;;
qwen)
need qwen
exec qwen --approval-mode=yolo "$@"
;;
opencode)
need opencode
exec opencode --auto "$@"
;;
aider)
need aider
exec aider --yes-always "$@"
;;
*)
echo "Unknown tool: $tool" >&2
exit 2
;;
esac
EOF
chmod 0755 "$LAUNCHER"
if ! print -r -- "$PATH" | tr ':' '\n' | grep -Fxq "$TARGET_DIR"; then
touch "$PROFILE_FILE"
if ! grep -Fq "$TARGET_DIR" "$PROFILE_FILE"; then
{
echo ''
echo '# agent-yolo launcher'
echo 'export PATH="$HOME/.local/bin:$PATH"'
} >> "$PROFILE_FILE"
fi
echo "Added PATH line to $PROFILE_FILE. Open a new terminal or run: source $PROFILE_FILE"
fi
echo "Installed. Try:"
echo " agent-yolo list"
echo " agent-yolo claude"
macOS 上还要额外记住一点:有些工具的 sandbox、文件访问权限、系统隐私授权会受到系统安全策略影响。YOLO 不是系统权限万能钥匙。如果命令没有文件夹访问权,或者系统要求授权,Agent 仍可能失败。
六、Agent 自动配置:让 Agent 自己装,但要给它边界
如果你想让 Agent 自动配置,不要只说“帮我开 yolo”。更好的提示词如下:
请在当前机器上配置一个显式的 agent-yolo 启动器,用于统一启动 Codex、Claude Code、Gemini CLI、Qwen Code、OpenCode、Aider 的高自主模式。
要求:
1. 不要覆盖原始命令,不要把 codex、claude、gemini 等原命令 alias 成危险模式。
2. 先判断当前系统是 Windows、Ubuntu 还是 macOS,再选择对应脚本。
3. 默认先 dry-run,输出将创建的路径和将支持的工具。
4. 只有我确认后才执行安装。
5. 不安装缺失的 AI 工具,不联网下载依赖,不调用任何 AI API。
6. 安装后运行 agent-yolo list 验证。
7. 不要输出真实内网地址、完整计算机名、私有域名、令牌或密钥。
8. 最后告诉我:创建了哪些文件、哪些工具已找到、哪些工具未安装、如何卸载。
如果你已经决定让它执行,可以把第 4 条改成:
我已确认可以安装启动器。请执行安装,但仍不要覆盖原始命令。
这段提示的关键,是把“自动配置”和“自动放权”分开。Agent 可以自动装启动器,但不能顺手把你的所有项目都改成危险默认值。
七、什么时候应该用,什么时候不应该用
适合用 YOLO 的场景:
- 一次性临时目录、干净测试仓库、可随时删除的 demo 项目。
- 任务边界很清楚,比如批量格式化、补文档、跑测试、替换项目内字段。
- 已经有 Git 提交点,出错可以
git diff看清楚,也能回滚。 - 外部已经有隔离,比如容器、虚拟机、临时系统用户。
- 你准备让 Agent 长时间执行,并且希望减少确认框。
不适合用 YOLO 的场景:
- 生产服务器、重要工作目录、唯一副本数据目录。
- 当前 Git 状态很脏,你分不清哪些改动是自己的、哪些是 Agent 做的。
- 任务涉及密钥、证书、浏览器 Profile、钱包、云盘同步目录。
- 你不确定 Agent 会不会运行破坏性命令。
- 你只是懒得看确认框,但没有任何回滚和验收手段。
一个好记的判断方法:如果你不敢把这个目录复制一份交给实习生随便试,就不要在这个目录开 YOLO。YOLO 应该是实验室里的高速按钮,不是家里总闸上的胶带。
八、卸载方法
Windows:
Remove-Item "$HOME\bin\agent-yolo.ps1" -Force
Ubuntu / macOS:
rm -f "$HOME/.local/bin/agent-yolo"
如果脚本曾经往 profile 里添加 PATH 行,可以手工打开 $HOME/.bashrc 或 $HOME/.zshrc,删除包含 agent-yolo launcher 的两行。删除启动器不会删除 Codex、Claude Code、Gemini CLI、Qwen Code、OpenCode 或 Aider 本体。
九、Q&A
Q1:为什么不直接把 codex alias 成 yolo?
因为这会让危险模式变成默认模式。今天你在临时目录里觉得方便,明天可能在重要仓库里忘了。显式输入 agent-yolo codex 更啰嗦一点,但它让风险可见。
Q2:Codex 能不能也写 --yolo?
不同版本可能支持别名,但最清楚的写法是帮助信息里的 --dangerously-bypass-approvals-and-sandbox。它虽然长,但长得有价值:你一眼就知道这是危险旁路。
Q3:Gemini 和 Qwen 为什么都用 --approval-mode=yolo?
因为它们把自动批准抽象成 approval mode。yolo 是其中最高自主的一档。相比短参数,长参数更适合写进脚本。
Q4:OpenCode 为什么不是 --yolo?
OpenCode 的权限模型是 permission 规则,动作解析为 allow、ask、deny。--auto 会自动批准没有被明确拒绝的权限请求,所以它不是同名 yolo,而是另一种实现。
Q5:Aider 的 --yes-always 安全吗?
它会自动回答确认问题。安全不安全取决于你在哪个目录运行、Git 是否干净、任务是否清楚。它适合可回滚的代码任务,不适合唯一副本数据目录。
Q6:开 YOLO 以后还需要看 diff 吗?
更需要。YOLO 只是减少过程确认,不代表结果正确。结束后至少运行 git status、git diff、测试命令和构建命令。
Q7:这套启动器会泄露 API Key 吗?
启动器不读取、不打印、不上传任何密钥。它只是调用本机已经安装的工具。但 Agent 本身在执行任务时可能读取文件,所以你仍然应该在干净项目和明确边界内使用。
十、参考资料
- OpenAI Codex CLI reference: https://developers.openai.com/codex/cli/reference
- Anthropic Claude Code settings: https://docs.anthropic.com/en/docs/claude-code/settings
- Gemini CLI reference: https://github.com/google-gemini/gemini-cli/blob/main/docs/cli/cli-reference.md
- Gemini CLI configuration reference: https://github.com/google-gemini/gemini-cli/blob/main/docs/reference/configuration.md
- Qwen Code npm package: https://www.npmjs.com/package/@qwen-code/qwen-code
- OpenCode permissions: https://opencode.ai/docs/permissions
- Aider options reference: https://aider.chat/docs/config/options.html