<!-- title: Claude Code零基础入门：安装到首个项目 -->

# Claude Code零基础入门：安装到首个项目

> **学习目标**：从零开始安装Claude Code，完成身份认证，掌握核心命令，理解配置层级，最终独立交付一个可运行的待办事项应用。适合从未接触过Claude Code的开发者。
>
> **适用人群**：有一门编程语言基础（Python/JavaScript均可），会使用终端，但从未用过Claude Code。

---

## 一、Claude Code是什么

Claude Code是Anthropic推出的官方AI编程智能体（Agentic Coding Tool），它不是一个聊天机器人插件，而是一个能**直接操作你本地文件系统**的终端工具。它读取代码、编辑文件、运行Shell命令、管理Git仓库——这些操作全部在你的本地环境中完成，代码不会上传到云端。

```
┌──────────────────────────────────────────────────────────────┐
│                    Claude Code 架构概览                       │
├──────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌─────────┐    ┌─────────────┐    ┌───────────────────┐    │
│  │ 你的终端  │───▶│ Claude Code │───▶│ Anthropic Claude  │    │
│  │  / IDE   │◀───│   CLI/桌面   │◀───│     模型API       │    │
│  └─────────┘    └──────┬──────┘    └───────────────────┘    │
│                        │                                     │
│              ┌─────────┼─────────┐                          │
│              ▼         ▼         ▼                          │
│         ┌────────┐ ┌────────┐ ┌────────┐                   │
│         │ 文件系统 │ │ Shell   │ │  Git   │                   │
│         │ 读写   │ │ 命令执行 │ │ 操作   │                   │
│         └────────┘ └────────┘ └────────┘                   │
│                                                              │
└──────────────────────────────────────────────────────────────┘
```

### 与ChatGPT/Copilot的核心区别

| 特性 | Claude Code | GitHub Copilot | ChatGPT |
|------|-------------|----------------|---------|
| 运行方式 | 本地终端/IDE | IDE插件 | 网页/桌面App |
| 文件操作 | 直接读写本地文件 | 仅补全当前文件 | 无法操作文件 |
| Shell命令 | 可执行终端命令 | 不能 | 不能 |
| Git集成 | 原生支持 | 部分支持 | 不能 |
| 项目理解 | 全仓库上下文 | 当前文件为主 | 手动粘贴 |
| MCP扩展 | 支持外部工具连接 | 不支持 | 插件生态 |

### 五种使用界面

Claude Code不只是一个终端工具，它有**五种运行界面**：

1. **终端CLI** — 命令行交互，最核心的界面
2. **VS Code扩展** — 内嵌在编辑器中，支持Inline Diff
3. **JetBrains插件** — 支持IntelliJ、PyCharm、WebStorm等
4. **桌面App** — 2026年4月重大改版，支持多会话并行
5. **Web版** — 浏览器中直接使用

本教程以**终端CLI**为主线，因为它是所有界面的基础。

---

## 二、环境准备

### 2.1 系统要求

| 项目 | 最低要求 |
|------|---------|
| 操作系统 | macOS 12+、Ubuntu 20.04+、Windows 10+（WSL2） |
| Node.js | **v18或更高** |
| 内存 | 4GB以上 |
| 网络 | 需要访问 `api.anthropic.com` |

### 2.2 安装Node.js

如果你还没装Node.js，推荐使用 **nvm**（Node Version Manager）：

```bash
# macOS / Linux
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.bashrc   # 或 source ~/.zshrc
nvm install --lts
node --version     # 确认 v18+
```

