# 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-tw/concepts/human-gate/)。長期的存取用包絡表達，而不是做成長期租約。
- **顯式宣告 B 與 C。** 租約寫明最高敏感級別，以及是否允許受保護寫入或出口，它們是 [Trust Labels](https://agentnas.com/zh-tw/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-tw/concepts/human-gate/): 只在不可逆、對外或提權的動作之前出現，展示真實的差異。
- [Trust Labels (信任標籤)](https://agentnas.com/zh-tw/concepts/trust-labels/): 來源與敏感度兩個小標籤，加上工作階段污點，強制執行 Rule of Two。
- [Flight Recorder (飛行記錄器)](https://agentnas.com/zh-tw/concepts/flight-recorder/): 以執行為單位、雜湊連結的記錄，包括這次執行讀過什麼。

---

標準網址: https://agentnas.com/zh-tw/concepts/capability-lease/
更新於: 2026-11-11 · 規範草案 v0.2 · CC BY 4.0
