打开代理 SDK (TypeScript)
运行全代理循环的开源代理 SDK 正在处理 ——不需要子进程或CLI. 支持两者 安东尼 财务报告和审定财务报表 OpenAI 兼容 APIs (英语). 任何地方部署:云,无服务器,多克,CI/CD.
也可查阅 走开数字 : 打开代理服务器 sdk-go
开始吧
npm install @codeany/open-agent-sdk
设置您的 API 密钥 :
export CODEANY_API_KEY=your-api-key
OpenAI 兼容模型
与 OpenAI, DeepSeek, Quen, Mistral 或任何 OpenAI 兼容端点合作 :
export CODEANY_API_TYPE=openai-completions
export CODEANY_API_KEY=sk-...
export CODEANY_BASE_URL=https://api.openai.com/v1
export CODEANY_MODEL=gpt-4o
第三方兼容供应商
export CODEANY_BASE_URL=https://openrouter.ai/api
export CODEANY_API_KEY=sk-or-...
export CODEANY_MODEL=anthropic/claude-sonnet-4
快开始
一发查询( 流出)
import { query } from "@codeany/open-agent-sdk";
for await (const message of query({
prompt: "Read package.json and tell me the project name.",
options: {
allowedTools: ["Read", "Glob"],
permissionMode: "bypassPermissions",
},
})) {
if (message.type === "assistant") {
for (const block of message.message.content) {
if ("text" in block) console.log(block.text);
}
}
}
简单的屏蔽提示
import { createAgent } from "@codeany/open-agent-sdk";
const agent = createAgent({ model: "claude-sonnet-4-6" });
const result = await agent.prompt("What files are in this project?");
console.log(result.text);
console.log(
`Turns: ${result.num_turns}, Tokens: ${result.usage.input_tokens + result.usage.output_tokens}`,
);
OpenAI / GBT 模型
import { createAgent } from "@codeany/open-agent-sdk";
const agent = createAgent({
apiType: "openai-completions",
model: "gpt-4o",
apiKey: "sk-...",
baseURL: "https://api.openai.com/v1",
});
const result = await agent.prompt("What files are in this project?");
console.log(result.text);
这个 apiType 自动从模型名称中检测到的模型 gpt-, (中文(简体) ), o1, (中文(简体) ), o3, (中文(简体) ), deepseek, (中文(简体) ), qwen, (中文(简体) ), mistral等自动使用 openai-completions。 。 。 .
多回合对话
import { createAgent } from "@codeany/open-agent-sdk";
const agent = createAgent({ maxTurns: 5 });
const r1 = await agent.prompt(
'Create a file /tmp/hello.txt with "Hello World"',
);
console.log(r1.text);
const r2 = await agent.prompt("Read back the file you just created");
console.log(r2.text);
console.log(`Session messages: ${agent.getMessages().length}`);
自定义工具( Zod schema)
import { z } from "zod";
import { query, tool, createSdkMcpServer } from "@codeany/open-agent-sdk";
const getWeather = tool(
"get_weather",
"Get the temperature for a city",
{ city: z.string().describe("City name") },
async ({ city }) => ({
content: [{ type: "text", text: `${city}: 22°C, sunny` }],
}),
);
const server = createSdkMcpServer({ name: "weather", tools: [getWeather] });
for await (const msg of query({
prompt: "What is the weather in Tokyo?",
options: { mcpServers: { weather: server } },
})) {
if (msg.type === "result")
console.log(`Done: $${msg.total_cost_usd?.toFixed(4)}`);
}
自定义工具( 低级)
import {
createAgent,
getAllBaseTools,
defineTool,
} from "@codeany/open-agent-sdk";
const calculator = defineTool({
name: "Calculator",
description: "Evaluate a math expression",
inputSchema: {
type: "object",
properties: { expression: { type: "string" } },
required: ["expression"],
},
isReadOnly: true,
async call(input) {
const result = Function(`'use strict'; return (${input.expression})`)();
return `${input.expression} = ${result}`;
},
});
const agent = createAgent({ tools: [...getAllBaseTools(), calculator] });
const r = await agent.prompt("Calculate 2**10 * 3");
console.log(r.text);
技能
技能是可重复使用的可扩展代理能力的即时模板. 包括五个捆绑的技能: simplify, (中文(简体) ), commit, (中文(简体) ), review, (中文(简体) ), debug, (中文(简体) ), test。 。 。 .
import {
createAgent,
registerSkill,
getAllSkills,
} from "@codeany/open-agent-sdk";
// Register a custom skill
registerSkill({
name: "explain",
description: "Explain a concept in simple terms",
userInvocable: true,
async getPrompt(args) {
return [
{
type: "text",
text: `Explain in simple terms: ${args || "Ask what to explain."}`,
},
];
},
});
console.log(`${getAllSkills().length} skills registered`);
// The model can invoke skills via the Skill tool
const agent = createAgent();
const result = await agent.prompt('Use the "explain" skill to explain git rebase');
console.log(result.text);
虎克(生命周期事件)
import { createAgent, createHookRegistry } from "@codeany/open-agent-sdk";
const hooks = createHookRegistry({
PreToolUse: [
{
handler: async (input) => {
console.log(`About to use: ${input.toolName}`);
// Return { block: true } to prevent tool execution
},
},
],
PostToolUse: [
{
handler: async (input) => {
console.log(`Tool ${input.toolName} completed`);
},
},
],
});
20起生命周期事件: PreToolUse, (中文(简体) ), PostToolUse, (中文(简体) ), PostToolUseFailure, (中文(简体) ), SessionStart, (中文(简体) ), SessionEnd, (中文(简体) ), Stop, (中文(简体) ), SubagentStart, (中文(简体) ), SubagentStop, (中文(简体) ), UserPromptSubmit, (中文(简体) ), PermissionRequest, (中文(简体) ), PermissionDenied, (中文(简体) ), TaskCreated, (中文(简体) ), TaskCompleted, (中文(简体) ), ConfigChange, (中文(简体) ), CwdChanged, (中文(简体) ), FileChanged, (中文(简体) ), Notification, (中文(简体) ), PreCompact, (中文(简体) ), PostCompact, (中文(简体) ), TeammateIdle。 。 。 .
MCP 服务器集成
import { createAgent } from "@codeany/open-agent-sdk";
const agent = createAgent({
mcpServers: {
filesystem: {
command: "npx",
args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
},
},
});
const result = await agent.prompt("List files in /tmp");
console.log(result.text);
await agent.close();
副剂
import { query } from "@codeany/open-agent-sdk";
for await (const msg of query({
prompt: "Use the code-reviewer agent to review src/index.ts",
options: {
agents: {
"code-reviewer": {
description: "Expert code reviewer",
prompt: "Analyze code quality. Focus on security and performance.",
tools: ["Read", "Glob", "Grep"],
},
},
},
})) {
if (msg.type === "result") console.log("Done");
}
权限
import { query } from "@codeany/open-agent-sdk";
// Read-only agent — can only analyze, not modify
for await (const msg of query({
prompt: "Review the code in src/ for best practices.",
options: {
allowedTools: ["Read", "Glob", "Grep"],
permissionMode: "dontAsk",
},
})) {
// ...
}
网络用户界面
包含一个内置的网络聊天界面用于测试:
npx tsx examples/web/server.ts
# Open http://localhost:8081
API 参考
高级职能
| 函数 | 说明 |
|---|---|
query({ prompt, options }) | 一发流查询, 返回 AsyncGenerator<SDKMessage> |
createAgent(options) | 创建一个具有会话持久性的可重复使用的代理 |
tool(name, desc, schema, handler) | 用 Zod schema 验证创建工具 |
createSdkMcpServer({ name, tools }) | 装入进程内 MCP 服务器的工具 |
defineTool(config) | 低级工具定义助手 |
getAllBaseTools() | 获取全部 35+ 内置工具 |
registerSkill(definition) | 注册自定义技能 |
getAllSkills() | 获得所有注册技能 |
createProvider(apiType, opts) | 直接创建 LLM 提供者 |
createHookRegistry(config) | 为生命周期事件创建钩子注册 |
listSessions() | 连续会议清单 |
forkSession(id) | 为分枝分叉会话 |
代理方法
| 方法 | 说明 |
|---|---|
agent.query(prompt) | 流转查询、返回 AsyncGenerator<SDKMessage> |
agent.prompt(text) | 屏蔽查询, 返回 Promise<QueryResult> |
agent.getMessages() | 获取对话历史 |
agent.clear() | 重设会话 |
agent.interrupt() | 中止当前查询 |
agent.setModel(model) | 更改模式会议中期 |
agent.setPermissionMode(mode) | 更改权限模式 |
agent.getApiType() | 获取当前 API 类型 |
agent.close() | 关闭 MCP 连接, 持续会话 |
选项
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
apiType | string | 自动检测 | 'anthropic-messages' 或者说 'openai-completions' |
model | string | claude-sonnet-4-6 | LLM 型号 ID |
apiKey | string | CODEANY_API_KEY | API 密钥 |
baseURL | string | —— 说 | 自定义 API 端点 |
cwd | string | process.cwd() | 工作目录 |
systemPrompt | string | —— 说 | 系统即时覆盖 |
appendSystemPrompt | string | —— 说 | 附加到默认系统提示 |
tools | ToolDefinition[] | 全部内置 | 可用工具 |
allowedTools | string[] | —— 说 | 工具允许列表 |
disallowedTools | string[] | —— 说 | 工具拒绝列表 |
permissionMode | string | bypassPermissions | default 编号 : acceptEdits 编号 : dontAsk 编号 : bypassPermissions 编号 : plan |
canUseTool | function | —— 说 | 自定义权限回调 |
maxTurns | number | 10 | 最大代理转弯 |
maxBudgetUsd | number | —— 说 | 支出上限 |
thinking | ThinkingConfig | { type: 'adaptive' } | 扩展思维 |
effort | string | high | 合理努力: low 编号 : medium 编号 : high 编号 : max |
mcpServers | Record<string, McpServerConfig> | —— 说 | MCP 服务器连接 |
agents | Record<string, AgentDefinition> | —— 说 | 亚剂定义 |
hooks | Record<string, HookCallbackMatcher[]> | —— 说 | 生命周期钩 |
resume | string | —— 说 | 通过 ID 恢复会话 |
continue | boolean | false | 继续最近的会话 |
persistSession | boolean | true | 坚持到磁盘 |
sessionId | string | 自动 | 明确会话编号 |
outputFormat | { type: 'json_schema', schema } | —— 说 | 结构化产出 |
sandbox | SandboxSettings | —— 说 | 文件系统/网络沙盒 |
settingSources | SettingSource[] | —— 说 | 装入 AGENT.md, 项目设置 |
env | Record<string, string> | —— 说 | 环境变量 |
abortController | AbortController | —— 说 | 取消控制器 |
环境变量
| 变量 | 说明 |
|---|---|
CODEANY_API_KEY | API 密钥( 需要) |
CODEANY_API_TYPE | anthropic-messages (违约)或 openai-completions |
CODEANY_MODEL | 默认模式覆盖 |
CODEANY_BASE_URL | 自定义 API 端点 |
CODEANY_AUTH_TOKEN | 替代认证符 |
内建工具
| 工具 | 说明 |
|---|---|
| 巴许 | 执行 shell 命令 |
| 读取 | 读取有行号的文件 |
| 写入 | 创建/ 覆盖文件 |
| 编辑 | 文件精确字符串替换 |
| 光环 | 按模式查找文件 |
| Grep 读取 | 以 regex 搜索文件内容 |
| Web ưμ㼯A | 获取和剖析网页内容 |
| 网络搜索 | 搜索网络 |
| 笔记本编辑 | 编辑 Jupyter 笔记本单元格 |
| 探员 | 用于并行工作的后继剂 |
| 技能 | 启动注册技能 |
| 任务创建/列表/更新/获取/停止/输出 | 任务管理系统 |
| 团队创建/删除 | 多代理人小组协调 |
| 发送消息 | 代理通讯 |
| EnterWorktree/出厂树 | Git 工作树隔离 |
| 输入 Plan 模式/ 退出 Plan 模式 | 结构化规划工作流程 |
| 询问用户问题 | 询问用户输入 |
| 工具搜索 | 发现懒惰工具 |
| ListMcp 资源/读取Mcp 资源 | MCP 资源访问 |
| 创造/删除/列表 | 计划任务管理 |
| 远程调试器 | 远程代理触发器 |
| LSP 软件 | 语言服务器协议(代码智能) |
| 配置 | 动态配置 |
| 写入 | 会话待办事宜列表 |
包扎技能
| 技能 | 说明 |
|---|---|
simplify | 审查更改的再利用代码、质量和效率 |
commit | 以精心设计的信息创建 git 承诺 |
review | 审查代码更改的正确性、安全和性能 |
debug | 利用结构化调查系统调试 |
test | 运行测试和分析失败 |
注册自定义技能 registerSkill()。 。 。 .
建筑
┌──────────────────────────────────────────────────────┐
│ Your Application │
│ │
│ import { createAgent } from '@codeany/open-agent-sdk' │
└────────────────────────┬─────────────────────────────┘
│
┌──────────▼──────────┐
│ Agent │ Session state, tool pool,
│ query() / prompt() │ MCP connections, hooks
└──────────┬──────────┘
│
┌──────────▼──────────┐
│ QueryEngine │ Agentic loop:
│ submitMessage() │ API call → tools → repeat
└──────────┬──────────┘
│
┌───────────────┼───────────────┐
│ │ │
┌─────▼─────┐ ┌─────▼─────┐ ┌─────▼─────┐
│ Provider │ │ 35 Tools │ │ MCP │
│ Anthropic │ │ Bash,Read │ │ Servers │
│ OpenAI │ │ Edit,... │ │ stdio/SSE/ │
│ DeepSeek │ │ + Skills │ │ HTTP/SDK │
└───────────┘ └───────────┘ └───────────┘
关键内部:
| 构成部分 | 说明 |
|---|---|
| 提供者层 | 抽象 Anthropic / OpenAI API 差异 |
| 查询引擎 | 具有自动压缩、重试、工具管弦的核心代理循环 |
| 技能系统 | 可重用具有5个捆绑技能的快速模板 |
| 钩子系统 | 20起生命周期事件纳入引擎 |
| 自动压缩 | 上下文窗口填充时摘要对话框 |
| 微协议 | 截断过大的工具结果 |
| 重试 | 利率限制和瞬间出错的指向后退 |
| 托肯估计 | Claude、GPT、DeepSeek模型的定价 |
| 文件缓存 | 文件读取的 LRU 缓存( 100个条目, 25 MB) |
| 会话存储 | 磁盘上坚持/恢复/分叉会话 |
| 上下文注射 | Git 状态 + AGENT.md 自动注入系统提示 |
实例
| {\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0} | 文件 | 说明 |
|---|---|---|
| 01号 | examples/01-simple-query.ts | 用事件处理来流转查询 |
| 第02条 | examples/02-multi-tool.ts | 多工具管弦乐( Glob + Bash) |
| 03号 | examples/03-multi-turn.ts | 多回合持续 |
| 04号 | examples/04-prompt-api.ts | 封锁 prompt() API 密码 |
| 05号 | examples/05-custom-system-prompt.ts | 自定义系统提示 |
| 06号 | examples/06-mcp-server.ts | MCP 服务器集成 |
| 07号 | examples/07-custom-tools.ts | 自定义工具 defineTool() |
| 08号 | examples/08-official-api-compat.ts | query() API 模式 |
| 09个 | examples/09-subagents.ts | 副代表代表团 |
| 10个 | examples/10-permissions.ts | 带有工具限制的只读代理 |
| 第11个 | examples/11-custom-mcp-tools.ts | tool() + 键 createSdkMcpServer() |
| 第12条 | examples/12-skills.ts | 技能系统使用情况 |
| 第13条 | examples/13-hooks.ts | 生命周期钩 |
| 页:1 | examples/14-openai-compat.ts | OpenAI / 深搜索模式 |
| 网络 | examples/web/ | 用于测试的网络聊天 UI |
运行任意示例 :
npx tsx examples/01-simple-query.ts
启动网络用户界面 :
npx tsx examples/web/server.ts
恒星历史
许可证
麻省理工学院