Windows用户在WSL2中执行相同命令，或直接从 [nodejs.org](https://nodejs.org) 下载安装包。

### 2.3 验证环境

```bash
node --version     # 应显示 v18.x.x 或更高
npm --version      # 应显示 9.x.x 或更高
git --version      # Claude Code依赖Git，确保已安装
```

三条命令都有正常输出，就可以进入下一步。

---

## 三、安装与认证

### 3.1 安装Claude Code

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

安装完成后验证：

```bash
claude --version
# 预期输出：Claude Code v2.1.x 或更高
```

> **常见问题**：macOS用户如果遇到 `EACCES` 权限错误，执行：
> ```bash
> sudo npm install -g @anthropic-ai/claude-code
> ```
> 或配置npm全局目录避免使用sudo。

### 3.2 两种认证方式

Claude Code支持两种认证路径：

```mermaid
flowchart TD
    A[开始认证] --> B{你有哪种账号?}
    B -->|Claude Pro/Max/Team订阅| C[OAuth登录]
    B -->|Anthropic API Key| D[环境变量方式]
    C --> E[终端运行 claude]
    E --> F[浏览器自动打开]
    F --> G[登录claude.ai授权]
    G --> H[认证完成]
    D --> I[export ANTHROPIC_API_KEY=sk-ant-xxx]
    I --> J[认证完成]
    H --> K[开始使用]
    J --> K
```

#### 方式一：OAuth登录（推荐订阅用户）

```bash
claude
# 自动打开浏览器，跳转到 claude.ai 登录页面
# 登录后终端显示 "Authentication successful"
```

这是Claude Pro、Max、Team、Enterprise订阅用户的默认方式。登录一次后，后续自动续期。

#### 方式二：API Key（开发者/企业用户）

```bash
# 1. 从 https://console.anthropic.com/ 获取API Key
# 2. 设置环境变量
export ANTHROPIC_API_KEY="sk-ant-api03-xxxxxxxxxxxxx"

# 3. 启动Claude Code
claude
```

为了持久化，把环境变量写入Shell配置文件：

```bash
# bash用户
echo 'export ANTHROPIC_API_KEY="sk-ant-api03-xxx"' >> ~/.bashrc
source ~/.bashrc

# zsh用户
echo 'export ANTHROPIC_API_KEY="sk-ant-api03-xxx"' >> ~/.zshrc
source ~/.zshrc
```

### 3.3 验证认证状态

在Claude Code会话中输入：

```
/status
```

预期输出类似：

```
Account: your-email@example.com
Plan: Claude Max
Model: claude-sonnet-4-6
```

---

## 四、核心操作速览

### 4.1 启动与退出

```bash
# 在项目目录启动交互式会话
cd /path/to/your/project
claude

# 一次性提问（不进入交互模式）
claude "这个项目用了什么技术栈?"

# 指定模型
claude --model claude-sonnet-4-6

# 退出会话
# 在会话中按 Ctrl+C 两次，或输入 /exit
```

### 4.2 权限模式

Claude Code有**五种权限模式**，按 `Shift+Tab` 循环切换：

| 模式 | 行为 | 适用场景 |
|------|------|---------|
| **Default** | 每次文件编辑/命令执行都询问 | 初学者、敏感项目 |
| **Accept Edits** | 自动接受文件编辑，命令仍询问 | 日常编码 |
| **Plan** | 只输出计划不执行，需确认后才动手 | 复杂重构、架构变更 |
| **Bypass Permissions** | 自动批准大部分操作 | 可信环境、快速迭代 |
| **Auto Mode** | 安全场景自动执行，危险操作仍询问 | 推荐的平衡模式 |

> **新手建议**：前三天使用 **Default** 模式，理解Claude Code的行为模式后再切换。

### 4.3 必备斜杠命令

| 命令 | 功能 | 使用频率 |
|------|------|---------|
| `/help` | 查看所有命令 | 首次使用 |
| `/init` | 扫描项目生成CLAUDE.md | 每个新项目 |
| `/model` | 切换模型 | 按需 |
| `/compact` | 压缩上下文窗口 | 长会话必用 |
| `/cost` | 查看Token消耗和费用 | 定期检查 |
| `/clear` | 清空当前会话上下文 | 切换话题 |
| `/status` | 查看账号和模型状态 | 排查问题 |
| `/plan` | 进入/退出计划模式 | 复杂任务 |
| `/review` | 代码审查 | 提交前 |
| `/mcp` | 管理MCP服务器连接 | 扩展工具 |
| `/exit` | 退出Claude Code | 结束会话 |

### 4.4 键盘快捷键

| 快捷键 | 功能 |
|--------|------|
| `Enter` | 发送消息 |
| `Shift+Enter` | 换行（不发送） |
| `Shift+Tab` | 切换权限模式 |
| `Ctrl+C` | 中断当前操作 / 退出 |
| `Tab` | 自动补全文件名/命令 |
| `Escape` | 取消当前输入 |
| `Ctrl+G` | 在Plan Mode中确认/取消计划 |

### 4.5 CLI常用启动参数

```bash
claude                          # 交互式会话
claude "你的问题"                # 一次性问答
claude -p "提示词"              # 非交互管道模式（适合脚本）
claude --model claude-sonnet-4-6  # 指定模型
claude --resume                  # 恢复上次会话
claude --continue                # 继续最近一次对话
claude --verbose                 # 详细日志模式
claude --allowedTools "Read,Write,Bash"  # 限制可用工具
```

---

## 五、配置体系详解

Claude Code采用**分层配置架构**，理解这个层级是高效使用的关键。

```mermaid
flowchart BT
    subgraph 配置层级
        E["🌐 Enterprise\n企业管理策略"] --> D["🏢 Team\n团队共享配置"]
        D --> C["👤 User\n用户全局配置"]
        C --> B["📁 Project\n项目级配置"]
        B --> A["🔒 Local\n本地个人配置"]
    end

    subgraph 文件位置
        F1["~/.claude/settings.json"]
        F2["项目根/.claude/settings.json"]
        F3["项目根/CLAUDE.md"]
        F4["~/.claude/CLAUDE.md"]
    end

    A --- F1
    B --- F2
    B --- F3
    C --- F4
```

### 5.1 CLAUDE.md — 项目上下文文件

CLAUDE.md是Claude Code最重要的配置文件，相当于给AI的**项目说明书**。

**生成方式**：

```bash
# 在项目根目录执行
claude
> /init
```

`/init` 会扫描你的项目结构，检测框架和工具链，自动生成CLAUDE.md。例如一个Next.js项目的CLAUDE.md可能长这样：

```markdown
# Project: my-todo-app

## Tech Stack
- Next.js 15 with App Router
- TypeScript
- Tailwind CSS
- SQLite with Drizzle ORM

## Commands
- `npm run dev` — Start development server
- `npm run build` — Production build
- `npm test` — Run tests with Vitest
- `npm run lint` — ESLint check

## Code Style
- Use TypeScript strict mode
- Prefer named exports
- Components in PascalCase, files in kebab-case
- Use `cn()` utility for conditional classes

## Architecture
- `app/` — Next.js App Router pages
- `components/` — Reusable React components
- `lib/` — Shared utilities and database
- `types/` — TypeScript type definitions
```

**手动优化CLAUDE.md的要点**：

| 要写什么 | 不要写什么 |
|---------|-----------|
| 项目技术栈和版本号 | 通用编程知识 |
| 构建/测试/部署命令 | 过时的历史信息 |
| 代码风格和命名约定 | 与当前项目无关的内容 |
| 目录结构说明 | 超长的API文档 |
| 已知的约束和边界条件 | 模糊的"做好代码"要求 |

### 5.2 settings.json — 权限和工具配置

settings.json控制Claude Code的**行为边界**：

```json
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git status)",
      "Bash(git diff *)",
      "Read",
      "Write"
    ],
    "deny": [
      "Bash(rm -rf *)",
      "Bash(git push --force)"
    ]
  },
  "model": "claude-sonnet-4-6",
  "env": {
    "NODE_ENV": "development"
  }
}
```

**配置文件位置**：

| 范围 | 路径 | 用途 |
|------|------|------|
| 用户全局 | `~/.claude/settings.json` | 所有项目共享 |
| 项目共享 | `.claude/settings.json` | 团队统一（提交到Git） |
| 项目本地 | `.claude/settings.local.json` | 个人偏好（不提交） |

### 5.3 .claudeignore — 排除敏感文件

类似 `.gitignore`，用于排除Claude Code不应该访问的文件：

```bash
# .claudeignore
.env
.env.local
**/secrets/**
**/credentials/**
node_modules/
*.pem
*.key
```

---

## 六、实战：从零构建待办事项应用

下面用一个完整项目串联前面所有知识点。我们将构建一个**命令行待办事项应用**，使用Python，无需任何Web框架。

### 6.1 项目初始化

```bash
# 1. 创建项目目录
mkdir ~/claude-todo && cd ~/claude-todo

# 2. 初始化Git仓库
git init

# 3. 启动Claude Code
claude
```

### 6.2 生成项目配置

在Claude Code会话中：

```
> /init
```

由于是新空目录，/init会生成一个基础CLAUDE.md。我们可以直接让Claude Code帮我们完善。

### 6.3 描述需求并开始开发

输入以下提示词：

```
帮我用Python构建一个命令行待办事项应用，要求：
1. 数据存储在JSON文件中（todos.json）
2. 支持添加、列出、完成、删除任务
3. 使用argparse处理命令行参数
4. 代码放在todo.py中
5. 添加颜色输出，让界面更好看
```

Claude Code会进入**计划模式**，输出类似：

```
我来规划一下这个待办事项应用：

1. 创建 todo.py 主程序
   - argparse 定义子命令: add, list, done, delete
   - TodoManager 类管理数据读写
   - JSON文件持久化

2. 功能实现
   - add: 添加新任务
   - list: 显示所有任务（带状态标记）
   - done: 标记任务完成
   - delete: 删除任务

3. 添加颜色输出
   - 使用 colorama 库

确认这个方案，我开始编码？[Y/n]
```

确认后Claude Code开始编码。预期生成的 `todo.py`：

```python
#!/usr/bin/env python3
"""命令行待办事项应用"""
import argparse
import json
import os
from datetime import datetime

try:
    from colorama import init, Fore, Style
    init(autoreset=True)
    HAS_COLOR = True
except ImportError:
    HAS_COLOR = False

DATA_FILE = "todos.json"

def _color(text, color):
    if HAS_COLOR:
        return f"{color}{text}{Style.RESET_ALL}"
    return text

class TodoManager:
    def __init__(self, filepath=DATA_FILE):
        self.filepath = filepath
        self.todos = self._load()

    def _load(self):
        if os.path.exists(self.filepath):
            with open(self.filepath, "r") as f:
                return json.load(f)
        return []

    def _save(self):
        with open(self.filepath, "w") as f:
            json.dump(self.todos, f, indent=2, ensure_ascii=False)

    def add(self, title):
        todo = {
            "id": len(self.todos) + 1,
            "title": title,
            "done": False,
            "created": datetime.now().isoformat()
        }
        self.todos.append(todo)
        self._save()
        print(_color(f"  ✓ 已添加: {title}", Fore.GREEN))

    def list_all(self):
        if not self.todos:
            print(_color("  暂无任务", Fore.YELLOW))
            return
        for t in self.todos:
            status = _color("✓", Fore.GREEN) if t["done"] else _color("○", Fore.RED)
            title = _color(t["title"], Fore.WHITE) if not t["done"] else _color(t["title"], Fore.GREEN)
            print(f"  {status} [{t['id']}] {title}")

    def done(self, todo_id):
        for t in self.todos:
            if t["id"] == todo_id:
                t["done"] = True
                self._save()
                print(_color(f"  ✓ 已完成: {t['title']}", Fore.GREEN))
                return
        print(_color(f"  ✗ 未找到ID={todo_id}的任务", Fore.RED))

    def delete(self, todo_id):
        before = len(self.todos)
        self.todos = [t for t in self.todos if t["id"] != todo_id]
        if len(self.todos) < before:
            self._save()
            print(_color(f"  ✓ 已删除ID={todo_id}", Fore.GREEN))
        else:
            print(_color(f"  ✗ 未找到ID={todo_id}的任务", Fore.RED))

def main():
    parser = argparse.ArgumentParser(description="命令行待办事项")
    sub = parser.add_subparsers(dest="command")

    sub.add_parser("list", help="列出所有任务")

    add_p = sub.add_parser("add", help="添加任务")
    add_p.add_argument("title", help="任务标题")

    done_p = sub.add_parser("done", help="完成任务")
    done_p.add_argument("id", type=int, help="任务ID")

    del_p = sub.add_parser("delete", help="删除任务")
    del_p.add_argument("id", type=int, help="任务ID")

    args = parser.parse_args()
    mgr = TodoManager()

    if args.command == "add":
        mgr.add(args.title)
    elif args.command == "list":
        mgr.list_all()
    elif args.command == "done":
        mgr.done(args.id)
    elif args.command == "delete":
        mgr.delete(args.id)
    else:
        parser.print_help()

if __name__ == "__main__":
    main()
```

### 6.4 测试运行

在Claude Code会话中直接让它运行测试：

```
运行 python todo.py add "学习Claude Code" 然后运行 python todo.py list 确认功能正常
```

预期终端输出：

```bash
$ python todo.py add "学习Claude Code"
  ✓ 已添加: 学习Claude Code

$ python todo.py add "写第一个项目"
  ✓ 已添加: 写第一个项目

$ python todo.py list
  ○ [1] 学习Claude Code
  ○ [2] 写第一个项目

$ python todo.py done 1
  ✓ 已完成: 学习Claude Code

$ python todo.py list
  ✓ [1] 学习Claude Code
  ○ [2] 写第一个项目
```

### 6.5 添加测试并完善

继续在会话中输入：

```
用pytest为todo.py添加单元测试，覆盖添加、完成、删除、空列表场景。
测试应使用临时文件而非真实的todos.json。
```

Claude Code会创建 `test_todo.py`，你只需确认计划并让它执行。

```bash
# 运行测试
pip install pytest
pytest test_todo.py -v
```

### 6.6 完整工作流程

```mermaid
flowchart LR
    A["📁 创建项目目录"] --> B["🔧 git init"]
    B --> C["🤖 启动 claude"]
    C --> D["📝 /init 生成配置"]
    D --> E["💬 描述需求"]
    E --> F["📋 确认开发计划"]
    F --> G["⚡ 自动编码"]
    G --> H["🧪 运行测试"]
    H --> I{测试通过?}
    I -->|是| J["✅ 完成"]
    I -->|否| K["🐛 描述错误"]
    K --> G
```

---

## 七、成本意识与上下文管理

### 7.1 理解Token消耗

Claude Code每次对话都消耗Token。一个典型开发会话的Token分布：

```
┌────────────────────────────────────────────┐
│            Token消耗分布                    │
├────────────────────────────────────────────┤
│ ████████████████░░░░  系统提示词    ~35%    │
│ ██████████░░░░░░░░░░  你的输入      ~15%    │
│ ██████████████░░░░░░  Claude回复    ~30%    │
│ ████████░░░░░░░░░░░░  工具调用结果  ~20%    │
└────────────────────────────────────────────┘
```

### 7.2 节省Token的六个习惯

| 习惯 | 节省幅度 | 方法 |
|------|---------|------|
| 使用 `/compact` | 30-50% | 长会话中定期压缩上下文 |
| 精准CLAUDE.md | 20-30% | 避免冗余信息，只写项目相关 |
| `.claudeignore` | 10-20% | 排除 node_modules 等大目录 |
| 指定文件范围 | 15-25% | "只看 src/index.ts" 而非 "看看代码" |
| 分段对话 | 20-40% | 一个会话一个任务，不要混着来 |
| 使用Sonnet模型 | 50-70% | 日常编码用Sonnet，复杂架构用Opus |

### 7.3 监控费用

```
# 在会话中随时查看
/cost

# API Key用户的典型输出：
Session: 45,230 input + 12,450 output tokens
Estimated cost: $0.34

# 订阅用户看到的是用量配额：
Session: 45,230 input + 12,450 output tokens
Usage: 2.3% of daily limit
```

---

## 八、IDE集成

### 8.1 VS Code

在VS Code中安装 **Claude Code扩展**：

1. 打开VS Code
2. 进入扩展商店（`Ctrl+Shift+X`）
3. 搜索 "Claude Code"
4. 点击安装

安装后，侧边栏出现Claude图标，支持：
- **Inline Diff** — 直接在编辑器中查看AI修改建议
- **Side Chat** — 侧边栏对话
- **文件引用** — 在聊天中引用当前打开的文件

### 8.2 JetBrains

1. 打开 `Settings → Plugins → Marketplace`
2. 搜索 "Claude Code"
3. 安装并重启

支持IntelliJ IDEA、PyCharm、WebStorm、GoLand等全系JetBrains IDE。

---

## 九、新手常犯的十个错误

| # | 错误 | 正确做法 |
|---|------|---------|
| 1 | 一次提十个需求 | 一次一个明确任务 |
| 2 | 不读代码直接接受 | 养成审阅Diff的习惯 |
| 3 | 从不写CLAUDE.md | 每个项目都 `/init` |
| 4 | 会话越长越好 | 任务完成就 `/clear` 或重启 |
| 5 | 在Default模式下不耐烦 | 前几天保持Default学习行为模式 |
| 6 | 不提交Git就让AI改代码 | 改动前先commit，方便回滚 |
| 7 | 用模糊的提示词 | "在 src/utils/format.ts 中添加日期格式化函数" |
| 8 | 忘记加 `.claudeignore` | 排除 node_modules、.env、dist |
| 9 | 把API Key写在代码里 | 用环境变量或 `.env` 文件 |
| 10 | 不用 `/plan` 就动手复杂重构 | 复杂任务先进Plan模式确认方案 |

---

## 十、第一天学习路线图

```mermaid
flowchart TD
    A["Day 1 目标：能用会基本操作"] --> B["Hour 1: 安装与认证"]
    B --> C["Hour 2: 空目录中探索命令<br/>/help, /status, /model"]
    C --> D["Hour 3: 用现有项目练习<br/>cd 到已有项目 → /init → 提问"]
    D --> E["Hour 4: 完成待办事项实战项目"]
    E --> F["Hour 5: 理解配置层级<br/>CLAUDE.md + settings.json"]
    F --> G["Hour 6: 尝试VS Code集成"]
    G --> H["✅ Day 1 完成！"]

    style A fill:#4A90D9,color:#fff
    style H fill:#2ECC71,color:#fff
```

### 自检清单

完成第一天后，确认你能做到：

- [ ] 独立安装Claude Code并完成认证
- [ ] 知道五种权限模式的区别
- [ ] 能用 `/init` 为项目生成CLAUDE.md
- [ ] 会用 `/compact` 管理上下文
- [ ] 能用 `/cost` 检查Token消耗
- [ ] 理解 `Shift+Tab` 切换权限模式
- [ ] 知道什么时候用Plan模式
- [ ] 成功构建并运行了待办事项应用

---

## 训练营适用性评估

| 维度 | 评估 |
|------|------|
| 适合训练营类型 | AI编程入门营、Claude Code快速上手营、DevOps自动化入门 |
| 教学时长 | 6小时（一天集中训练） |
| 学员前置要求 | 任一编程语言基础 + 终端使用经验 |
| 硬件要求 | 能运行Node.js的笔记本，网络连接 |
| 教学形式 | 讲授30% + Live Demo 30% + 动手实操40% |

---

## 参考来源

1. [Quickstart - Claude Code Docs](https://code.claude.com/docs/en/quickstart) — Anthropic官方快速入门指南
2. [Claude Code Tutorial for Beginners 2026](https://dev.to/ayyazzafar/claude-code-tutorial-for-beginners-2026-from-installation-to-building-your-first-project-1lma) — 从安装到首个项目的完整教程
3. [Claude Code Cheat Sheet](https://skillsplayground.com/guides/claude-code-cheat-sheet/) — 命令、快捷键速查手册
4. [Choose a permission mode - Claude Code Docs](https://code.claude.com/docs/en/permission-modes) — 权限模式官方文档
5. [Claude Code Tutorial - CodeWithMukesh](https://codewithmukesh.com/blog/claude-code-for-beginners/) — 2026完整入门教程

> [!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)
