@bunny-agent/sdk

中文文档
0.10.3-beta1发布于 2026/11/07Apache-2.0TypeScriptES Module近 30 天下载 7219

Bunny Agent SDK - 用于构建AI代理的 AI 提供者和反应钩

中文使用文档
文档目录20 节
  1. 为什么?
  2. 特征
  3. 快速启动
  4. 1. 安装
  5. 2.后端——创建API路由(Next.js)
  6. 3. 前端——聊天UI
  7. 4. 运行
  8. 本地对云沙盒
  9. 本地模式( Desktop apps并调试)
  10. 云模式-桑多克(建议)
  11. 其他云沙盒
  12. 代理模板
  13. 请求范围 服务器
  14. 反应钩
  15. API 参考
  16. 提供者
  17. 出口
  18. 环境变量
  19. 文档
  20. 许可证

@bunny-agent/sdk (英语)

将编码代理超能力插入你的产品——一个下午.

转弯 克劳德代码, (中文(简体) ), 麻醉剂SDK, (中文(简体) ), 代码 CLI, (中文(简体) ), 打开代码, (中文(简体) ), 和其他编码代理 AI SDK 兼容型号 您可以从任何后端流出并在任何 React UI 中渲染.

npm License AI SDK


为什么?

编码代理人(Claude Code, Codex CLI, 双子座 CLI, OpenCode.)已经有:

  • 高级内存和上下文管理
  • * 战斗测试工具的使用(bash、文件 I/O、网页搜索)
  • MCP服务器生态系统
  • * 改进了数百万次互动的提示

@bunny-agent/sdk让你在自己的产品中掌握所有的东西 ——作为标准AI SDK型号,采用零即时工程.

Your App  →  @bunny-agent/sdk  →  Coding Agent (Claude / Codex / …)
                                      ↕
                              Sandbox (Local or Cloud)

特征

特性说明
🔌 AI SDK 提供者createBunnyAgent() 返回您通过的模式 streamText 编号 : generateText
⚛️ 反应钩useBunnyAgentChat, (中文(简体) ), useArtifacts, (中文(简体) ), useWriteTool, (中文(简体) ), useAskUserQuestion
🖥️ 本地模式内建 LocalMachine (无隔离)和 SrtSandbox (OS级隔离) – 运行在您的机器上用于桌面应用程序调试( D)
☁️ 云沙盒插进 山多克 沙发,E2B,或代顿纳用于孤立的云处决
🎨 代理模板基于 Markdown 的模板将通用代理变成域专家
🔄 多回合会议以完整文件系统的连续性恢复对话

快速启动

1. 安装

npm install @bunny-agent/sdk ai

2.后端——创建API路由(Next.js)

// app/api/ai/route.ts
import { createBunnyAgent, LocalMachine } from "@bunny-agent/sdk";
import {
  convertToModelMessages,
  createUIMessageStream,
  createUIMessageStreamResponse,
  streamText,
} from "ai";

export async function POST(request: Request) {
  const { messages } = await request.json();

  const sandbox = new LocalMachine({
    workdir: process.cwd(),
    templatesPath: process.cwd(),
    runnerCommand: ["npx", "-y", "@bunny-agent/runner-cli@latest", "run"],
    env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
  });

  const bunnyAgent = createBunnyAgent({
    sandbox,
    cwd: sandbox.getWorkdir(),
  });

  const stream = createUIMessageStream({
    execute: async ({ writer }) => {
      const result = streamText({
        model: bunnyAgent("sonnet"),
        messages: await convertToModelMessages(messages),
        abortSignal: request.signal,
      });
      writer.merge(result.toUIMessageStream());
    },
  });

  return createUIMessageStreamResponse({ stream });
}

3. 前端——聊天UI

"use client";
import { useBunnyAgentChat } from "@bunny-agent/sdk/react";

