中文 English

别再到处找 YOLO 开关了:6 个 AI Agent 一键进入高自主模式

发布时间: 2026-07-06
AI Agent YOLO Codex Claude Code Gemini CLI Qwen Code OpenCode Aider 自动化

先说结论

AI Agent 工具里的 yolo,本质不是“更聪明”,而是“少问你”。它会减少或跳过工具调用确认框,让 Agent 更像无人值守脚本一样连续执行。问题在于,不同工具的叫法完全不统一:Codex 是危险旁路 approval 和 sandbox;Claude Code 是跳过权限检查或使用 bypass 权限模式;Gemini CLI 和 Qwen Code 有 --approval-mode=yolo;OpenCode 是 --auto 加 permission 规则;Aider 是 --yes-always

这篇文章给出一个统一做法:不要偷偷覆盖原来的 codexclaudegemini 命令,而是安装一个显式的 agent-yolo 启动器。你想高自主时才输入 agent-yolo codexagent-yolo claudeagent-yolo gemini。这样一次搞定常见 Agent 的 YOLO 命令,又不会把日常安全模式改坏。文中脚本覆盖 Windows 11、Ubuntu 26.04、macOS 26,不依赖第三方服务,不安装缺失工具,也不包含任何真实内网地址、完整计算机名、私有域名、令牌或密钥。

AI 生成封面:一个带护栏的红色自动化开关连接多个抽象 Agent 终端。

图 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 成危险模式,几天后忘了这件事,在重要仓库里随手启动,风险就变成了默认值。

YOLO 安全流水线:选工具、建启动器、限制目录、执行任务、复查差异。

图 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”这件事变成一条统一命令。

不同 Agent 的高自主模式对照图。

图 3:同一个目标,不同工具的实现并不一样。不要把所有工具都想象成同一个 --yolo

三、问题分析:YOLO 模式到底放开了什么

理解 YOLO 模式,可以把 Agent 想象成一个很能干的实习生。普通模式下,实习生每次要拿钥匙、开柜子、动文件、跑机器,都会问你一句。YOLO 模式下,你相当于提前说:“这间实验室里的常规动作,我都先批准了。”

这会提高效率,但也改变了风险模型。

Codex 的帮助信息把 --dangerously-bypass-approvals-and-sandbox 写得很直白:跳过确认提示,并在没有 sandbox 的情况下执行命令,且标注为极度危险,只适合外部已经做好隔离的环境。换句话说,它不只是“少问”,还可能是“把护栏也拆了”。如果你的目标只是减少交互,优先考虑在一次性容器、临时目录、干净 worktree 中使用。

真实命令输出截图 1:Codex CLI 帮助里把危险旁路和 sandbox/approval 写在一起。

图 4:Codex 的高自主开关必须当成危险操作看待,尤其要注意 approval 与 sandbox 是两件事。

Claude Code 的命令行也很明确:--dangerously-skip-permissions 会绕过权限检查,并建议只在无互联网访问的沙箱中使用。新版 Claude Code 还提供 --permission-mode,其中包含 bypassPermissions 这类模式。这里的重点不是“哪条更酷”,而是你要知道自己在绕过什么。

真实命令输出截图 2:Claude Code 帮助中包含危险跳过权限与 permission mode。

图 5:Claude Code 可以用危险跳过权限,也可以通过 permission mode 表达会话权限。

Gemini CLI 的情况更像“官方把旧叫法收束到新叫法”。它仍有 -y / --yolo,但帮助信息里同时给出 --approval-mode,可选值包括 defaultauto_edityoloplan。如果写自动化脚本,我更推荐 gemini --approval-mode=yolo,因为它直接说明这是 approval mode,不只是一个口号。

真实命令输出截图 3:Gemini CLI 帮助显示 <code>--approval-mode</code> 和 <code>--yolo</code>。

图 6:Gemini CLI 仍支持 --yolo,但 --approval-mode=yolo 更适合写进统一启动器。

OpenCode 则不同。它的官方文档把 permission 规则分成 allowaskdeny,并提供 --auto 自动批准未被明确拒绝的权限请求。这个模型更像公司门禁白名单:你可以规定哪些门直接放行、哪些门必须问保安、哪些门永远不许进。

真实截图 4:OpenCode 权限文档说明 allow、ask、deny 和 auto mode。

图 7:OpenCode 的核心不是一个叫 yolo 的按钮,而是 permission 规则和 --auto

Aider 更直接,配置项里有 --yes-always,意思是总是对确认问题回答 yes。它适合明确知道自己要让 Aider 连续执行的场景,但仍然要注意当前 Git 仓库是否干净、是否有可回滚提交。

真实截图 5:Aider 选项参考中包含 <code>--yes-always</code>。

图 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-yoloclaude-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 的场景:

不适合用 YOLO 的场景:

一个好记的判断方法:如果你不敢把这个目录复制一份交给实习生随便试,就不要在这个目录开 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 statusgit diff、测试命令和构建命令。

Q7:这套启动器会泄露 API Key 吗?

启动器不读取、不打印、不上传任何密钥。它只是调用本机已经安装的工具。但 Agent 本身在执行任务时可能读取文件,所以你仍然应该在干净项目和明确边界内使用。

十、参考资料