本教程面向从未用过 Claude Code 的零基础学习者,目标是用一个下午完成三件事:把 Claude Code 装通并登录、搞懂三种核心工作模式与项目记忆机制、亲手从零造出一个能真正用的命令行记账本 CLI。读完你将掌握安装、认证、CLAUDE.md 立规矩、权限配置与一条完整的"需求 → 对话 → 改代码 → 跑通"工作流。
cd、ls 即可,不会也没关系,文中有每一步2026 年安装 Claude Code 有两条路径,新手二选一即可。
原生安装器把可执行文件直接下到本机,干净、启动快、不与全局 npm 包冲突。
macOS / Linux:
curl -fsSL https://claude.ai/install.sh | bash
Windows(PowerShell):
irm https://claude.ai/install.ps1 | iex
npm install -g @anthropic-ai/claude-code
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 |
进入一个任意空文件夹(先别碰真实项目,避免误改):
mkdir claude-first && cd claude-first
claude
首次启动会进入交互式引导,依次完成:
登录成功后,终端底部会出现输入框,左侧常驻显示当前模式和当前模型。这时它已准备好干活。
一个新手最容易踩的坑:在
~(家目录)直接启动 Claude。它会把家目录当成项目,扫描一堆无关文件、上下文迅速膨胀。永远先cd进项目目录再启动。
Claude Code 的"自动化程度"由模式控制,用 Shift + Tab 循环切换(终端底部会实时显示当前模式名)。
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 切换,让 Opus 以更快速度输出(仍是 Opus,不降级到小模型)新手第一条纪律:默认模式起步,看不懂的命令一律按
n拒绝。等用熟了、信任建立后,再逐步放权到自动编辑模式。计划模式非常适合"先让我看看你想怎么干"。
Claude Code 进入一个目录后,会自动寻找名为 CLAUDE.md 的文件并读进上下文——这就是它的项目记忆。你把规矩、技术栈、编码偏好写进去,它每次都遵守,不用反复叮嘱。
最快的创建方式是用斜杠命令:
/init
它会扫描当前目录、问你几个问题,自动生成一份 CLAUDE.md 草稿。你也可以直接手写一个最小版本。对于本教程的记账本项目,建好如下 CLAUDE.md:
# 项目:命令行记账本 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,按里面的规范来。
Claude(在默认模式下)会先展示它打算创建/修改的文件清单并请求批准。批准后它会写出 package.json 和 expense.js。下面是它产出的核心代码——完整可运行:
expense.js
#!/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 成为可直接调用的命令)
{
"name": "expense",
"version": "1.0.0",
"bin": { "expense": "expense.js" },
"scripts": { "start": "node expense.js" }
}
在终端(Claude Code 之外另开一个窗口,或先退出交互会话)执行:
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
回到 Claude Code 交互会话,继续提需求,让它增量改进:
给
summary加一个"本月日均"输出,并支持按--month过滤;金额展示统一两位小数对齐。
批准它的改动后,重新 node expense.js summary --month 2026-07 即可看到新效果。这就是 Claude Code 的核心循环:提需求 → 看方案 → 批准 → 跑验证 → 再提需求。
node: command not found:没装 Node.js。本教程选了 Node 路径,请装 Node 18+;或改让 Claude 用 Python 实现(同样零依赖思路)。cat expense.js 确认内容,或在交互里说"重新读一遍 expense.js 再改"。CLAUDE.md 里写了"零依赖",正常情况下它会遵守;若它仍尝试,直接拒绝(按 n)并提醒它"遵守 CLAUDE.md"。到这一步你会发现:每次跑命令都要批准,挺烦。但完全放权又危险。正确做法是用配置文件做白名单,把确定安全的操作预先放行。
Claude Code 读两层配置:
./.claude/settings.json —— 随项目走,可提交到 git,团队共享./.claude/settings.local.json —— 不提交,放个人偏好/敏感配置一个适合本项目的 ./.claude/settings.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 编程工作流:
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([完成])
记牢这条链路:进目录 → 立规矩 → 选模式 → 对话改码 → 离线验证 → 配权限提速。 任何项目都套这个模板。
-p 非交互式批量管道、Hooks 自动化护栏cd 进目录并启动会话、能说出三种模式的区别、能演示 add/list/summary/export 四个子命令、能展示一份自己写的 CLAUDE.md。四项全过即合格。[!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 等场景全覆盖。
