Skip to content

从0到1完整启动本项目的教程在此! #30

@zb2947244682

Description

@zb2947244682

Claude Code Haha — 从 0 到 1 启动指南

本指南记录从零开始搭建并运行 Claude Code Haha 项目的完整步骤,包含环境准备、配置、启动和常见问题排查。


目录


前置要求

要求 说明
Node.js 用于通过 npm 安装 Bun
npm Node.js 自带的包管理器
一个 API Key 来自支持 Anthropic 兼容协议的服务商
Windows 用户额外需要 Git for Windows(提供 Git Bash)

第一步:安装 Bun

本项目基于 Bun 运行时,不是 Node.js。必须先安装。

方法一:通过 npm(推荐)

npm install -g bun

安装完成后验证:

bun --version

应该输出类似 1.3.11 的版本号。

方法二:各系统原生安装

# macOS / Linux
curl -fsSL https://bun.sh/install | bash
# Windows(PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"

安装后注意事项

  • 安装完成后需要 重新打开终端bun 命令生效
  • 如果 Windows 上提示 bun 不是内部命令,检查 npm 全局 bin 目录是否在 PATH

第二步:安装项目依赖

进入项目根目录,执行:

bun install

这会根据 package.json 安装约 365 个包,通常需要 5-10 秒。

验证

ls node_modules

应该看到一堆依赖目录。如果 node_modules 不存在,后续启动会报 Cannot find package 错误。


第三步:配置环境变量

3.1 创建 .env 文件

# 从模板复制
cp .env.example .env

3.2 编辑 .env

打开 .env 文件,填入你的 API 提供商配置。以下是几种常见提供商的写法:

方案 A:阿里云 DashScope(通义千问)

ANTHROPIC_AUTH_TOKEN=sk-your-key-here
ANTHROPIC_BASE_URL=https://dashscope.aliyuncs.com/apps/anthropic
ANTHROPIC_MODEL=qwen3.6-plus
ANTHROPIC_DEFAULT_SONNET_MODEL=qwen3.6-plus
ANTHROPIC_DEFAULT_HAIKU_MODEL=qwen3.6-plus
ANTHROPIC_DEFAULT_OPUS_MODEL=qwen3.6-plus
API_TIMEOUT_MS=3000000
DISABLE_TELEMETRY=1
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1

方案 B:MiniMax

ANTHROPIC_AUTH_TOKEN=your_token_here
ANTHROPIC_BASE_URL=https://api.minimaxi.com/anthropic
ANTHROPIC_MODEL=MiniMax-M2.7-highspeed
ANTHROPIC_DEFAULT_SONNET_MODEL=MiniMax-M2.7-highspeed
ANTHROPIC_DEFAULT_HAIKU_MODEL=MiniMax-M2.7-highspeed
ANTHROPIC_DEFAULT_OPUS_MODEL=MiniMax-M2.7-highspeed
API_TIMEOUT_MS=3000000
DISABLE_TELEMETRY=1
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1

方案 C:OpenRouter

ANTHROPIC_AUTH_TOKEN=sk-or-v1-your-key-here
ANTHROPIC_BASE_URL=https://openrouter.ai/api
ANTHROPIC_MODEL=openai/gpt-4o
ANTHROPIC_DEFAULT_SONNET_MODEL=openai/gpt-4o
ANTHROPIC_DEFAULT_HAIKU_MODEL=openai/gpt-4o-mini
ANTHROPIC_DEFAULT_OPUS_MODEL=openai/gpt-4o
API_TIMEOUT_MS=3000000
DISABLE_TELEMETRY=1
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1

方案 D:通过 LiteLLM 代理使用 OpenAI / DeepSeek

先启动 LiteLLM 代理:

litellm --config litellm_config.yaml --port 4000

然后配置:

ANTHROPIC_AUTH_TOKEN=sk-anything
ANTHROPIC_BASE_URL=http://localhost:4000
ANTHROPIC_MODEL=gpt-4o
ANTHROPIC_DEFAULT_SONNET_MODEL=gpt-4o
ANTHROPIC_DEFAULT_HAIKU_MODEL=gpt-4o
ANTHROPIC_DEFAULT_OPUS_MODEL=gpt-4o
API_TIMEOUT_MS=3000000
DISABLE_TELEMETRY=1
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1

3.3 环境变量说明

变量 必填 说明
ANTHROPIC_AUTH_TOKEN API Key,通过 Authorization: Bearer 头发送
ANTHROPIC_BASE_URL API 端点 URL
ANTHROPIC_MODEL 默认使用的模型 ID
ANTHROPIC_DEFAULT_SONNET_MODEL Sonnet 级别模型映射
ANTHROPIC_DEFAULT_HAIKU_MODEL Haiku 级别模型映射
ANTHROPIC_DEFAULT_OPUS_MODEL Opus 级别模型映射
API_TIMEOUT_MS 请求超时,默认 600000(10分钟)
DISABLE_TELEMETRY 设为 1 禁用遥测
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC 设为 1 禁用非必要网络请求

3.4 替代配置方式

除了 .env 文件,也可以通过 ~/.claude/settings.json 配置:

