Agent SDK

运行时与能力协商

使用默认 nxs 或接入第三方异构运行时,通过能力协商确认支持范围。

使用默认运行时 nxs

Bridge 默认选择 nxs,文档中的任务、工具和会话示例也使用 nxs。独立程序通过 WithCLIPathNEXUS_NXS_COMMAND_PATH 提供可信可执行文件。Bridge 不会从 PATH 中自动寻找 nxs。

options := client.NewOptions().WithRuntime(client.RuntimeNXS).
    WithCLIPath("/opt/nexus/bin/nxs").WithCWD("/srv/agent-work")

可省略 WithRuntime,保留默认选择。路径只是示例,请换成部署机上的实际文件。可执行文件、工作目录、运行身份和环境变量共同决定运行环境。程序能被找到,不代表模型访问已经配置。

接入第三方异构 Agent 运行时

Claude Code 是 bridge 当前支持的一种第三方异构 Agent 运行时。它有自己的安装、认证、模型配置与执行行为,需要显式选择。下面的代码只展示这一适配入口,通用教程仍以 nxs 为默认。

options := client.NewOptions().WithRuntime(client.RuntimeClaude).
    WithCLIPath("/usr/local/bin/claude").WithCWD("/srv/agent-work")

也可通过 NEXUS_CLAUDE_COMMAND_PATH 指定 Claude Code 路径。接入第三方运行时之前,先在相同运行身份下完成它自己的安装和模型配置。

运行时接入不限定为这两个实现。后续扩展其他异构 Agent 运行时,需要相应适配与契约验证;不能仅替换可执行文件路径就视为兼容。宿主应按能力判断可用功能,避免把业务逻辑写成 nxs 与 Claude Code 的二选一。

能力检查与实际调用

公开方法存在不代表当前运行时一定支持。Session.Supports 是宿主判断能力的入口,其中一部分能力由 bridge 适配,一部分按运行时区分,另一部分来自初始化协议协商。

if !session.Supports(client.CapabilityMessageExecutionPolicy) {
    return fmt.Errorf("当前运行时不支持单条消息执行限制")
}
stream, err := session.SendWithOptions(ctx, "只根据现有上下文回答。",
    protocol.OutboundMessageOptions{ToolAccess: "none", MaxOutputTokens: 512})
if err != nil { return err }
result, err := stream.Result(ctx)
if err != nil { return err }
if result.IsError { return fmt.Errorf("受限任务失败:%s", result.Subtype) }

这里遇到不支持时停止发送,不能退回普通 Send。否则“禁止工具”会在兼容分支中失效。MaxOutputTokens 是这条消息的输出限制,不是整个会话的费用上限。

运行时差异

能力公开能力常量接入时的判断
下一轮内部上下文CapabilityInternalContextnxs 与 Claude 的注入机制不同,宿主调用统一入口
精确会话分叉CapabilitySessionFork保留完成消息 ID,并处理恢复文件缺失
Go 进程内 MCPCapabilityInProcessMCP工具代码由宿主执行
停止后台任务CapabilityStopTask使用运行时提供的 task ID
后台任务续聊CapabilitySendTaskMessage当前为 nxs 能力
环境热更新CapabilityUpdateEnvironment当前为 nxs 能力
AutoDreamCapabilityAutoDream当前为 nxs 能力;宿主唤醒不等于必然执行
子任务控制CapabilitySubagentControl必须协商 subagent_control_v1
单条消息执行策略CapabilityMessageExecutionPolicy必须协商 message_execution_policy_v1
Hook 应用回执CapabilityHookResponseAck必须协商 hook_response_ack_v1
自动审核CapabilityAutoReviewnxs 需要扩展协商;Claude 还需确认原生模式启用

Supports 为 true 也不保证账号、模型或策略可用,最终以控制调用和运行结果为准。能力来源见 capability.go

控制已建立的会话

session.Control() 获取模型、设置和任务控制,用 session.MCP() 管理 MCP 服务。控制请求有自己的 context,应设置超时。长时控制的取消会沿同一 request ID 传给运行时,不应在超时后立即重复发送同一副作用操作。

初始化信息可通过 InitializationResult 获取;模型列表使用 SupportedModels。这些信息适合生成你自己的配置界面,但展示给用户前应筛选字段,不要暴露账号快照或完整进程环境。

自定义连接

WithDirectConnect 用于宿主管理远端运行时,WithTransport 用于宿主提供完整传输实现,二者不能同时设置。这些入口不提供应用级用户认证、负载均衡或租户隔离。只有在进程托管确实由其他服务负责时才使用它们;一般接入从本地子进程开始即可。