Skip to content

CLI 入口点

Claude Code 有多个入口点,适应不同运行模式。

入口文件

src/entrypoints/
├── cli.tsx          # 主 CLI 入口
├── mcp.ts           # MCP 服务器模式入口
├── init.ts          # 非交互式初始化
├── sdk/             # SDK 模式入口
│   ├── index.ts
│   └── types.ts

主入口 cli.tsx

CLI 入口是所有交互式使用的起点:

typescript
// cli.tsx 核心流程
// 注意:实际代码是一个 async function main(),
// 内部通过 if 分支处理各种模式,而非独立函数
async function main() {
  const args = process.argv.slice(2)

  // 1. 快速路径 (--version, --daemon, --bridge 等)
  if (args.length === 1 && (args[0] === '--version' || ...)) return

  // 2. 认证检查
  // 3. 模式分发 (-p / --resume / REPL)
  // 全部内联逻辑,无 handleSpecialFlags/parseArgs/runPrint/runResume/runRepl 等函数
}

关键 CLI 参数

参数类型说明
--print, -pstring非交互式模式
--resume, -rstring?恢复会话
--modelstring覆盖模型
--permission-modestring权限模式
--output-formatstring输出格式 (text/json/stream-json)
--max-turnsnumber最大轮次
--system-promptstring自定义系统提示
--append-system-promptstring追加系统提示
--allowedToolsstring[]允许的工具
--disallowedToolsstring[]禁用的工具
--add-dirstring[]额外工作目录
--mcp-configstringMCP 配置文件路径
--dangerouslySkipPermissionsboolean跳过所有权限
--verboseboolean详细输出
--debugboolean调试模式

MCP 服务器入口 mcp.ts

将 Claude Code 作为 MCP 服务器暴露:

typescript
// mcp.ts
// 注意:使用 @modelcontextprotocol/sdk 的 Server,非 StdioMCPServer
async function startMCPServer(cwd: string, debug: boolean, verbose: boolean) {
  const server = new Server(
    { name: 'claude/tengu', version: MACRO.VERSION },
    // ...
  )

  // 通过 getTools(toolPermissionContext) 获取工具
  // 而非 assembleToolPool()

  await server.connect(transport)  // stdin/stdout 通道
}

SDK 入口 sdk/index.ts

提供编程接口供其他应用集成:

typescript
// sdk/ 目录实际文件:
// controlSchemas.ts, coreSchemas.ts, coreTypes.ts
// 注意:SDKSession 类型定义在 src/entrypoints/agentSdkTypes.ts,非 sdk/ 目录

// agentSdkTypes.ts
export type SDKSession = {
  // ... 会话类型定义
}

// 创建会话函数名为 unstable_v2_createSession
export function unstable_v2_createSession(_options: SDKSessionOptions): SDKSession

CLI 处理器目录 cli/handlers/

处理器功能
agents.ts列出配置的 Agent(含覆盖/遮蔽显示)
auth.tsOAuth 登录流程,SSO 支持
autoMode.ts自动模式配置/导出/审查
mcp.tsxMCP 服务器 CRUD + 健康检查
plugins.ts插件安装/启用/禁用/更新/市场
util.tsxsetupToken、doctor、install(React/Ink 渲染)

CLI Transport 层 cli/transports/

文件功能
Transport.tsTransport 接口定义
WebSocketTransport.tsWS 读写,10 分钟重连预算
SSETransport.tsSSE 读取 + HTTP POST 写入
HybridTransport.tsWS 读取 + HTTP POST 写入
ccrClient.tsCCR v2 客户端,心跳、epoch
SerialBatchEventUploader.ts串行批量上传器
WorkerStateUploader.tsWorker 状态合并上传
transportUtils.ts自动选择传输方式

结构化 IO

structuredIO.ts(约 300 行)实现 NDJSON stdin/stdout 协议,用于 SDK 模式的结构化通信。

主要职责:

  • 通过 WriteStream/ReadStream 进行 NDJSON 格式读写
  • 权限请求/响应通过 control_request/control_response 类型的消息传递
  • 出站事件通过 stream_event 类型消息发送

RemoteIO

remoteIO.ts 继承自 StructuredIO,用于远程模式下的双向流式传输。

主要增强:

  • WebSocket/SSE 传输支持
  • CCR v2 客户端集成
  • Keep-alive 心跳维护