Claude Code 0331 系统报告

第23B章 · 封号机制深度解析:从限流到封禁的完整链路

第23B章 · 封号机制深度解析:从限流到封禁的完整链路

Claude Code的"封号"并非一个单一开关,而是一套精密的多层级访问控制体系。从源码分析来看,Anthropic构建了至少六层递进式限制机制,从温和的速率提醒到彻底的账户封禁,形成了一条完整的"限流→降级→封号"链路。

23B.1 订阅层级与能力边界

一切限制的起点是用户的订阅层级。utils/auth.ts定义了五种订阅类型:

free        — 免费用户,能力最受限
pro         — Claude Pro,个人付费
max         — Claude Max,高级个人付费
team        — 团队版
enterprise  — 企业版(含C4E)

不同层级对应截然不同的能力边界:

  • Opus模型访问:Pro用户无法使用Opus。错误提示明确告知:"Claude Opus is not available with the Claude Pro plan."
  • Computer Use:仅Max和Pro用户可用,computerUse/gates.tshasRequiredSubscription()严格检查层级
  • 远程Agent会话checkRemoteAgentEligibility()根据组织状态、订阅层级、特性标志综合判断
  • Extra Usage(超额用量):Team/Enterprise通过/extra-usage命令开通;Pro/Max通过/upgrade升级

层级信息来源于OAuth认证响应中的orgType字段,存储在安全存储中,不可客户端篡改。

23B.2 速率限制:五小时窗口与七日窗口

速率限制是用户最常遇到的"封号前兆"。services/claudeAiLimits.ts定义了四种限额类型:

five_hour         — 5小时滑动窗口限额
seven_day         — 7天滑动窗口总限额
seven_day_opus    — 7天Opus专用限额
seven_day_sonnet  — 7天Sonnet专用限额

预警机制:系统在用户接近限额时提前发出警告,而非等到耗尽才通知:

  • 5小时窗口:当使用率达到90%且时间过了72%时触发预警
  • 7天窗口:分三级预警——使用率达75%/50%/25%时,分别在时间窗口过60%/35%/15%时触发

预警状态通过API响应头返回,三种状态为:allowed(正常)、allowed_warning(接近限额)、rejected(已达限额)。

用户侧表现

  • 预警态:"You've used 75% of your session limit · resets in 4h 12m"
  • 拒绝态:"You've hit your weekly limit · resets in 5h 23m"
  • 超额态:"You're now using extra usage · Your weekly limit resets in 2d 3h"
  • 超额耗尽:"You're out of extra usage · resets in 1d 2h"

23B.3 429与529:两种不同的"被拒"

当请求被服务端拒绝时,Claude Code面对两种截然不同的HTTP状态码,处理策略也完全不同:

429 Too Many Requests — 配额耗尽

429表示用户级别的配额已耗尽。服务端通过一组专用响应头精确传达限制信息:

anthropic-ratelimit-unified-representative-claim  — 限额类型
anthropic-ratelimit-unified-reset                 — 重置时间戳(Unix秒)
anthropic-ratelimit-unified-overage-status         — 超额状态
anthropic-ratelimit-unified-overage-disabled-reason — 超额不可用原因

关键行为:对于Claude.ai订阅者(Max/Pro),当服务端返回x-should-retry: false时,客户端不再重试——这意味着"这不是临时性问题,是你的配额真的用完了"。

529 Overloaded — 服务端过载

529是Anthropic自定义状态码,表示服务端容量不足。处理策略取决于请求来源:

  • 前台请求(用户主线程、Agent、Compact):重试,最多3次(MAX_529_RETRIES),之后触发模型降级(Opus → Sonnet)
  • 后台请求(摘要、标题生成、建议):立即放弃,不重试。这避免了在服务过载时"雪上加霜"

23B.4 指数退避与持久重试

重试策略遵循指数退避算法,定义在services/api/withRetry.ts

基础延迟: 500ms
退避公式: 500ms × 2^(attempt-1) + 随机抖动(0-25%)
延迟上限: 32秒
最大重试: 10次

实际退避序列:500ms → 1s → 2s → 4s → 8s → 16s → 32s → 32s → ...

无人值守持久重试模式(通过CLAUDE_CODE_UNATTENDED_RETRY环境变量启用):

退避上限: 5分钟(而非32秒)
重置上限: 6小时(超过6小时的重置时间直接放弃)
心跳间隔: 30秒(防止被系统判定为空闲)
重试次数: 无限(429/529不计入重试上限)

此模式专为CI/CD场景设计——无人盯守的自动化任务需要更顽强的重试策略。

23B.5 超额用量的12种禁用原因

当用户的基础配额耗尽后,系统检查是否可以使用"Extra Usage"(超额用量)。如果不能,anthropic-ratelimit-unified-overage-disabled-reason头部会返回以下12种原因之一:

overage_not_provisioned       — 当前订阅不支持超额
org_level_disabled            — 组织管理员禁用了超额
org_level_disabled_until      — 组织暂时禁用(附时间戳)
out_of_credits                — 额度耗尽
seat_tier_level_disabled      — 席位层级不支持
member_level_disabled         — 账户被单独禁用
seat_tier_zero_credit_limit   — 席位额度为零
group_zero_credit_limit       — 组额度为零
member_zero_credit_limit      — 个人额度为零
org_service_level_disabled    — 服务级别禁用
org_service_zero_credit_limit — 服务额度为零
no_limits_configured          — 未配置限额

