高效内存harness工具jcode开源
开源项目声称最高效和最智能,包含docs和benchmarks。具体应用场景不明确。
开源项目声称最高效和最智能,包含docs和benchmarks。具体应用场景不明确。
最具 RAM 效率的框架 最智能的框架
网站 · 文档 · 基准测试 · 特性 · 安装 · 快速开始 · 延伸阅读 · 贡献
# macOS & Linux
curl -fsSL https://jcode.sh/install | bash
# Windows 11 (PowerShell 5.1+)
irm https://jcode.sh/install.ps1 | iex
需要 Homebrew、源代码构建、提供商设置,或想让 AI 智能体为你设置?跳转到详细安装说明。
jcode 被设计为尽可能高效和资源节约。每个指标都被优化到极致,这对于扩展多会话工作流至关重要。下面我们展示了几个指标来说明差异:RAM 使用和启动速度。
在这台 Linux 机器上进行 10 次交互式 PTY 启动测试。
(从输入探测文本出现在渲染屏幕上的时间;Antigravity 使用其内部输入就绪日志标记,因为登录屏幕抑制了探测回显。)
在这台 Linux 机器上进行 10 次交互式 PTY 启动测试。本次运行中 Antigravity CLI 未进行身份验证;其登录屏幕正常渲染并发出内部 CLI 输入就绪标记,但未回显输入的探测。
jcode v0.9.1888-dev (be386f2)
GitHub Copilot CLI 1.0.24 for the 1-session rerun, GitHub Copilot CLI 1.0.27 for the 10-session rerun
Cursor Agent 2026.04.08-a41fba1
Claude Code 2.1.86 (Claude Code)
Antigravity CLI 1.0.0
jcode 性能展示
Jcode 将每个回合/响应嵌入为语义向量。每个回合都会查询一个内存图,通过余弦相似度检查高效地找到相关的内存条目。嵌入命中被送入对话,或可选地使用一个内存侧智能体来验证内存是否相关,并在注入对话前可能进行更多信息检索工作。这导致了一个类人的内存系统,使智能体能够自动回忆与对话相关的信息,而不需要主动调用内存工具或消耗大量令牌。要有可检索的内存,它们还必须被提取和存储。每隔一段时间(语义偏移、自上次提取以来的 K 个回合、会话结束等),内存通过内存侧智能体被提取,并放入内存图中。
该框架还提供了显式内存工具,允许智能体主动搜索或存储内存,而不依赖被动后台进程。该框架还为以前的会话提供了会话搜索,支持传统 RAG。
内存通过环境模式自动定期整合。这重新组织、检查陈旧和冲突等。
侧面板是放置辅助信息的地方。告诉你的 jcode 智能体将文件加载到侧面板,实时看到更新,或告诉你的智能体直接写入侧面板,或将其用作 diff 查看器。侧面板(和聊天)能够内联渲染 mermaid 图表。

