Helixent 是一只写代码的蓝色兔子。它包含一个 Agent Loop(智能体循环)、一个 Coding Agent(编码智能体),以及一个简洁的 CLI。
https://github.com/user-attachments/assets/4ad89f14-e338-43e4-82ce-91cb83d58be2
Model 抽象以及面向提供商的接口,旨在让模型集成保持整洁和可复用。~/.agents/skills~/.helixent/skills${current_project}/.agents/skills${current_project}/.helixent/skills不同文件夹中允许存在同名的 Skill。
长期记忆
AGENTS.md 支持:如果仓库根目录存在 AGENTS.md,会自动加载作为项目指导。bash、read_file、write_file、str_replace、list_files、glob_search、grep_search、apply_patch、file_info、mkdir、move_path 等),用于开发者工作流。Helixent 现已发布在 npm 上,因此你可以全局安装后运行,也可以选择通过 npx 无需安装直接运行:
npm install -g helixent@latest
cd path/to/your/project
helixent
helixent --help
cd path/to/your/project
npx helixent@latest
npx helixent --help
Helixent 将你的 CLI 配置存储在:
~/.helixent/config.yamlhelixent config model list
helixent config model add
helixent config model remove <model_name>
或者从已配置的模型列表中选择:
helixent config model remove
helixent config model set-default <model_name>
或者从已配置的模型列表中选择:
helixent config model set-default
本节介绍如何在 macOS 上从源码构建 Helixent,并将 helixent CLI 链接到全局 PATH。
bun install
所有的推送和拉取请求都会在 GitHub Actions 中运行 bun run check。本地提交也会被 pre-commit 钩子拦截,直到相同检查通过为止。
bun run dev
bun run build:bin
构建完成后,你应该会得到:
dist/bin/helixent确保你的修改通过了所有的 lint 检查、类型检查和测试:
bun run check
或者仅运行测试:
bun run test
这也会由 pre-commit 钩子自动执行。这会让提交过程稍微慢一点,但我们认为这是值得的。毕竟,在一个 AI 主导的 GitHub 宇宙中,我们至少应该能处理好代码质量的"最后一公里"。
Helixent 分为三个层次,外加一个用于第三方集成的 community 区域。
src/
├── foundation/ # 第一层 – 核心基础组件
├── agent/ # 第二层 – 智能体循环
├── coding/ # 第三层 – 编码智能体(领域特定)
└── community/ # 第三方集成(例如 OpenAI)
一切构建于其上的核心基础组件:
可复用的 ReAct 风格智能体循环:
这一层仅依赖于 Foundation,保持通用性——不绑定到任何特定领域。
构建在通用智能体循环之上的领域特定智能体,预配置了面向编码的工具(read_file、write_file、str_replace、bash、list_files、glob_search、grep_search、apply_patch、file_info、mkdir、move_path 等)和技能中间件。
可选的、解耦的适配器,为特定提供商实现 Foundation 接口:
community/openai — 基于 openai SDK 的 OpenAIModelProvider,兼容任何 OpenAI 兼容的端点。以下是一个完整示例,展示如何使用 OpenAI 兼容的提供商创建一个编码智能体:
import { createCodingAgent } from "helixent/coding";
import { OpenAIModelProvider } from "helixent/community/openai";
import { Model } from "helixent/foundation";
// 1. 设置一个模型提供商(任何 OpenAI 兼容端点均可)
const provider = new OpenAIModelProvider({
baseURL: "https://api.openai.com/v1",
apiKey: process.env.OPENAI_API_KEY,
});
// 2. 使用你偏好的选项创建一个模型实例
const model = new Model("gpt-4o", provider, {
max_tokens: 16 * 1024,
thinking: { type: "enabled" },
});
// 3. 创建智能体——工具和技能会自动连接
const agent = await createCodingAgent({ model });
// 4. 流式获取智能体的响应
const stream = await agent.stream({
role: "user",
content: [{ type: "text", text: "在当前目录创建一个 hello world Web 服务器。" }],
});
for await (const message of stream) {
for (const content of message.content) {
if (content.type === "thinking" && content.thinking) {
console.info("💡", content.thinking);
} else if (content.type === "text" && content.text) {
console.info(content.text);
} else if (content.type === "tool_use") {
console.info("🔧", content.name, content.input.description ?? "");
}
}
}
Helixent 提供了中间件系统,让你可以在循环的每个阶段观察和改变智能体的行为。中间件钩子按数组顺序依次执行。
| 钩子 | 触发时机 |
|---|---|
beforeAgentRun |
用户消息追加后、第一步执行前,执行一次 |
afterAgentRun |
智能体即将停止时(无工具调用),执行一次 |
beforeAgentStep |
每一步开始时、调用模型之前执行 |
afterAgentStep |
每一步结束时、所有工具调用完成后执行 |
beforeModel |
模型上下文发送给提供商之前执行 |
afterModel |
收到模型响应后执行 |
beforeToolUse |
工具即将被调用时执行 |
afterToolUse |
工具调用完成后立即执行 |
每个钩子都会接收当前上下文,可以返回部分更新以合并回去,或返回 void 保持原样。
智能体循环本质上是异步的——模型思考、工具执行、结果流式返回,往往并行发生。JavaScript/TypeScript 将原生 async/await 内置于语言和运行时中,使得并发编排变得直接,无需 Python 中回调的繁琐或 asyncio 的样板代码。
在各种 JS 运行时中,我们选择 Bun 的具体原因如下:
bun build --compile 输出一个自包含的二进制文件。分发 CLI 就像给用户一个单一文件一样简单——无需单独安装运行时。$ claude mcp add helixent \
-- python -m otcore.mcp_server <graph>