这12种原因揭示了Anthropic限额体系的层次结构:组织 → 服务 → 席位层级 → 组 → 个人,每一层都可以独立设置配额上限。其中member_level_disabled值得特别关注——它表示某个特定账户被单独禁用超额能力,这最接近传统意义上的"封号"。

23B.6 计费错误与信用余额

services/api/errors.ts中定义了明确的计费错误检测:

当API返回"Credit balance is too low"错误时,系统将其分类为billing_error。这意味着:

  • 用户的组织(通常是企业客户)的API信用余额已不足
  • 与速率限制不同,这不会自动恢复——需要充值

23B.7 OAuth令牌吊销:即时封禁

这是最严厉的"封号"手段。当Anthropic服务端吊销OAuth令牌时,errors.ts检测到403状态码中包含"OAuth token has been revoked",立即终止:

  • 错误提示:"OAuth token revoked · Please run /login"
  • 刷新令牌不会帮助(令牌被主动吊销,而非过期)
  • 用户必须重新登录——但如果账户本身被禁,重新登录也无法通过

吊销原因追踪mcp/auth.ts记录了两种吊销场景的遥测事件:

  • invalid_refresh_token — 刷新令牌无效
  • expired_refresh_token — 刷新令牌过期

23B.8 组织级封禁

比个人封禁更强力的是组织级封禁。errors.ts检测"organization has been disabled"消息:

  • 错误提示:"Your account does not have access to Claude. Please login again or contact your administrator."
  • 影响范围:该组织下的所有用户,无论个人状态
  • 两个变体:ORG_DISABLED_ERROR_MESSAGE_ENV_KEY_WITH_OAUTH(OAuth模式)和ORG_DISABLED_ERROR_MESSAGE_ENV_KEY(API Key模式)

此外,oauth_org_not_allowed错误("OAuth authentication is currently not allowed for this organization")是另一种组织级限制——不是禁用组织,而是禁止该组织使用OAuth认证。

23B.9 策略限制服务:远程控制面板

services/policyLimits/是企业管理员的远程控制面板,也是一种"软封号"机制:

type PolicyLimitsResponse = {
  restrictions: Record<string, { allowed: boolean }>
}
  • 获取方式:每小时从/api/oauth/organizations/{orgUUID}/restrictions轮询
  • 缓存策略:ETag条件请求 + 磁盘持久化(policy-limits.json
  • Fail-Open设计:API故障时不阻塞——这意味着策略限制倾向于"放行"而非"封锁"

企业管理员可以通过此API远程禁用特定功能——例如禁止使用Computer Use、禁止特定MCP服务器等。

MCP服务器封锁services/mcp/config.ts实现了更细粒度的服务器封锁:

  • 企业策略可以将特定MCP服务器列入deniedMcpServers黑名单
  • 错误提示:"Cannot add MCP server 'xxx': server is explicitly blocked by enterprise policy"
  • 策略优先于用户设置——即使用户手动添加,也会被阻止

23B.10 GrowthBook特性门控:远程开关

services/analytics/growthbook.ts集成的GrowthBook系统是最灵活的远程控制手段:

  • 用户维度:可按subscriptionTyperateLimitTierorganizationUUIDaccountUUIDplatform等维度精确控制
  • 安全降级getFeatureValue_CACHED_WITH_REFRESH()使用磁盘缓存作为安全网,即使GrowthBook API不可达也能保持上次已知状态
  • 紧急开关tengu_max_version_config作为"kill switch",可以远程禁用特定版本的Claude Code

GrowthBook特性门控的强大之处在于其粒度——可以精确到"某个特定账户在某个特定版本上的某个特定功能"。

23B.11 快速模式降级:隐性限制

withRetry.ts中的Fast Mode降级是一种用户可能未意识到的"隐性限制":

  • 当Fast Mode遇到429/529错误时,如果retry-after小于20秒,等待后重试保持Fast Mode
  • 如果retry-after大于等于20秒,进入冷却期(10-30分钟),自动切换到标准速度模型
  • 当收到anthropic-ratelimit-unified-overage-disabled-reason头时,永久禁用Fast Mode

这种降级是无声的——用户不会收到"你被封了"的通知,只会感觉到响应变慢了。

23B.12 Opus → Sonnet模型降级

当Opus模型持续过载(连续3次529错误)时,系统自动降级到Sonnet模型。这是通过遥测事件tengu_api_opus_fallback_triggered追踪的。

用户会看到:"Opus is experiencing high load, please use /model to switch to Sonnet"。但在此之前,系统已经悄悄尝试了三次重试。

23B.13 封号链路总结:从限流到封禁的六个层级

综合以上分析,Claude Code的封号机制形成了一条清晰的递进链路:

Level 0  正常使用

  ▼  (使用率接近上限)
Level 1  速率预警 ─── allowed_warning状态,UI显示用量百分比

  ▼  (配额耗尽)
Level 2  速率拒绝 ─── rejected状态,429返回,指数退避重试

  ▼  (超额也用完了)
Level 3  超额封锁 ─── 12种overage_disabled_reason

  ▼  (违规或管理操作)
Level 4  令牌吊销 ─── OAuth token revoked,需重新登录

  ▼  (严重违规)
Level 5  组织封禁 ─── organization disabled,全组织封锁

  ▼  (平台级封禁)
Level 6  认证拒绝 ─── OAuth org not allowed,彻底切断

每个层级都有对应的API状态码、响应头、错误消息和客户端处理逻辑。这不是一个简单的"封号"开关,而是一套精心设计的渐进式访问控制体系——从温和提醒到彻底封禁,中间有多个缓冲层级,给予用户和管理员足够的反应时间。


第十部分:隐藏特性与彩蛋

On this page