<!-- title: 首课：装Claude Code造命令行记账本 -->

## 概述

本教程面向**从未用过 Claude Code 的零基础学习者**，目标是用一个下午完成三件事：把 Claude Code 装通并登录、搞懂三种核心工作模式与项目记忆机制、亲手从零造出一个**能真正用的命令行记账本 CLI**。读完你将掌握安装、认证、`CLAUDE.md` 立规矩、权限配置与一条完整的"需求 → 对话 → 改代码 → 跑通"工作流。

## 前置条件

- 一台 macOS / Windows / Linux 电脑，能联网
- 终端基础：会 `cd`、`ls` 即可，不会也没关系，文中有每一步
- 一个 Claude 订阅（Pro / Max / Team / Enterprise）**或** 一个 Anthropic API Key（二者满足其一即可登录）
- *可选*：已安装 Node.js 18+。没有也行——2026 年的原生安装器不再依赖 Node.js

---

## 第一步：把 Claude Code 装进电脑

2026 年安装 Claude Code 有**两条路径**，新手二选一即可。

### 路径 A：原生安装器（推荐，不依赖 Node.js）

原生安装器把可执行文件直接下到本机，干净、启动快、不与全局 npm 包冲突。

macOS / Linux：

```bash
curl -fsSL https://claude.ai/install.sh | bash
```

Windows（PowerShell）：

```powershell
irm https://claude.ai/install.ps1 | iex
```

### 路径 B：npm 全局安装（需要 Node.js 18+）

```bash
npm install -g @anthropic-ai/claude-code
```

### 验证安装

```bash
claude --version
```

预期输出形如 `2.x.x`（版本号随时间增长）。看到版本号即装通。

### 常见问题

| 现象 | 原因 | 解决 |
|---|---|---|
| `command not found: claude` | PATH 未刷新 | 新开一个终端窗口；或手动把安装目录加入 PATH |
| npm 报权限错误 `EACCES` | 全局目录无写权限 | macOS/Linux 用 `sudo` 或修复 npm 前缀；更推荐改用路径 A |
| 公司网络下载失败 | 代理拦截 | 设置 `HTTPS_PROXY` 环境变量后再装 |
| Windows 提示脚本执行被禁用 | 默认执行策略 | PowerShell 里跑 `Set-ExecutionPolicy -Scope CurrentUser RemoteSigned` |

---

## 第二步：首次启动与登录认证

进入一个**任意空文件夹**（先别碰真实项目，避免误改）：

```bash
mkdir claude-first && cd claude-first
claude
```

首次启动会进入**交互式引导**，依次完成：

1. 选主题（亮/暗，随便选）
2. 登录：浏览器跳转，用 Claude 订阅账号授权；若用 API Key，则选 API 方式并粘贴 Key
3. 信任当前目录：选择 **Yes**，Claude 才能在此目录读写文件

登录成功后，终端底部会出现输入框，左侧常驻显示**当前模式**和**当前模型**。这时它已准备好干活。

> 一个新手最容易踩的坑：在 `~`（家目录）直接启动 Claude。它会把家目录当成项目，扫描一堆无关文件、上下文迅速膨胀。**永远先 `cd` 进项目目录再启动。**

---

## 第三步：认识三种核心工作模式

Claude Code 的"自动化程度"由**模式**控制，用 `Shift + Tab` 循环切换（终端底部会实时显示当前模式名）。

```mermaid
flowchart LR
    A[默认模式<br/>手动批准] -->|Shift+Tab| B[自动编辑模式<br/>Auto-edit]
    B -->|Shift+Tab| C[计划模式<br/>Plan]
    C -->|Shift+Tab| A
    A1["改文件/跑命令<br/>每次都问你"]
    B1["自动改文件<br/>命令仍需批准"]
    C1["只出方案<br/>不落地任何改动"]
    A -.- A1
    B -.- B1
    C -.- C1
```

| 模式 | 改文件 | 跑命令 | 适合场景 |
|---|---|---|---|
| **默认模式** | 每处改动都弹批准 | 每条都问 | 新手、不熟悉的代码库、有风险的操作 |
| **自动编辑模式（Auto-edit）** | 自动写入 | 仍需批准 | 信任 Claude 的方向，想加快迭代 |
| **计划模式（Plan）** | 不改任何东西 | 不执行 | 先看方案、评审架构、决定要不要做 |

还有两个**辅助开关**叠在上面：

- **Fast 模式**：`/fast` 切换，让 Opus 以更快速度输出（仍是 Opus，不降级到小模型）
- **思考强度**：控制推理深度，复杂任务调高，简单改动调低省 token

> 新手第一条纪律：**默认模式起步，看不懂的命令一律按 `n` 拒绝**。等用熟了、信任建立后，再逐步放权到自动编辑模式。计划模式非常适合"先让我看看你想怎么干"。

