# Capability Lease (能力租约)

*发给一次运行的、有期限与预算的窄域授权；子租约只能更窄。*

> **Capability Lease（能力租约）** 是对特定数据、特定操作、有明确期限与预算的授权，发给**一次运行**，也是运行接触 NAS 的唯一途径。子租约只能比父租约更窄。

**AN-04** · 符合性等级: L1 Authority · 概念簇: 权限

## 要解决的问题

RBAC 与 ACL 假设用户长期稳定、权限宽而持久；智能体需要的是按任务裁剪、到点失效的权限。更糟的是，长期凭据常常放在智能体够得着的地方：2026 年 4 月那次事故里的令牌，就躺在一个无关的文件里，名义上用来管理域名，实际上能做任何事。

## 工作方式

- **谁拿着钥匙。** 长期凭据只在编排器或所有者手里；运行拿到的是租约，不是钥匙。模型永远看不到长期凭据。
- **租约是一枚访问令牌，** 它的 `authorization_details`（[RFC 9396](https://www.rfc-editor.org/rfc/rfc9396)）描述路径、动作与分支；由所有者或编排器通过[令牌交换（RFC 8693）](https://www.rfc-editor.org/rfc/rfc8693)申请，`act` 声明记录委托链；NAS 端保存状态，用于撤销与预算计数。
- **只能收窄。** 子租约必须是父租约的子集，铸造时由 NAS 校验。
- **预算。** 读写字节数、请求数，以及可选的出口字节与花费上限，由网关计数。它是**熔断器**，不是精确计费。
- **策略包络（policy envelope）。** 所有者预先设定一个范围，范围内的租约自动发放，超出就交给 [Human Gate](https://agentnas.com/zh-cn/concepts/human-gate/)。长期的访问用包络表达，而不是做成长期租约。
- **显式声明 B 与 C。** 租约写明最高敏感级别，以及是否允许受保护写入或出口，它们是 [Trust Labels](https://agentnas.com/zh-cn/concepts/trust-labels/) 的输入。
- **撤销。** 短 TTL（默认 4 小时，上限 24 小时）加即时撤销，撤销会级联到子租约。
- **`purpose` 只记录，不强制：** 自由文本无法被机器检查。

## 从小处开始

- 写一个 `nas lease create` 命令：为每个角色签发一枚带路径前缀、动作和 TTL 的令牌，用环境变量交给沙箱；NAS 一侧按前缀和动作强制。
- 这已经能挡住那类事故的前半段：令牌无法做租约之外的任何事。
- 预算、委托链与策略包络可以以后再加。

## 接口草图

仅作示意。字段名在规范 v0.3 之前可能调整。

*lease.json*

```json
{
  "lease_id": "lse_7Qk3",
  "run": "run_91ab",
  "principal": "agt_cleo",
  "on_behalf_of": "usr_wei",
  "parent": null,
  "purpose": "Draft the Q4 release notes",
  "paths": ["/shared/launch/**", "/agents/cleo/workspace/**"],
  "actions": ["read", "write", "propose"],
  "branch": "cleo/run_91ab",
  "sensitivity_max": "private",
  "egress": false,
  "requires_gate": ["merge", "delete", "share"],
  "budgets": { "bytes_read": 200000000, "bytes_written": 5000000, "requests": 5000 },
  "expires_at": "2026-11-12T16:00:00Z"
}
```

## 规范的要求

- 租约**必须**有到期时间，并且**不得**在最大 TTL 之后续期；续期需要新的发放。
- 子租约**必须**是父租约的子集，NAS **必须**在铸造时校验。
- 撤销租约**必须**级联撤销它的全部子租约。
- 长期访问**必须**以策略包络表达，**不得**做成长期租约。
- 租约**必须**声明敏感级别上限，以及是否允许出口与受保护写入。
- 长期凭据**不得**暴露给模型或运行。

## 借鉴与区别

下面这些都是现成的部件。**真正新的部分：** 以**运行与任务的形状**为单位，把分支、预算与 Rule of Two 的属性放进同一张租约。令牌与能力模型本身都是现成的。

- [OAuth Token Exchange (RFC 8693)](https://www.rfc-editor.org/rfc/rfc8693)
- [OAuth Rich Authorization Requests (RFC 9396)](https://www.rfc-editor.org/rfc/rfc9396)
- [Biscuit](https://github.com/biscuit-auth/biscuit)
- [UCAN](https://ucan.xyz/specification/)
- [IETF attenuating agent tokens draft](https://datatracker.ietf.org/doc/draft-niyikiza-oauth-attenuating-agent-tokens/)

## 坦诚的局限

- 只覆盖 NAS 内的操作，管不到智能体在别处的行为。
- `purpose` 不可强制；预算是近似的。
- 租约不能阻止**合法权限之内**的误用，那是分支和闸门的工作。

## 开放问题

- `purpose` 如何从自由文本走向可机检的结构化意图？
- 预算在联邦下怎样记账？

## 常见问题

### 租约和 API 密钥有什么不同？

API 密钥是长期共享的秘密，持有者能做账号能做的一切。租约绑定一次运行，限定路径、动作和期限，并且只能被收窄；到期即失效，可以随时撤销。

### 为什么不直接用 OAuth？

用的就是 OAuth：租约是访问令牌，靠令牌交换（RFC 8693）申请，用富授权请求（RFC 9396）描述范围。Agent NAS 只补上 OAuth 没有规定的部分：以运行为单位，把分支、预算与 Rule of Two 属性放进同一张授权。

### 租约过期后运行会怎样？

挂载变为只读并随后卸载，新的请求被拒绝并记录。分支保留到它自己的 TTL 到期，所以已完成的工作不会丢，仍然可以经审阅合并。

## 相关概念

- [Human Gate (人类闸门)](https://agentnas.com/zh-cn/concepts/human-gate/): 只在不可逆、对外或提权的动作之前出现，展示真实的差异。
- [Trust Labels (信任标签)](https://agentnas.com/zh-cn/concepts/trust-labels/): 来源与敏感度两个小标签，加上会话污点，强制执行 Rule of Two。
- [Flight Recorder (飞行记录仪)](https://agentnas.com/zh-cn/concepts/flight-recorder/): 以运行为单位、哈希链接的记录，包括这次运行读过什么。

---

规范网址: https://agentnas.com/zh-cn/concepts/capability-lease/
更新于: 2026-11-11 · 规范草案 v0.2 · CC BY 4.0
