Claude Code 源码被迫开源?我连夜扒了 Python 移植版
今天群里突然炸了——Claude Code 源码被暴露了。
我第一反应是:真的假的?
第二反应是:管他真假,先 clone 下来再说。
结果发现有个更狠的:instructkr 直接搞了个 Python 移植版。虽然作者后来出于法律和道德考虑,把仓库重构成了纯粹的 Python 移植工作空间,但这个项目本身就很有看头。
从 reference_data/archive_surface_snapshot.json 可以看到原始 TypeScript 代码库的规模:
|
|
|
|---|---|
|
|
1902 |
|
|
207 |
|
|
184 |
|
|
36 |
这已经不是简单的 CLI 工具了,是一个完整的 Agent 运行时框架。
子系统架构分析
从本地仓库的 reference_data/subsystems/ 目录可以看到各个子系统的详细信息:
核心子系统
|
|
|
|
|---|---|---|
| components |
|
|
| hooks |
|
|
| bridge |
|
|
| cli |
|
|
| constants |
|
|
components 子系统(389 个模块!)
这是最大的子系统,包含所有 UI 组件:
components/├── AgentProgressLine.tsx # Agent 进度条├── App.tsx # 主应用├── AutoModeOptInDialog.tsx # 自动模式对话框├── AutoUpdater.tsx # 自动更新├── BridgeDialog.tsx # 桥接对话框├── BypassPermissionsModeDialog.tsx # 绕过权限模式├── ClaudeCodeHint/ # 提示菜单├── ContextVisualization.tsx # 上下文可视化├── CoordinatorAgentStatus.tsx # 协调器状态├── CostThresholdDialog.tsx # 成本阈值对话框└── ...(还有 380+ 个文件)
hooks 子系统(104 个模块)
权限处理和通知系统:
hooks/├── toolPermission/ # 工具权限处理│ ├── PermissionContext.ts│ ├── handlers/│ │ ├── coordinatorHandler.ts│ │ ├── interactiveHandler.ts│ │ └── swarmWorkerHandler.ts│ └── permissionLogging.ts├── notifs/ # 通知系统│ ├── useRateLimitWarningNotification.tsx│ ├── usePluginAutoupdateNotification.tsx│ ├── useMcpConnectivityStatus.tsx│ └── ...└── unifiedSuggestions.ts # 统一建议
bridge 子系统(31 个模块)
远程通信核心:
bridge/├── bridgeApi.ts # API 接口├── bridgeConfig.ts # 配置├── bridgeMessaging.ts # 消息传递├── remoteBridgeCore.ts # 远程桥接核心├── replBridge.ts # REPL 桥接├── jwtUtils.ts # JWT 工具├── pollConfig.ts # 轮询配置└── createSession.ts # 会话创建
工具系统分析(184 个工具)
从 tools_snapshot.json 提取的工具分类:
1. AgentTool(21 个模块)
内置 Agent 实现:
tools/AgentTool/├── built-in/│ ├── claudeCodeGuideAgent.ts # Claude Code 指南 Agent│ ├── exploreAgent.ts # 探索Agent│ ├── generalPurposeAgent.ts # 通用 Agent│ ├── planAgent.ts # 计划 Agent│ ├── verificationAgent.ts # 验证 Agent│ └── statuslineSetup.ts # 状态栏设置├── agentMemory.ts # Agent 内存├── agentMemorySnapshot.ts # 内存快照├── forkSubagent.ts # 分离子 Agent├── resumeAgent.ts # 恢复 Agent└── runAgent.ts # 运行 Agent
2. BashTool(18 个模块)
命令执行核心:
tools/BashTool/├── BashTool.tsx # 主工具├── bashSecurity.ts # 安全检查├── bashPermissions.ts # 权限管理├── destructiveCommandWarning.ts # 危险命令警告├── sedEditParser.ts # sed 编辑解析├── shouldUseSandbox.ts # 沙箱判断└── pathValidation.ts # 路径验证
3. AskUserQuestionTool
用户交互工具:
tools/AskUserQuestionTool/├── AskUserQuestionTool.tsx└── prompt.ts
Python 移植版核心代码
1. 运行时路由引擎 (runtime.py)
@dataclass(frozen=True)class RoutedMatch: kind: str# 'command' or 'tool' name: str source_hint: str score: intclass PortRuntime: def route_prompt(self, prompt: str, limit: int = 5) -> list[RoutedMatch]: tokens = {token.lower() for token in prompt.replace('/', ' ').replace('-', ' ').split() if token} by_kind = { 'command': self._collect_matches(tokens, PORTED_COMMANDS, 'command'), 'tool': self._collect_matches(tokens, PORTED_TOOLS, 'tool'), } # 优先每种类型各一个代表 selected: list[RoutedMatch] = [] for kind in ('command', 'tool'): if by_kind[kind]: selected.append(by_kind[kind].pop(0)) # 补充剩余匹配 leftovers = sorted(...) selected.extend(leftovers[: max(0, limit - len(selected))]) return selected[:limit]
设计亮点:
-
• Token 化提示词,支持多种分隔符 -
• 按类型分组,确保多样性 -
• 简单的词频评分算法
2. 宇偶审计系统 (parity_audit.py)
ARCHIVE_ROOT_FILES = { 'QueryEngine.ts': 'QueryEngine.py', 'Task.ts': 'task.py', 'Tool.ts': 'Tool.py', 'commands.ts': 'commands.py', # ...18 个根文件映射}ARCHIVE_DIR_MAPPINGS = { 'assistant': 'assistant', 'bootstrap': 'bootstrap', 'bridge': 'bridge', # ...36 个目录映射}def run_parity_audit() -> ParityAuditResult: # 对比 Python 移植版与原始 TypeScript 的覆盖率 ...
审计维度:
-
• 根文件覆盖率 -
• 目录覆盖率 -
• 文件总数比例 -
• 命令条目覆盖率 -
• 工具条目覆盖率
3. CLI 入口 (main.py)
def build_parser() -> argparse.ArgumentParser: parser = argparse.ArgumentParser(description='Python porting workspace...') subparsers = parser.add_subparsers(dest='command', required=True) subparsers.add_parser('summary') subparsers.add_parser('manifest') subparsers.add_parser('parity-audit') subparsers.add_parser('subsystems') subparsers.add_parser('commands') subparsers.add_parser('tools') subparsers.add_parser('route') subparsers.add_parser('show-command') subparsers.add_parser('show-tool') return parser
4. 数据模型 (models.py)
@dataclass(frozen=True)class Subsystem: name: str path: str file_count: int notes: str@dataclass(frozen=True)class PortingModule: name: str responsibility: str source_hint: str status: str = 'planned'@dataclassclass PortingBacklog: title: str modules: list[PortingModule] = field(default_factory=list)
几个关键发现
1. 权限系统分层
从 hooks/toolPermission/handlers/ 可以看到三层权限处理:
-
• coordinatorHandler.ts– 协调器权限 -
• interactiveHandler.ts– 交互式权限 -
• swarmWorkerHandler.ts– Swarm Worker 权限
这说明 Claude Code 支持多种运行模式,权限策略不同。
2. Agent 内存管理
tools/AgentTool/agentMemory.ts 和 agentMemorySnapshot.ts 暗示:
-
• Agent 有独立的内存空间 -
• 支持内存快照和恢复 -
• 可能用于多轮对话的上下文管理
3. 远程模式完整
bridge/ 子系统的 31 个模块说明远程模式是核心功能:
-
• JWT 认证 -
• 会话管理 -
• 消息传递 -
• 轮询配置
4. UI 组件化程度高
389 个组件文件,说明 CLI 界面也是高度组件化的:
-
• 使用 Ink(React for CLI) -
• 支持主题、快捷键、可视化
关于”被迫开源”这件事
从 README 来看,作者明确声明:
This repository does not claim ownership of the original Claude Code source material.This repository is not affiliated with, endorsed by, or maintained by Anthropic.
原始 TypeScript 代码可能确实被暴露了,但这个仓库选择重构为 Python 移植工作空间。作者在法律和道德之间选择了后者。
这个选择值得尊重。
技术价值
这个项目揭示了 Claude Code 的架构设计:
-
1. 组件化 UI:389 个 React/Ink 组件 -
2. 分层权限:三种权限处理模式 -
3. Agent 系统:内置 6 种 Agent + 内存管理 -
4. 远程模式:完整的桥接通信层 -
5. 工具生态:184 个工具模块
如果你对 AI Agent 的工具链设计感兴趣,可以看看:https://github.com/instructkr/claude-code
作者还写了篇文章:《Is legal the same as legitimate: AI reimplementation and the erosion of copyleft》
本文基于 2026 年 3 月 31 日的仓库快照分析,项目仍在活跃开发中。
夜雨聆风