---

## 第四步：用 CLAUDE.md 给项目立规矩

Claude Code 进入一个目录后，会自动寻找名为 `CLAUDE.md` 的文件并读进上下文——这就是它的**项目记忆**。你把规矩、技术栈、编码偏好写进去，它每次都遵守，不用反复叮嘱。

最快的创建方式是用斜杠命令：

```
/init
```

它会扫描当前目录、问你几个问题，自动生成一份 `CLAUDE.md` 草稿。你也可以直接手写一个最小版本。**对于本教程的记账本项目，建好如下 `CLAUDE.md`：**

```markdown
# 项目：命令行记账本 expense

## 技术栈
- Node.js，单文件实现，零第三方依赖
- 数据持久化用 JSON 文件，存在 ./data/expenses.json

## 编码规范
- 中文注释，英文标识符
- 所有金额以"元"为单位，浮点数；展示时保留两位小数并加 ¥
- 日期格式统一 YYYY-MM-DD
- 命令行入口用 process.argv 解析，不引入 commander 等库

## 不要做的事
- 不要安装任何 npm 依赖
- 不要把 data/ 目录里的真实账单提交到 git
```

> 配置体系的层级：用户级 `~/.claude/CLAUDE.md`（全局偏好）→ 项目级 `./CLAUDE.md`（本项目规矩）→ 子目录级 `./子目录/CLAUDE.md`。三层会自动合并，越具体优先级越高。

---

## 第五步：动手造第一个项目 —— 命令行记账本

接下来全程在交互式 Claude Code 里用**自然语言**驱动。先在输入框里发出第一个需求（注意：我在引导你"怎么提需求"，实际开发中你会换成自己的真实需求）：

> 帮我建一个 Node.js 命令行记账工具 `expense`，要求：用 `node expense.js` 运行，零依赖，数据存 JSON；支持 `add / list / summary / export` 四个子命令。先读 CLAUDE.md，按里面的规范来。

### 5.1 预期结果

Claude（在默认模式下）会先展示它打算创建/修改的文件清单并请求批准。批准后它会写出 `package.json` 和 `expense.js`。下面是它产出的核心代码——**完整可运行**：

**`expense.js`**

```javascript
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');

// 数据存储位置：项目根目录下的 data/expenses.json
const DATA_DIR = path.join(__dirname, 'data');
const DATA_FILE = path.join(DATA_DIR, 'expenses.json');

// 读取全部记录，文件不存在则返回空数组
function load() {
  if (!fs.existsSync(DATA_FILE)) return [];
  return JSON.parse(fs.readFileSync(DATA_FILE, 'utf8'));
}

// 写入全部记录，自动创建 data 目录
function save(records) {
  if (!fs.existsSync(DATA_DIR)) fs.mkdirSync(DATA_DIR, { recursive: true });
  fs.writeFileSync(DATA_FILE, JSON.stringify(records, null, 2));
}

// 把 ['--amount','38','--note','午餐'] 解析成 {amount:'38', note:'午餐'}
function parseArgs(arr) {
  const obj = {};
  for (let i = 0; i < arr.length; i++) {
    if (arr[i].startsWith('--')) obj[arr[i].slice(2)] = arr[++i];
  }
  return obj;
}

// 帮助信息
function usage() {
  console.log(`命令行记账本 expense
  node expense.js add    --amount 38 --category 餐饮 --note 午餐 [--date 2026-07-07]
  node expense.js list   [--category 餐饮] [--month 2026-07]
  node expense.js summary[--month 2026-07]
  node expense.js export expenses.csv`);
}

const [cmd, ...rest] = process.argv.slice(2);

if (cmd === 'add') {
  const o = parseArgs(rest);
  const amount = parseFloat(o.amount);
  if (!amount || amount <= 0) { console.error('错误：--amount 必须为正数'); process.exit(1); }
  const record = {
    id: Date.now(),
    date: o.date || new Date().toISOString().slice(0, 10),
    amount,
    category: o.category || '其他',
    note: o.note || ''
  };
  const records = load();
  records.push(record);
  save(records);
  console.log(`✅ 已记账：${record.date} ${record.category} ¥${record.amount.toFixed(2)} ${record.note}`);
}
else if (cmd === 'list') {
  const o = parseArgs(rest);
  let records = load();
  if (o.category) records = records.filter(r => r.category === o.category);
  if (o.month) records = records.filter(r => r.date.startsWith(o.month));
  if (!records.length) { console.log('（暂无记录）'); return; }
  console.log('日期         分类     金额      备注');
  records.forEach(r => {
    console.log(`${r.date}  ${r.category.padEnd(6)} ¥${r.amount.toFixed(2).padStart(7)}  ${r.note}`);
  });
}
else if (cmd === 'summary') {
  const o = parseArgs(rest);
  let records = load();
  if (o.month) records = records.filter(r => r.date.startsWith(o.month));
  const byCat = {};
  let total = 0;
  records.forEach(r => { byCat[r.category] = (byCat[r.category] || 0) + r.amount; total += r.amount; });
  console.log(`共 ${records.length} 笔，合计 ¥${total.toFixed(2)}`);
  Object.entries(byCat)
    .sort((a, b) => b[1] - a[1])
    .forEach(([cat, amt]) => console.log(`  ${cat.padEnd(6)} ¥${amt.toFixed(2).padStart(7)}`));
}
else if (cmd === 'export') {
  const file = rest[0] || 'expenses.csv';
  const records = load();
  const lines = ['id,date,amount,category,note'];
  records.forEach(r => lines.push([r.id, r.date, r.amount, r.category, `"${r.note.replace(/"/g, '""')}"`].join(',')));
  fs.writeFileSync(file, lines.join('\n'));
  console.log(`✅ 已导出 ${records.length} 条到 ${file}`);
}
else { usage(); }
```

**`package.json`（关键片段，让 `expense` 成为可直接调用的命令）**

```json
{
  "name": "expense",
  "version": "1.0.0",
  "bin": { "expense": "expense.js" },
  "scripts": { "start": "node expense.js" }
}
```

### 5.2 跑起来验证

在终端（Claude Code 之外另开一个窗口，或先退出交互会话）执行：

```bash
node expense.js add --amount 38 --category 餐饮 --note 午餐
node expense.js add --amount 15.5 --category 交通 --note 地铁
node expense.js add --amount 99 --category 餐饮 --note 晚餐
node expense.js summary
node expense.js list --category 餐饮
node expense.js export expenses.csv
```

预期输出：

```
✅ 已记账：2026-07-07 餐饮 ¥38.00 午餐
✅ 已记账：2026-07-07 交通 ¥15.50 地铁
✅ 已记账：2026-07-07 餐饮 ¥99.00 晚餐
共 3 笔，合计 ¥152.50
  餐饮   ¥137.00
  交通   ¥ 15.50
