功能

让凭证远离智能体环境

对于内置的 HTTP 和 SSH,Sallyport 会授权操作、亲自与目标通信,并且只在 App 内部附上凭证。智能体拿到的是结果,而不是密钥。确切的边界都写在安全模型里。

在你的 Mac 上运行无需 Sallyport 账户无云端控制平面HTTP · SSH · 上游 MCP
请求路径

内置 HTTP 和 SSH 将请求路径与凭证路径分离

请求会指定操作和目标。Sallyport 检查当前运行的进程、应用授权阶梯并写入持久化的意图记录,之后才将操作交给 HTTP 或 SSH 执行器。

需要时点按或使用 Touch ID

Sallyport 本地边界
智能体进程操作、目标和有效负载
当前运行进程的身份
授权阶梯
持久化的审计意图记录
HTTP 或 SSH 执行器
加密密钥库在内部提供凭证
请求的目标 / 已配置的目标HTTP URL 或已配置的 SSH 主机
操作请求内部凭证路径智能体可见的工具结果不会有意加入已存储的凭证
智能体请求 Sallyport 执行内置 HTTP 或 SSH 操作。Sallyport 验证当前运行进程的身份、应用批准控制、写入持久化的审计意图记录,然后将操作发送给通道执行器。密钥库会在内部向该执行器提供凭证。目标结果未经内容检查或重写便会返回,其中可能包含敏感数据。
执行通道

每次获准调用都通过统一门控

HTTP、SSH、远程 MCP 和本地 stdio 具有不同的信任边界。它们的工具调用都会经过相同的密钥库、批准、生命周期和审计检查。

01

HTTP

http.request → 方法 + URL + 正文

当主机和路径匹配时,Sallyport 可以附加 Bearer、基本认证、自定义标头、AWS SigV4 或 OAuth2 客户端认证。未匹配的请求不携带凭证执行。

携带凭证的请求不会跟随重定向。不携带凭证的请求可以在限定次数内跟随同一主机、同一端口的重定向链,且不能从 HTTPS 降级为 HTTP。结果和错误会在大小限制内返回,不检查内容,其中可能包含敏感数据。

02

SSH

ssh.exec → 主机 + 可见命令

此 App 会为无状态的 sp-ssh 辅助程序签署认证请求。私钥保留在 Sallyport.app 中,辅助程序可以返回录制内容,由 App 密封。

默认的 accept-new 策略会记录首次出现的主机密钥,并拒绝此后发生变化的主机密钥;严格模式要求主机密钥必须已知。返回的 SSH 输出和密封的录制内容可能包含敏感数据。

03

远程 MCP

server.tool → 类型化参数

Sallyport 通过可流式传输的 HTTP 调用远程服务器,并附加为其配置的 API 密钥或 OAuth 2.1 令牌。该服务器是获授权的凭证接收方。

该服务器是受信任的凭证接收方。工具结果、错误和经认证的目录元数据返回时不会筛查其中是否含有凭证,但受文档所述的大小和描述限制约束,其中可能包含凭证或其他敏感数据。

04

本地 stdio MCP

server.tool → 类型化参数

子进程会在自身环境中接收已绑定凭证,并继承 Sallyport 的进程环境。请将服务器代码及其依赖项视为受信任代码。

非每次调用型子进程可以持续运行,直至密钥库锁定、重新配置或 App 退出。每次调用型子进程会在单次调用获批后启动,完成后停止。

远程 MCP(可流式传输的 HTTP)

本地 stdio MCP

智能体调用
调用门控身份、批准、持久化的意图记录
经认证的请求可流式传输的 HTTP
远程 MCP 服务器API / OAuth 凭证的受信任接收方
已配置的 API 密钥 / OAuth 令牌经认证的 initialize + tools/list元数据绕过调用审计;收到后原样返回
智能体调用
调用门控身份、批准、持久化的意图记录
本地 stdio 子进程接收已绑定的机密信息 + 继承 App 环境
密钥库生命周期就绪、锁定、重新配置、退出
凭证进入子进程环境非每次调用型:可以持续运行每次调用型:批准、启动、调用、停止信任上游服务器代码及其依赖项
对于远程 MCP,获准调用会经过 Sallyport,由 Sallyport 为远程请求附加 API 或 OAuth 认证。远程服务器是受信任的凭证接收方。工具结果、错误和经认证的目录元数据返回时不会筛查其中是否含有凭证,但受文档所述的大小和描述限制约束,其中可能包含敏感数据。初始化和目录元数据仍会在调用阶梯之外返回。对于本地 stdio MCP,子进程会接收已绑定凭证和 App 环境。非每次调用型子进程可以在密钥库就绪时持续运行;每次调用型子进程则会在获批后运行一次。

