卡片类型与自定义字段
Memories 的所有知识卡片都支持有序的类型化字段,同时保留标题、正文、标签和关系。
内置类型为 note(笔记)、contact(联系人)、link(链接)、snippet(代码片段)、
checklist(清单)、event(日期与事件)和 credential(凭据)。类型提供初始字段,
不会限制卡片添加其他字段。
数据结构
Content.card_type 为可选字符串:内置名称或自定义模板 ID。
Content.fields 为有序数组,每个字段包含 id、name、kind、value,以及可选 options。
重命名和排序不会改变字段 ID。缺省值为 null;敏感字段在普通输出中也用 null 隐藏值。
| 字段种类 | 值 |
|---|---|
text、multiline、sensitive |
字符串 |
number |
JSON 数字 |
date |
有效日期,格式 YYYY-MM-DD |
url |
HTTP 或 HTTPS 绝对网址 |
email、phone |
验证后的字符串 |
checkbox |
JSON 布尔值 |
single_select |
options 中的一个字符串 |
multi_select |
options 中不重复的多个字符串 |
选择字段必须有非空且不重复的 options,其他字段不能附带选项。
每张卡片最多 64 个字段,ID 必须唯一,名称和值都有长度限制。
加密与验证
整个卡片版本沿用保险库加密。普通卡片的敏感值从 fields 移到内部结构化
field_body,该字段与凭据正文一样位于加密版本中。Base64url 只是编码,不是加密。
普通列表、读取和字段查看均不返回 field_body,敏感值显示为 null。
敏感值不进入卡片正文、检索缓存或版本差异输出。
CLI 或移动端的显式显示需要提权;MCP 需要 allow_all 授权、明确显示意图和简短理由。
明文交付之前会持久化审计意图,MCP 不继承终端提权。
移动端的字段显示必须通过系统生物识别或 PIN 验证,即使关闭了可选快捷解锁;
取消验证或系统验证不可用时不会获取敏感值。桌面浏览器没有密码或敏感值显示接口;
请使用验证后的原生应用或 CLI 操作敏感值。
可复用模板
自定义模板以私有、加密、签名的卡片版本保存,带有 type_template 元数据。
模板沿用保险库授权、历史、冲突处理和设备/云盘加密同步,不使用独立的未签名数据库。
普通列表和检索排除这些模板。内置模板不能修改或删除。
从已有卡片创建模板时敏感默认值被隐藏;直接提交非空敏感默认值会被拒绝。
修改或删除模板不重写已有卡片,已有卡片仍然保留自己的字段。
memories type list VAULT
memories type create VAULT Project --from-card CARD
memories type show VAULT TYPE
memories type update VAULT TYPE Project --fields template-fields.json
memories type delete VAULT TYPE
memories card create VAULT --title Ada --type contact
memories card field add VAULT CARD Team --id team --kind text --value Core
memories card field set VAULT CARD team Platform
memories card field rename VAULT CARD team "Working team"
memories card field mv VAULT CARD team 0
memories card field rm VAULT CARD team
memories card field list VAULT CARD
memories sudo
memories card field add VAULT CARD Key --kind sensitive
memories card field list VAULT CARD --reveal
守护进程和客户端须使用同一专用 home。敏感值只能通过终端隐藏提示输入,不能作为参数。 数字、布尔值和多选值使用 JSON 语法。模板 ID 也使用列表返回的短 ID。
服务、移动端与托管模式
共享 JSON/C ABI 提供 type_list/show/create/update/delete、card_create、
card_fields 和 card_field。字段操作使用 operation.action 的
add/remove/reorder/rename/set,排序下标从零开始。
MCP 使用 card_field_add/remove/reorder/rename/set 工具;显式显示工具为
card_field_reveal,要求单个 field ID、intent: "reveal_plaintext"、简短 reason 和 allow_all,
不允许 MCP 一次显示整张卡片的全部敏感值。
普通守护进程 MCP 的敏感修改需要独立验证的 allow_all capability,不会创建终端提权会话。
原生表单还使用 replace 原子保存有序字段数组,保留未修改的隐藏敏感值。
Flutter 通用编辑器提供类型选择、各种字段输入、重命名、删除和拖动排序,继续通过
memories_call 调用 Rust,不复制存储或加密实现。托管入口复用表单并保留服务器可读警告。
托管 SaaS 的操作受 bearer 对应的保险库和 scope 限制。e2e 卡片禁止非空敏感字段和
field_body;原始写入及字段修改都会拒绝敏感明文。非敏感描述符仍可修改。
配对设备表单在客户端生成 {"memories.card":1,"meta":...,"body":...},
敏感值只在 body.sensitive 中,随后通过设备密封加密发送。Center 只收到密封信封。
配对设备可用 memories device sealed-get --vault V --card C --field FIELD --reveal 读取字段。
旧数据兼容
缺少新字段的旧 JSON 仍可读取:无类型卡片视为 note,正文不变。
旧凭据视为 credential,非敏感元数据映射为普通字段,秘密正文映射为敏感字段。
凭据字段修改沿用结构化凭据正文,复制、OTP 和注入消费者继续可用。
二进制旧凭据拒绝通用文本字段迁移,不会丢弃原始字节;历史版本均保留。
交换新格式卡片之前请升级所有设备,旧程序的严格 JSON 解码器不认识新增成员。
完整结构与示例见英文指南。