终端派 vs 云端派:我用 1 张表选 AI 编程 Agent(含最小权限脚本)

3 阅读4分钟

TL;DR:别先吵“谁更聪明”。我现在判断一个 AI 编程 Agent 值不值得上,第一句话只问:它在哪儿执行? 在本地终端里,还是在云端沙箱里。

最近你要是也在折腾 AI 编程 Agent,大概率会遇到两派:

  • 终端派:工具就在你项目里跑,读你文件、跑你测试,像结对。
  • 云端派:你把任务丢给它,它在云里干活,最后给你一个 PR。

很多争论都在“模型谁更强”。但我踩过几次坑后发现:

真正决定体验的,是执行架构。

因为它直接影响:

  • 失败时你怎么 debug
  • 安全边界怎么画
  • 环境一致性是不是稳定

下面我用一张表 + 三个可直接用的脚本,把这个事讲透。

先把概念说死:什么叫 AI 编程 Agent?

我这里的定义很简单:

AI 编程 Agent = 能读代码、能改代码、能执行命令/测试、并根据结果继续迭代的执行体。

它不是“给建议的聊天机器人”,它是真会动手。

所以核心问题不是“写不写得出某个函数”,而是:

它动手的时候,处在你的哪条安全边界内。

两种执行架构:云端沙箱 vs 本地终端

云端沙箱 / 异步执行(Codex 类)

典型流程:

  1. 你描述任务
  2. 它把 repo 拉到云端隔离环境
  3. 在云里改代码、跑测试、迭代
  4. 给你 patch / PR

优点:异步,适合“派活”。隔离边界清晰。

缺点:最容易踩“环境漂移”。你本地能跑,云端未必能跑。

本地终端 / 交互式执行(Claude Code 类)

典型流程:

  1. 你在终端下指令
  2. 它直接读你磁盘文件
  3. 在你机器上跑命令
  4. 你随时打断、追问、改需求

优点:环境一致、debug 直接。

缺点:权限一旦放开,它就等于“拿到你整台电脑的手”。

一张决策表:你属于哪种人

维度云端沙箱(Codex 类)本地终端(Claude Code 类)你该怎么选
环境一致性⚠️ 可能不一致(依赖/系统库/内网)✅ 和你本地一致依赖“本地魔法”越多 → 越选本地终端
安全隔离✅ 天然隔离⚠️ 取决于你怎么限权有客户代码/敏感内网 → 云端更省心
任务方式✅ 异步派活✅ 交互结对你更像 PM 派活还是工程师结对
Debug 成本⚠️ 要把日志拉回来✅ 直接看终端输出经常要调试环境 → 本地终端
审计/回滚✅ PR/patch 天然可审计⚠️ 需要你自己做日志团队流程重审计 → 云端更舒服

我个人的结论很粗暴:

  • 你是“复杂本地环境 + 快速迭代”的工程师 → 本地终端
  • 你是“标准化工程底座 + 任务并行派发”的团队 → 云端沙箱

本地终端 agent:我推荐的 3 个最小权限防线(可直接抄)

下面三段脚本,我自己在项目里就是这么用的。

1) 环境变量白名单:把 Key 从 shell 里拔掉

# ./scripts/run-agent-safe.sh
set -euo pipefail

# 清空环境变量,再白名单注入
env -i \
  PATH="$PATH" \
  HOME="$HOME" \
  LANG="${LANG:-zh_CN.UTF-8}" \
  AI_GATEWAY_TOKEN="${AI_GATEWAY_TOKEN:?missing}" \
  \
  claude-code "$@"

核心点是 env -i。别小看这招,它能把很多“你以为 agent 看不到”的东西直接切断。

2) 命令 allowlist:别靠“口头约束”

# ./scripts/allowlist.sh
set -euo pipefail

cmd="$1"; shift || true

case "$cmd" in
  "pnpm"|"npm"|"yarn") exec "$cmd" "$@";;
  "pytest"|"python") exec "$cmd" "$@";;
  "git")
    if [[ "${1:-}" == "push" ]] || [[ "${1:-}" == "remote" ]]; then
      echo "blocked git subcommand: $1" >&2
      exit 2
    fi
    exec git "$@";;
  *)
    echo "blocked command: $cmd" >&2
    exit 2;;
 esac

你会发现它会被挡住很多操作,但这正是最现实的安全方式。

3) 会话可回放:出事能举证

# ./scripts/agent-session.sh
set -euo pipefail

ts=$(date +"%Y%m%d-%H%M%S")
mkdir -p .agent-logs

script -q ".agent-logs/session-$ts.log" \
  ./scripts/run-agent-safe.sh "$@"

git diff > ".agent-logs/diff-$ts.patch" || true

这三层做完,本地 agent 的风险就从“它能搞穿我电脑”降到“它最多把活干砸”。

云端沙箱 agent:最大的坑是环境漂移

云端执行最常见的失败,不是模型不行,是:

  • 私有 registry 装不上
  • 系统库缺失(ffmpeg/libvips 之类)
  • 访问不了内网 staging

解决也很工程:

  1. 把环境写进 repo(Dockerfile / devcontainer / nix)
  2. secret 管理标准化(别靠本地 .env
  3. 网络访问要可配置

工程底座越标准化,云端 agent 的优势越大。

我自己的“混搭用法”:两种架构都用

我现在的经验是:

  • 快速改模块 + 跑测试 + 反复迭代 → 本地终端
  • 写重构方案 / 生成 PR / 整理文档 → 云端异步

(只提一次)怎么做到“换模型只改一个字符串”

我自己会把不同模型的调用统一到一个 OpenAI 兼容接口上,base_url 指向你自己的网关地址(占位符)。

from openai import OpenAI

client = OpenAI(
    base_url="https://your-api-gateway.com/v1",
    api_key="YOUR_GATEWAY_TOKEN",
)

resp = client.chat.completions.create(
    model="deepseek/deepseek-chat",  # 掘金版本:用国产模型 ID
    messages=[{"role": "user", "content": "把这个模块重构一下并补测试"}],
)
print(resp.choices[0].message.content)

常见问题(FAQ)

Q:云端沙箱是不是一定更安全?

A:隔离边界更清晰,但你还是要关心:repo、日志、报错、依赖下载,会不会把不该出去的信息带出去。

Q:本地终端 agent 会不会误操作?

A:会。最小三层:环境白名单、命令 allowlist、会话可回放。别偷懒。

Q:到底怎么选?

A:一句话:先选执行架构,再谈模型好坏。