{
  "env": {
    "ANTHROPIC_AUTH_TOKEN": "sk-your-key",
    "ANTHROPIC_BASE_URL": "https://your-endpoint",
    "ANTHROPIC_MODEL": "your-model"
  }
}

配置优先级.env 文件 > ~/.claude/settings.json


第四步:启动 TUI

方法一:使用启动脚本(推荐)

Windows 下双击 start-tui.bat,或在终端中运行:

.\start-tui.bat

macOS / Linux 下运行:

./bin/claude-haha

方法二:直接调用 Bun

bun --env-file=.env ./src/entrypoints/cli.tsx

验证启动成功

启动后你应该看到类似这样的 TUI 界面:

┌─────────────────────────────────────────┐
│  Claude Code                            │
│                                         │
│  > 在这里输入你的问题...                 │
└─────────────────────────────────────────┘

如果能看到交互提示符并正常对话,说明启动成功。

快速验证 API 连接

使用 --print 模式做一次无头测试:

bun --env-file=.env ./src/entrypoints/cli.tsx -p "你好,请回复一个简短的测试消息"

应该看到模型返回的文字回复。


启动脚本说明

项目提供了一个 start-tui.bat 脚本,简化了启动过程:

@echo off
cd /d "%~dp0"
bun --env-file=.env ./src/entrypoints/cli.tsx %*

它做了三件事:

  1. 切换到脚本所在目录(确保路径正确)
  2. 自动加载 .env 环境变量
  3. 启动 CLI 主入口

你可以向启动脚本传递参数,例如:

# 指定模型
.\start-tui.bat --model claude-sonnet-4-6

# 无头模式(单次问答)
.\start-tui.bat -p "解释一下这段代码"

# 继续上次对话
.\start-tui.bat -c

常见问题排查

Q1:bun: command not found / bun 不是内部或外部命令

原因:Bun 未安装或未加入 PATH。

解决

# 检查是否已安装
npm list -g bun

# 重新安装
npm install -g bun

# 确认 PATH 包含 npm 全局 bin 目录
npm config get prefix

确保 npm config get prefix 输出的路径在你的系统 PATH 环境变量中。


Q2:Cannot find package 'xxx'

原因:依赖未安装。

解决

bun install

Q3:undefined is not an object (evaluating 'usage.input_tokens')

原因ANTHROPIC_BASE_URL 配置不正确,API 端点返回的不是 Anthropic 协议格式的 JSON(可能是 HTML 页面或其他格式)。

解决

  • 确认 ANTHROPIC_BASE_URL 指向兼容 Anthropic /v1/messages 接口的端点
  • 用 curl 测试端点是否正常响应:
curl -f "$ANTHROPIC_BASE_URL/v1/messages" -X POST \
  -H "x-api-key: $ANTHROPIC_AUTH_TOKEN" \
  -H "anthropic-version: 2023-06-01" \
  -H "content-type: application/json" \
  -d '{"model":"test","max_tokens":1,"messages":[{"role":"user","content":"hi"}]}'

如果返回 HTML 而非 JSON,说明 URL 配错了。


Q4:启动后出现 TUI 界面,但输入无响应或 Enter 键无效

原因modifiers-napi native 包缺失,isModifierPressed() 抛出异常。

解决:此问题已在项目中通过 try-catch 容错修复。如果仍然出现,请确保使用项目自带的 stub 文件,不要修改 stubs/ 目录。


Q5:启动直接进入降级 Recovery CLI,没有 TUI 界面

原因:环境变量 CLAUDE_CODE_LOCAL_RECOVERY_CLI 被设为 1

解决:检查 .env 文件中没有设置该变量,或在命令行中显式清除:

# Windows PowerShell
$env:CLAUDE_CODE_FORCE_RECOVERY_CLI=""; bun --env-file=.env ./src/entrypoints/cli.tsx

# macOS / Linux
CLAUDE_CODE_FORCE_RECOVERY_CLI=0 bun --env-file=.env ./src/entrypoints/cli.tsx

Q6:TUI 界面出现后立刻闪退

可能原因

  1. API 认证失败,启动时校验失败直接退出
  2. .env 文件中的 ANTHROPIC_BASE_URL 无法访问

解决

  1. 先用 --print 模式测试 API 是否连通:
bun --env-file=.env ./src/entrypoints/cli.tsx -p "hello"
  1. 如果报错,检查 .env 中的 API Key 和 URL 是否正确
  2. 如果网络需要代理,添加:
HTTPS_PROXY=http://your-proxy:port

Q7:Windows 下部分功能不可用(语音输入、Computer Use)

原因:这些功能依赖 macOS 特定的系统 API。

解决:不影响核心 TUI 交互和代码编辑功能,可以正常使用。


Q8:Bun 版本过低报错

原因:项目需要较高版本的 Bun(支持 bun:bundle 等内置模块)。

解决

bun upgrade

快速检查清单

在汇报问题之前,先检查以下项目:

  • bun --version 能正常输出版本号
  • node_modules/ 目录存在且不为空
  • .env 文件存在且包含正确的 API 配置
  • -p 无头模式测试 API 可以正常返回回复
  • start-tui.bat 启动后能看到 TUI 输入框

如果以上都通过但仍有问题,尝试删除 node_modules 后重新 bun install

rm -rf node_modules
bun install

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions