Codex CLI 入门
OpenAI 官方终端 Agent,GPT 模型驱动,开源、跨平台、轻量化,2026 年与 Claude Code 形成生态对位
Anthropic 官方终端 Agent,原生支持工具调用、MCP、Skills 与 Hooks,2026 年生态最完整的 CLI Agent
内容摘要
**Claude Code 是 Anthropic 官方出品的 agentic 编码工具,常驻在你的终端里,直接读你的代码、改你的文件、跑你的命令、和你的开发工具链协同**。它不是一个聊天机器人,也不是一个传统的命令行工具,而是一个会自己「拿主意」的 Agent——你给它一个目标,它会自己决定要看哪些文件、跑哪些命令、改哪些代码,遇到错误自己调整方向,直到任务做完。
Claude Code 是 Anthropic 官方出品的 agentic 编码工具,常驻在你的终端里,直接读你的代码、改你的文件、跑你的命令、和你的开发工具链协同。它不是一个聊天机器人,也不是一个传统的命令行工具,而是一个会自己「拿主意」的 Agent——你给它一个目标,它会自己决定要看哪些文件、跑哪些命令、改哪些代码,遇到错误自己调整方向,直到任务做完。
要理解 Claude Code 跟 Claude Desktop、Claude API 的差别,先看清楚它的定位:
claude 命令),开箱即用。官方对自己的描述是「an agentic coding tool that reads your codebase, edits files, runs commands, and integrates with your development tools」。它的核心循环非常清楚:拿到任务 → 收集上下文 → 执行动作 → 验证结果 → 不行就再循环,直到任务完成。
命名澄清:本卡涉及的官方名称统一是 Claude Code(不是 "Claude CLI"、"claude-code-cli"、"Anthropic CLI",这些都是社区里的口语叫法)。它的可执行命令是
claude,配置目录是~/.claude/。
| 能力 | 说明 |
|---|---|
| Agentic 循环 | 自主在「收集上下文 → 行动 → 验证」三阶段间循环,每一步根据上一步结果自己决定下一步 |
| 内置工具 | 文件读写、代码搜索、Bash 执行、Web 抓取、子任务派发等,覆盖日常开发 90% 场景 |
| MCP 接入 | 原生支持 Model Context Protocol,可以挂任意 MCP server 扩展能力 |
| Skills | 可复用的工作流脚本(如 /review-pr、/deploy-staging),按需加载、不占用基础上下文 |
| Hooks | 在 Agent 生命周期事件上挂 shell 命令(PreToolUse、PostToolUse、Stop、PreCompact 等) |
| 会话持久化 | 每次会话本地存为 JSONL,可 --resume 续接、--fork-session 分叉、Esc 双击回滚 |
| 权限沙箱 | 工具白/黑名单、文件读写边界、网络域名限制,支持 Plan / Auto-accept / Auto 多种模式 |
下面这张图说明了 Claude Code 拿到一个任务之后内部到底在做什么——循环不是一根直线,而是反复调工具、反复验证的闭环:
下面这张图说明了为什么本卡反复强调「Claude Code 是 harness、不是模型」——Anthropic 的所有 Claude 形态其实是同一个内核的不同外壳:
注意右下两个虚线:Claude API 和 Claude Desktop(聊天版)是直接套在模型上的,不经过 harness——这就是为什么它们没有文件读写、没有 Bash 执行、没有 agentic 循环。Claude Code、IDE 插件、Desktop App、Web、Agent SDK 都共享同一套 harness,所以你的 CLAUDE.md、settings、MCP server、Skills 在它们之间无缝复用。
绝大多数命令行工具(grep、make、docker 等)都是确定性程序——你输入什么参数,它就执行什么动作。Claude Code 不是这样:你给它一个自然语言目标,它自己决定调用哪些工具、调用顺序、什么时候停下来。这是它被叫做 "Agent" 的本质区别。它更像是一个会用 shell 的实习生,而不是一个 shell 命令。
Anthropic 同时还出了 VS Code、JetBrains、Desktop App 几个版本的 Claude Code。底层 agent 引擎是同一个——共享 CLAUDE.md、settings、MCP server 配置——只是 UI 外壳不同:
CLI 是最原始、最灵活的形态。本 wiki 的所有卡片默认讨论的是 CLI 形态。
官方推荐使用 native installer(2026 年起 npm 版已被标记为 deprecated,但仍可用):
# macOS / Linux / WSL
curl -fsSL https://claude.ai/install.sh | bash
# Windows PowerShell
irm https://claude.ai/install.ps1 | iex
# macOS 用 Homebrew 也可以
brew install --cask claude-code # 稳定通道
brew install --cask claude-code@latest # 最新通道
native installer 装好之后会自动后台更新,省去手动升级的烦恼。Homebrew、WinGet 安装的不会自动更新,需要定期 brew upgrade claude-code 或 winget upgrade Anthropic.ClaudeCode。
历史 npm 安装方式
npm install -g @anthropic-ai/claude-code仍然可用,但官方文档已经不再推荐,主要保留给企业内 npm 镜像场景。
第一次跑 claude 时会要求登录。账号体系有三种:
claude # 第一次启动会自动弹出登录流程
/login # 已登录后想切账号用这个 slash 命令
凭证会缓存在系统 keychain 里,下次不用再登。
走一个最小可运行示例:进项目目录、起会话、让它写一个文件并验证。
cd ~/playground/my-app
claude
进入交互界面之后,直接用自然语言下指令:
你:在项目根目录创建一个 hello.py,里面定义一个函数 say_hi(),
打印 "Hello from Claude Code",然后跑一下确认能输出。
Claude:[调用 Write 工具:写入 hello.py]
Claude:[调用 Bash 工具:python hello.py]
Claude:已经创建 hello.py 并验证输出:
Hello from Claude Code
需要我帮你加测试或者写 README 吗?
注意几个细节:
Auto-accept edits 模式)settings.json 里 allow 过这条)Esc 双击就能回滚到上一个状态——这是 git 之外的另一道安全网| 命令 | 干什么 |
|---|---|
claude | 进入交互式会话 |
claude "task" | 一次性任务,跑完进入交互模式 |
claude -p "query" | 一次性查询,跑完直接退出(适合 shell 管道) |
claude -c | 续接当前目录最近一次会话 |
claude -r | 在历史会话列表里挑一个续接 |
claude --fork-session | 从当前会话分叉一个新会话(不影响原会话) |
/help | 查看所有 slash 命令 |
/init | 帮你生成项目级 CLAUDE.md |
/status | 查看当前生效的所有配置(包含来源) |
/context | 查看上下文窗口被谁占用了多少 |
Esc Esc | 回滚到上一次文件修改前的状态 |
Shift+Tab | 在权限模式之间切换(Default / Auto-accept / Plan / Auto) |
settings 分四层(Managed → 命令行 → Local → Project → User,前者覆盖后者)。最常用的是 user 级(~/.claude/settings.json)和 project 级(.claude/settings.json,可以提交到 git)。
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"model": "claude-sonnet-4-6",
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git status)",
"Bash(git diff *)",
"Read(./src/**)"
],
"deny": [
"Read(./.env)",
"Read(./.env.*)",
"Bash(curl *)"
]
},
"hooks": {
"on-session-start": { "command": "~/.claude/hooks/welcome.sh" }
}
}
这段配置做了三件事:固定模型、给常用命令开绿灯(避免每次问你)、阻断对 .env 的读取以防泄密、会话开始时跑一个钩子脚本(典型场景:拉一下当天的 PR 列表打印到终端)。
「同类」这里指的是 Anthropic 自家的几种使用 Claude 的方式——它们后端用的可能是同一批模型,但形态完全不同,选哪个取决于你的使用场景。
| 维度 | Claude Code | Claude Desktop / claude.ai | Claude API(Anthropic SDK) | Claude Agent SDK |
|---|---|---|---|---|
| 形态 | 终端 CLI 程序 | 桌面/网页 GUI | HTTP API + 多语言 SDK | 编程框架(Python / TS) |
| 文件系统访问 | ✅ 原生,整个项目 | ❌ 需手动拖文件进对话 | ❌ 需自己实现 | ✅ 通过 SDK 调用同样的工具 |
| Shell 执行 | ✅ 内置 Bash 工具 | ❌ | ❌ | ✅ |
| Agentic 循环 | ✅ 内置 harness 自动循环 | 半 agentic(仅工具调用) | ❌ 需自己写循环 | ✅ |
| MCP 支持 | ✅ 原生 | ✅ | 需自己集成 | ✅ |
| Skills / Hooks | ✅ 完整支持 | ⚠️ 部分支持 | ❌ | ✅(来自 Claude Code 同源) |
| 模型选择 | Anthropic / Bedrock / Vertex / Foundry | Anthropic | Anthropic / Bedrock / Vertex | 同 Claude Code |
| 适合谁 | 工程师日常写代码 | 普通用户聊天/简单生产力 | 想把 Claude 嵌进自己产品的开发者 | 想造自己的 Agent 产品的开发者 |
| 计费模式 | 订阅或按 token | 订阅 | 按 token | 按 token |
很多人会把 Claude Code 和 Claude Agent SDK 搞混。它们其实是同一套底座的两副面孔:Claude Code 是直接交付给最终用户用的 CLI,Claude Agent SDK 是把同一套 agentic harness(工具集、上下文管理、权限模型、子 Agent 调度)暴露成 API 让开发者重新组合。如果你只是想用,装 Claude Code;如果你想造一个属于自己的 Agent 产品,用 Claude Agent SDK。
| 误区 | 准确理解 |
|---|---|
| 以为 Claude Code 就是 Claude Desktop 的命令行版 | 完全不同。Desktop 是聊天 GUI,看不到你的文件;Claude Code 是带工具集和 agentic 循环的完整 Agent,默认就能改你的代码、跑你的命令 |
| 以为它只能调 Anthropic 自己的模型 | Claude Code 后端默认走 Anthropic API,但开箱支持 Amazon Bedrock、Google Vertex AI、Microsoft Foundry,企业可以走自己的云供应商鉴权 |
| 以为 Claude Code 不能用 MCP | 恰恰相反,Claude Code 是 MCP 的一等公民——.mcp.json 项目级配置、~/.claude.json 用户级配置、managed-settings 企业级配置三套机制齐备,甚至有 /mcp 命令实时管理 |
| 以为它会自动把你电脑上的所有东西都发给 Anthropic | Claude 只在你授权的目录里读文件,敏感文件可以在 settings 里 deny,凭证存在系统 keychain 里。每次 Bash / 写文件都默认要你确认(除非你显式 allow) |
| 以为 Skills 等于 Hooks | 不一样。Skills 是「可复用的工作流」——一段 markdown + 可选脚本,按需被 Claude 主动加载;Hooks 是「生命周期事件回调」——PreToolUse、Stop 这些点会被 harness 主动触发执行 shell 命令。一个是 Claude 主动用,一个是 harness 主动调 |
| 以为它装完就要付费 | 安装是免费的,用 Claude Pro/Max/Team 订阅账号登录就能直接用(额度共享);按 API 计费只是另一种付费模式,不是必须 |
| 以为关掉终端就丢了对话 | 每次会话本地都存为 JSONL(在 ~/.claude/projects/ 下),可以 claude -c 续接、claude -r 在历史里挑、--fork-session 分叉。会话历史是持久的,只是上下文窗口本身每次新会话是从空开始的(这就是为什么需要 CLAUDE.md 和 auto memory) |
| 优势 | 劣势 |
|---|---|
| 开箱即用的 agentic 循环:不用自己写 ReAct 框架、不用自己拼工具调用,装完就能跑 | 需要订阅或 API key:不像 OSS 项目能完全本地化(虽然底层 harness 部分代码已经开源在 github.com/anthropics/claude-code) |
| 工具集深度耦合 Claude 模型:Read/Edit/Bash/Grep 这些工具的描述和参数是和 Claude 的 prompt 联调过的,不是简单套壳 | 强绑定 Anthropic 模型族:虽然支持 Bedrock/Vertex/Foundry,但本质上跑的还是 Claude 系列模型,不能换成 GPT/Gemini |
| 生态最完整:MCP / Skills / Hooks / Subagents / Plugins 五种扩展机制都齐了,2026 年市面上 CLI Agent 里覆盖面最广 | 迭代非常快:几乎每周都有 release,部分配置字段会改名、行为会调整,老教程容易过时 |
| 企业级权限模型:Managed settings 可以让 IT 集中下发策略、限制工具白名单、限制能挂的 MCP server | 上下文管理仍然是个工程问题:长会话会自动 compact,但有时关键指令会被压掉,需要靠 CLAUDE.md 显式持久化 |
| 跨形态共享配置:CLAUDE.md / settings / MCP / Skills 在 CLI、IDE 插件、Desktop、Web 之间无缝复用 | 学习曲线分两段:上手很快(5 分钟能跑),但要把 hooks / skills / 子 agent / sandbox 全用透,需要持续投入 |
会话与回滚机制完善:JSONL 持久化、Esc Esc 文件级回滚、--fork-session 分叉,调试体验远超手撸 SDK | autonomy 越高风险越大:Auto-accept 和 --dangerously-skip-permissions 在没沙箱的环境里跑,可能误删文件、污染数据库,必须配合 git worktree / 容器隔离 |
参考答案:
因为 API 给的是「模型能力」,不等于「能干活的 Agent」。要把 Claude API 变成一个能在你电脑上自主写代码的 Agent,至少还要做这些事:
这些「Agent harness」的工作如果让每个用户自己写一遍,门槛太高、重复太多。Anthropic 把官方 best practice 打包成 Claude Code 直接交付,让 95% 的开发者拿到一个调好的 Agent,剩下 5% 想造自己产品的人通过 Claude Agent SDK 复用同一套 harness。这两个产品其实是同一颗内核的两层封装。
类比一下:API 之于 Claude Code,就像 V8 引擎之于 Chrome——内核是必须的,但大多数人要的是浏览器,不是引擎。
参考答案:
风险 1:误执行破坏性命令(rm -rf、drop database、git push --force 等)
permissions.deny 里把高危命令拉黑(Bash(rm -rf *)、Bash(git push --force*)、Bash(curl *) 等)/tmp,禁止写 ~/.aws/、/etc/ 等敏感路径风险 2:泄露 secrets(.env、API key、SSH key 被读进上下文然后送到模型)
permissions.deny 里加 Read(./.env)、Read(./.env.*)、Read(./secrets/**)、Read(~/.ssh/**)风险 3:上下文/工具被外部内容劫持(prompt injection)
allowedMcpServers),不要随便挂社区 server风险 4:循环卡死 / 烧钱
--max-turns 之类的硬限制(具体参数见 CLI reference)通用兜底:所有自动化都跑在独立 git worktree / 独立分支上,永远不直接动 main;最终产物是 PR 而不是直接 merge,留人审查这一步。
实际部署的时候,三道防线缺一不可:权限白名单(settings)+ 运行沙箱(容器/sandbox 配置)+ 人审兜底(PR review)。
优先展示同分类且标签更接近的内容,方便继续串联学习。
OpenAI 官方终端 Agent,GPT 模型驱动,开源、跨平台、轻量化,2026 年与 Claude Code 形成生态对位
Google 官方终端 Agent,Gemini 模型驱动,强项是 1M+ 上下文窗口、慷慨免费额度与 Google 生态集成
零基础理解 CLI Agent 是什么、和 IDE 插件 / 网页版的本质区别,以及为什么 2026 年成了主战场