Python SDK 与异步客户端
使用 Python dataclass 和显式 client 管理 Bridge、Agent 和一次性流。
This page has not been translated into English yet. The original Chinese version is shown below.
Python SDK 需要 Python 3.10 或以上,包名为 cursor-sdk,导入名为 cursor_sdk。它自带 Bridge,不要求应用自己编写 TypeScript 层。
pip install cursor-sdk
export CURSOR_API_KEY="your-key"用户或服务账号 key 均可,Team Admin key 尚不支持。代码可通过 api_key 显式传入;下面例子使用环境变量。
同步运行
import os
from cursor_sdk import Agent, LocalAgentOptions
with Agent.create(
model="composer-2.5",
local=LocalAgentOptions(cwd=os.getcwd()),
) as agent:
print(agent.send("Summarize what this repository does").text())优先使用 typed dataclasses,短脚本也可传普通字典,snake_case keys 会规范化。Agent.model 是 ModelSelection,可访问 id 和 params。用 CloudAgentOptions 与 CloudRepository 切换云端;默认列表里通过 Filter > Source > SDK 查找。
显式 client
CursorClient(别名 Client)适合多个 workspace、自定义 HTTP 或明确控制生命周期。CursorClient.launch_bridge(workspace=".") 启动服务;已有 Bridge 时用 CursorClient.connect(base_url, auth_token),ping 和 get_version 检查健康与版本。
资源操作优先使用 client.agents、client.models、client.repositories。同步 Agent/Cursor 顶层 helper 未提供 client 时共用模块级默认 client,进程退出时关闭,也可用 close_default_client() 主动关闭重置。
异步运行
import asyncio
import os
from cursor_sdk import AsyncClient, LocalAgentOptions
async def main():
async with await AsyncClient.launch_bridge(workspace=os.getcwd()) as client:
async with await client.agents.create(
model="composer-2.5",
local=LocalAgentOptions(cwd=os.getcwd()),
) as agent:
run = await agent.send("Summarize what this repository does")
print(await run.text())
asyncio.run(main())没有全局异步默认 client;每个 event loop 显式拥有 AsyncClient,不在同一路径混合同步与异步 client。直接用 AsyncAgent 类方法时必须传 client=。异步清理使用 await agent.close() 和 await client.aclose(),或以上 context manager。
流只消费一次
run.stream() 是 messages 的别名,返回 SDKMessage;直接迭代 run 或调用 events 返回 RunStreamEvent envelope。messages、events、iter_text 共用底层流,都会推进同一游标,不应分别再消费一遍。
run.wait() 排空剩余事件并返回 RunResult;run.text() 等待后返回最终文本。异步对应 async for 与 await。读取已结束结果不要求重新打开流。
HTTP 与分页
DefaultHttpxClient / DefaultAsyncHttpxClient 保留 SDK 的超时和 redirect 默认行为,普通 httpx client 使用 httpx 自身默认值。client.with_options(timeout=5.0, max_retries=2) 创建共享连接设置的浅拷贝;也可分别设置 unary_timeout 和 stream_timeout。
ListResult 的 next_cursor 在末页为空字符串。可用 has_next_page、get_next_page 或 auto_paging_iter,异步版本提供可等待的对应接口;不要照搬 TypeScript 的“字段省略”判断。