日期         分类     金额      备注
2026-07-07  餐饮    ¥ 38.00  午餐
2026-07-07  餐饮    ¥ 99.00  晚餐
✅ 已导出 3 条到 expenses.csv
```

### 5.3 用自然语言继续迭代

回到 Claude Code 交互会话，继续提需求，让它**增量改进**：

> 给 `summary` 加一个"本月日均"输出，并支持按 `--month` 过滤；金额展示统一两位小数对齐。

批准它的改动后，重新 `node expense.js summary --month 2026-07` 即可看到新效果。**这就是 Claude Code 的核心循环：提需求 → 看方案 → 批准 → 跑验证 → 再提需求。**

### 5.4 常见问题

- **`node: command not found`**：没装 Node.js。本教程选了 Node 路径，请装 Node 18+；或改让 Claude 用 Python 实现（同样零依赖思路）。
- **改完没生效**：你可能在编辑的是旧文件。让 Claude 先 `cat expense.js` 确认内容，或在交互里说"重新读一遍 expense.js 再改"。
- **Claude 想装 npm 依赖**：因为 `CLAUDE.md` 里写了"零依赖"，正常情况下它会遵守；若它仍尝试，直接拒绝（按 `n`）并提醒它"遵守 CLAUDE.md"。

---

## 第六步：权限与配置（settings.json）

到这一步你会发现：每次跑命令都要批准，挺烦。但**完全放权又危险**。正确做法是用配置文件做**白名单**，把确定安全的操作预先放行。

Claude Code 读两层配置：

- **项目级** `./.claude/settings.json` —— 随项目走，可提交到 git，团队共享
- **本地级** `./.claude/settings.local.json` —— 不提交，放个人偏好/敏感配置

一个适合本项目的 `./.claude/settings.json` 示例：

```json
{
  "permissions": {
    "allow": [
      "Bash(node expense.js *)",
      "Bash(npm test)",
      "Bash(cat *)",
      "Read(./**)",
      "Edit(./**)"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Read(./data/expenses.json)"
    ]
  }
}
```

含义：

- `allow`：跑 `node expense.js ...`、看文件、改本项目文件——**一律直接放行，不再弹窗**
- `deny`：禁止递归删除；禁止读真实账单数据（避免把你的真实消费送进模型上下文）

> 跑了 `/permissions` 可以在交互界面可视化地增删规则；改完文件**新开一个会话**才完全生效（旧会话已加载旧规则）。

---

## 第七步：常用斜杠命令与快捷键速查

把下面这张表打印贴在显示器旁，前两周全靠它：

| 输入 | 作用 |
|---|---|
| `/init` | 扫描目录，自动生成 `CLAUDE.md` 草稿 |
| `/clear` | 清空当前会话上下文（换任务前必用，省钱又准确） |
| `/compact` | 压缩当前长对话，保留要点，腾出上下文额度 |
| `/fast` | 切换 Fast 模式（更快输出，仍是 Opus） |
| `/model` | 切换模型（Opus / Sonnet / Haiku） |
| `/agents` | 管理子代理 |
| `/memory` | 查看/编辑 `CLAUDE.md` 记忆 |
| `/cost` | 看本次会话花了多少 token / 钱 |
| `/help` | 全部命令列表 |

快捷键：

- `Shift + Tab`：循环切换 默认 / 自动编辑 / 计划 模式
- `Esc`：打断 Claude 正在进行的操作
- `↑` / `↓`：翻历史输入
- 命令行参数 `-p "你的需求"`：**非交互式**一次性执行，适合脚本化（后续轮次会专门讲）

---

## 实战案例小结：一条完整工作流

回头看，你刚才完成的不只是"写了个记账本"，而是跑通了一条**可复用的 AI 编程工作流**：

```mermaid
flowchart TD
    S([开始]) --> CD[cd 进入空项目目录]
    CD --> CL[手写或 /init 生成 CLAUDE.md 立规矩]
    CL --> ST[claude 启动交互会话]
    ST --> MOD{选模式}
    MOD -->|默认| D[默认：逐步批准，安全]
    MOD -->|计划| P[Plan：先看方案]
    MOD -->|自动| A[Auto-edit：自动改文件]
    D --> R[提需求 → 看方案 → 批准]
    P --> R
    A --> R
    R --> RUN[新终端跑 node expense.js 验证]
    RUN --> OK{结果对吗}
    OK -->|不对| R
    OK -->|对| CFG[配 settings.json 放行安全命令]
    CFG --> DONE([完成])
