概述
Card 是 MOOLLM(位于 simhacker/moollm)中的可移植能力、身份与访问令牌,以 CARD.yml 文件形式呈现。卡片是模板,将其“投入游玩”(放入房间)即可激活。
名称 Card 横跨多个经过验证的计算概念,MOOLLM 的 CARD 位于这些概念的交汇处并有意识地借用每一者:
- HyperCard(Bill Atkinson,1987):卡片是自包含的可导航单元,带字段、按钮和脚本,可翻页、链接与堆叠。
- 类型库 / IDL / ActiveX / OLE Control(微软,1990 年代):描述对象接口的分发元数据(方法、属性、事件、ID)。
- Actor(Hewitt 1973;Agha 1986):拥有自身状态、接收消息的自主实体。
- 线程 / 进程:具有自身身份、生命周期和可分发表面的控制单元。
- 消息分发面(Smalltalk/Self/Objective-C):方法不是被调用,而是消息被发送,接收者决定如何响应。
- 交易卡 / 扑克牌:身份与能力的可移植令牌,可收集、打出、交易。
- 名片 / 索引卡:可嗅探的界面,交予他人即知你是谁、如何联系、能做什么。
当你遇到一个 CARD.yml,同时看到的是:一个可分发接口定义、一个可导航激活的 HyperCard、一个带本地状态的消息接收实体签名、分布式且人类可读的注册表条目、一个带稀有度与可移植性的可收集令牌,以及一张递给读者(人或 LLM)的名片。
架构核心:激活触发器
关键洞见:卡片是激活触发器,不是激活处理器。 这是 MOOLLM 卡片设计中最重要的概念。
| CARD.yml | SKILL.md | |
|---|---|---|
| 目的 | 决定该技能是否适用 | 说明如何执行 |
| 角色 | 激活触发器 | 激活处理器 |
| 内容 | 可嗅探接口 | 完整文档 |
| 大小 | 约 150–200 行 | 按需 |
| LLM 读取时机 | 首先读取,用于决策 | 激活后其次读取 |
CARD 提问“此情境是否需要我?”;SKILL.md 回答“实际该怎么做”。
仅含 CARD(无 SKILL.md)的目录本身已是可分发的一等对象。CARD 不是技能文档,它就是技能的接口、Actor、卡片、类型库与名片合一的 YAML 文件。
推荐章节顺序
为便于 LLM 扫描,建议按以下顺序组织:
- 身份(card: id、name、emoji、tagline、description)
- 文件索引(files:)
- K-lines(激活的概念)
- invoke_when(触发条件)
- advertisements(主要!放在 methods 之前)
- methods(仅签名)
- state(简要字段列表)
- documentation 指针
广告是主要激活信号:LLM 自上而下扫描寻找“是否适用”,广告直接回答该问题。将广告前置可加快技能选择。
内容放置规则
放入 CARD.yml(可嗅探接口):简要描述与标语、文件索引、K-lines、广告(主要)、方法签名(一行)、简要状态模式(仅字段名)、文档指针。
移至 SKILL.md:实现细节、带序列的详细协议、分发表、对话示例、带类型的完整状态模式、示例。
examples/ 目录:使用描述性文件名的独立文件(如 ceremony-invocation.yml),避免无描述性名称。
方法与内容放置细则
- 短签名 → CARD 的 methods
- 琐碎内联(buff、reply、简单提示)→ 广告中嵌入
- 详细协议(序列、表格)→ SKILL.md
- 多变体 → SKILL.md
- 分发表(actor_verb_target)→ SKILL.md
目标大小:CARD.yml 约 150–200 行;若超过 300 行则应重构。
什么是卡片
卡片是可携带、赠予、打出和激活的可移植令牌。CARD.yml 位于多种卡片传统的交汇处:PC 板卡(槽位/接口)、HyperCard(可导航内容单元)、扑克牌(可组合、可打出)、万智牌(能力、费用、类型、组合)、宝可梦(带属性与进化的角色)、Fluxx(改变规则本身)、塔罗(原型符号与提示)、名片(联系与凭证)、钥匙卡(访问令牌)、Hollerith 卡(作为物理产物的数据)。
Sidecar CARD.yml 模式
任何位于目录中的实体都可拥有一个 sidecar CARD.yml 使其可卡片化。例如 pub/ 目录下同时有 ROOM.yml 和 CARD.yml,使酒馆成为可玩卡片;characters/don-hopkins/ 下同时有 CHARACTER.yml 和 CARD.yml。
Sidecar 的优势:关注点分离(实体定义与卡片表示)、可选、可组合、可移植。
激活记录
打出卡片即创建激活记录——带持久状态的实例化方法。卡片可拥有任意数量的方法(类似 Self 对象);LLM 从上下文推断隐式参数(POSTEL);卡片可仅有状态而无方法;激活生命周期为 pending → in_progress → completed;激活暴露可供他人按下的按钮;房间可与在场卡片互动;卡片可互相触发方法。
Fluxx 卡片:改变规则
受 Fluxx 启发,部分卡片可修改游戏本身:可改变 room.rules、可叠加效果、支持元 Fluxx(对规则本身的规则)、可广告移除动作。这使 MOOLLM 成为可自我修改的游戏。
数据流合奏
卡片可包含生成器、转换器与消费者的协调合奏:组件通过兼容的输入/输出自连线(POSTEL 绑定);采用 Factorio 式带容量、溢出和背压的队列;可用自然语言描述连线;卡片跟踪合奏健康度与瓶颈。
卡片广告
如同房间中的对象,卡片广告其能做什么。处于库存中时广告可见但优先级较低;在房间中打出时,卡片的广告与房间对象合并,最佳动作无论来源如何都会胜出;多张卡片时所有广告竞争,最适合当下的工具浮到顶端。
K-lines 为何安全
真实人物的卡片无需代理抽象。一张“Dave Ungar”卡片并不冒充 Dave Ungar,而是激活其传统:Self 语言、基于原型的继承、ITS-ABOUT-TIME 编译哲学、消息传递纯粹性。这如同引用某人的工作,而非假扮其人。