export default function Chat() {
  const { messages, isLoading, sendMessage } = useBunnyAgentChat({
    apiEndpoint: "/api/ai",
  });

  return (
    <div>
      {messages.map((m) => (
        <div key={m.id}>
          {m.parts.map((p, i) => p.type === "text" && <span key={i}>{p.text}</span>)}
        </div>
      ))}
      <form onSubmit={(e) => { e.preventDefault(); sendMessage(e.currentTarget.input.value); }}>
        <input name="input" placeholder="Ask anything…" />
        <button disabled={isLoading}>Send</button>
      </form>
    </div>
  );
}

4. 运行

export ANTHROPIC_API_KEY=sk-ant-xxx
npm run dev

就是这样,你现在有一个完整的编码代理 流入你的应用.


本地对云沙盒

本地模式( Desktop apps并调试)

LocalMachine 是内置的,不需要额外的软件包。 该代理直接运行在您的机器文件系统中,并有您的用户权限和 无隔离 (它以前被命名为 LocalSandbox;这个别名仍然有效,但已贬值)。 当你想要本地机器上实际OS级隔离时,请使用 SrtSandbox 相反——相同的API,但每个命令都用 Anthropic 的沙盒运行时间 (bulble wrap on Linux, Seatbelt on macOS):写作仅限于工作目录,网络访问被屏蔽,除非您允许列表域.

import { createBunnyAgent, SrtSandbox } from "@bunny-agent/sdk";

const sandbox = new SrtSandbox({
  workdir: "/path/to/project",
  isolation: {
    allowedDomains: ["api.anthropic.com", "*.npmjs.org"],
    denyRead: ["~/.ssh", "~/.aws"],
    allowWrite: ["~/.npm"], // runners that write to the home dir need this
  },
});

