RuFlo 集成 AGNTCY/Outshift 运行时:SLIM 传输、CASA 授权强制与 IOC 协调事件架构详解
【免费下载链接】ruflo🌊 The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated项目地址: https://gitcode.com/GitHub_Trending/cl/ruflo
本指南围绕 RuFlo 仓库中的架构决策记录 ADR-380 展开,系统讲解如何将 Cisco Outshift 的 AGNTCY(Internet of Cognition)生态作为可选的、可移除的运行时增强接入 RuFlo:通过 SLIM 安全消息传输实现跨主机/跨租户的分布式协调,通过 CASA 意图域授权在每次工具调用前施加确定性的许可强制,并在现有 swarm/hive-mind 编排之上叠加可选的 IOC Layer 9 语义协调事件。读完本文,你将掌握这套集成的六项决策内容、其不可妥协的安全约束("强制阶段绝不允许 LLM 参与")、与配套插件源码的对应关系,以及如何用
ruflo transport use slim、ruflo agent publish、ruflo swarm join <namespace>三个新 CLI 动词实际操作并安全回退。
背景:一份"干净定位"栈的运行时补全
ADR-380 由一份评估 Cisco Outshift AGNTCY / Internet of Cognition 生态的战略简报催生。该简报将 RuFlo 项目定位为整个智能体网络中的一个执行与协调角色:
AGNTCY and Outshift define the agent network. MetaHarness builds and evolves the agents. RuFlo executes and coordinates them. Meta LLM governs inference, cost, tenancy, and safety. RuVector supplies local memory and semantic state.
在这个五条腿的"干净定位"栈中,有两条腿在 RuFlo 仓库中已经真实存在且正在发布,无需任何新工作:
- "Meta LLM 治理推理、成本、租户与安全"—— 这是仓库中 meta-llm 网关既有的定位(
metallm_delegate/metallm_ask,见根目录 CLAUDE.md 的 "Gateway-Delegated Development" 章节),负责成本分层路由、计费额度消费、cwd 沙箱化的智能体子任务。 - "RuVector 提供本地记忆与语义状态"—— 已随 ruflo-ruvector 插件与
vector-engineer智能体发布,基于 HNSW/RaBitQ 的 AgentDB 记忆。
因此,ADR-380 的范围被严格限定在 RuFlo 自己真正需要的两条新腿,以及一个可选层:
- AGNTCY 身份标识 + SLIM 传输的协调(§2)
- CASA 强制执行的授权(§3)
- 可选的 IOC Layer 9 协调事件(§4,叠加而非替代)
- AGNTCY 语义可观测性(§5)
@claude-flow/agntcy包与 Rustruflo-agntcycrate(§6)
ADR 还确认了一个前提事实:仓库范围内此前对 AGNTCY、Outshift、OASF、CASA、SLIM、Mycelium 的引用数为零,这是一片真正的绿地(greenfield),而非既有工作的缺口。
决策一:可选、可移除的增强 —— 遵循 ADR-150,而非 ADR-321
这是整套集成的架构约束根基。与 metaharness(ADR-321 硬依赖例外,因其是项目自己的兄弟工具且有既定信誉)不同,AGNTCY/SLIM/CASA/IOC 是早期阶段、外部治理(Cisco Outshift 主导、Linux Foundation 背景)的协议,RuFlo 无法控制其演进。
因此 ADR-380 引入的每个新包(TS 侧@claude-flow/agntcy与/或 Rustruflo-agntcycrate)必须满足四条硬性约束,逐字镜像 ADR-150 的架构约束规则:
- removable(可移除):删除全部 AGNTCY 相关代码后,CLI 其余部分必须照常工作;
- optional-only(仅可选):所有 AGNTCY 相关包必须位于
optionalDependencies,绝不能进dependencies; - graceful degradation(优雅降级):每一条触碰 AGNTCY 基础设施的代码路径都必须捕获
MODULE_NOT_FOUND/ 连接拒绝,并回退到今日的本地传输与既有工具授权模型; - CI-gated(CI 门禁):必须通过一个"未安装 AGNTCY 也能工作"的冒烟测试。
这套约束在源码中有完整落地的对应实现。核心入口是 CLI 侧 runtime.ts 中的detectAgntcyRuntime():
- 先检查环境变量
RUFLO_AGNTCY_SLIM_ENDPOINT(常量AGNTCY_ENDPOINT_ENV)是否存在,不存在直接返回configured: false; - 存在时对可选依赖包做动态
import()(AGNTCY_PACKAGE_NAME = '@agntcy/slim-bindings')。之所以必须是动态导入,是因为静态import会在包缺失时导致@claude-flow/cli构建失败——这正是 ADR-150/ADR-380 明令禁止的; - catch 分支区分
ERR_MODULE_NOT_FOUND/MODULE_NOT_FOUND(报告"未安装")与其他任何错误(保留真实原因用于诊断),无论哪种都优雅回退到本地传输。
对应的测试 agntcy-commands.test.ts 明确断言了这套契约:未设置环境变量时报告 not configured;包缺失时仍然优雅降级;无论环境变量形态如何detectAgntcyRuntime永不抛异常。
决策二:SLIM 传输用于分布式协调 —— 本地传输仍是默认
ADR-380 新增三个rufloCLI 动词:
ruflo transport use slim ruflo agent publish ruflo swarm join cognitum/research/securityruflo transport use slim:将活动的 swarm/hive-mind 传输从当前进程内/本地 hooks 路由切换到 SLIM。SLIM 是 Rust 实现的 MCP/A2A 安全消息协议,具备分层路由、可靠投递、组成员资格、MLS 端到端加密,以及 JWT/mTLS/SPIFFE/WebSocket/Unix-socket 认证。它面向跨主机或跨 Cognitum 租户边界协调的智能体。ruflo agent publish:把 AGNTCY 标识、OASF 描述的智能体记录(构建期由 metaharness 配套 ADR-240 §2.1/2.2 产出)发布到配置的 Directory。ruflo swarm join <namespace>:加入一个按 Cognitum 租户/项目命名空间限定的 SLIM 组成员通道。
关键约束:单主机 swarm 保持本地传输为默认。原简报明确指出,SLIM 基础设施在单主机场景下会带来不必要的运维成本,而仓库已有一条可用的本地协调路径(swarm_init/hive-mind_*MCP 工具、分层网格防漂移拓扑),绝不能在常见场景中退化。
估计工作量:15–25 天。
源码佐证:Transport trait 与 LocalTransport/SlimTransport
Rust crate transport.rs 提供了这一决策的底层实现:
- 定义
Transporttrait:send(&self, channel, payload) -> Result<(), TransportError>与recv(&self, channel) -> Result<Vec<Vec<u8>>, TransportError>,实现要求可跨线程使用(方法接收&self)。 LocalTransport是真实可用的默认实现:进程内/回环,消息按通道在内存中 FIFO 排队,recv会排空通道,通道彼此独立,零外部依赖、零网络访问。内置测试覆盖空通道返回空Vec、send/recv 往返、排空语义、通道独立性。SlimTransport是slimCargo feature(默认关闭)后的刻意桩实现:由于 crates.io 上尚无可发布的agntcy/slimRust crate(ADR-380 脚手架期间核实),其send/recv返回显式的TransportError::Unavailable,附带可操作信息("pending upstream agntcy/slim Rust crate publication, see ADR-380"),绝不静默成功或伪造网络行为。测试断言该错误信息包含 "SLIM" 与 "ADR-380"。
这种"真实本地实现 + 显式不可用桩"的组合,让下游代码今天就能针对Transporttrait 编写,待上游 crate 发布后直接替换。
CLI 侧的行为契约
v3/@claude-flow/cli/src/commands/agntcy 下的命令实现与测试共同定义了三个动词的行为边界:
transport use子命令:未配置时不抛异常、exit 0,返回{ transport: 'local' }并打印AGNTCY_NOT_CONFIGURED_MESSAGE;但不支持的传输名或缺少参数属于用法错误,exit 1(不回退)。agent publish:先本地校验 OASF 记录形状(validateOasfRecordShape要求name、version等字段),未配置时published: false+ exit 0;manifest 缺失或 JSON 合法但非 OASF 记录则 exit 1。swarm join <namespace>:validateNamespace接受斜杠分隔的字母数字命名空间(cognitum/research/security、single-segment均合法),拒绝空串与bad namespace!、cognitum//security等畸形输入;未配置时joined: false+ exit 0 回退本地协调。
决策三:CASA 意图域授权强制 —— 整个集成中唯一不可妥协的设计约束
MetaHarness(配套 ADR-240 §4)把用户目标编译成一个有界授权信封(bounded authority envelope)。RuFlo 的角色是在每一次工具调用前强制该信封:
{ "objective": "review repository security", "allow": ["repository.read", "tests.execute"], "deny": ["git.push", "secret.export", "deployment.create"], "budget_usd": 8, "expires_at": "2026-07-30T22:00:00Z" }三层职责划分:
- Meta LLM强制
budget_usd与 provider 策略——这是其既有职责;新工作只是把信封的预算字段接入现有metallm_delegate/metallm_ask成本治理路径,而非发明新的预算机制。 - CASA在网络/工具权威层强制
allow/deny/expires_at——这是全新的:一个放在每次 MCP 工具调用与每次Agent/Task分发之前的确定性门禁,在分发前检查,绝不在分发后。 - RuFlo把每个决策记录进签名收据(signed receipts)——扩展仓库既有的签名清单先例(
ruflo-core的witness-curator、ADR-103 风格的修复证明模型),从发布期修复状态下沉到逐调用授权决策。
不可妥协的约束:强制阶段绝不询问 LLM
ADR-380 明确点名整个集成最大的失败模式:
意图到信封的翻译可以使用 LLM(那是 MetaHarness 的工作)。强制——在调用时检查某动作是否被允许——必须永远不询问模型,而是用确定性代码检查一个有界 schema(显式资源串、显式 deny 列表、数值预算、过期时间戳),deny-by-default。
实现中没有任何代码路径允许 LLM 的运行时判断替代编译后信封的allow/deny列表。启用 CASA 强制作为任何租户默认之前,必须用显式的绕过尝试测试(bypass-attempt tests)验证,而非仅靠翻译质量测试。
估计工作量:15–25 天(与配套 ADR-240 的编译端共享:schema 与翻译质量测试在那边;接线、强制、绕过测试与收据在这边)。
源码佐证:schema / compile / enforce 三件套
TS 插件 ruflo-agntcy/src/casa 用三个模块完整实现这一决策:
schema.ts—— 信封的 Zod schema(CasaEnvelopeSchema),遵循仓库"在系统边界校验用户输入"的安全惯例:
objective:非空字符串;allow/deny:非空资源域字符串数组(刻意用string而非枚举,因为域集合开放,由目标 CASA 兼容网络治理);budget_usd:正数;expires_at:必须带显式 UTC/偏移标记(Z/z或±HH:MM)的 ISO 8601 时间戳。- 时区要求有充分理由:
Date.parse()对无偏移 ISO 串会按宿主机本地时区解析,两台TZ不同的机器会对同一名义时间戳静默产生分歧。这镜像了 Rust 参考实现(见下文)"拒绝无时区时间戳而非猜测"的行为。
compile.ts—— 确定性、基于规则表(RULE_TABLE)的意图编译器compileIntentToEnvelope:
- 默认值:
DEFAULT_TTL_MINUTES = 60、DEFAULT_BUDGET_USD = 5。 - 危险域常量
DANGEROUS_SCOPES = ['git.push', 'secret.export', 'deployment.create'],与 ADR-380 示例信封的 deny 列表逐字对应。 - 规则表刻意保持小而显式:
review|reading|audit|analy|scan|check类词 →repository.read;test词 →tests.execute;security词 →repository.read+tests.execute(镜像示例中的 "review repository security" 工作示例)。 - 对抗性审查打磨:裸词 "push" 只有与 git 对象名词(commit/branch/repo/code)或字面 "git push" 共现才授予
git.push,避免 "push notification"、"push back on..." 误授权;"deploy/publish/release" 必须与部署目标名词或版本号(v2.0)共现才授予deployment.create,避免 "release notes"、"publish a blog post" 误授权;secret.export要求显式 "export secrets/credentials" 措辞。 - 提供
CasaTranslator扩展点(translator参数)作为未来 LLM 编译器的指定接缝,但模块自身从不调用 LLM、从不发起网络请求;即使调用方接入 LLM 翻译器,其输出也会被重新用CasaEnvelopeSchema校验,无法产出结构性非法信封。 - 编译结果保证
allow与deny永不同时包含同一域(危险域若因目标显式命名进入 allow,会从 deny 移除)。
enforce.ts—— 承载文档中逐字重申的承重不变量的纯函数checkAuthorization:无 I/O、无网络、无随机性、不调用任何模型。求值顺序(首中即停):
- 信封未通过 schema 校验 → 拒绝("invalid envelope...");调用方传入结构畸形信封(如
allow是裸字符串而非数组)会被直接拒绝,防御String.prototype.includes与Array.prototype.includes的子串/精确匹配陷阱; - 过期时间不可解析,或
now >= expires_at→ 拒绝("expired",fail closed,严格"过期前有效"语义); - 在
deny中 → 拒绝("explicit deny",deny 永远赢过 allow,这是 ADR-380 明确要求测试的绕过场景); - 不在
allow中 → 拒绝("not in allow list (deny-by-default)"); - 否则 → 放行。
nowIso参数化(默认new Date().toISOString())使函数成为输入的纯函数,便于测试。
Rust 侧参考实现:双端逐位一致
v3/crates/ruflo-agntcy/src/envelope.rs 提供与 TS 端字段逐一对齐的CasaEnvelope与同算法check_authorization:
- 三道门(过期 → deny 列表 → allow 列表)顺序与 TS 端完全一致;deny 在同时出现在两个列表时胜出。
parse_rfc3339_to_epoch_seconds从零实现(无 chrono/time 依赖,crate 仅依赖 serde/serde_json,符合 ADR-380 §6 的轻依赖约束),采用 Howard Hinnant 的days_from_civil算法;对任何畸形输入(包括无时区时间戳)返回None,强制端视为已过期(deny-by-default 延伸到畸形输入)。- 内置测试覆盖:Unix 纪元解析、已知时间戳(
2026-07-30T22:00:00Z= 1785448800)、正/负时区偏移等价性、小数秒、拒绝无时区串、拒绝垃圾输入。
ADR-380 明确要求 TS 端与 Rust 端在承重边界上逐位一致——例如now >= expires_at的严格"过期前"语义两端相同。
签名决策收据:CASA 审计轨迹
receipts/casa-receipt.ts 实现"每个决策记入签名收据":
- 追加式 JSONL 日志,默认路径
.swarm/casa-receipts.jsonl(DEFAULT_CASA_RECEIPT_PATH),镜像 ADR-150 Phase 2 的router-parallel-recorder.ts每决策一行的模式,但每一行都是 Ed25519 签名(无签名遥测 vs 安全相关审计记录的差别)。 - 签名方案:使用
@noble/ed25519(仓库既有硬依赖,而非node:crypto),匹配 ADR-126 签名制品家族(plugins/ruflo-neural-trader/src/signed-artifact.ts等)的惯例;规范字节 = 对收据体JSON.stringify(不含schema/publicKey/signature字段,无空白、无键排序,CWE-347 模式);sha512Sync经node:crypto显式接线(与 federation 插件一致的ed.etc.sha512Sync一行接线)。 - 密钥持久化镜像
v3/@claude-flow/plugin-agent-federation/src/plugin.ts的模式:.claude-flow/agntcy/casa-receipt-key.json(十六进制privateKey/publicKey,目录 0o700、文件 0o600),首次使用ed.utils.randomPrivateKey()生成并持久化;持久化失败时回退到内存临时密钥(仍是真实 Ed25519 加密,只是不跨重启)。 - 验证安全:生产环境必须钉住调用方提供的受信公钥(绝不单独信任收据自述的
publicKey字段,CWE-347 提醒),仅在本地检查/测试场景才回退到内嵌密钥。 - 与 router-parallel 记录器不同,此模块绝不静默吞掉写入失败——CASA 收据是安全相关审计记录,追加失败以抛错形式呈现。
配套测试 casa-receipt.test.ts 验证签名、验签与追加流程。
决策四:IOC Layer 9 认知信封 —— 可选的协调事件,而非替代品
在 MCP/A2A 之上支持 Cisco 的语义协议——语义信息交换(Semantic Information Exchange)、认知与互操作(Cognition and Interoperability)、语义对齐广播(Semantic Alignment Broadcast)、基于轮询的组队(Team Formation via Polling)——作为可选的 RuFlo 协调事件,叠加在现有 swarm/hive-mind 协调(hive-mind_broadcast、hive-mind_consensus、coordination_consensus)之上。
两条原则:
- 绝不替代 RuFlo 自己的编排——它是叠加项,符合仓库既有的反漂移偏好(默认由 RuFlo 自有的分层协调负责)。
- 原生 Rust 实现作为对上游
outshift-open/ioc-protocols-models的真实贡献,而非私有 fork——与项目对其他所依赖上游生态的一贯姿态一致。
Schema 为 Apache-2.0,已有 Python 与 Go 绑定。估计工作量:10–15 天。
决策五:AGNTCY 语义可观测性 —— 仅运行时才存在的跨度
将 RuFlo 跨度与 Flywheel 风格收据映射到 AGNTCY 的 OTel 扩展属性上,共十个:
agent.identity、agent.capability、agent.intent、agent.parent、coordination.episode、authorization.decision、model.route、memory.provenance、evaluation.score、receipt.hash
所有权按"值何时可知"划分(配套 ADR-240 §2.3 显式委托的正是这两个运行时属性):
- MetaHarness(构建/清单期)拥有八个在智能体被编译/描述后即存在的属性:
agent.identity(AGNTCY 颁发的身份)、agent.capability(声明的工具/能力面)、agent.intent(编译后的目标,OASF 清单字段)、agent.parent(血缘/父智能体引用)、model.route(服务调用的是哪个模型层)、memory.provenance(RuVector/AgentDB 出处指针)、evaluation.score(harness 记分卡/GEPA 评估结果)、receipt.hash(签名运行收据的内容哈希)。 - RuFlo(运行时)拥有两个只在 SLIM 传输或 CASA 强制激活后才存在的属性——它们描述的是本次协调回合与本次授权决策,构建期无从知晓。
源码落在 otel-attributes.ts:
AGNTCY_SPAN_ATTR_COORDINATION_EPISODE = 'coordination.episode':跨度所属的 SLIM/hive-mind 协调回合(swarm 运行、hive-mind 共识轮、ruflo swarm join <namespace>会话),仅在 SLIM 传输激活时才有意义。AGNTCY_SPAN_ATTR_AUTHORIZATION_DECISION = 'authorization.decision':CASA 授权检查的结果,无论放行还是拒绝都设置——被拒绝的跨度同样需要该属性,否则 trace 无法显示调用为何未继续。AGNTCY_RUFLO_OWNED_SPAN_ATTRS提供枚举便利数组。- 模块刻意不重新导出MetaHarness 拥有的那八个属性名——两处都定义会让两份 ADR 漂移失同步,配套 ADR-240 包才是那些常量的单一事实源。
接线要求:通过现有 ruflo-observability 插件(observe-trace/observe-metricsskills)发射,ADR-380 §5 明确禁止为此新建第二条 tracing 管线。估计工作量:5–8 天(与 ADR-240 §2.3 共享条目)。
决策六:@claude-flow/agntcy包与 Rustruflo agntcycrate
镜像 metaharness 的兄弟包模式(@metaharness/darwin、@metaharness/redblue)与本仓库自身的插件包惯例(plugins/ruflo-*):采用隔离的可选包,而非把代码折叠进@claude-flow/cli,这样决策一的"可移除"约束就有了干净的边界可供强制。
Rust crate 特别针对 SLIM(本身即 Rust)与原生 IOC Layer 9 实现(§4)——这些都是天然的 Rust 面,而非 TypeScript 面。这是独立于任何工作站级偏好的良好技术匹配,因为 SLIM 自身的实现语言就是 Rust。现有 Rust CI 管道(.github/workflows/federation-peer-rust.yml)是优先扩展对象,而非从零搭建第二条 Rust CI。
crates/ruflo-agntcy 的实际形态(lib.rs):
- CASA 强制(
envelope模块):总是编译、总是纯函数,是分发前检查 MetaHarness 编译信封的确定性 deny-by-default 门禁,从不调用模型; - SLIM 传输(
transport模块):真实可用的LocalTransport(今日默认,进程内/回环)+slimCargo feature 后的SlimTransport桩,因为 crates.io 上尚无agntcy/slimRust crate 发布。 - 默认构建路径中没有任何东西依赖该 crate;关闭
slimfeature(默认)即保持 crate 不依赖任何未发布的上游包——这正是 §1 可移除约束的 Rust 侧体现。
决策七(补充):两个上游 Bug 的发现、纠正与修复实录
ADR-380 附有两段诚实的"更新"记录,本身就是值得引用的工程案例。
第一段纠正(2026-07-31):ADR 原文及其附带代码(PR #2879)曾断言"任何合理名称下都不存在 AGNTCY/SLIM/Outshift npm 包"——这是错的,且按仓库的诚实文档规范,以更新段形式纠正而非静默改写历史。原始检查只试了猜测的带作用域名称(@agntcy/slim、@agntcy/dir)得到 404。真实包是:
@agntcy/slim-bindings(npm,v1.4.1 stable / v2.0.0-alpha.4)——真实 SLIM Node.js 绑定,文档化的用途正是 §2 需要的纯 Node 场景。现在已在runtime.ts的AGNTCY_PACKAGE_NAME中正确命名,并声明在optionalDependencies。agntcy-dir(npm,v1.5.0)——真实 Directory JS/TS SDK,配套 ADR-240 §2.2 用它做过真实、实测的 push/publish/lookup(本地运行 Go apiserver + zot + postgres 的 Directory 服务器)。
当时 SLIM 仍无法实测连接,原因是真实且验证过的上游打包缺陷:传递依赖uniffi-bindgen-react-native把原始未编译 TS 作为 package.jsonmain发出、无构建产物,只能在打包器(Metro)内工作,纯 Noderequire/import下失败(ERR_UNSUPPORTED_NODE_MODULES_TYPE_STRIPPING,已直接复现)。已上报上游(agntcy/slim#1916 与根因 jhugman/uniffi-bindgen-react-native#422)。detectAgntcyRuntime()既有的优雅降级设计零代码改动就正确处理了这一场景——catch-all 分支暴露真实错误并回退本地传输。
第二段更新(2026-07-31 part 2)——两个 bug 均已解决,SLIM 现已实测连通:
- agntcy/dir#1943 实为 RuFlo 侧自己的 bug:维护者 @akijakya 定位到真实原因——推送到 Directory 的记录声明
schema_version: '0.8.0',而发送的 skill id/name 源自 OASF1.1.0的 taxonomy;服务器按记录自声明的版本校验 skill,于是所有 1.1.0 派生的 id/name 都被按 0.8.0 校验并正确拒绝。id=60101"碰巧成功"只是巧合(0.8.0 在该数值槽位有一个无关 skill "indexing")。把配套 metaharness 包中的schema_version修正为'1.1.0'后完全解决——实测全部 9 个此前"损坏"的 id 现在都能推送。 - agntcy/slim#1916 现已可连通:SLIM 维护者确认已在
alphadist-tag(2.0.0-alpha.4+)从uniffi-bindgen-react-native迁移到@ubjs/core/@ubjs/node(编译产物),尚未提升到latest。实测成功:对@agntcy/slim-bindings@2.0.0-alpha.5的真实服务器拉起 + 客户端连接 + 优雅关停,纯 Node 下零错误。package.json刻意钉住该精确版本(非 caret 范围——这是预发布通道),直至修复提升到latest。detectAgntcyRuntime()依旧零代码改动,两端方向都被既有设计正确处理;RUFLO_AGNTCY_SLIM_ENDPOINT设置时现已返回configured: true,是实测而非理论。
插件 README.md 的诚实缺口声明同样值得注意:AGNTCY Identity 没有 JS/TS SDK(实测确认 Go-only),且插件的 CASA 策略编译器是真实、经过测试的实现,但强制仍按 ADR-380 §3 存在于运行时层,绝不在编译器内。
后果与风险
正面后果:
- "干净定位"栈五条腿中两条已真实存在、零新工作,本 ADR 只需建设两条新腿(AGNTCY 标识的执行/协调、CASA 强制的权威)加可选 IOC 层;
- SLIM 的选择式设计(§2)意味着单主机 swarm——今日压倒性的常见场景——零行为变化、零新增运维成本;
- 把既有 witness/收据签名先例扩展到逐调用 CASA 决策,复用了仓库已信任的模式,而非发明第二种审计日志格式。
负面/风险:
- CASA 强制一旦启用就是每次工具分发前的新强制门禁——此处的 bug 是安全回归,而非功能 bug;需要 §3 的"强制无 LLM 循环"测试纪律,经显式绕过尝试测试验证后才可为任何租户默认启用;
- SLIM 引入新的 Rust 依赖面与仓库今日不运营的新网络拓扑(组成员资格、MLS 加密)——真实运维学习曲线,通过 §1/§2 的严格选择式设计缓解;
- AGNTCY/Outshift 生态不成熟风险,与配套 ADR-240 相同的告诫:上游规范稳定过 1.0 之前,所有新包都按可选、带版本处理,绝不作为承重依赖。
被否决的备选方案
- 自建 CASA 等价物作为仅限 ruflo 的专用授权层,而非采用 CASA:否决。仓库已有
claims_*/AuthScope 机制(claims-authorizer智能体),但 CASA 描述的意图域、带预算与过期的信封是那套机制目前未覆盖的真实能力缺口;在有新兴标准时另建第二套专用方案,是用当下的小集成成本换取日后更大的对账成本。 - 立即把 SLIM 设为默认传输:否决。按简报自身明确指引,单主机协调(仓库今日绝大多数实际用法)不值得该运维成本。
- 把 IOC Layer 9 视为 RuFlo 自有 hive-mind/swarm 编排的替代品:否决。明确限定为叠加的可选协调事件,与仓库既有"默认由 RuFlo 自有分层协调负责"的反漂移偏好一致。
验收测试
与配套 ADR-240 共享:生成一个 MetaHarness 智能体 → 发布其签名 OASF 记录(ADR-240)→ 从第二个网络经 Directory 发现它(ADR-240)→ 验证其 AGNTCY 身份(ADR-240 §2.1)→ 通过 SLIM 调用它(本 ADR §2)→ 通过 CASA 拒绝一次越界工具调用(本 ADR §3,使用 ADR-240 §4 编译的信封)→ 从 OpenTelemetry 跨度与 Flywheel 收据重建完整运行(本 ADR §5 + ADR-240 §2.3)。
悬而未决的问题
ruflo transport use slim应该是按 swarm 的设置还是全局会话默认?(倾向:按 swarm,与按租户的 SLIM 组成员资格一致。)- 既有
claims_*AuthScope 机制最终会被 CASA 信封吸收,还是保持并行(claims = 智能体间内部授权,CASA = 用户意图到网络的授权)?值得在 §3 上线、重叠(或无重叠)可具体观测后,单独开一个后续 ADR。 - Rust
ruflo agntcycrate 放在哪里——新的顶层包,还是并入既有 federation-peer-rust 面(那边 CI 管道已存在)?
关键参考路径索引
- 本文主体:ADR-380(
plugins/ruflo-agntcy/docs/adrs/下另有同一 ADR 的插件副本 ADR-380) - 插件总览与状态:plugins/ruflo-agntcy/README.md
- CASA 三件套:schema.ts、compile.ts、enforce.ts 及测试 compile.test.ts、enforce.test.ts
- 签名收据:casa-receipt.ts
- OTel 属性:otel-attributes.ts
- Rust crate:envelope.rs、transport.rs、lib.rs
- CLI 运行时检测:runtime.ts 与冒烟测试 agntcy-commands.test.ts
- 遵循的先例:ADR-150(可选/可移除增强)、ADR-321(显式不遵循的硬依赖例外)、ADR-103(witness/签名先例)
- 可观测性接线:ruflo-observability 的
observe-trace/observe-metricsskills - 状态技能:agntcy-status/SKILL.md(当前为脚手架桩,须如实报告"未配置"而非虚构健康状态)
【免费下载链接】ruflo🌊 The original agent meta-harness. Deploy intelligent multi-player swarms, coordinate autonomous workflows, and build conversational AI systems. Features adaptive memory, self-learning intelligence, RAG integration, and native Claude Code / Codex / Hermes and many more Integrated项目地址: https://gitcode.com/GitHub_Trending/cl/ruflo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考