# jz-coder
**Repository Path**: chen-lexiang/jz-coder
## Basic Information
- **Project Name**: jz-coder
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-08-13
- **Last Updated**: 2025-08-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# JZ-coder

你的新编码伙伴,现已入驻你最喜爱的终端。
你的工具、代码和工作流,全部连接到你选择的 LLM。

## 功能特性
- **多模型支持:** 从多种 LLM 中选择,或通过兼容 OpenAI 或 Anthropic 的 API 添加自定义模型
- **灵活切换:** 在会话中途切换 LLM,同时保留上下文
- **基于会话:** 为每个项目维护多个工作会话和上下文
- **LSP 增强:** JZ-coder 像你一样使用 LSP 获取额外上下文
- **可扩展性:** 通过 MCP(`http`、`stdio` 和 `sse`)添加功能
- **全平台支持:** 在 macOS、Linux、Windows(PowerShell 和 WSL)、FreeBSD、OpenBSD 和 NetBSD 的每个终端中都提供一流支持
## 安装
使用 NPM 安装:
```bash
npm install -g @charmland/jz-coder
```
> [!WARNING]
> 使用 JZ-coder 时,生产力可能会提高,首次使用该应用时,你可能会发现自己被技术细节吸引。如果症状持续,请加入 [Discord][discord] 并和我们一起探讨技术。
## 快速开始
启动 JZ-coder 后,系统会自动使用预配置的 Qwen3-Coder-30B-Instruct 模型。每次选择或切换模型时,都需要输入 API 密钥。
### 切换模型或重新输入 API Key
1. 在程序运行时按 **`Ctrl+P`** 打开命令菜单
2. 选择 **"Switch Model"** 选项
3. 选择 Qwen3-Coder-30B-Instruct 模型
4. 输入新的 API 密钥
当然,你也可以为首选提供商设置环境变量。
| 环境变量 | 提供商 |
| -------------------------- | -------------------------------------------------- |
| `ANTHROPIC_API_KEY` | Anthropic |
| `OPENAI_API_KEY` | OpenAI |
| `OPENROUTER_API_KEY` | OpenRouter |
| `GEMINI_API_KEY` | Google Gemini |
| `VERTEXAI_PROJECT` | Google Cloud VertexAI (Gemini) |
| `VERTEXAI_LOCATION` | Google Cloud VertexAI (Gemini) |
| `GROQ_API_KEY` | Groq |
| `AWS_ACCESS_KEY_ID` | AWS Bedrock (Claude) |
| `AWS_SECRET_ACCESS_KEY` | AWS Bedrock (Claude) |
| `AWS_REGION` | AWS Bedrock (Claude) |
| `AZURE_OPENAI_ENDPOINT` | Azure OpenAI 模型 |
| `AZURE_OPENAI_API_KEY` | Azure OpenAI 模型(使用 Entra ID 时可选) |
| `AZURE_OPENAI_API_VERSION` | Azure OpenAI 模型 |
## 配置
JZ-coder 现在使用内置的 Qwen3-Coder-30B-Instruct 模型配置,无需配置模型相关的文件。启动后只需输入 API 密钥即可使用。
如果需要配置 LSP 或 MCP,可以在以下位置添加配置文件:
- `$HOME/.config/jz-coder/jz-coder.json`(Windows:`%USERPROFILE%\AppData\Local\jz-coder\jz-coder.json`)
临时数据(如应用程序状态)存储在:
```bash
# Unix
$HOME/.local/share/jz-coder/jz-coder.json
# Windows
%LOCALAPPDATA%\jz-coder\jz-coder.json
```
### LSPs
JZ-coder 可以使用 LSP 获取额外的上下文来帮助做出决策,就像你一样。可以通过全局配置文件手动添加 LSP:
```json
{
"$schema": "https://charm.land/jz-coder.json",
"lsp": {
"go": {
"command": "gopls"
},
"typescript": {
"command": "typescript-language-server",
"args": ["--stdio"]
},
"nix": {
"command": "nil"
}
}
}
```
### MCPs
JZ-coder 还通过三种传输类型支持模型上下文协议(MCP)服务器:用于命令行服务器的 `stdio`、用于 HTTP 端点的 `http` 和用于服务器发送事件的 `sse`。支持使用 `$(echo $VAR)` 语法进行环境变量扩展。
```json
{
"$schema": "https://charm.land/jz-coder.json",
"mcp": {
"filesystem": {
"type": "stdio",
"command": "node",
"args": ["/path/to/mcp-server.js"],
"env": {
"NODE_ENV": "production"
}
},
"github": {
"type": "http",
"url": "https://example.com/mcp/",
"headers": {
"Authorization": "$(echo Bearer $EXAMPLE_MCP_TOKEN)"
}
},
"streaming-service": {
"type": "sse",
"url": "https://example.com/mcp/sse",
"headers": {
"API-Key": "$(echo $API_KEY)"
}
}
}
}
```
### 忽略文件
JZ-coder 默认遵守 `.gitignore` 文件,但你也可以创建一个 `.jzcoderignore` 文件来指定 JZ-coder 应该忽略的其他文件和目录。这对于排除你想要版本控制但不希望 JZ-coder 在提供上下文时考虑的文件很有用。
`.jzcoderignore` 文件使用与 `.gitignore` 相同的语法,可以放在项目根目录或子目录中。
### 允许工具
默认情况下,JZ-coder 在运行工具调用之前会要求你的许可。如果你愿意,可以允许工具在不提示权限的情况下执行。请谨慎使用此功能。
```json
{
"$schema": "https://charm.land/jz-coder.json",
"permissions": {
"allowed_tools": [
"view",
"ls",
"grep",
"edit",
"mcp_context7_get-library-doc"
]
}
}
```
你也可以通过使用 `--yolo` 标志运行 JZ-coder 来完全跳过所有权限提示。使用此功能时要非常非常小心。
### 本地模型
本地模型也可以通过兼容 OpenAI 的 API 进行配置。以下是两个常见示例:
#### Ollama
```json
{
"providers": {
"ollama": {
"name": "Ollama",
"base_url": "http://localhost:11434/v1/",
"type": "openai",
"models": [
{
"name": "Qwen 3 30B",
"id": "qwen3:30b",
"context_window": 256000,
"default_max_tokens": 20000
}
]
}
}
}
```
#### LM Studio
```json
{
"providers": {
"lmstudio": {
"name": "LM Studio",
"base_url": "http://localhost:1234/v1/",
"type": "openai",
"models": [
{
"name": "Qwen 3 30B",
"id": "qwen/qwen3-30b-a3b-2507",
"context_window": 256000,
"default_max_tokens": 20000
}
]
}
}
}
```
### 自定义提供商
JZ-coder 支持兼容 OpenAI 和 Anthropic API 的自定义提供商配置。
#### 兼容 OpenAI 的 API
以下是 Deepseek 的示例配置,它使用兼容 OpenAI 的 API。不要忘记在你的环境中设置 `DEEPSEEK_API_KEY`。
```json
{
"$schema": "https://charm.land/jz-coder.json",
"providers": {
"deepseek": {
"type": "openai",
"base_url": "https://api.deepseek.com/v1",
"api_key": "$DEEPSEEK_API_KEY",
"models": [
{
"id": "deepseek-chat",
"name": "Deepseek V3",
"cost_per_1m_in": 0.27,
"cost_per_1m_out": 1.1,
"cost_per_1m_in_cached": 0.07,
"cost_per_1m_out_cached": 1.1,
"context_window": 64000,
"default_max_tokens": 5000
}
]
}
}
}
```
#### 兼容 Anthropic 的 API
自定义兼容 Anthropic 的提供商遵循此格式:
```json
{
"$schema": "https://charm.land/jz-coder.json",
"providers": {
"custom-anthropic": {
"type": "anthropic",
"base_url": "https://api.anthropic.com/v1",
"api_key": "$ANTHROPIC_API_KEY",
"extra_headers": {
"anthropic-version": "2023-06-01"
},
"models": [
{
"id": "claude-sonnet-4-20250514",
"name": "Claude Sonnet 4",
"cost_per_1m_in": 3,
"cost_per_1m_out": 15,
"cost_per_1m_in_cached": 3.75,
"cost_per_1m_out_cached": 0.3,
"context_window": 200000,
"default_max_tokens": 50000,
"can_reason": true,
"supports_attachments": true
}
]
}
}
}
```
## 日志记录
有时你需要查看日志。幸运的是,JZ-coder 记录了各种内容。日志存储在相对于项目的 `./.jz-coder/logs/jz-coder.log` 中。
CLI 还包含一些辅助命令,使查看最近的日志更容易:
```bash
# 打印最后 1000 行
jz-coder logs
# 打印最后 500 行
jz-coder logs --tail 500
# 实时跟踪日志
jz-coder logs --follow
```
想要更多日志?使用 `--debug` 标志运行 `jz-coder`,或在配置中启用它:
```json
{
"$schema": "https://charm.land/jz-coder.json",
"options": {
"debug": true,
"debug_lsp": true
}
}
```
## 许可证
[FSL-1.1-MIT](https://gitee.com/chen-lexiang/jz-coder/raw/main/LICENSE)
---
JZ-coder - 山东金钟科技集团股份有限公司