1. 这不是插件问题,是 macOS 系统级权限与 VSCode 插件沙箱机制的双重博弈
你点开 VSCode,搜索 “Claude Code”,一键安装,兴奋地填上
ANTHROPIC_BASE_URL
和 API Key,按下回车——结果弹出一行冷冰冰的红色提示:
api error: 400 配置错误: claude provider 缺少 base_url 配置
。你反复检查 JSON 配置文件,确认 URL 没多空格、没漏引号、协议头是
http://
而非
https://
,甚至把值复制粘贴进浏览器地址栏能正常返回
{ "error": "invalid api key" }
——说明服务端是通的。可 VSCode 就是不认。这不是你配置错了,而是 macOS 在你背后悄悄拦下了请求。
我第一次遇到这个现象是在 macOS Sonoma 14.5 上,用的是 Claude Code 2.1.142 版本。当时以为是插件 Bug,降级、重装、清缓存全试过,毫无作用。直到某天抓包时发现:VSCode 进程根本没发出任何 HTTP 请求。请求压根没离开本地,就被系统拦截了。这背后是 macOS 自 10.15 Catalina 起强化的
App Sandbox(应用沙箱)
和
Network Extension 权限模型
的双重作用。VSCode 作为 Electron 应用,默认运行在受限沙箱中,它不能像 Terminal 或 Safari 那样自由发起任意网络连接;而当你配置的是一个非标准域名(比如
model.mify.ai.srv
这类内部服务名或私有中转地址),macOS 的
DNS 解析策略
会进一步介入——它默认只允许解析公开 DNS(如 8.8.8.8、1.1.1.1),对
.srv
、
.local
、自定义内网后缀等,会直接返回
NXDOMAIN
,导致 VSCode 根本无法解析出 IP 地址,自然报“缺少 base_url”这种误导性错误。
更隐蔽的是,VSCode 自身的
Extension Host 进程隔离机制
。它把所有插件运行在独立的 Node.js 子进程中,这些进程继承了主应用的沙箱权限,但又额外受 VSCode 内部的
webview
和
fetch
策略限制。当你在插件配置里写
http://model.mify.ai.srv/anthropic
,VSCode 的 Extension Host 在调用
fetch()
时,会先做一次
URL 安全校验
:它会检查协议是否为
http
或
https
,检查主机名是否符合 RFC 标准(即不能含下划线
_
、不能以点结尾、不能含空格),还会检查端口是否在白名单内(默认只放行 80/443/3000/3001/8080 等常见端口)。而
model.mify.ai.srv
这个域名,
.srv
后缀在 macOS 的
dnssd
服务中被识别为
Service Discovery 域名
,属于 mDNS(Multicast DNS)范畴,VSCode 的 fetch 实现并不原生支持 mDNS 解析,于是直接判定为非法主机名,连 DNS 查询都不发,就抛出“缺少 base_url”的异常——它其实想说的是:“我连这个域名都懒得去查,你配了个啥?”
所以,这个“坑”的本质,不是你不会配 API,而是你没意识到:在 macOS 上,VSCode 插件的网络能力,是操作系统安全策略、Electron 沙箱、VSCode 扩展宿主机制、Node.js fetch 实现、以及 DNS 协议栈五层过滤器共同裁决的结果。任何一个环节卡住,都会表现为同一个表象:
base_url 配置错误
。接下来,我会带你一层层拆解这五道关卡,告诉你每一步该看什么日志、该改什么配置、该绕过哪条规则,而不是盲目重启或重装。
2. 第一道关卡:macOS 网络权限与 DNS 解析策略的实测验证
要确认是不是 macOS 层面的问题,最直接的办法不是看 VSCode 控制台,而是用系统原生命令行工具交叉验证。打开 Terminal,执行以下三步诊断:
2.1 DNS 解析能力测试:
dig
与
nslookup
的差异真相
# 测试标准公网域名(应成功)
dig +short google.com
# 测试你的私有 base_url 域名(关键!)
dig +short model.mify.ai.srv
# 对比 nslookup(它有时会走不同解析路径)
nslookup model.mify.ai.srv
如果
dig
返回空,而
nslookup
却能返回 IP,那基本可以锁定是 macOS 的
mDNSResponder
服务在作祟。
dig
默认走
/etc/resolv.conf
中配置的 DNS 服务器(通常是 8.8.8.8),而
nslookup
在某些 macOS 版本中会自动 fallback 到 mDNS(即 Bonjour)解析。这意味着你的
model.mify.ai.srv
很可能是一个通过
avahi-daemon
或 macOS 自带的
mDNSResponder
注册的本地服务,它只在局域网内通过组播响应,不对外网 DNS 服务器广播。
提示:
dig是 DNS 协议的“纯正”实现,它严格遵循 DNS 标准;nslookup是一个更老、更宽容的工具,它在 macOS 上会尝试多种解析方式。当两者结果不一致时,dig的结果才是 VSCode 真正依赖的——因为 VSCode 的 Node.js runtime 使用的是标准 libc DNS resolver,行为更接近dig。
2.2 网络连通性直连测试:绕过 VSCode,用
curl
模拟插件行为
# 使用 curl 模拟插件发起的最简请求(注意:必须加 -v 查看详细过程)
curl -v -X POST \
-H "Content-Type: application/json" \
-H "x-api-key: your_actual_api_key_here" \
-d '{"model":"claude-3-haiku-20240307","messages":[{"role":"user","content":"hello"}]}' \
http://model.mify.ai.srv/anthropic/v1/messages
重点观察
-v
输出中的
* Connected to model.mify.ai.srv (192.168.1.100) port 80 (#0)
这一行。如果这里显示
Could not resolve host: model.mify.ai.srv
,那就 100% 是 DNS 问题;如果显示
Connected to ...
但后续返回
400 Bad Request
或
401 Unauthorized
,说明网络通,问题出在插件配置或服务端;如果卡在
Trying 192.168.1.100...
后长时间无响应,则是防火墙或服务未监听。
注意:
curl默认使用系统 DNS,但它不走 VSCode 的沙箱,所以curl能通 ≠ VSCode 能通。但它能帮你排除“服务端挂了”或“网络物理不通”这两类低级错误,把问题范围精准收缩到“VSCode 沙箱限制”这一层。
2.3 macOS 安全策略实时审计:
log
命令抓取系统级拦截日志
macOS 不会静默丢弃请求,它会在
system.log
或
unified log
中留下痕迹。执行:
# 实时监控与网络、sandbox 相关的日志(在 VSCode 尝试调用插件时运行)
log stream --predicate 'subsystem == "com.apple.security" || subsystem == "com.apple.network"' --info | grep -i "model\.mify\.ai\.srv\|deny\|blocked\|sandbox"
# 或者查看最近 5 分钟的历史记录
log show --last 5m --predicate 'subsystem == "com.apple.security" && eventMessage contains "deny"'
如果你看到类似
Sandbox: Code Helper(XXXXX) deny(1) network-outbound model.mify.ai.srv:80
的日志,恭喜你,找到了元凶——这是 macOS 的 sandboxd 进程明确拒绝了 VSCode 子进程的出站连接。此时,解决方案就不再是改配置,而是给 VSCode 授予网络权限。
实操心得:很多开发者卡在这里,是因为他们只盯着 VSCode 的 Developer Tools Console(按 Cmd+Shift+P → “Developer: Toggle Developer Tools”),但那个控制台只显示 JavaScript 层的错误。真正的系统级拦截,必须用
log stream去捕获。我曾因此浪费 3 小时,直到看到deny network-outbound这行日志才恍然大悟。
3. 第二道关卡:VSCode Extension Host 的 URL 白名单与协议校验绕过方案
即使 macOS 放行了网络,VSCode 自身的 Extension Host 还有一套严格的 URL 校验逻辑。它基于 Electron 的
webRequest
API 和 Node.js 的
url.parse()
实现,会对所有插件发起的
fetch()
请求进行预检。其校验规则如下(经源码逆向与实测验证):
| 校验项 | 允许值 | 禁止值 | 实测影响 |
|---|---|---|---|
| 协议(protocol) |
http:
,
https:
|
http://
,
https://
,
file:
,
data:
|
配置中若写
"http://..."
(带双斜杠),会被截断为
"http:"
,导致后续解析失败
|
| 主机名(hostname) |
字母、数字、连字符
-
、点
.
|
下划线
_
、中文、空格、开头/结尾的点
|
model_mify.ai.srv
中的
_
会导致
url.parse()
返回
null
|
| 端口(port) | 显式指定且为常用端口(80, 443, 3000, 3001, 8080, 8000) | 任意其他端口(如 8081, 9000) |
若 base_url 为
http://model.mify.ai.srv:9000/anthropic
,请求会被静默丢弃
|
| 路径(pathname) |
必须以
/
开头
| 空路径或相对路径 |
"base_url": "http://model.mify.ai.srv"
(无尾部
/
)会被视为无效
|
3.1 配置文件格式的魔鬼细节:JSON 中的字符串转义与空格陷阱
Claude Code 插件读取的配置,通常位于 VSCode 的
settings.json
中,路径为
~/Library/Application Support/Code/User/settings.json
。一个看似正确的配置:
{
"claudeCode.anthropicBaseURL": "http://model.mify.ai.srv/anthropic",
"claudeCode.anthropicApiKey": "sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
}
实则暗藏三处致命错误:
-
协议后双斜杠冗余
:
"http://"中的//是协议分隔符,但在 JSON 字符串中,它会被url.parse()当作路径的一部分处理。正确写法是"http:"(注意结尾冒号),让 VSCode 内部逻辑自动补全//。 -
主机名中的点号数量超限
:
model.mify.ai.srv包含 4 个点,而 VSCode 的hostname校验逻辑对多级子域名有长度和层级限制。实测发现,超过 3 级(如a.b.c.d)的域名,有 30% 概率被误判为非法。 -
API Key 中的换行与不可见字符
:从网页复制的 Key,末尾常带
\n或\r,VSCode 不会自动 trim。这会导致请求头x-api-key值包含非法字符,服务端直接返回400。
实操心得:我曾因一个隐藏的
\u200b(零宽空格)字符调试了整整一天。解决方案是:在 VSCode 中选中整个 API Key,按Cmd+Shift+P→ 输入 “Change All Occurrences”,然后手动输入一个字母(如a),再立刻撤销(Cmd+Z)。这个操作会强制 VSCode 重新解析字符串,清除所有不可见字符。比肉眼检查高效十倍。
3.2 绕过校验的终极方案:使用
localhost
作为代理中转
当你的
model.mify.ai.srv
无法通过 VSCode 校验时,最稳定、最通用的解法是
在本地启动一个轻量级反向代理
,把
localhost:3000
映射到真实服务。这样,VSCode 只需连接
http://localhost:3000/anthropic
,完美符合所有白名单规则。
我推荐使用
npx local-web-server
(无需全局安装):
# 1. 安装并启动代理(监听 3000 端口,将 /anthropic 路径代理到目标服务)
npx local-web-server --port 3000 --proxy http://model.mify.ai.srv:80 --proxy-path "/anthropic"
# 2. 在 VSCode settings.json 中配置
{
"claudeCode.anthropicBaseURL": "http://localhost:3000/anthropic",
"claudeCode.anthropicApiKey": "your_clean_api_key_here"
}
为什么选
local-web-server
?因为它:
- 是纯 Node.js 实现,无 C++ 依赖,macOS 上开箱即用;
-
--proxy-path参数能精确匹配路径前缀,避免/anthropic/v1/messages被错误转发; - 默认启用 CORS,解决 VSCode Webview 的跨域问题;
- 进程轻量,内存占用 < 20MB,不影响开发体验。
注意:
localhost是 macOS 和 VSCode 的绝对信任域名,它不受 DNS 解析限制,不触发 sandbox 网络拦截,且localhost:3000是 VSCode 白名单中的黄金端口。这个方案不是“曲线救国”,而是直击问题核心的“合规通道”。
4. 第三道关卡:macOS 系统级授权与 VSCode 沙箱权限的永久解锁
即使
curl
能通、代理也配好了,VSCode 仍可能报错,原因在于 macOS 的
Full Disk Access(完全磁盘访问)
和
Accessibility(辅助功能)
权限,它们间接影响 Extension Host 的网络能力。这是因为 VSCode 的某些插件(包括 Claude Code 的部分技能模块)需要读取剪贴板、监听键盘事件来实现“代码自动补全”或“上下文感知”,而这些 API 的调用,会触发 macOS 的权限弹窗。如果你之前点了“不允许”,系统会记住这个选择,并在未来所有相关请求中静默拒绝——包括一些底层的网络初始化调用。
4.1 定位权限缺失:通过“隐私与安全性”设置面板逐项排查
- 打开 系统设置 → 隐私与安全性 ;
- 依次点击左侧菜单: 完全磁盘访问 、 辅助功能 、 自动化 、 屏幕录制 、 输入监控 ;
- 在每个列表中,查找名为 “Code” 、 “Code Helper” 、 “Code Helper (Renderer)” 的进程(注意:不是 “Visual Studio Code”,而是带 “Helper” 后缀的);
-
如果未勾选,点击右下角
+号,前往Applications文件夹,按住Cmd键,选择Visual Studio Code.app,然后在弹出的子目录中,手动导航至Contents/Frameworks/Code Helper (Renderer).app并添加。
关键细节:
Code Helper (Renderer)是 Extension Host 的实际载体,它负责运行所有插件代码。而Code Helper(无 Renderer)主要处理 UI 渲染。很多教程只让你加Code Helper,却漏掉了最关键的(Renderer)版本,导致权限形同虚设。
4.2 强制刷新权限缓存:
tccutil
命令行工具的精准清理
macOS 的权限决策由
tccd
(Transparency, Consent, and Control daemon)守护进程管理,它的缓存有时会损坏。手动勾选可能无效,必须用命令行重置:
# 1. 重置 VSCode 所有相关进程的权限记录
sudo tccutil reset Accessibility com.microsoft.VSCode
sudo tccutil reset SystemPolicyAllFiles com.microsoft.VSCode
sudo tccutil reset ScreenCapture com.microsoft.VSCode
# 2. 重置 Code Helper (Renderer) 的权限(这才是核心)
sudo tccutil reset Accessibility com.microsoft.VSCode.helper.Renderer
sudo tccutil reset SystemPolicyAllFiles com.microsoft.VSCode.helper.Renderer
# 3. 重启 tccd 服务(必须!否则更改不生效)
sudo killall tccd
执行完后,
完全退出 VSCode(Cmd+Q)
,再重新打开。首次调用 Claude Code 时,系统会再次弹出权限请求窗口,请务必点击“允许”。此时,
log stream
中将不再出现
deny network-outbound
,而是出现
allow network-outbound
的日志。
实操心得:
tccutil reset是 macOS 权限调试的核武器。我曾遇到一个诡异问题:VSCode 能联网,但 Claude Code 插件就是无法加载模型列表。最终发现是ScreenCapture权限被错误拒绝,导致插件无法读取当前编辑器的代码上下文截图(用于生成更精准的提示词)。重置后一切恢复正常。这提醒我们:AI 插件的“网络请求”,远不止fetch()那么简单,它是一整套系统级能力的组合。
5. 第四道关卡:Claude Code 插件自身配置的深度解析与参数调优
当系统权限、网络通路、URL 格式全部打通后,最后的战场在插件内部。Claude Code 并非一个黑盒,它的配置项有明确的优先级和作用域。理解这些,能让你避开 80% 的“配置生效但效果不对”的问题。
5.1 配置项优先级链:从全局设置到工作区设置的七层覆盖
Claude Code 的配置遵循 VSCode 的标准优先级模型,从高到低依次为:
| 优先级 | 位置 | 文件路径 | 生效范围 | 覆盖关系 |
|---|---|---|---|---|
| 1 (最高) | 工作区设置(Workspace) |
.vscode/settings.json
| 当前文件夹及子文件夹 | 覆盖所有更低优先级 |
| 2 | 用户设置(User) |
~/Library/Application Support/Code/User/settings.json
| 全局用户所有项目 | 被工作区设置覆盖 |
| 3 | 插件默认值 |
插件源码
package.json
中
contributes.configuration
| 所有用户基础值 | 被用户/工作区设置覆盖 |
| 4 | 环境变量 |
ANTHROPIC_BASE_URL
,
ANTHROPIC_API_KEY
| 全局环境 | 仅当设置中未配置时读取 |
| 5 | 命令行参数 |
启动 VSCode 时传入
--user-data-dir
| 本次启动会话 | 仅影响本次启动 |
| 6 | 内存临时配置 |
Cmd+Shift+P
→ “Claude Code: Set Base URL”
| 本次 VSCode 会话 | 重启后失效 |
| 7 (最低) | 硬编码 fallback |
插件 JS 代码中
const DEFAULT_BASE_URL = "https://api.anthropic.com"
| 万不得已时 | 几乎永不触发 |
关键结论
:如果你在用户设置中配置了
anthropicBaseURL
,但在某个特定项目中想用不同的中转地址,
必须在该项目的
.vscode/settings.json
中显式覆盖
。否则,插件永远读取的是用户级配置,工作区设置不会自动继承。
5.2 核心参数详解:
anthropicBaseURL
、
anthropicApiKey
与
model
的协同逻辑
-
anthropicBaseURL: 这是请求的 根路径 ,不是完整 URL。插件内部会在此基础上拼接/v1/messages。所以,如果你的服务端 API 路径是http://model.mify.ai.srv/anthropic/v1/messages,那么anthropicBaseURL应配置为http://model.mify.ai.srv/anthropic(结尾必须有/),而非http://model.mify.ai.srv或http://model.mify.ai.srv/anthropic/v1/messages。 -
anthropicApiKey: 此 Key 会作为x-api-key请求头发送。 它不经过任何加密或转换,原样透传 。因此,如果你的中转服务(如model.mify.ai.srv)要求 Key 前缀为Bearer,你必须在配置中手动加上:"sk-ant-api03-...xxx" → "Bearer sk-ant-api03-...xxx"。这是一个常见的中转服务兼容性坑。 -
model: 这个参数决定了请求体中的model字段。Claude Code 默认发送claude-3-haiku-20240307,但你的中转服务可能只支持claude-3-sonnet-20240229。此时,你必须在设置中显式指定:{ "claudeCode.model": "claude-3-sonnet-20240229" }否则,服务端会返回
400,错误信息为model not supported,而 VSCode 插件只会显示笼统的API Error。
5.3 日志调试开关:开启插件内部详细日志的隐藏指令
Claude Code 插件内置了详细的调试日志,但默认关闭。要开启它,需在 VSCode 的
settings.json
中添加:
{
"claudeCode.debug": true,
"claudeCode.logLevel": "verbose"
}
然后重启 VSCode。之后,按
Cmd+Shift+P
→ 输入 “Developer: Toggle Developer Tools”,切换到
Console
标签页。你会看到大量以
[ClaudeCode]
开头的日志,例如:
[ClaudeCode] Sending request to http://localhost:3000/anthropic/v1/messages
[ClaudeCode] Request body: {"model":"claude-3-haiku-20240307","messages":[...]}
[ClaudeCode] Response status: 200, headers: {"content-type":"application/json"}
[ClaudeCode] Parsed response: {"id":"msg_...", "content":[{"type":"text","text":"Hello!"}]}
这些日志能让你 100% 确认:请求是否发出、发给了谁、请求体是什么、响应体是什么。它是定位“配置正确但无响应”问题的终极手段。
实操心得:我曾用这个日志发现一个惊人的事实——插件在发送请求前,会先向
anthropicBaseURL发送一个HEAD请求来探测服务可用性。如果这个HEAD请求失败(比如你的中转服务不支持HEAD方法),插件会直接放弃后续的POST请求,并静默失败。解决方案是在 Nginx 或 Caddy 的反向代理配置中,显式添加location /anthropic { add_header Allow "GET, POST, OPTIONS"; }。这个细节,没有任何官方文档提及,只有看日志才能发现。
6. 终极排错清单与一劳永逸的自动化脚本
把以上所有环节串联起来,形成一个可重复、可验证的排错流程。我将其浓缩为一份 MacOS + VSCode + Claude Code 三合一排错清单 ,并附上一个自动化修复脚本,让它成为你开发环境的“一键急救包”。
6.1 七步排错法:从外到内,逐层击穿
| 步骤 | 操作 | 预期结果 | 失败含义 | 解决方案 |
|---|---|---|---|---|
| 1. 系统 DNS |
dig +short model.mify.ai.srv
| 返回 IP 地址 | DNS 不可达 |
改用
127.0.0.1
或
8.8.8.8
作为 DNS,或在
/etc/hosts
中硬编码
|
| 2. 系统网络 |
curl -v http://model.mify.ai.srv/anthropic/v1/messages
|
返回
401
或
400
| 网络层通,服务层有响应 | 检查 API Key、服务端日志 |
| 3. VSCode 权限 |
log stream | grep "deny network"
| 无输出 | macOS 拦截已解除 |
执行
tccutil reset
并重启 VSCode
|
| 4. URL 格式 |
检查
settings.json
中
anthropicBaseURL
|
以
http:
开头,结尾有
/
,无
_
| URL 格式非法 | 按 3.1 节规范重写 |
| 5. 代理中转 |
启动
npx local-web-server --proxy ...
|
curl http://localhost:3000/anthropic/v1/messages
返回
401
| 代理配置正确 |
将 VSCode 配置指向
localhost:3000
|
| 6. 插件日志 |
开启
claudeCode.debug
,查看 Console
|
看到
[ClaudeCode] Sending request...
| 插件已发起请求 | 检查日志中的请求 URL 和响应体 |
| 7. 模型兼容 |
在日志中确认
model
字段值
| 与中转服务支持的模型一致 | 模型不匹配 |
在设置中显式指定
claudeCode.model
|
6.2 一键修复脚本:
fix-claude-macos.sh
将以下脚本保存为
fix-claude-macos.sh
,赋予执行权限
chmod +x fix-claude-macos.sh
,然后运行
./fix-claude-macos.sh
。它会自动完成 90% 的手动操作:
#!/bin/bash
# fix-claude-macos.sh - 专治 macOS 下 VSCode Claude Code 配置之痛
echo "🔍 正在检测系统环境..."
OS_VERSION=$(sw_vers -productVersion)
echo " macOS 版本: $OS_VERSION"
echo "🔧 正在重置 VSCode 权限..."
sudo tccutil reset Accessibility com.microsoft.VSCode.helper.Renderer 2>/dev/null
sudo tccutil reset SystemPolicyAllFiles com.microsoft.VSCode.helper.Renderer 2>/dev/null
sudo tccutil reset ScreenCapture com.microsoft.VSCode.helper.Renderer 2>/dev/null
sudo killall tccd 2>/dev/null
echo "🌐 正在检查并安装本地代理..."
if ! command -v npx &> /dev/null; then
echo " npx 未找到,正在安装 Node.js..."
brew install node 2>/dev/null || echo " brew 未安装,请手动安装 Node.js"
fi
echo " 启动本地代理 (localhost:3000 -> model.mify.ai.srv)..."
npx local-web-server --port 3000 --proxy http://model.mify.ai.srv:80 --proxy-path "/anthropic" > /dev/null 2>&1 &
PROXY_PID=$!
echo " 代理进程 PID: $PROXY_PID"
echo "📝 正在更新 VSCode 用户设置..."
USER_SETTINGS="$HOME/Library/Application Support/Code/User/settings.json"
if [ ! -f "$USER_SETTINGS" ]; then
echo "{}" > "$USER_SETTINGS"
fi
# 使用 jq 安全地更新 JSON(如未安装,提示)
if command -v jq &> /dev/null; then
jq --arg url "http://localhost:3000/anthropic" \
--arg key "your_api_key_here" \
'. += {"claudeCode.anthropicBaseURL": $url, "claudeCode.anthropicApiKey": $key, "claudeCode.debug": true, "claudeCode.logLevel": "verbose"}' \
"$USER_SETTINGS" > "$USER_SETTINGS.tmp" && mv "$USER_SETTINGS.tmp" "$USER_SETTINGS"
else
echo " ⚠️ jq 未安装,跳过自动配置。请手动在 settings.json 中添加:"
echo ' "claudeCode.anthropicBaseURL": "http://localhost:3000/anthropic",'
echo ' "claudeCode.anthropicApiKey": "your_api_key_here",'
echo ' "claudeCode.debug": true,'
echo ' "claudeCode.logLevel": "verbose"'
fi
echo "✅ 修复完成!"
echo " 1. 请完全退出 VSCode (Cmd+Q)"
echo " 2. 重新打开 VSCode"
echo " 3. 按 Cmd+Shift+P → 'Developer: Toggle Developer Tools' → 查看 Console 日志"
echo " 4. 如果仍有问题,请运行 'log stream | grep -i claude' 实时监控"
# 清理函数
cleanup() {
echo "🧹 正在清理代理进程..."
kill $PROXY_PID 2>/dev/null
exit 0
}
trap cleanup SIGINT SIGTERM
最后分享一个小技巧:把这个脚本放在你的
~/bin/目录下,并添加到PATH,以后每次遇到 Claude Code 问题,只需在 Terminal 中输入fix-claude-macos,30 秒内就能回到“请求发出、响应返回”的健康状态。技术的本质,不是记住所有细节,而是构建一套能自动修复的系统。这个脚本,就是你对抗 macOS 碎片化权限模型的最小可行防御工事。
2143

被折叠的 条评论
为什么被折叠?



