内容
# anyclaude-sdk
[](https://www.npmjs.com/package/anyclaude-sdk)
[](https://www.npmjs.com/package/anyclaude-react)
[](LICENSE)
[](https://anyclaude-docs.puter.site)
[](https://anyclaude-docs.puter.site/demo/)
Claude 代码代理功能 — 工具、工具循环、多轮对话、
MCP、子代理、**多代理团队**、会话 — 针对 **任何 OpenAI 或 Anthropic 兼容的 LLM 端点**,
在 **浏览器**([WebContainer](https://webcontainers.io))、**Node** 和 **Bun** 上运行。无需后端,
无需 OAuth,无需原生二进制文件。
> **实时演示:** [在浏览器中运行的完整 IDE](https://anyclaude-docs.puter.site/demo/) ·
> **文档:** [anyclaude-docs.puter.site](https://anyclaude-docs.puter.site) ·
> **React UI 工具包:** [`anyclaude-react`](anyclaude-react/)
它公开了与 `@anthropic-ai/claude-agent-sdk` 相同的 `query()` 异步生成器接口和相同的 `SDKMessage` 信封,
因此针对官方 SDK 编写的代码可以不加修改地迭代我们的输出。
**多代理团队** 超越单个代理:协调器将任务委派给并行工作的子代理,
您可以 **向正在运行的 worker 发送消息**,并让它在其下一个工具轮中接收(推送交付,
类似于消息队列),实时监督它们,并使用 **`wait_for_worker`**(事件驱动 — 集成每个结果,
无需忙碌轮询),甚至可以在 **单独的 Web Worker 或浏览器标签** 中运行代理,
它们共享一个邮箱,通过 `BroadcastChannelMailbox`。
## 安装
```bash
npm install anyclaude-sdk @webcontainer/api
```
`@webcontainer/api` 是一个可选的同级依赖 — 仅在您使用 `WebContainerWorkspace` 时需要。
您可以提供自己的 `FileSystem`/`CommandExecutor`。
## 快速入门
```typescript
import { WebContainer } from '@webcontainer/api'
import {
query,
WebContainerWorkspace,
createOpenAIClient,
ALL_CLAUDE_CODE_TOOLS,
} from 'anyclaude-sdk'
// 1. 启动 WebContainer 并将其包装为工作区。
const wc = await WebContainer.boot()
const workspace = new WebContainerWorkspace(wc)
// 2. 指向任何兼容 OpenAI 的端点。
const llm = createOpenAIClient({
apiKey: import.meta.env.VITE_OPENAI_API_KEY,
baseUrl: 'https://api.openai.com/v1', // 或 Groq、Together、OpenRouter、本地…
model: 'gpt-4o',
})
// 3. 运行代理 — 与官方 SDK 相同的形状。
for await (const msg of query({ prompt: '列出文件并总结项目', workspace, llm })) {
if (msg.type === 'assistant') {
for (const block of msg.message.content) {
if (block.type === 'text') console.log(block.text)
}
} else if (msg.type === 'result' && msg.subtype === 'success') {
console.log('完成:', msg.result)
}
}
```
### MCP 服务器(外部 + 进程内)
连接外部 MCP 服务器或定义进程内工具。 由于浏览器阻止直接跨源 MCP 获取(CORS),
请为远程服务器传递 `mcpProxy`:
```typescript
import { createSdkMcpServer, tool } from 'anyclaude-sdk'
const calc = createSdkMcpServer({
name: 'calc',
tools: [tool('add', '添加两个数字',
{ type: 'object', properties: { a: { type: 'number' }, b: { type: 'number' } }, required: ['a', 'b'] },
(args) => ({ content: [{ type: 'text', text: String(args.a + args.b) }] }))],
})
query({
prompt, workspace, llm,
mcpServers: {
calc, // 进程内,无需网络
docs: { type: 'http', url: 'https://mcp.example.com' }, // 远程
},
// 通过 CORS 代理路由远程 MCP(函数,`{url}`/`{rawUrl}`模板或裸前缀):
mcpProxy: 'https://my-proxy.example/?url={url}',
})
```
远程工具公开为 `mcp__<server>__<tool>`。
### 提供商
三个传输客户端,均实现相同的 `LLMClient` 接口:
```typescript
import { createOpenAIClient, createAnthropicClient, createResponsesClient } from 'anyclaude-sdk'
// 兼容 OpenAI 的聊天完成(OpenAI、Groq、Together、OpenRouter、xAI、Kilo、本地...)
const a = createOpenAIClient({ apiKey, baseUrl: 'https://api.x.ai/v1', model: 'grok-build-0.1' })
// Anthropic 消息 API
const b = createAnthropicClient({ apiKey, model: 'claude-sonnet-4-6' })
// OpenAI 响应 API(POST /v1/responses)
const c = createResponsesClient({ apiKey, model: 'gpt-4o' })
// AgentRouter 网关(赞助)— createOpenAIClient 的单行预设;密钥
// 回退到 AGENTROUTER_API_KEY。 通过一个基本 URL 访问 Claude/GPT/Gemini/DeepSeek/GLM/...
import { createAgentRouterClient } from 'anyclaude-sdk'
const d = createAgentRouterClient({ model: 'claude-sonnet-4-5-20250929' })
```
所有三个都将工具调用、流式传输和用法标准化为相同的 `StreamResult`,
并包含一个用于模型以内联文本形式发出工具调用的回退解析器。
每个客户端还接受 `extraHeaders` / `extraBody`(合并提供者特定的标头/参数,无需自定义客户端),
并在重试了瞬时故障时在结果上显示 `retries`。
## 多轮 / 交互式会话
使用 `PromptStream` 随时间推送用户回合:
```typescript
import { query, PromptStream } from 'anyclaude-sdk'
const prompts = new PromptStream()
const session = query({ prompt: prompts, workspace, llm, model: 'gpt-4o' })
prompts.push('创建一个 hello.txt 并附上问候语')
// ... 稍后,根据 UI 输入:
prompts.push('现在将其翻译成法语')
prompts.end() // 关闭对话
for await (const msg of session) {
// 渲染 msg...
}
```
## 工具
`ALL_CLAUDE_CODE_TOOLS` 包括:
| 工具 | 用途 |
|------|---------|
| `bash` | 通过 jsh 运行 shell 命令(剥离 `2>&1`/`/dev/null` 重定向) |
| `read_file` | 读取文本(编号行,偏移量/限制),**图像** (自动降采样 base64),**PDF** (文档块)和 **笔记本** (`.ipynb` 单元格 + 输出);二进制文件被拒绝并提供指导 |
| `write_file` | 写入文件,创建父目录 |
| `edit_file` | 精确匹配字符串替换(需要先读取) |
| `multi_edit` | 原子化地对一个文件应用一系列编辑 |
| `notebook_edit` | 替换/插入/删除 `.ipynb` 中的单元格 |
| `delete_file` | 删除文件/目录 |
| `glob` | 按 glob 模式查找文件 (`**`, `*`, `?`) |
| `grep` | 跨文件进行正则表达式搜索 |
| `list_files` | 列出目录 |
| `todo_write` | 跨回合跟踪多步骤任务列表 |
| `web_fetch` | 获取 URL → 通过 Jina Reader 清洁 Markdown(无 CORS,JS 渲染) |
| `web_search` | 通过 Jina + DuckDuckGo HTML 进行网络搜索;返回顶部-N 标题/URL/摘要 |
| `render_page` | 在无头浏览器中渲染 **公共** 页面:Playwright 样式的 `actions` (单击/填充/滚动/按下),可访问性 `snapshot`,`evaluate` JS,控制台+网络 `logs`,以及截图(作为可查看的图像)或提取的 Markdown/HTML。拒绝本地主机/私有/WebContainer 主机。 |
### 文件读取:图像,PDF,笔记本
`read_file` 根据文件类型调度。图像和 PDF 字节会自动转发到模型,
作为后续用户回合(Anthropic 获取原生 `image`/`document` 块;OpenAI 兼容端点获取 `image_url`/`file` 部分),
因此模型可以实际**看到**文件,而不仅仅是文本摘要。
通过 `limits` 调整上限:
```typescript
query({ prompt, workspace, llm, limits: { maxTokens: 25000, maxImageBytes: 3_750_000, maxPdfPages: 20 } })
```
传递子集,或您自己的 `Tool[]`,通过 `tools:`:
```typescript
import { readFile, writeFile, editFile } from 'anyclaude-sdk'
query({ prompt, workspace, llm, tools: [readFile, writeFile, editFile] })
```
## 斜杠命令
以 `/` 开头的用户回合被拦截。内置:`/help`,`/clear`,
`/compact [focus]` (总结历史以释放上下文),`/tools`,`/cost`,
`/model`。定义您自己的提示模板命令:
```typescript
import { query, promptCommand } from 'anyclaude-sdk'
query({
prompt: promptStream, workspace, llm,
commands: [promptCommand('review', '审查差异', '审查此代码并列出问题:$ARGUMENTS')],
})
// 用户输入:/review src/app.ts
```
## 后台任务
启用 `background: true` 以在关键路径之外运行子代理或长时间工作。
`task` 工具获得 `run_in_background` (立即返回任务 ID),
而 `task_list` / `task_output` / `task_stop` 工具让代理轮询它们。
可选的独立线程执行,通过 Comlink worker 工具包
(`exposeBackgroundWorker` / `wrapWorker`);线程内管理器无需它即可工作。
```typescript
query({ prompt, workspace, llm, agents: {}, background: true })
```
### 单独的 Web Worker 中的代理
两个部分:**Comlink** 用于主→工作线程控制(`wrapWorker` / `exposeBackgroundWorker` 上方),
以及 **`BroadcastChannelMailbox`**,以便不同工作线程中的代理以 mailbox 样式进行通信。
它是一个即插即用的 `Mailbox`,因此现有的 `team` 工具
(`send_message` / `dispatch_tasks`)无需修改即可在工作线程之间正常工作:
```typescript
import { BroadcastChannelMailbox } from 'anyclaude-sdk'
// 在每个 Web Worker / 标签 / worker_thread 中,相同的频道名称:
const mailbox = new BroadcastChannelMailbox({ channelName: 'team', origin: 'planner' })
query({ prompt, workspace, llm, team: true, mailbox })
// 一个工作线程发送的消息会出现在另一个工作线程的 inbox 中。
```
默认使用全局 `BroadcastChannel`。对于持久的跨标签交付
(IndexedDB/localStorage 回退,旧浏览器,Node),使用一次调用助手
— 它由捆绑的 [`broadcast-channel`](https://www.npmjs.com/package/broadcast-channel)
包支持,延迟导入以保持不使用它的包的干净:
```typescript
const mailbox = await BroadcastChannelMailbox.crossTab({ channelName: 'team', origin: 'planner' })
query({ prompt, workspace, llm, team: true, mailbox })
```
**将消息推送到正在运行的代理。** 消息被定向到代理,并在下一个回合边界自动注入其转录本,
与消息队列相同,但来自共享邮箱。因此,协调器(或对等方,或另一个
工作线程)可以重定向正在运行的子代理 mid-task,它会出现在
子代理的下一个工具轮廓,没有所需的轮询工具。`dispatch_tasks` 命名每个
工作线程 `worker:<taskId>`,因此您可以针对特定的一个:
```typescript
mailbox.send('coordinator', 'worker:task_1', 'while you work: also add logging')
// worker:task_1 看见 "[Team messages] - from coordinator: ..." 在其下一个步骤。
```
默认启用 `team: true`;通过 `query({ deliverTeamMessages: false })` 退出。
## 可扩展的后端
您不必绑定到 WebContainer。 `Sandbox` 只是 `FileSystem` 加上 `CommandExecutor`,
您可以混合和匹配。
### 任意沙盒提供商
适配器在结构上包装每个提供者的客户端(无需依赖他们的 SDK — 只需安装您使用的 SDK):
```typescript
import { E2BSandbox, VercelSandbox, DaytonaSandbox, CloudflareSandbox } from 'anyclaude-sdk'
// 例如 E2B
import { Sandbox } from 'e2b'
const sbx = await Sandbox.create()
const workspace = new E2BSandbox(sbx)
query({ prompt, workspace, llm })
```
支持:**WebContainer**、**E2B**、**Vercel Sandbox**、**Daytona**、
**Cloudflare Sandbox** 和 **LocalSandbox** (真实 OS)。所有实现相同的
`Sandbox` 接口。
### 本地真实 OS 沙盒(Node)
直接在主机文件系统和 shell 上运行代理 — 像
Claude Code 一样,具有自动平台检测(Windows / macOS / Linux):
```typescript
import { LocalSandbox, createAnthropicClient, query } from 'anyclaude-sdk'
const workspace = new LocalSandbox({ cwd: '/path/to/project' }) // 默认 process.cwd()
const llm = createAnthropicClient({ baseUrl, model: 'claude-sonnet-4-6', apiKey })
for await (const msg of query({ prompt: '添加 CLI 标志并运行测试', workspace, llm })) { /* … */ }
```
代理的工作目录由沙盒自动获取。参见
`examples/local-agent.mjs` 以获取可运行的无头演示。在 Windows 上,它使用
`cmd.exe`;在其他地方使用 `$SHELL`/`/bin/sh`(覆盖 `shell`/`shellArgs`)。
### 持久的完整 Linux 样式文件系统(无服务器)
对于浏览器中的持久文件系统,请使用 DB 支持的 FS 并播种标准 Linux 树。
`DexieFileSystem` (IndexedDB)是推荐的默认
— 跨 reload 持久,索引以实现快速 `readdir`/`glob`,带有元数据
(模式,mtime,符号链接):
```typescript
import {
DexieFileSystem, OpfsFileSystem, seedLinuxTree, composeWorkspace, NoopCommandExecutor,
} from 'anyclaude-sdk'
const fs = new DexieFileSystem('my-project-fs') // 或: new OpfsFileSystem()
await seedLinuxTree(fs) // /bin /etc /home/user /tmp /usr …
// 文件代理(无 shell):
const workspace = composeWorkspace(fs, new NoopCommandExecutor(), '/home/user')
// …或将持久 FS 与远程 shell 配对:
const workspace = composeWorkspace(fs, new E2BSandbox(sbx), '/home/user')
```
`OpfsFileSystem` (Origin Private File System)与 Dexie 一起提供
用于大二进制/本机句柄场景;使用 `OpfsFileSystem.isSupported()` 进行
功能检测。
`MemoryFileSystem` 也适用于测试:
```typescript
import { MemoryFileSystem, NoopCommandExecutor, composeWorkspace } from 'anyclaude-sdk'
const fs = new MemoryFileSystem()
await fs.writeFile('/app/index.ts', 'export const x = 1')
const workspace = composeWorkspace(fs, new NoopCommandExecutor())
```
## 技能(编程)
内联声明可重用的提示技能 — 每个技能都变成一个 `/name` 斜杠命令,
并可通过 `skill` 工具由代理调用。 `$ARGUMENTS` 在调用时被替换:
```ts
import { query, defineSkill } from 'anyclaude-sdk'
query({
prompt, workspace, llm,
skills: [
defineSkill({
name: 'changelog',
description: '将 git 更改总结为 changelog 条目',
instructions: '为以下内容编写简洁的 changelog 条目: $ARGUMENTS',
argumentHint: '<since>',
}),
],
})
```
您也可以传递普通的 `Skill` 对象,或设置 `skills: true` 来加载 `.claude/skills/*.md` 到工作区。
## 服务器端无服务器 & “幸存者”
在无服务器函数中运行 `query()` 并将 `SDKMessage` 流式传输到浏览器。
对于超过平台时间限制的运行,在回合边界处检查点并在新的无缝调用中继续:
```ts
// 暂停接近截止日期,持久化到存储,发出 `paused` 消息
query({ prompt, workspace, llm, sessionStore, maxDurationMs: 20_000 })
// 稍后 — 恢复 + 继续工具循环,无需新的用户消息
query({ workspace, llm, sessionStore, resume: true, continueRun: true })
```
可扩展的 `SessionStore` 适配器(均实现 `SessionStoreLike` 接口):
`SessionStore` (IndexedDB),`MemorySessionStore`,`KVSessionStore` (Vercel KV / Upstash),
`RedisSessionStore`,`PostgresSessionStore` (Neon / pg / postgres.js),`SupabaseSessionStore`。
## 客户端工具 — 服务器大脑,浏览器操作
声明主机执行的工具 — 例如,在用户的浏览器 WebContainer 中运行 `bash`,
同时代理循环在您的服务器上运行。运行会暂停,出现 `client_tool_request`;
客户端执行它并恢复结果:
```ts
import { WORKSPACE_TOOL_NAMES } from 'anyclaude-sdk'
query({ prompt, llm, workspace, sessionId, clientTools: WORKSPACE_TOOL_NAMES }) // 发出 client_tool_request + 暂停
query({ llm, workspace, sessionId, resume: true, continueRun: true, clientToolResults }) // 继续
```
在浏览器端,`anyclaude-react` 将这些转换为一个可用的执行器映射,
由 **任意** 工作区支持 — WebContainer(真实 shell + 文件),用户 **IndexedDB** (`DexieFileSystem`),OPFS,内存:
```tsx
import { createWebContainerClientTools, createWorkspaceClientTools } from 'anyclaude-react'
useAgent({ endpoint: '/api/agent', clientTools: createWebContainerClientTools(wc) }) // 文件 + bash
useAgent({ endpoint: '/api/agent', clientTools: createWorkspaceClientTools(new DexieFileSystem('my-db')) }) // IndexedDB
```
## 交互式 — `ask_user_question`
提供 `onAskUser`,代理获得一个 `ask_user_question` 工具,
将决策交给用户 — 多选 **或** 自由文本(`inputType: 'choice' | 'text' | 'textarea' | 'number'`,另外还有 `allowOther`)。
仅渲染选择的宿主可以忽略新字段:
```ts
query({ prompt, workspace, llm, onAskUser: async ({ question, options, inputType }) =>
inputType && inputType !== 'choice' ? promptText(question) : pickOne(question, options) })
```
## 隐藏你的提示(投影)
代理循环在服务器端运行,因此您的系统提示、工具说明和检索的上下文
生活在服务器→LLM 请求中,**永远不会到达浏览器**。为了从流式传输的消息中
剥离敏感的工件(推理,原始工具输出 / RAG,模型身份),
包装流 — 一个纯粹、自愿的输出转换:
```ts
import { projectMessages } from 'anyclaude-sdk'
for await (const m of projectMessages(query({ /* ... */ }), { preset: 'public' }))
res.write(JSON.stringify(m) + '\n')
```
`paused` 和 `client_tool_request` 控制消息始终保留。
(注意:浏览器中运行的任何内容 — `createAgentClient` 模式 —
都必须公开其请求;使用服务器/端点路径时,提示是专有的。)
## React UI 组件库 — `anyclaude-react`
```bash
npm install anyclaude-react
```
`useAgent()` 加上可重新设计的组件 — 聊天界面 (`AgentChat`、`ChatPanel`、`Transcript`、`MarkdownMessage`、`Composer`、`Working`、`ToolCalls`) 和 IDE 组件集 (`Terminal`、`FileExplorer`、`CodeEditor`、`AskUser`)。`createAgentClient` / `createEndpointClient` 自动缝合 `paused` 继续执行,并在浏览器中运行 `clientTools`。
## 在任意模型上运行 Claude Code — `anyclaude-sdk/anthropic-endpoint`
建立一个与 Anthropic Messages API 兼容的端点,支持任意 OpenAI 兼容模型,这样 **Claude Code 自身**(或任何 Anthropic-Messages 客户端)可以运行在 DeepSeek / Qwen / GLM / Kimi / 本地 Ollama 上。与简单的代理不同,内联工具调用 **方言恢复为正确的 `tool_use` 块**,因此工具使用实际上适用于廉价模型。
```ts
import { createOpenAIClient } from 'anyclaude-sdk/llm'
import { anthropicToChat, anthropicSSE } from 'anyclaude-sdk/anthropic-endpoint'
const llm = createOpenAIClient({ baseUrl: 'https://api.deepseek.com/v1', model: 'deepseek-chat', apiKey })
// POST /v1/messages:
for await (const evt of anthropicSSE(llm, anthropicToChat(body), { model: 'deepseek-chat' })) res.write(evt)
// then: ANTHROPIC_BASE_URL=http://localhost:8787 claude
```
可运行示例:[`examples/claude-code-router`](examples/claude-code-router).
## 在廉价 / 开放模型上可靠地使用工具
前沿模型发出干净的原生函数调用;较便宜的模型通常不这样做。三个层次(在 `anyclaude-sdk/llm` 中)弥补了这一差距:**工具调用方言** (`parseToolCalls` — xml-function / hermes / json-fence),**自动检测的模型配置文件** (`profileForModel` — qwen/deepseek/moonshot/zhipu/mistral/llama),以及 **自我修复的参数修复** (`query({ repairToolCalls })`,默认启用 — 验证参数并向模型提供纠正的 tool_result,而不是使用错误的参数运行)。在您的端点上使用 [`scripts/compat-matrix.mjs`](scripts/compat-matrix.mjs) → [COMPATIBILITY.md](COMPATIBILITY.md) 进行验证。
## 搭建浏览器端的 AI IDE
```bash
npm create anyclaude-app@latest my-app # 模板:bolt — WebContainer + 聊天 + 即时预览,无后端
```
`bolt` 模板连接 `useWebContainerPreview({ wc })`(启动开发服务器 → 即时预览 URL)+ 浏览器端的 `query()` + IDE 组件。参见 [`anyclaude-react`](#react-ui-组件库--anyclaude-react).
## Token 效率 — 延迟工具
将大量很少使用的工具 **保持在每轮的负载之外**(在弱模型或未缓存模型上节省大量成本),同时保持可发现性和可调用性。标记它们为延迟;`tool_search` 索引它们,循环 **激活** 工具(在后续回合中发送其模式),然后正常执行。
```ts
query({ prompt, workspace, llm,
extraTools: [deploy, ...integrationTools], // 例如 35 个集成工具
deferredTools: ['stripe_charge', 'supabase_query', /* … 专业的工具 */],
})
// 或按工具:defineTool({ name, description, parameters, run, defer: true })
```
只有精简的核心 + `tool_search` 每次都发送;模型在需要专业工具时搜索,SDK 激活它,然后调用通过。注册 35 个,发送 ~10。
## 代理循环调优(廉价 / 轻量 / 快速)
选择加入的旋钮,用于 token 成本和延迟 — 尤其是在弱 / 未缓存模型上:
```ts
query({
prompt, workspace, llm,
systemPromptPreset: 'lean', // ~70% 更短的内置提示 — 在未缓存模型上每轮都节省
keepToolResults: 6, // 上下文编辑:删除旧于最后 6 个的 tool_results(控制转录增长)
parallelToolExecution: true, // 并行运行一轮的只读工具调用(在多读回合上约 2 倍更快)
deferredTools: [/* 专业工具 */], // 将很少使用的工具保持在负载之外,直到 tool_search 激活它们
})
// 自定义读取工具选择并行:
defineTool({ name: 'get_logs', description: '…', parameters, run, parallelSafe: true })
```
变异工具 / `bash` / 委托的客户端工具始终串行执行;`keepToolResults` 和 `parallelToolExecution` 保留正确性,只是修剪成本/延迟。
## 其他优点
- **实时压缩标记** — `autoCompact` 在总结之前发出带有 `status: 'start'` 的 `compact_boundary`(用于实时的“compacting…” 指示器),并在完成后发出带有 `post_tokens` 的 `status: 'end'`。
- **取消排队消息** — `MessageQueue.push()` 返回一个稳定的 ID;`remove(id)` 取消单个待处理消息(每个 pill ✕ 在 UI 中)。
- **自带 LLM 客户端** — 重用 SDK 的线路编码:`toOpenAIMessages`、`consumeSSE` 和来自 `anyclaude-sdk/llm` 的 LLM 类型(浏览器捆绑包中没有裸根导入)。
## 示例和实时演示
[`examples/`](examples/) 中的可运行 Vite 项目: **`browser-ide`** (WebContainer IDE — 真实 shell + Node 在选项卡中),`browser-chat`,`claude-code-router`,`vercel-kv-survivor`,`vercel-supabase-survivor`,`vercel-indexeddb-survivor`, **`vercel-clienttools`** (服务器大脑 / 浏览器操作)。尝试 **[实时演示](https://anyclaude-docs.puter.site/demo/)**。
## API
- `query(options): AsyncGenerator<SDKMessage>` — 主要入口。
- `prompt: string | AsyncIterable<SDKUserMessage>`
- `workspace: FileSystem & CommandExecutor`
- `llm: LLMClient`
- `tools?`, `extraTools?`, `allowedTools?`/`disallowedTools?`, `deferredTools?` (延迟加载),`model?`, `systemPrompt?`/`appendSystemPrompt?`, `maxTurns?` (默认 50),`cwd?`, `abortController?`
- 无服务器:`sessionStore?`, `resume?`, `maxDurationMs?`, `continueRun?`
- 客户端工具:`clientTools?`, `clientToolResults?`; 交互式:`onAskUser?`
- 还有:`mcpServers?`, `agents?`, `commands?`, `hooks?`, `background?`, `team?`, `memory?`, `permissionMode?`/`canUseTool?`, `messageQueue?`
- `createOpenAIClient` / `createAnthropicClient` / `createResponsesClient`
- `WebContainerWorkspace`, `MemoryFileSystem`, `NoopCommandExecutor`, `LocalSandbox`, `composeWorkspace`
- `defineTool` (自定义工具),`projectMessages` (服务器端流式编辑)
- `ALL_CLAUDE_CODE_TOOLS`, 单个工具, `toolDefs`, `toolByName`
- 浏览器清理子路径:`anyclaude-sdk/{query,loop,llm,fs,workspace,tools,session,memory,compact,permissions,skills,queue,prompt,anthropic-endpoint,telemetry}`
- `anyclaude-sdk/llm`: `parseToolCalls` + 方言, `profileForModel` (模型配置文件), `validateToolArguments` (修复), `toOpenAIMessages` / `consumeSSE` (自带客户端编码)
- `anyclaude-sdk/anthropic-endpoint`: `anthropicToChat`, `anthropicSSE`, `streamResultToAnthropicMessage` (Claude-Code 路由器)
- `runToolLoop` (`/loop`), `compactWithWindow` (`/compact`), `track`/`telemetryEnabled` (`/telemetry`)
- 所有 `SDK*` 消息类型, `ContentBlockParam`, `LLMClient`, `ToolDef`, `SessionStoreLike`, 等。
## 与官方 SDK 的区别
| 特性 | 官方 SDK | anyclaude-sdk |
|---------|-------------|--------------------|
| 认证 | OAuth token | 无需认证 |
| 后端 | claude.ai API | 任意 OpenAI/Anthropic 端点 |
| 运行时 | 仅 Node | 浏览器, Node, Bun |
| 文件操作 | 原生文件系统 | 可插拔(WebContainer / 内存 / IndexedDB / 本地) |
| 命令 | 原生 shell | jsh(WebContainer)/ 本地 / 客户端工具 |
| MCP / 斜杠命令 / 背景任务 / 子代理 | 内置 | 内置 |
| 无服务器幸存者 + 提示投影 | — | 内置 |
## 遥测
SDK 发出 **匿名、选择加入** 的使用遥测(SDK 版本、运行时、粗粒度模型家族桶和使用的功能)— 绝不发送代码、提示、存储库身份、路径或密钥。它发送到一个仅聚合的收集器(一个 Puter Worker;源代码在 [`examples/telemetry-collector`](examples/telemetry-collector) 中)。通过 `ANYCLAUDE_TELEMETRY=0`, `DO_NOT_TRACK=1`, 或 `query({ disableTelemetry: true })` 禁用;通过 `ANYCLAUDE_TELEMETRY_URL` (或将其设置为空字符串以发送到无处)重新设置。完整披露: [TELEMETRY.md](TELEMETRY.md).
## 许可证
MIT
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器