You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
9.0 KiB
9.0 KiB
Claude Code Java ☕
使用 Java + Spring AI 重写的 Claude Code CLI AI 编码助手。
✨ 功能特性
- 🤖 AI 对话 — 流式输出,逐 token 实时显示
- 🔧 11 个内置工具 — Bash、文件读写编辑、Glob、Grep、Web获取、Agent 等
- ⚡ 双 API 提供者 — 同时支持 OpenAI 兼容 API 和 Anthropic 原生 API
- 📝 斜杠命令 —
/help,/compact,/cost,/model,/history等 11 个命令 - 🖥️ JLine 终端 — 行编辑、历史记录、Tab 补全、多行输入
- 📋 CLAUDE.md — 自动加载项目级和用户级记忆文件
- 🎯 Skills — 可扩展的技能系统
- 🌿 Git 上下文 — 自动收集分支、状态、最近提交
- 💾 对话持久化 — 自动保存对话历史,支持回顾
- 🗜️ 上下文压缩 — AI 生成摘要替代简单清空
📦 技术栈
| 组件 | 版本 | 用途 |
|---|---|---|
| JDK | 25 | 运行时 |
| Spring Boot | 4.1.0-M2 | 应用框架 |
| Spring AI | 2.0.0-M4 | AI 模型调用 |
| JLine 3 | 3.28.0 | 终端交互 |
| Picocli | 4.7.6 | CLI 命令解析 |
🚀 快速开始
前置要求
- JDK 25(配置
JAVA_HOME) - Maven 3.9+
- API Key(OpenAI 或 Anthropic 或兼容服务)
配置
设置环境变量:
# 必须:API 密钥
export AI_API_KEY="your-api-key-here"
# 可选:API 提供者(默认 openai)
export CLAUDE_CODE_PROVIDER="openai" # 或 "anthropic"
# 可选:自定义 API 地址和模型
export AI_BASE_URL="https://api.openai.com"
export AI_MODEL="gpt-4o"
支持的 API 提供者:
| 提供者 | 默认 Base URL | 默认模型 |
|---|---|---|
openai |
https://api.openai.com |
gpt-4o |
anthropic |
https://api.anthropic.com |
claude-sonnet-4-20250514 |
💡 OpenAI 提供者兼容所有 OpenAI 格式的 API 代理(如 DeepSeek、Azure OpenAI 等)。
运行
Windows PowerShell:
.\run.ps1
Windows CMD:
run.bat
手动运行:
cd claude-code-copy
mvn spring-boot:run
启动效果
◆ Claude Code (Java) v0.1.0-SNAPSHOT
Type /help for commands • Ctrl+D to exit
Provider: OPENAI Model: deepseek-chat
API URL: https://api.deepseek.com
Work Dir: D:\my-project
Tools: 11 registered
Terminal: windows-vtp (160×30)
Tip: Tab to complete commands, ↑↓ to browse history, Ctrl+D to exit
❯
📖 使用说明
对话
直接输入文本与 AI 对话,支持流式输出:
❯ 帮我分析这个项目的架构
多行输入
行末加 \ 续行:
❯ 请帮我写一个函数,\
... 实现字符串反转
斜杠命令
| 命令 | 说明 |
|---|---|
/help |
显示所有可用命令 |
/clear |
清屏 |
/compact |
AI 摘要压缩对话上下文 |
/cost |
显示 Token 使用量和费用 |
/model [name] |
查看/切换模型 |
/status |
显示会话状态(消息数、Token、模型) |
/context |
显示已加载的上下文(CLAUDE.md、Skills、Git) |
/config |
查看配置信息 |
/init |
初始化 CLAUDE.md 配置文件 |
/history |
列出保存的对话历史 |
/exit |
退出 |
内置工具
AI 可以自动调用以下工具:
| 工具 | 说明 |
|---|---|
bash |
执行 Shell 命令 |
file_read |
读取文件内容 |
file_write |
写入文件 |
file_edit |
编辑文件(搜索替换) |
glob |
文件模式匹配搜索 |
grep |
文本内容搜索 |
list_files |
列出目录文件 |
web_fetch |
获取网页内容 |
todo_write |
管理待办事项 |
agent |
启动子 Agent 处理复杂任务 |
notebook_edit |
编辑 Jupyter Notebook |
CLAUDE.md 记忆文件
创建 CLAUDE.md 文件来给 AI 提供项目上下文:
# 项目说明
这是一个 Spring Boot 项目,使用 MyBatis 做数据持久化。
# 编码规范
- 使用中文注释
- 遵循阿里巴巴 Java 开发手册
加载顺序(优先级递增):
~/.claude/CLAUDE.md— 全局配置- 项目根目录
CLAUDE.md— 项目级配置 - 当前目录
CLAUDE.md— 目录级配置
Skills 技能系统
在以下目录放置 .md 文件作为技能:
~/.claude/skills/— 全局技能.claude/skills/— 项目技能.claude/commands/— 自定义命令技能
技能文件支持 YAML frontmatter:
---
name: code-review
description: 代码审查技能
---
请按照以下标准审查代码:
1. 命名规范
2. 错误处理
3. 性能考量
🏗️ 架构设计
模块结构
com.claudecode
├── ClaudeCodeApplication // Spring Boot 主入口
├── cli/
│ └── ClaudeCodeRunner // 启动编排(CommandLineRunner)
├── config/
│ └── AppConfig // Bean 装配、Provider 切换
├── core/
│ ├── AgentLoop // Agent 循环(阻塞 + 流式)
│ ├── TokenTracker // Token 使用追踪
│ └── ConversationPersistence // 对话持久化
├── tool/
│ ├── Tool // 工具协议接口
│ ├── ToolRegistry // 工具注册中心
│ ├── ToolCallbackAdapter // Spring AI 适配器
│ └── impl/ // 11 个工具实现
├── command/
│ ├── SlashCommand // 命令接口
│ ├── CommandRegistry // 命令注册中心
│ └── impl/ // 11 个命令实现
├── console/
│ ├── BannerPrinter // 启动 Banner
│ ├── ToolStatusRenderer // 工具状态渲染
│ ├── ThinkingRenderer // Thinking 渲染
│ ├── SpinnerAnimation // 加载动画
│ ├── MarkdownRenderer // Markdown 渲染
│ └── AnsiStyle // ANSI 样式工具
├── context/
│ ├── SystemPromptBuilder // 系统提示词构建
│ ├── ClaudeMdLoader // CLAUDE.md 加载
│ ├── SkillLoader // Skills 加载
│ └── GitContext // Git 上下文收集
└── repl/
├── ReplSession // REPL 会话管理
└── ClaudeCodeCompleter // Tab 补全
核心流程
用户输入 → 命令检测 → AgentLoop
↓
chatModel.stream(prompt) → Flux<ChatResponse>
↓
逐token实时输出到终端
↓
检测工具调用 → 执行工具 → 结果回传
↓
继续循环或结束
双 API 提供者架构
┌─ openAiChatModel ──── OpenAI / DeepSeek / Azure
CLAUDE_CODE_PROVIDER─┤
└─ anthropicChatModel ── Anthropic Claude
通过 claude-code.provider 配置决定使用哪个 ChatModel Bean。
⚙️ 配置参考
application.yml
spring:
ai:
anthropic:
api-key: ${AI_API_KEY:}
base-url: ${AI_BASE_URL:https://api.anthropic.com}
chat.options.model: ${AI_MODEL:claude-sonnet-4-20250514}
openai:
api-key: ${AI_API_KEY:}
base-url: ${AI_BASE_URL:https://api.openai.com}
chat.options.model: ${AI_MODEL:gpt-4o}
claude-code:
provider: ${CLAUDE_CODE_PROVIDER:openai}
环境变量
| 变量 | 必须 | 说明 | 默认值 |
|---|---|---|---|
AI_API_KEY |
✅ | API 密钥 | - |
CLAUDE_CODE_PROVIDER |
❌ | 提供者 (openai/anthropic) |
openai |
AI_BASE_URL |
❌ | API 基础 URL | 按提供者不同 |
AI_MODEL |
❌ | 模型名称 | 按提供者不同 |
AI_MAX_TOKENS |
❌ | 最大 Token 数 | 8096 |
🔧 开发
构建
mvn clean compile
打包
mvn clean package -DskipTests
java -jar target/claude-code-java-0.1.0-SNAPSHOT.jar
已知问题
- Windows 编码:需要
chcp 65001切换到 UTF-8 编码页(启动脚本已自动处理) - IDE 终端:IntelliJ IDEA 等 IDE 内置终端为 dumb 模式,Tab 补全和行编辑受限
- JDK 25 警告:Maven 的 jansi/guava 会触发 native access 警告(启动脚本已通过 MAVEN_OPTS 抑制)
📝 对应关系
| Claude Code (TypeScript) | Java 实现 | 说明 |
|---|---|---|
cli.tsx → main.tsx |
ClaudeCodeApplication + ClaudeCodeRunner |
入口 |
REPL.tsx |
ReplSession + JLine 3 |
交互循环 |
query.ts |
AgentLoop |
Agent 循环 |
Tool.ts + tools/* |
Tool 接口 + impl/* |
工具系统 |
commands.ts |
SlashCommand + impl/* |
命令系统 |
context.ts + prompts.ts |
SystemPromptBuilder + loaders |
上下文 |
CLAUDE.md + skills/ |
ClaudeMdLoader + SkillLoader |
记忆/技能 |
| Ink Components | console/* 渲染器 |
终端 UI |
📄 License
本项目仅用于学习和研究目的。