方案: 抓包看 Claude Code 选 Opus 时实际发的 model ID
请在另一个终端按以下三步操作:
python3 sniff_cc.py 2>cc-sniff.log &
# 极简 HTTPS 透传抓包: 监听本地 8765, 转发到真实 base_url, 打印每个 /v1/messages 的 model
import http.server, ssl, json, urllib.request, sys, threading
UPSTREAM = "https://your-provider-url"
class H(http.server.BaseHTTPRequestHandler):
def _proxy(self):
body = self.rfile.read(int(self.headers.get('Content-Length','0') or 0))
try:
j = json.loads(body)
sys.stderr.write(f"\n[CC->] {self.command} {self.path} model={j.get('model')!r} msgs={len(j.get('messages',[]))}\n") sys.stderr.flush()
except Exception: pass
req = urllib.request.Request(UPSTREAM + self.path, data=body, method=self.command,
headers={k:v for k,v in self.headers.items() if k.lower() not in ('host','content-length')})
try:
r = urllib.request.urlopen(req, timeout=120)
self.send_response(r.status)
for k,v in r.headers.items():
if k.lower() not in ('transfer-encoding','content-encoding','connection'): self.send_header(k,v)
self.end_headers(); self.wfile.write(r.read())
except urllib.error.HTTPError as e:
self.send_response(e.code); self.end_headers(); self.wfile.write(e.read())
do_GET = do_POST = do_PUT = do_DELETE = _proxy
def log_message(self,*a,**k): pass
http.server.ThreadingHTTPServer(("127.0.0.1",8765), H).serve_forever()ANTHROPIC_BASE_URL=http://127.0.0.1:8765
ANTHROPIC_AUTH_TOKEN="$ANTHROPIC_AUTH_TOKEN"
claude
然后回到 /tmp/cc-sniff.log 里 [CC->] 那行的 model=... 是什么(或者直接 cat /tmp/cc-sniff.log),就能告诉你 model 是什么值。
▎ 这个方法 100% 准确,因为是实测 Claude Code 真实出包,不依赖任何猜测或文档。