vault backup: 2026-06-09 23:15:17
This commit is contained in:
@@ -1,15 +1,17 @@
|
||||
---
|
||||
title: "什么是 Claude Code - Terminal Native Agentic Coding System"
|
||||
description: "Claude Code 是运行在终端中的 agentic coding system,直接在你的项目目录中读代码、改文件、跑命令、调试程序。了解它的技术定位、架构差异和核心能力。"
|
||||
keywords: ["Claude Code", "AI 编程助手", "Agentic Coding", "终端 AI", "CLI AI"]
|
||||
og:image: "https://ccb.agent-aura.top/docs/images/og-cover.png"
|
||||
tags: [claude-code, agentic-coding, architecture, CLI, terminal]
|
||||
create time: 2026-06-09 22:30
|
||||
---
|
||||
|
||||
## 一句话定义
|
||||
# 什么是 Claude Code
|
||||
|
||||
Claude Code 是一个**运行在本地终端中的 agentic coding system**。它不是给建议的聊天机器人——它直接在你的项目目录中读代码、改文件、跑命令、调试程序,拥有完整的 shell 能力。
|
||||
## 概述
|
||||
|
||||
## 技术定位:terminal-native agentic system
|
||||
Claude Code 是一个运行在本地终端中的 agentic coding system。它不给建议,而是直接在你的项目目录中读代码、改文件、跑命令、调试程序——拥有完整的 shell 能力。
|
||||
|
||||
## 正文
|
||||
|
||||
### 技术定位:terminal-native agentic system
|
||||
|
||||
理解 Claude Code 的关键在于三个词:
|
||||
|
||||
@@ -28,55 +30,44 @@ Claude Code 是一个**运行在本地终端中的 agentic coding system**。它
|
||||
| Aider | CLI chat → git patch | 本地进程 | 文件操作为主 |
|
||||
| ChatGPT / Claude.ai | Cloud chat + artifacts | 浏览器/云端 | 沙箱容器 |
|
||||
|
||||
核心差异:Claude Code 拥有**完整的 shell 访问权**——这意味着它可以做任何你在终端里能做的事,但也需要对应的安全机制来约束这个能力。
|
||||
> [!info] 核心差异
|
||||
> Claude Code 拥有**完整的 shell 访问权**——这意味着它可以做任何你在终端里能做的事,但也需要对应的安全机制来约束这个能力。
|
||||
|
||||
## 端到端示例:从输入到输出
|
||||
### 端到端示例:从输入到输出
|
||||
|
||||
当你在终端中输入 `bun run dev 有个 TypeScript 报错,帮我修一下` 时,系统发生了什么?
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 1. 入口层 (cli.tsx → main.tsx) │
|
||||
│ feature() = false, MACRO 注入, 启动 Commander.js CLI │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 2. 交互层 (REPL.tsx — React/Ink) │
|
||||
│ PromptInput 捕获用户输入 → UserMessage 加入会话 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 3. 编排层 (QueryEngine.ts) │
|
||||
│ 管理 turn 生命周期、token 预算、compaction 触发 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 4. 核心循环 (query.ts — Agentic Loop) │
|
||||
│ 组装上下文 → 调 API → 收流式响应 → 解析工具调用 │
|
||||
│ → 权限检查 → 执行工具 → 结果回传 → 再次调 API → 循环 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 5. 工具执行 (BashTool.call / FileEditTool.call / ...) │
|
||||
│ 实际执行: 读文件、运行命令、搜索代码... │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 6. 通信层 (claude.ts → Anthropic API) │
|
||||
│ 流式 HTTP, 支持 Bedrock/Vertex/Foundry 等 7 种 provider │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["入口层 cli.tsx → main.tsx"] -->|"feature() = false, MACRO 注入, 启动 Commander.js CLI"| B["交互层 REPL.tsx — React/Ink"]
|
||||
B -->|"PromptInput 捕获用户输入 → UserMessage 加入会话"| C["编排层 QueryEngine.ts"]
|
||||
C -->|"管理 turn 生命周期, token 预算, compaction 触发"| D["核心循环 query.ts — Agentic Loop"]
|
||||
D -->|"组装上下文 → 调 API → 收流式响应 → 解析工具调用"| E["工具执行 BashTool / FileEditTool / ..."]
|
||||
E -->|"执行结果回传 → 再次调 API → 循环"| D
|
||||
D -->|"流式 HTTP, 支持 7 种 provider"| F["通信层 claude.ts → Anthropic API"]
|
||||
```
|
||||
|
||||
具体到这个报错修复场景,一次典型的 agentic loop 可能包含多轮工具调用:
|
||||
|
||||
| Turn | AI 决策 | 工具调用 | 结果 |
|
||||
|------|---------|----------|------|
|
||||
| 1 | 先看报错信息 | `Bash("bun run dev 2>&1 | head -30")` | TypeScript 错误输出 |
|
||||
| 1 | 先看报错信息 | `Bash("bun run dev 2>&1 \| head -30")` | TypeScript 错误输出 |
|
||||
| 2 | 定位到文件 | `Read("src/utils/foo.ts")` | 源代码内容 |
|
||||
| 3 | 搜索相关类型定义 | `Grep("interface Foo", "src/")` | 类型定义位置 |
|
||||
| 4 | 修复代码 | `FileEdit(old, new)` | 代码已修改 |
|
||||
| 5 | 验证修复 | `Bash("bun run dev 2>&1 | head -10")` | 编译通过 |
|
||||
| 5 | 验证修复 | `Bash("bun run dev 2>&1 \| head -10")` | 编译通过 |
|
||||
|
||||
每一步都是 AI 自主决策的——它决定用哪个工具、传什么参数、何时停止。这就是 "agentic" 的含义。
|
||||
> [!question] 思考
|
||||
> 每一步都是 AI 自主决策的——它决定用哪个工具、传什么参数、何时停止。这就是 "agentic" 的含义。如果你来设计这个循环,你会在哪些环节加入"人类审批"?
|
||||
|
||||
## 它不是什么
|
||||
### 它不是什么
|
||||
|
||||
- **不是 IDE 插件**:没有图形界面,不依赖 VS Code 或任何 IDE
|
||||
- **不是 API wrapper**:它有自己的工具系统、权限模型、上下文工程、会话管理
|
||||
- **不是聊天机器人**:输出不是纯文本,而是实际的文件修改、命令执行
|
||||
- **不是无脑执行器**:每个敏感操作都有权限检查和用户确认环节
|
||||
|
||||
## 启动入口解剖
|
||||
### 启动入口解剖
|
||||
|
||||
真正的代码入口是 `src/entrypoints/cli.tsx`,它做了三件关键的事:
|
||||
|
||||
@@ -99,7 +90,7 @@ globalThis.INTERFACE_TYPE = "stdio"; // 标准 I/O 交互
|
||||
3. 加载工具列表(`getTools()`)
|
||||
4. 启动 REPL(`launchRepl()`)或管道模式(`-p`)
|
||||
|
||||
## 为什么选择终端
|
||||
### 为什么选择终端
|
||||
|
||||
终端不是限制,而是选择。它带来了独特的能力:
|
||||
|
||||
@@ -108,4 +99,10 @@ globalThis.INTERFACE_TYPE = "stdio"; // 标准 I/O 交互
|
||||
- **可组合性**:管道模式(`echo "..." | claude -p`)允许嵌入 CI/CD 和自动化流程
|
||||
- **低延迟**:没有 Electron 开销,React/Ink 渲染的 TUI 响应极快
|
||||
|
||||
代价是用户需要适应命令行界面——但也正因如此,它吸引的是需要**真正掌控开发环境**的开发者。
|
||||
> [!tip] 代价与收获
|
||||
> 用户需要适应命令行界面——但也正因如此,它吸引的是需要**真正掌控开发环境**的开发者。
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[architecture-overview]]
|
||||
- [[why-this-whitepaper]]
|
||||
|
||||
Reference in New Issue
Block a user