Capability Language Core

用同一种语言定义 Agent 可以做什么

身份回答“是谁在操作”。CLC 定义权限本身:具体动作、参数边界、约束条件,以及一次请求为什么被允许或拒绝。

CLC-v1 · 预览版 CLC-A + CLC-D 机器可读语料 Apache-2.0

身份不等于权限

一个经过认证的 Agent,仍然可能执行不该执行的操作。CLC 在执行之前,把授权判断变成明确、可复核的结果。

01

谁在操作

证书和令牌把密码学密钥绑定到 Agent;通过 AIC,还能进一步绑定到承担责任的主体。

02

可以做什么

CLC 明确动作与参数边界,而不是停留在“能访问数据库”或“能调用工具”这种过宽描述。

03

受到什么限制

约束、运行时策略、委托深度与未决义务保持显式,不藏在应用代码的隐含约定里。

贯穿整条链路的统一判定模型

CLC 把 grant、当前 operation、最终 decision 与决策证据分开表达。

Grant当前拥有什么权限
OperationAgent 现在请求什么
EntailmentGrant 是否覆盖该动作
Resolve消解或保留义务
Decisionallow · allow_unresolved · deny
grant:
  id: std/database-v1:query:SELECT
  params: { limit: 100 }

operation:
  id: std/database-v1:query:SELECT
  params: { limit: 50 }
允许
50 ≤ 100,请求仍在 grant 的参数边界内。
拒绝
请求 limit: 150 → params_exceed_grant。
已识别但无法在本地求值的约束进入 allow_unresolved,不会被静默视为完全授权。

CLC 标准化了什么

语言本身刻意保持精简;它的价值来自补上不同系统之间最容易产生分歧的语义缝隙。

能力标识

结构化命名空间与动作路径语法,明确通配符规则,并对覆盖失败采用 fail-closed。

参数边界

数值上下界、枚举、基数、嵌套对象、可选键、步长,以及 quantity、路径前缀等 scheme 声明域。

最小权限求交

多个 grant 只做收窄。后续来源可以限制权限,但不能创造出上游不存在的权限。

稳定原因码

拒绝会指出失败的语义层,使不同实现能比较判定结果,而不是比较自由文本错误。

委托包含关系

CLC-D 判断子 grant 是否仍在父 grant 内,并把约束、载体模式与链认证保留在各自正确的层。

决策记录

输入、上下文与 verdict 可绑定到 canonical record,为可复现验证和审计证据提供基础。

为什么 CLC 有意义

CLC 是一层共享语义,不是另一种凭据格式。

可迁移的权限

同一套 grant 与 operation 语义,可以从不同身份载体、策略系统和执行环境投影出来。

可组合的最小权限

主体授权、Agent 能力、网关策略与委托范围可以求交,而不会在某一步静默扩权。

确定性的执行

Canonical JSON、类型敏感相等、有界数值处理与固定判定层,减少跨语言行为分歧。

可测试的规范

规范正文配套可执行向量、属性用例与多语言 runner,而不是只靠散文解释。

带可执行语料的规范

每条语义规则都应留下可复现观察:正向、负向或属性测试。

154
CLC-A 授权向量
64
CLC-D 包含关系向量
1,184
求交/属性用例
17 × 2
参考页 · 中 / EN
一致性范围是明确写出的。当前声明的一致性类别是 CLC-A 与 CLC-D;证据侧语料已经实现,但没有声明 CLC-E。Go、Python、TypeScript 当前实现之间的一致结果属于同一作者的回归测试,不构成第三方独立验证。

边界清楚,标准才容易落地

CLC 不试图把身份、传输、证据与法律责任都塞进同一层。

不是身份格式X.509、JWT、SPIFFE 等载体负责建立身份,CLC 负责判断权限。
不是传输协议TLS、mTLS、HTTP 或具体应用协议负责携带授权材料。
不是证据协议证据系统决定事实如何签发与验证;CLC 组合这些事实的结果。
不是策略引擎CLC 定义判定语义;具体部署负责策略、吊销、时钟、插件与本地信任输入。

先读语言,再看实现

从快速入门看一次 grant 如何变成 decision,或用机器可读语料直接验证一个 CLC 实现。