what-is-claude-code.mdx 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. ---
  2. title: "什么是 Claude Code"
  3. description: "terminal-native agentic system —— 不是 IDE 插件,不是 Web Chat"
  4. ---
  5. ## 一句话定义
  6. Claude Code 是一个**运行在本地终端中的 agentic coding system**。它不是给建议的聊天机器人——它直接在你的项目目录中读代码、改文件、跑命令、调试程序,拥有完整的 shell 能力。
  7. ## 技术定位:terminal-native agentic system
  8. 理解 Claude Code 的关键在于三个词:
  9. | 定位关键词 | 含义 |
  10. |-----------|------|
  11. | **Terminal-native** | 原生 CLI 应用,不是 IDE 插件、不是 Web 界面、不是 API wrapper |
  12. | **Agentic** | AI 自主决策工具调用链,不是"一问一答"的聊天模式 |
  13. | **Coding system** | 面向软件工程全流程,不是通用问答工具 |
  14. 与同类工具的**架构层面**差异(不是功能清单):
  15. | 工具 | 架构模式 | 运行位置 | 工具执行 |
  16. |------|----------|----------|----------|
  17. | **Claude Code** | Terminal-native agentic loop | 本地进程 | 直接 shell 执行 |
  18. | Cursor / Copilot | IDE-integrated autocomplete + chat | IDE 进程内 | LSP / IDE API |
  19. | Aider | CLI chat → git patch | 本地进程 | 文件操作为主 |
  20. | ChatGPT / Claude.ai | Cloud chat + artifacts | 浏览器/云端 | 沙箱容器 |
  21. 核心差异:Claude Code 拥有**完整的 shell 访问权**——这意味着它可以做任何你在终端里能做的事,但也需要对应的安全机制来约束这个能力。
  22. ## 端到端示例:从输入到输出
  23. 当你在终端中输入 `bun run dev 有个 TypeScript 报错,帮我修一下` 时,系统发生了什么?
  24. ```
  25. ┌─────────────────────────────────────────────────────────┐
  26. │ 1. 入口层 (cli.tsx → main.tsx) │
  27. │ feature() = false, MACRO 注入, 启动 Commander.js CLI │
  28. ├─────────────────────────────────────────────────────────┤
  29. │ 2. 交互层 (REPL.tsx — React/Ink) │
  30. │ PromptInput 捕获用户输入 → UserMessage 加入会话 │
  31. ├─────────────────────────────────────────────────────────┤
  32. │ 3. 编排层 (QueryEngine.ts) │
  33. │ 管理 turn 生命周期、token 预算、compaction 触发 │
  34. ├─────────────────────────────────────────────────────────┤
  35. │ 4. 核心循环 (query.ts — Agentic Loop) │
  36. │ 组装上下文 → 调 API → 收流式响应 → 解析工具调用 │
  37. │ → 权限检查 → 执行工具 → 结果回传 → 再次调 API → 循环 │
  38. ├─────────────────────────────────────────────────────────┤
  39. │ 5. 工具执行 (BashTool.call / FileEditTool.call / ...) │
  40. │ 实际执行: 读文件、运行命令、搜索代码... │
  41. ├─────────────────────────────────────────────────────────┤
  42. │ 6. 通信层 (claude.ts → Anthropic API) │
  43. │ 流式 HTTP, 支持 Bedrock/Vertex/Azure 多 provider │
  44. └─────────────────────────────────────────────────────────┘
  45. ```
  46. 具体到这个报错修复场景,一次典型的 agentic loop 可能包含多轮工具调用:
  47. | Turn | AI 决策 | 工具调用 | 结果 |
  48. |------|---------|----------|------|
  49. | 1 | 先看报错信息 | `Bash("bun run dev 2>&1 | head -30")` | TypeScript 错误输出 |
  50. | 2 | 定位到文件 | `Read("src/utils/foo.ts")` | 源代码内容 |
  51. | 3 | 搜索相关类型定义 | `Grep("interface Foo", "src/")` | 类型定义位置 |
  52. | 4 | 修复代码 | `FileEdit(old, new)` | 代码已修改 |
  53. | 5 | 验证修复 | `Bash("bun run dev 2>&1 | head -10")` | 编译通过 |
  54. 每一步都是 AI 自主决策的——它决定用哪个工具、传什么参数、何时停止。这就是 "agentic" 的含义。
  55. ## 它不是什么
  56. - **不是 IDE 插件**:没有图形界面,不依赖 VS Code 或任何 IDE
  57. - **不是 API wrapper**:它有自己的工具系统、权限模型、上下文工程、会话管理
  58. - **不是聊天机器人**:输出不是纯文本,而是实际的文件修改、命令执行
  59. - **不是无脑执行器**:每个敏感操作都有权限检查和用户确认环节
  60. ## 启动入口解剖
  61. 真正的代码入口是 `src/entrypoints/cli.tsx`,它做了三件关键的事:
  62. ```typescript
  63. // 1. 注入运行时 polyfill —— feature() 永远返回 false
  64. const feature = (_name: string) => false;
  65. // 2. 注入构建时宏
  66. globalThis.MACRO = { VERSION: "2.1.888", BUILD_TIME: ..., };
  67. // 3. 声明构建目标
  68. globalThis.BUILD_TARGET = "external"; // 外部构建(非 Anthropic 内部)
  69. globalThis.BUILD_ENV = "production";
  70. globalThis.INTERFACE_TYPE = "stdio"; // 标准 I/O 交互
  71. ```
  72. 然后控制流传递到 `src/main.tsx`:
  73. 1. Commander.js 解析命令行参数
  74. 2. 初始化认证、遥测、策略限制
  75. 3. 加载工具列表(`getTools()`)
  76. 4. 启动 REPL(`launchRepl()`)或管道模式(`-p`)
  77. ## 为什么选择终端
  78. 终端不是限制,而是选择。它带来了独特的能力:
  79. - **完整的 shell 访问**:可以运行任何命令行工具,无需为每个能力写插件
  80. - **项目原生**:直接在项目目录工作,理解文件系统结构、git 状态
  81. - **可组合性**:管道模式(`echo "..." | claude -p`)允许嵌入 CI/CD 和自动化流程
  82. - **低延迟**:没有 Electron 开销,React/Ink 渲染的 TUI 响应极快
  83. 代价是用户需要适应命令行界面——但也正因如此,它吸引的是需要**真正掌控开发环境**的开发者。