Memories / 文档

本页目录

卡片类型与自定义字段

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 解码器不认识新增成员。

完整结构与示例见英文指南。