为了实现这一点,我创建了一个新的 mermaid 渲染库,可以将图表渲染速度提高 1800 倍。它没有浏览器或 Typescript 依赖。详见 https://github.com/1jehuang/mermaid-rs-renderer
为了在不占用可用于响应的屏幕空间的情况下向你展示重要信息,我开发了信息小部件。信息小部件只会占据屏幕的负空间来向你显示信息,如果没有信息就会让开。
Jcode 可以以超过一千帧/秒的速度渲染。你的显示器可能没有足够的刷新率来显示,但这意味着你不会遇到愚蠢的闪烁问题。
jcode 的自定义回滚实现允许它做比原生回滚多得多的事情。然而,这是一个终端级限制,我无法通过自定义回滚实现平滑的部分行滚动。为了解决这个问题,我制作了我自己的终端。Handterm https://github.com/1jehuang/handterm 实现了原生滚动 API,也非常高效。这是一项正在进行的工作。对于普通终端,滚动仍然得到良好实现。
Jcode 默认为左对齐。你可以使用 Alt+C 热键、/alignment 命令或在配置中切换到居中模式。
要在 TUI 和 CLI 输出中全局禁用表情符号,在 ~/.jcode/config.toml 中的 [display] 下设置 emoji = false,或使用 JCODE_NO_EMOJI=1 启动。Jcode 用紧凑的 ASCII 标记替换表情符号,同时保留其他 Unicode 文本。
在同一仓库中生成两个或多个 AI 智能体,它们将由服务器自动管理以实现本地协作。当智能体 A 编辑了智能体 B 已读的文件(代码在其脚下变化)时,服务器通知智能体 B。智能体 B 可以忽略它(如果不相关),或可以检查 diff 以确保没有冲突。每个智能体都有消息传递能力,能够只向一个智能体发送私信、向服务器托管的所有其他智能体广播,或仅向该仓库中工作的智能体。这允许你在同一仓库中生成多个会话,并自动解决所有冲突。
jcode 群体演示
AI 智能体还能够自主地生成自己的群体。它们有一个群体工具,允许它们生成自己的队友来并行完成任务。这样做将主智能体变成协调者,生成的智能体变成工作者。智能体组、它们的消息传递渠道、它们的完成状态等都被自动管理。这可以无头或有头的方式进行。
jcode 与基于订阅的 OAuth 流和许多提供商集成协作,因此你可以使用你已经付费的模型,并在需要时仍然可以回退到直接 API 提供商。
Claude (jcode login --provider claude)
OpenAI / ChatGPT / Codex (jcode login --provider openai)
Google Gemini (jcode login --provider gemini)
GitHub Copilot (jcode login --provider copilot)
Azure OpenAI (jcode login --provider azure)
Alibaba Cloud Coding Plan (jcode login --provider alibaba-coding-plan)
Fireworks (jcode login --provider fireworks)
MiniMax (jcode login --provider minimax)
LM Studio (jcode login --provider lmstudio)
Ollama (jcode login --provider ollama)
Custom OpenAI-compatible endpoint (jcode login --provider openai-compatible)
对于自定义 OpenAI 兼容端点,jcode 现在提示输入 API 基址,并支持本地 localhost 服务器而无需 API 密钥。
如果你更倾向于通过编辑文件而不是使用登录 UI 来配置,jcode 支持自定义 OpenAI 兼容端点配置和 MCP 配置文件。
许多托管服务使用标准的 OpenAI /v1/chat/completions API。jcode 通过一个共享的 OpenAI 兼容提供商与它们通信,因此你可以使用几乎任何这样的端点而无需等待专门的集成。
有两种方式来设置:
内置命名配置文件——jcode 为多种常用的 OpenAI 兼容服务提供了开箱即用的配置文件。使用配置文件 ID 登录后,jcode 会自动为你填充基础 URL 和密钥环境变量:jcode login --provider <profile-id> # 例如:jcode login --provider openrouter jcode login --provider deepseek jcode login --provider opencode # OpenCode Zen jcode login --provider moonshotai 内置的 OpenAI 兼容配置文件 ID 包括:openrouter、deepseek、zai、kimi、moonshotai、opencode(OpenCode Zen)、opencode-go、302ai、baseten、cortecs、huggingface、nebius、scaleway、stackit 和 firmware。每个配置文件只会设置端点和密钥变量;你仍需使用 /model(或 --model)选择模型。不带 provider 参数运行 jcode login,即可查看交互式列表。
内置命名配置文件——jcode 为多种常用的 OpenAI 兼容服务提供了开箱即用的配置文件。使用配置文件 ID 登录后,jcode 会自动为你填充基础 URL 和密钥环境变量:
jcode login --provider <profile-id>
# for example:
jcode login --provider openrouter
jcode login --provider deepseek
jcode login --provider opencode # OpenCode Zen
jcode login --provider moonshotai
内置的 OpenAI 兼容配置文件 ID 包括:openrouter、deepseek、zai、kimi、moonshotai、opencode(OpenCode Zen)、opencode-go、302ai、baseten、cortecs、huggingface、nebius、scaleway、stackit 和 firmware。每个配置文件只会设置端点和密钥变量;你仍需使用 /model(或 --model)选择模型。不带 provider 参数运行 jcode login,即可查看交互式列表。
任何其他端点——通过 jcode login --provider openai-compatible,或下文介绍的、可通过脚本调用的 jcode provider add 命令,将 jcode 指向任意 OpenAI 兼容 API(托管或本地)。
任何其他端点——通过 jcode login --provider openai-compatible,或下文介绍的、可通过脚本调用的 jcode provider add 命令,将 jcode 指向任意 OpenAI 兼容 API(托管或本地)。
这些端点可使用以下实用的环境变量覆盖项:
JCODE_STREAM_IDLE_TIMEOUT_SECS——为那些在输出 token 前会静默思考的慢速推理模型提高基础流式传输空闲超时时间(默认 180 秒)。较高的推理强度会自动按比例调整该值(high 为 2 倍、xhigh 为 3 倍、max 为 4 倍)。也可以在 config.toml 中将其设置为 [provider] stream_idle_timeout_secs。
[[providers.<name>.models]] 条目中的每模型 context_window(别名 context_limit)——当端点无法提供可用的 /v1/models 响应时,设置上下文窗口,以免 jcode 回退到通用的 200k 默认值。
extra_body——对于要求非标准顶层字段的后端,将这些字段注入每个 chat/completions 请求体。参见下文的“额外请求体字段”。
有关自托管、本地运行时以及配置文件确切结构的详细信息,请参见下文。
对于 AI 智能体和脚本,推荐使用一次性 provider 配置文件命令。它会将命名配置文件写入 ~/.jcode/config.toml,在需要时把密钥保存到 jcode 的私有应用配置目录中,并输出确切的运行和验证命令:
# Secret-safe setup for a hosted OpenAI-compatible API.
printf '%s' "$MY_API_KEY" | jcode provider add my-api \
--base-url https://llm.example.com/v1 \
--model my-model-id \
--api-key-stdin \
--set-default \
--json
# Smoke test the profile.
jcode --provider-profile my-api auth-test --prompt 'Reply exactly JCODE_PROVIDER_SETUP_OK'
# Use it directly.
jcode --provider-profile my-api run 'hello'
对于不需要身份验证的本地服务器:
jcode provider add local-vllm \
--base-url http://localhost:8000/v1 \
--model Qwen/Qwen3-Coder-30B-A3B-Instruct \
--no-api-key \
--set-default
针对常见桌面和本地运行时,也提供了内置的本地配置文件:
# Ollama: start the local server and install a model first.
ollama pull llama3.2
jcode login --provider ollama
jcode --provider ollama --model llama3.2 run 'hello'
# LM Studio: start the Local Server, load a chat model, then use the exact
# model identifier shown by LM Studio or by curl http://localhost:1234/v1/models.
jcode login --provider lmstudio
jcode --provider lmstudio --model '<model-id>' run 'hello'
Ollama 和 LM Studio 都提供 OpenAI 兼容的 /v1/models 与 /v1/chat/completions 端点。jcode 使用流式聊天补全、函数/工具调用,以及面向支持视觉能力的本地模型的 OpenAI 风格图像内容。如果本地服务器需要 token,请在 jcode login 期间输入,或使用 --api-key-stdin 创建命名配置文件。
--api-key-env NAME:引用现有环境变量,而不是存储密钥。
--api-key-stdin:读取并存储密钥,避免将其写入 shell 历史记录。
--context-window TOKENS:持久化模型的上下文窗口,以用于模型选择和路由。
--overwrite:替换同名的现有配置文件。
--model-catalog:除已配置的模型之外,同时使用端点的 /models 响应。
生成的配置文件也可以在 ~/.jcode/config.toml 中手动编辑:
[provider]
default_provider = "my-api"
default_model = "my-model-id"
[providers.my-api]
type = "openai-compatible"
base_url = "https://llm.example.com/v1"
api_key_env = "JCODE_PROVIDER_MY_API_API_KEY"
env_file = "provider-my-api.env"
default_model = "my-model-id"
[[providers.my-api.models]]
id = "my-model-id"
context_window = 128000
某些 OpenAI 兼容后端要求提供非标准的顶层请求字段。例如,NVIDIA NIM DeepSeek-V4 推理模型(deepseek-ai/deepseek-v4-flash、deepseek-ai/deepseek-v4-pro)只有在请求中包含 chat_template_kwargs 时才会启用思考;缺少该字段时,它们会直接回复而不进行推理(或者在某些部署中挂起)。jcode 允许你通过两种方式注入任意顶层字段。
针对每个命名配置文件,通过 config.toml 中的 extra_body 设置(一个会原样合并到 JSON 请求体中的 TOML 表):[providers.my-nim] type = "openai-compatible" base_url = "https://integrate.api.nvidia.com/v1" api_key_env = "NVIDIA_API_KEY" default_model = "deepseek-ai/deepseek-v4-flash" [providers.my-nim.extra_body.chat_template_kwargs] thinking = true reasoning_effort = "high"
针对每个命名配置文件,通过 config.toml 中的 extra_body 设置(一个会原样合并到 JSON 请求体中的 TOML 表):
[providers.my-nim]
type = "openai-compatible"
base_url = "https://integrate.api.nvidia.com/v1"
api_key_env = "NVIDIA_API_KEY"
default_model = "deepseek-ai/deepseek-v4-flash"
[providers.my-nim.extra_body.chat_template_kwargs]
thinking = true
reasoning_effort = "high"
对于内置配置文件(例如 nvidia-nim)或任何端点,可以通过 JCODE_OPENAI_EXTRA_BODY 环境变量设置(其值为 JSON 对象字符串)。它可以和 API 密钥一起放在 provider 的环境文件(~/.config/jcode/nvidia-nim.env)中:JCODE_OPENAI_EXTRA_BODY={"chat_template_kwargs":{"thinking":true,"reasoning_effort":"high"}}
对于内置配置文件(例如 nvidia-nim)或任何端点,可以通过 JCODE_OPENAI_EXTRA_BODY 环境变量设置(其值为 JSON 对象字符串)。它可以和 API 密钥一起放在 provider 的环境文件(~/.config/jcode/nvidia-nim.env)中:
JCODE_OPENAI_EXTRA_BODY={"chat_template_kwargs":{"thinking":true,"reasoning_effort":"high"}}
extra_body 中的键最后合并,因此会覆盖 jcode 生成的请求体中任何同名字段(发生键冲突时,JCODE_OPENAI_EXTRA_BODY 优先于配置文件中的 extra_body)。无效值会被记录并忽略,而不会导致请求失败。
自定义 OpenAI 兼容 provider 会从环境变量或 jcode 应用配置目录中的环境文件读取覆盖项。在 Linux 上,该目录通常是 ~/.config/jcode/,因此默认文件通常为:
~/.config/jcode/openai-compatible.env
本地或局域网 vLLM 服务器示例:
JCODE_OPENAI_COMPAT_API_BASE=http://192.168.1.50:8000/v1
JCODE_OPENAI_COMPAT_DEFAULT_MODEL=Qwen/Qwen3-Coder-30B-A3B-Instruct
# Optional if your server expects auth
OPENAI_COMPAT_API_KEY=your-token-here
jcode login --provider openai-compatible 可以为你创建或更新该文件。
对于 localhost 和局域网私有 IP,可以使用普通的 http://。面向公网的远程 HTTP 仍会被拒绝。
HTTPS 端点可照常工作。
MCP 配置与 config.toml 相互独立。
主要配置文件:
~/.jcode/mcp.json,用于全局 MCP 服务器
.jcode/mcp.json,用于项目本地 MCP 服务器
Claude Code 兼容性:
~/.claude.json(Claude Code 的用户配置):包括顶层 mcpServers,以及当前目录对应的 projects.<abs_path>.mcpServers 下的各项目服务器
仓库根目录下的 .mcp.json(Claude Code 的项目配置)
.claude/mcp.json(旧版回退配置)
标准的 mcpServers 键和 jcode 以前使用的 servers 键都可接受。jcode 当前只支持 stdio(基于命令)服务器;HTTP/SSE 条目("type": "http"/"sse")可以被识别,但会跳过,并输出一行日志。
{
"mcpServers": {
"filesystem": {
"command": "/path/to/mcp-server",
"args": ["--root", "/workspace"],
"env": {},
"shared": true
}
}
}
首次运行时,如果 ~/.jcode/mcp.json 尚不存在,jcode 还会尝试从 ~/.claude.json(如果不存在,则回退到旧版 ~/.claude/mcp.json)以及 ~/.codex/config.toml 导入 MCP 服务器。
对于无头环境或 SSH 会话,采用 OAuth 方式的提供商支持使用 jcode login --provider <provider> --no-browser(别名:--headless),这样 jcode 会输出身份验证 URL/二维码,并回退到手动输入代码或粘贴回调信息,而不会尝试启动本地浏览器。
对于更便于编写脚本的远程流程,claude、openai、gemini 和 antigravity 还支持两步模式:
# Step 1: print a resumable auth URL
jcode login --provider openai --print-auth-url --json
# Step 2: complete later with the callback URL or auth code
jcode login --provider openai --callback-url 'http://localhost:1455/auth/callback?...'
jcode login --provider gemini --auth-code '...'
其他可编写脚本的场景:
# Copilot device flow: print URL + user code, then complete later
jcode login --provider copilot --print-auth-url --json
jcode login --provider copilot --complete
# Gmail/Google OAuth after credentials are already configured
jcode login --provider google --print-auth-url --google-access-tier readonly
jcode login --provider google --callback-url 'http://127.0.0.1:8456?...'
待处理的脚本化登录状态存储在 ~/.jcode/pending-login/ 下,会自动过期;当新的脚本化登录开始或恢复时,过期条目会被清理。
对于内置的 OpenAI 登录流程,jcode 默认会在 http://localhost:1455/auth/callback 上开启本地回调。
原生/第一方风格的提供商:claude、openai、copilot、gemini、azure、alibaba-coding-plan
聚合/兼容性提供商:openrouter、openai-compatible
其他提供商集成:opencode、opencode-go、zai / kimi、302ai、baseten、cortecs、deepseek、firmware、huggingface、moonshotai、nebius、scaleway、stackit、groq、mistral、perplexity、togetherai、deepinfra、fireworks、minimax、xai、lmstudio、ollama、chutes、cerebras、cursor、antigravity、google
Jcode 还支持轻松切换多个账户。你的第一个 ChatGPT Pro 订阅额度用完了?使用 /account,即可快速切换到第二个账户。
Jcode 正在开创一种全新的可定制形式,它不会将你局限于插件或扩展能够实现的功能。让你的 jcode AI 智能体进入自开发模式,它就会开始修改自身的源代码。Jcode 针对自我迭代进行了优化。它围绕自开发构建了大量基础设施,使其能够编辑、构建并测试自己的源代码,然后重新加载自身的二进制文件,在你可能同时存在的多个会话中继续工作,整个过程完全自动化。
建议为此使用前沿模型。jcode 的代码库并不简单,能力较弱的模型可能会做出细微但具有破坏性的修改。GPT 5.5 或当前最新的前沿模型效果很好。
细节决定成败。jcode 实现了许多未记录在文档中的优化和贴心功能。以下是一些例子:
Anthropic 的 Claude 缓存会在 5 分钟后失效。如果你在这 5 分钟之后再次调用 Claude,就会遇到缓存未命中,可能消耗大量 token。UI 会在缓存失效时提醒你,并在出现意外的缓存未命中时通知你。
jcode 附带了如何设置 Firefox Agent Bridge 的说明。让你的 AI 智能体完成设置,之后你也可以在 jcode 中使用浏览器自动化功能。
Agent grep 是我为 jcode AI 智能体制作的 grep 工具。它会在 grep 返回结果中加入文件结构信息(例如函数列表、它们的偏移位置等),让 AI 智能体无需实际读取文件,就能推断出更多关于文件功能的信息。它还实现了执行框架级集成,可根据 AI 智能体已经看过的内容自适应地截断返回结果。这能够大幅节省上下文。
默认情况下,输入会与正在工作的 AI 智能体交错处理。只要不会破坏 KV 缓存,它就会尽快发送输入。你也可以改用 Shift+Enter 提交,这会将输入加入发送队列,等待 AI 智能体完全结束当前轮次后再发送。
可以恢复来自不同执行框架的会话。Claude Code 崩溃了?从 jcode 恢复该会话,然后从中断处继续。codex、claude code、opencode 和 pi 均支持会话恢复。
并非所有技能都会在启动时加载。对话会被嵌入为语义向量;如果像记忆一样出现相似的嵌入匹配,就会自动注入相应技能。AI 智能体提供了一个技能工具,供你随时手动激活技能。你也可以通过斜杠命令激活技能。
jcode 的原生 iOS 应用版本即将推出。借助 Tailscale,你可以通过手机使用个人计算机上的 jcode 工作环境。类似 OpenClaw 的功能将与这款 iOS 应用一同提供。
AI 智能体不喜欢在存在活动更改的脏 Git 状态下提交代码。Git 显然不是为多 AI 智能体工作流构建的,而 Git worktree 也不是理想的解决方案。鉴于此,我认为这里存在创造一种类似 Git 的新原语的机会。
提升构建速度:在我的机器上,启用缓存后,一次增量 debug Cargo 构建大约需要 1 分钟。目标是将其缩短到 5~20 秒。通过重构并调整 crate 之间的边界,应该能够实现这一目标。
# Launch the TUI
jcode
# Run a single command non-interactively
jcode run "say hello"
# Resume a previous session by memorable name
jcode --resume fox
# Run as a persistent background server, then attach more clients
jcode serve
jcode connect
# Send voice input from your configur