```

**记牢这条链路：进目录 → 立规矩 → 选模式 → 对话改码 → 离线验证 → 配权限提速。** 任何项目都套这个模板。

---

## 延伸阅读

- **Claude Code 官方快速开始**（中文）—— 权威的安装与首跑流程
- **Claude Code 官方 Fast 模式文档** —— 理解 Opus 加速与思考强度
- **PromptNet《Claude Code 完全指南（2026 版）》** —— 站内 13+ 篇深度文串联，从入门到自建 Agent
- **阿里云开发者社区《Claude Code 全攻略（2026）》** —— 命令大全 + 三种模式 + 记忆体系完整手册
- 进阶方向（后续轮次会展开）：**Skills 自定义技能**、**MCP 服务器接入外部工具**、**`-p` 非交互式批量管道**、**Hooks 自动化护栏**

---

## 训练营适用性评估

- **适合类型**：任何"Claude Code / AI 编程"主题训练营的**第一课**；也适合企业内训的破冰上手环节；前端/后端/数据岗均通用，因为产出物可按岗位换皮（前端换成网页版记账、数据岗换成 CSV 分析脚本）。
- **不适合**：已有 Claude Code 使用经验、想直接学 Agent 自动化或 MCP 开发的进阶营——那是第 3~5 轮的主题。
- **预计教学时长**：**3~4 小时**。其中安装登录约 30 分钟，三种模式与记忆机制讲解约 45 分钟，动手造记账本 + 验证约 90~120 分钟，权限配置与答疑约 30 分钟。建议安排一个完整下午，**当场每人跑通自己的记账本**作为结业交付物。
- **考核标准**：能独立 `cd` 进目录并启动会话、能说出三种模式的区别、能演示 `add/list/summary/export` 四个子命令、能展示一份自己写的 `CLAUDE.md`。四项全过即合格。

## 参考来源

1. [快速开始 - Claude Code 官方文档（中文）](https://code.claude.com/docs/zh-CN/quickstart) — 官方权威的安装、登录与首次使用流程
2. [Speed up responses with fast mode - Claude Code Docs](https://code.claude.com/docs/en/fast-mode) — Fast 模式与 Opus 加速的官方说明
3. [Claude Code 完全指南：从安装到高级 Agent 工作流（2026 版）— PromptNet](https://www.promptnet.cn/2026/06/16/claude-code-complete-guide/) — 串联 13+ 篇深度文的技术博客母页面
4. [Claude Code 全攻略：命令大全+三种模式+记忆体系（2026）— 阿里云开发者社区](https://developer.aliyun.com/article/1735744) — 命令、模式、配置的完整技术手册
5. [How to Install Claude Code in 2026（含原生安装器）— laozhang.ai](https://blog.laozhang.ai/en/posts/how-to-install-claude-code) — 三平台安装与原生安装器实践

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