硬性限制:initialize 和 tools/list 在调用阶梯之外管理上游目录。Sallyport 不会筛查内容中是否含有凭证;文档所述的大小和描述限制仍然适用。工具名称、描述和 schema 仍是上游可任意控制的内容,其中可能包含敏感数据。

授权

每次获准的工具调用都遵循固定路径

不存在由用户编写的策略语言。初始化和目录发现属于管理流量,不是获准的调用,因此不会生成调用意图记录。

  1. 01 · 状态

    要求密钥库处于就绪状态

    处于已锁定、正在解锁或已隔离状态的密钥库会拒绝智能体操作。锁定还会清除会话、待处理的批准请求、凭证请求和 stdio MCP 进程。

    拒绝或继续
  2. 02 · 解析

    解析目标和凭证

    如果无法解析调用所需的目标或凭证元数据,Sallyport 会拒绝该调用。

    拒绝或继续
  3. 03 · 每次调用

    标记后每次使用均请求批准

    标记为每次调用均需批准的密钥或上游,每次使用时都需要点按或使用 Touch ID,即使是在已批准或已加入允许列表的会话中也不例外。

    要求批准或继续
  4. 04 · 进程

    检查会话、允许列表或观察模式

    活跃会话会将 PID 和内核启动时间与可执行文件及代码签名数据绑定。它准入的是该进程,而不是每个软件包或字节来源。匹配允许列表只会跳过会话卡片。

    要求批准或继续
  5. 05 · 意图

    在产生副作用前写入

    每次工具调用都必须在执行器运行前写入一条持久化的加密审计意图记录。如果写入失败,操作不会启动。

    拒绝或执行
  6. 06 · 结果

    执行并完成该记录

    Sallyport 运行相应通道、尝试追加结果记录,并在不检查或重写内容的情况下返回受大小限制的执行器结果。结果可能包含敏感数据。

    返回结果

该阶梯和审计意图覆盖工具调用,但不覆盖上游初始化或目录发现。执行前发生生命周期变更会拒绝准入。执行期间发生变更会丢弃结果,但无法撤销已经完成的副作用。

密钥库与日志

机密信息与证据采用不同路径

密钥库通过硬件门控密钥打开。即使密钥库已锁定,审计日志仍可接收加密记录,但读取这些记录仍需解锁。

解锁与记录解密路径

盲写审计路径

Secure EnclaveTouch ID 门控的 P-256 密钥
密封的密钥库身份
密钥库 DEK
加密记录每条记录使用派生密钥和认证上下文
意图 + 结果
ECIES 密封的记录
已签名的哈希链
已签名的本地检查点
审计公钥
链 + 检查点验证
Secure Enclave 密钥会打开密封的密钥库身份,后者解封用于加密记录的数据加密密钥。另有一个审计公钥用于密封意图和结果记录。已签名的密文链可以检测编辑、重排、内部缺口和签名方替换。另一个已签名的本地检查点可以检测回滚到该检查点之前的状态。
01 · 不可显示或导出
Sallyport 没有用于显示、导出或恢复凭证的途径。密钥库密钥丢失后,必须从凭证提供方重新签发凭证。
02 · 加密元数据
名称、提供方、主机绑定、SSH 主机清单和设置会与机密值一起密封。
03 · 明确的回滚检测边界
该链可以检测编辑、重排、内部缺口和签名方替换。本地检查点可以检测回滚到其之前的状态;非正常关机后,检查点之后的尾部记录可能丢失。要检测完整的本地回滚,需要设备外见证。

安装 Sallyport

安装已签名的 Mac App,添加凭证,然后连接你的 MCP 客户端。

$brew install --cask olegsotnikov/tap/sallyport

macOS 14+ · Apple Silicon

Sallyport

Sallyport 替你的 AI 智能体执行 API 调用和 SSH 命令。密钥留在你 Mac 上的本地密钥库里;每次运行由你批准,每个操作都落入一份密封的审计日志。

© 2026 Sallyport · 依据 Apache-2.0 开源 · Oleg Sotnikov