Anthropic 把每個 Claude Code 重度使用者早就有感的問題,直接量化了:使用者核准了大約 93% 的權限提示,而該公司表示,提示越堆越多,注意力就越下降(Anthropic)。這就是核准疲勞,會把「human in the loop」變成「按著 Enter 的人類」。
錯誤做法是在你的筆電上跑 --dangerously-skip-permissions,然後祈禱模型乖一點。正確做法是無聊但有效的安全工程:把 Claude Code 放進 dev container,只給它 repo,限制對外流量,用政策停用繞過模式,而且只在真正支援的地方使用自動模式。
這篇指南會示範一套今天就能丟進 repo 跑起來的設定。也會談到目前社群裡的爭論:開發者希望 agent 更自主,但不想要看不見的護欄,也不想要黑箱式地亂爬檔案。務實答案不是「更用力相信 Claude」。而是「把爆炸半徑縮小到讓自主性變得可以接受」。

這場辯論真正關心的是可觀測性與爆炸半徑
圍繞「Anthropic tries to hide Claude’s AI actions」的 Hacker News 討論串,不只是抱怨大會。有位留言者總結了開發者的恐懼:如果 agent 開始打開過時設定,或爬一堆無關檔案,操作者必須快到足以察覺並阻止它(Hacker News)。另一串關於「dangerously」執行 Claude Code 的討論,也收斂到同一個實務模式:讓 agent 自由行動,但只限在檔案與網路存取都受限的沙盒裡(Hacker News)。
Anthropic 自己的工程文章也落在同一個結論。它把防線分成環境、模型與外部內容。環境是你能做成確定性的那一層。如果憑證從來不進沙盒,Claude 就無法外洩它們;不管原因是 prompt injection、模型越界,還是糟糕的使用者指令(Anthropic)。
自動模式適合放在這裡,但它不是魔法。Anthropic 表示,自動模式會用另一個分類器在動作執行前審查;它的文件也稱這是研究預覽,不是敏感操作審查的替代品(Claude Code docs)。這個差別很重要。自動模式減少提示。容器減少後果。
我建議團隊採取這個立場:
| Mode | Use it for | Do not use it for |
|---|---|---|
plan | 不熟悉的 repo、高風險變更 | 長時間無人看管的編輯 |
acceptEdits | 一般功能開發 | 部署、祕密、基礎架構變更 |
auto | 有出口流量控管的隔離 dev container | 生產系統或未知 repo |
bypassPermissions | 僅限可丟棄 VM | 開發者筆電 |
Anthropic 的文件說,自動模式需要 Claude Code v2.1.83 或更新版本。在 Anthropic API 上,支援的模型包含 Claude Opus 4.6 或更新版本,以及 Sonnet 4.6。在 Bedrock、Vertex AI 和 Microsoft Foundry 上,文件列出的自動模式支援只有 Opus 4.7 與 Opus 4.8(Claude Code docs)。
建置 Dev Container
在你的 repo 中建立三個檔案:
.devcontainer/
devcontainer.json
Dockerfile
managed-settings.json
從 .devcontainer/devcontainer.json 開始:
{
"name": "claude-code-safe",
"build": {
"dockerfile": "Dockerfile"
},
"remoteUser": "node",
"mounts": [
"source=claude-code-config-${devcontainerId},target=/home/node/.claude,type=volume"
],
"runArgs": [
"--cap-add=NET_ADMIN",
"--cap-add=NET_RAW"
],
"containerEnv": {
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
"DISABLE_AUTOUPDATER": "1",
"ANTHROPIC_BASE_URL": "https://api.onehop.ai/anthropic",
"ANTHROPIC_API_KEY": "${localEnv:ONEHOP_API_KEY}"
},
"postCreateCommand": "sudo /usr/local/bin/init-firewall.sh"
}
Anthropic 的 dev container 文件建議在容器內執行 Claude Code,讓命令離開主機執行,同時編輯仍會出現在掛載的 repo 裡(Claude Code docs)。文件也警告不要掛載主機祕密,例如 ~/.ssh 或雲端憑證檔。照做就對了。如果 Claude 需要 repo 範圍的 GitHub token,就透過環境變數傳入短效 token。不要因為方便,就把整個 home 目錄 bind-mount 進去。
接著是 Dockerfile:
FROM mcr.microsoft.com/devcontainers/javascript-node:22
RUN npm install -g @anthropic-ai/claude-code@latest
COPY managed-settings.json /etc/claude-code/managed-settings.json
COPY init-firewall.sh /usr/local/bin/init-firewall.sh
RUN chmod +x /usr/local/bin/init-firewall.sh
Anthropic 文件也提供 Dev Container Feature,但透過 Dockerfile 安裝,會讓團隊 repo 中的政策與版本管理更容易理解。如果你想要可重現性,就把 @anthropic-ai/claude-code pin 到特定版本,並保留 DISABLE_AUTOUPDATER=1。
啟用自動模式前,先鎖死權限
建立 .devcontainer/managed-settings.json:
{
"permissions": {
"defaultMode": "auto",
"disableBypassPermissionsMode": "disable",
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Read(./secrets/**)",
"Read(./config/credentials.json)",
"Bash(curl *)",
"Bash(wget *)",
"Bash(git push *)",
"Bash(kubectl *)",
"Bash(terraform apply *)",
"WebFetch(domain:169.254.169.254)"
],
"ask": [
"Bash(npm publish *)",
"Bash(docker push *)",
"Bash(gh release *)"
],
"allow": [
"Bash(npm install)",
"Bash(npm test *)",
"Bash(npm run lint *)",
"Bash(git diff *)",
"Bash(git status *)"
]
},
"autoMode": {
"environment": {
"trustedDomains": [
"registry.npmjs.org",
"github.com"
]
}
}
}
這裡有兩個細節真的在發揮作用。
第一,disableBypassPermissionsMode 會封鎖 bypassPermissions,並在透過 managed settings 強制執行時停用 --dangerously-skip-permissions 旗標。Anthropic 在設定參考中明確記載了這個控制項(Claude Code docs)。
第二,即使在自動模式下,deny 規則仍然重要。Anthropic 說,自動模式會阻擋超出請求範圍的動作、針對未識別基礎架構的動作,或看似由惡意內容驅動的動作;但你不該把團隊政策外包給分類器。如果任何人都不該在 agent session 裡跑 terraform apply,就把它寫成 deny 規則。
有個但書:repo 管理的政策,任何能編輯 repo 的人都能改。Anthropic 文件說,在 Linux 裡 /etc/claude-code/managed-settings.json 具有高優先權;但如果你需要開發者不能透過改 repo 檔案繞過的政策,就使用伺服器管理設定或 MDM(Claude Code docs)。對新創團隊來說,簽入 repo 的政策仍是很好的基準。對企業部署來說,不要停在這裡。

用小型允許清單限制對外連線
新增 .devcontainer/init-firewall.sh:
#!/usr/bin/env bash
set -euo pipefail
ALLOWED_HOSTS=(
api.onehop.ai
api.anthropic.com
claude.ai
platform.claude.com
registry.npmjs.org
github.com
raw.githubusercontent.com
)
iptables -P OUTPUT DROP
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
for host in "${ALLOWED_HOSTS[@]}"; do
for ip in $(getent ahostsv4 "$host" | awk '{print $1}' | sort -u); do
iptables -A OUTPUT -p tcp -d "$ip" --dport 443 -j ACCEPT
done
done
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
這刻意保持簡單。它在啟動時解析允許的 hostname,並允許對那些 IP 的 TCP 443。若要生產等級控管,請把容器放在 proxy 後面,並記錄每個請求。但即使只是這種基本的預設拒絕規則,也比讓自主 coding agent 對整個網際網路開放好得多。
Anthropic 的網路文件列出必要網域,例如 api.anthropic.com、claude.ai、platform.claude.com、downloads.claude.ai、storage.googleapis.com 和 raw.githubusercontent.com,實際取決於安裝與驗證路徑(Claude Code docs)。如果你透過 npm 安裝並停用自動更新,執行時可能不需要下載網域。先把清單收緊,只有在建置因為已知原因失敗時,才加入網域。
執行它:
export ONEHOP_API_KEY=oh_your_key_here
code .
# VS Code: Dev Containers: Rebuild and Reopen in Container
claude --permission-mode auto
在容器內驗證:
whoami
claude --version
curl -I https://api.onehop.ai
curl -I https://example.com
OneHop 請求應該會成功。example.com 請求應該會失敗,除非你把它加進去了。
透過 OneHop 路由 Claude Fable 5
Anthropic 在 2026 年 6 月 9 日發布 Claude Fable 5 和 Claude Mythos 5,其中 Fable 5 定價為每百萬 input tokens 10 美元、每百萬 output tokens 50 美元,低於 Mythos Preview 價格的一半(Anthropic)。OneHop 將 Claude Fable 5 列為 anthropic/claude-fable-5,官方價格顯示為 $10/M input 與 $50/M output,OneHop 價格則顯示為 $3/M input 與 $15/M output,另有新使用者免信用卡 $10 免費額度(OneHop)。
目前的營運註記:OneHop 的 Fable 5 頁面表示該模型雖仍列出,但暫時不可用。設定可以先保留,但預期要等你的帳號與區域取得存取權後再使用。
若要透過 OneHop 直接呼叫 Anthropic Messages,請使用 OneHop 針對這個模型發布的 Anthropic-compatible endpoint:
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.onehop.ai/anthropic",
api_key="oh_your_key_here",
)
message = client.messages.create(
model="anthropic/claude-fable-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Summarize this repo's test strategy."}],
)
print(message.content[0].text)
如果你的 app 已經使用 OneHop 的 OpenAI-compatible gateway,單行 base URL 變更是:
client = OpenAI(base_url="https://api.onehop.ai/v1", api_key="oh_your_key_here")
針對 Claude Code,請在 ANTHROPIC_BASE_URL 使用 Anthropic-compatible base URL,因為 Claude Code 使用的是 Anthropic Messages API。OneHop 的 Fable 5 模型頁面目前列出 Anthropic Messages 可在 https://api.onehop.ai/anthropic 使用,而 OpenAI Chat Completions 對此模型標示為不支援(OneHop)。

運作模式:少一點信任,快一點出貨
最好的 Claude Code 設定,不是最寬鬆的那個。而是讓錯誤代價很低的那個。
當 Claude 正在探索新的 codebase 時,使用 plan 模式。只有在任務範圍明確後,才切到 auto。用政策停用 bypassPermissions。拒絕讀取祕密。拒絕部署、推送到受保護分支、雲端變更,以及 metadata endpoints。把 agent 放進非 root 的 dev container。預設封鎖對外連線。合併前審查 diff。
這聽起來可能比 YOLO 模式慢。實務上反而更快,因為沒有人需要盯著 40 個瑣碎提示,也不用懷疑剛剛那次核准是不是讓模型外洩了一個 token。Anthropic 自己的 containment 文章說,那個參考 dev container 的存在,就是為了讓 Claude Code 能在沒有逐動作核准的情況下無人看管地執行(Anthropic)。缺少的那一塊是團隊政策。
如果你想用最短路徑試試 Fable 級的 coding 工作,而不用重建你的 provider stack,可以透過 Claude Fable 5 on OneHop 路由。新帳號可以從 $10 免費額度開始。base URL 變更是簡單的部分。真正的勝利,是把它和一個讓自主性安全到足以使用的容器配在一起。