Linux 需要吗 bubblewrap + 键 socat 已安装(并安装在 Ubuntu 24.04+ 上,一个 AppArmor 配置文件,用于授予 userns 以图表示。 macOS在盒子里工作.

import { createBunnyAgent, LocalMachine } from "@bunny-agent/sdk";

const sandbox = new LocalMachine({
  workdir: "/path/to/project",
  templatesPath: "./my-agent-template",
  env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
});

const bunnyAgent = createBunnyAgent({ sandbox, cwd: sandbox.getWorkdir() });

最佳用途: Electron/Tauri桌面应用,本地开发,调试.

山多克 沙发 为基于多克的云沙盒提供持续体积.

为什么是桑多克? 编码代理依赖于文件系统 append 其他POSIX语义学. 山多克是唯一一个有云沙盒的 100% POSIX 兼容文件系统,确保代理运行 没有金融服务失败。 音量为 持久性和可分享性 穿过沙盒.

npm install @bunny-agent/sandbox-sandock
import { createBunnyAgent } from "@bunny-agent/sdk";
import { SandockSandbox } from "@bunny-agent/sandbox-sandock";

const sandbox = new SandockSandbox({
  apiKey: process.env.SANDOCK_API_KEY,   // Get yours at https://sandock.ai
  image: "ghcr.io/vikadata/bunny-agent:latest",     // Pre-built image (fast startup)
  skipBootstrap: true,
  workdir: "/workspace",
  env: { ANTHROPIC_API_KEY: process.env.ANTHROPIC_API_KEY! },
  // Optional: persistent volumes
  volumes: [
    { volumeName: "my-workspace", volumeMountPath: "/workspace" },
  ],
});

const bunnyAgent = createBunnyAgent({ sandbox, cwd: sandbox.getWorkdir() });
桑多克选项说明
apiKey您的 Sandock API 密钥 (沙发克.ai(中文(简体) )
imageDocker 图像 - 使用 ghcr.io/vikadata/bunny-agent:latest 用于预建,或 sandockai/sandock-code:latest
skipBootstraptrue 当使用预建的图像时( 在沙盒内安装 skips npm)
volumes已命名持续工作空间会话存储的卷( C)
keeptrue (默认) 执行后将沙盒活到~30分
memoryLimitMbMB 内存限制

其他云沙盒

npm install @bunny-agent/sandbox-e2b      # E2B cloud sandbox
npm install @bunny-agent/sandbox-daytona   # Daytona workspace
import { E2BSandbox } from "@bunny-agent/sandbox-e2b";
const sandbox = new E2BSandbox({ apiKey: process.env.E2B_API_KEY });

import { DaytonaSandbox } from "@bunny-agent/sandbox-daytona";
const sandbox = new DaytonaSandbox({ apiKey: process.env.DAYTONA_API_KEY });

代理模板

模板自定义代理所知道的以及它的行为——纯粹的Markdown,没有代码.

my-agent/
├── CLAUDE.md              # System instructions
├── skills/
│   └── sql-expert/
│       └── SKILL.md       # Modular capability
└── .claude/
    └── mcp.json           # MCP server integrations
const sandbox = new LocalMachine({
  workdir: process.cwd(),
  templatesPath: "./templates/analyst",  // Point to your template
});

内建模板 : default, (中文(简体) ), coder, (中文(简体) ), analyst, (中文(简体) ), researcher, (中文(简体) ), seo-agent。 。 。 .


请求范围 服务器

Pi跑者接受每个模型请求的MCP配置. 配置 穿越守护者JSON或一发跑者CLI有效载荷,从不 写入工作空间 :

const bunnyAgent = createBunnyAgent({
  sandbox,
  runnerType: "pi",
  allowedTools: ["read", "bash", "mcp"],
  mcpConfig: {
    mcpServers: {
      analytics: {
        url: "https://mcp.example.com/rpc",
        headers: {
          "X-API-Key": process.env.ANALYTICS_MCP_KEY!,
        },
        auth: false,
        lifecycle: "lazy",
        directTools: false,
      },
    },
    settings: {
      hostConfigDiscovery: "off",
      outputGuard: true,
    },
  },
});

信任的 SDK 调用器也可以配置 stdio 服务器 command, (中文(简体) ), args, (中文(简体) ), env,以及 cwd;这些命令在所选沙盒内执行。 一个 明确 allowedTools 列表必须包含 mcp。 。 。 .

配置已请求范围 。 新的配置适用于下一个 消息,包括恢复对话,而活动回合则保留 开始的配置 。 OAuth 和活转热置换不是 由本API提供.

公共网络路由不应直接接受此可信任的形状. 转换 a 严格 HTTPS 仅输入 McpConfig,拒绝本地主机/私人目标 在沙盒边界执行网络入侵政策.


反应钩

所有钩子都可以从 @bunny-agent/sdk/react数字 :

import {
  useBunnyAgentChat,     // Full chat with streaming
  useArtifacts,         // Display agent-generated files (reports, charts)
  useWriteTool,         // Handle file write tool calls
  useAskUserQuestion,   // Handle interactive questions from the agent
} from "@bunny-agent/sdk/react";

API 参考

提供者

createBunnyAgent 沙盒运输(云/本地文件系统)

import { createBunnyAgent, LocalMachine } from "@bunny-agent/sdk";

const bunnyAgent = createBunnyAgent({
  sandbox: SandboxAdapter,       // LocalMachine, SrtSandbox, SandockSandbox, E2BSandbox, etc.
  cwd?: string,                  // Working directory inside sandbox
  env?: Record<string, string>,  // Environment variables
  template?: string,             // Template name
  resume?: string,               // Session ID for multi-turn
  verbose?: boolean,             // Debug logging
});

const model = bunnyAgent("claude-sonnet-4-20250514");

守护进程 HTTP 传输( 相同的提供者)

任何沙盒适配器 (E2B,桑多克, LocalMachine等):通过 sandbox + 键 daemonUrlURL 解决 内部 沙盒( 沙盒) vikadata/bunny-agent 图像开始 bunny-agent-daemon 在港口3080。 SDK流经 streamCodingRunFromSandbox (单位:千美元)curl -N 在沙盒中,包括 LocalMachine(没有) fetch 从您的服务器。 它没有叫 /healthz 除非您选择 Pi 搜索合同 "auto"参见下文。 使用 isBunnyAgentDaemonHealthy 从 @bunny-agent/sdk 在设定前进行明确的准备状态探测 daemonUrl (如倒回CLI跑道).

import { createBunnyAgent, DEFAULT_BUNNY_AGENT_DAEMON_URL } from "@bunny-agent/sdk";

const bunnyAgent = createBunnyAgent({
  sandbox: mySandboxAdapter,
  daemonUrl: DEFAULT_BUNNY_AGENT_DAEMON_URL, // http://127.0.0.1:3080 inside the container
  runnerType: "claude",
  cwd: "/workspace",
});

奥米 daemonUrl 用于使用 CLI 跑者 在一个沙盒里. createBunnyAgent 总是需要一个 sandbox 适配器.

结构化网络搜索和回答引用

对于 Pi 守护进程执行, 请选择 searchContractVersion: "auto" 关于提供者 或个人模型。 SDK 发现附加运行时间的能力 开始转弯前:

const bunnyAgent = createBunnyAgent({
  sandbox: mySandboxAdapter,
  daemonUrl: DEFAULT_BUNNY_AGENT_DAEMON_URL,
  runnerType: "pi",
  searchContractVersion: "auto",
});
  • 一个有能力的守护进程使用 v1 结构化的搜索和回答说明,并带有 需要流确认。 一个健康的更年长的守护进程使用遗产搜索.
  • 发现发送只读 /healthz 穿过同一个沙箱运输. 回合执行一次; 永远不会重放来谈判支持 。 失败或 畸形的发现在被执行前拒绝,而不是默默地降级.
  • 健康结果被缓存30秒 每个附着的手柄,沙盒ID, 和守护进程 URL 。 现场运行时间重启需要那么长的时间才能发现.
  • 选择保留遗产行为而不被发现。 明确 1 保持严格的承认要求而不被发现。 CLI 执行 并且其他跑者在 "auto" 已选定.

见 检索引用合同 页:1 能力计划、AI SDK要求和引用元数据字段.

出口

入口出口
@bunny-agent/sdkcreateBunnyAgent, (中文(简体) ), BunnyAgentLanguageModel, (中文(简体) ), submitAnswer, (中文(简体) ), DEFAULT_BUNNY_AGENT_DAEMON_URL;再出口 LocalMachine (从) @bunny-agent/sandbox-local和 SrtSandbox (从) @bunny-agent/sandbox-srt(中文(简体) )
@bunny-agent/sdk/reactuseBunnyAgentChat, (中文(简体) ), useArtifacts, (中文(简体) ), useWriteTool, (中文(简体) ), useAskUserQuestion, (中文(简体) ), DEFAULT_BUNNY_AGENT_DAEMON_URL (从 @bunny-agent/manager(中文(简体) )

环境变量

变量需求说明
ANTHROPIC_API_KEY对Anthropic API 键
SANDOCK_API_KEY为桑多克沙发克.ai API 密钥
E2B_API_KEY用于E2BE2B API 密钥
DAYTONA_API_KEY代托纳代托纳 API 密钥

文档

完整文档 : 兔子代理人.dev/docs


许可证

阿帕奇 - 2.0

版本与发布记录

@bunny-agent/sdk 共发布 115 个版本,首次发布于 2026/04/14;过去 12 个月发布了 115 个版本。

版本发布日期距今
0.10.3-beta1latest2026/11/071 天前
0.10.22026/10/2811 天前
0.10.1-beta.22026/10/2811 天前
0.10.1-beta.12026/10/2712 天前
0.10.0-release.62026/10/2613 天前
0.10.0-beta.52026/10/2316 天前

关于 @bunny-agent/sdk 的常见问题

@bunny-agent/sdk 是什么?

Bunny Agent SDK - 用于构建AI代理的 AI 提供者和反应钩

如何安装 @bunny-agent/sdk?

在项目目录运行 npm install @bunny-agent/sdk,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:ai(^6.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@bunny-agent/sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@bunny-agent/sdk 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@bunny-agent/sdk 可以商用吗?

@bunny-agent/sdk 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@bunny-agent/sdk 的下载量有多少?

根据 npm 官方下载统计,@bunny-agent/sdk 在 2026/10/09 – 2026/11/07 这 30 天内被下载 7,219 次,日均约 241 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@bunny-agent/sdk 还在维护吗?

最新版本 0.10.3-beta1 发布于 2026/11/07(1 天前);至今共发布 115 个版本,其中过去 12 个月发布了 115 个;首次发布于 2026/04/14。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。