Memory
跨会话的长期记忆 — 搜索、读取、保存。Memory 技能为 CLI-JAW 提供持久化的回忆能力,包括用户偏好、项目决策以及跨越单次对话的持久知识。
快速参考
| 技能名称 | memory |
| 状态 | 已激活(自动注入每个会话) |
| 类别 | 生产力 |
| SKILL.md 路径 | ~/.cli-jaw/skills/memory/SKILL.md |
| 数据目录 | ~/.cli-jaw/memory/structured/ |
| 依赖 | 无(无外部依赖) |
| 安装 | 预装(随 CLI-JAW 附带) |
| 作用域 | L1 实例本地(读写)+ L2 仪表盘(只读) |
| 嵌入搜索 | 可选,默认关闭 |
概述
memory 技能是 CLI-JAW 的持久化知识层。它使 AI 能够跨会话记住事实、偏好和决策,而不仅仅依赖对话上下文。每个会话都会自动注入 memory 技能 — 无需手动加载。
Memory 在两个作用域下运行:
L1 实例本地记忆
- 命令:
cli-jaw memory search/read/save - 所有操作的默认路径
- 仅限当前实例
- 读 + 写
- 用于所有保存操作
L2 仪表盘记忆
- 命令:
cli-jaw dashboard memory search/read/instances - 跨实例联合查询
- 多实例 / 多主机
- 只读
- 仅当用户明确请求跨实例数据时使用
仅当用户请求仪表盘记忆、所有实例、其他实例/主机或跨实例上下文时,才使用 L2 仪表盘记忆。其他情况一律默认使用 L1。
规则
Memory 技能遵循七条严格规则,规范何时以及如何使用记忆:
| # | 规则 | 详情 |
|---|---|---|
| 1 | 回答前先搜索 | 当被问及过往工作、决策或偏好时,在回复之前始终先运行 cli-jaw memory search <keywords>。 |
| 2 | 立即保存持久事实 | 用户偏好、关键决策和稳定的项目事实应在识别后立即保存。 |
| 3 | 使用结构化目标路径 | 优先使用 structured/profile.md、structured/semantic/... 或 structured/episodes/...,而非随意路径。 |
| 4 | 承认信息缺失 | 如果搜索没有返回结果,应回答"我没有相关记录。"不要捏造记忆。 |
| 5 | 仅保存稳定事实 | 不要保存临时待办事项、阶段日志或临时清单。只有持久性知识才应存入记忆。 |
| 6 | 广泛搜索 | 构建搜索查询时,考虑韩语/英语变体、错误代码、符号和文件名。 |
| 7 | 使用注入的上下文 | 提示中可能已包含任务快照;但当需要精确信息或确切措辞时仍应搜索。 |
命令
搜索
在记忆索引中搜索关键词。返回匹配的条目及其源文件路径。
# 基本关键词搜索
cli-jaw memory search "keyword"
# 搜索用户偏好
cli-jaw memory search "user preference"
# 搜索错误代码或技术术语
cli-jaw memory search "auth login 401"
# 搜索系统/服务相关术语
cli-jaw memory search "launchd plist service"
# 跨实例搜索(L2 仪表盘,只读)
cli-jaw dashboard memory search "cross-instance topic"
提示:广泛搜索。如果第一次查询没有返回结果,请尝试韩语/英语变体。例如,同时搜索"인증"和"auth"以匹配双语条目。
读取
读取特定记忆文件的完整内容,或其中的指定行范围。
# 读取用户档案
cli-jaw memory read structured/profile.md
# 读取语义知识文件
cli-jaw memory read structured/semantic/cli-jaw.md
# 读取情景记忆条目
cli-jaw memory read structured/episodes/live/2026-03-07.md
# 仅读取指定行(适用于大文件)
cli-jaw memory read structured/profile.md --lines 1-30
保存
将持久事实追加到记忆文件中。内容是追加写入,不会覆盖原有内容。
# 将用户偏好保存到档案
cli-jaw memory save structured/profile.md "- User prefers Korean UI and English code"
# 将技术事实保存到语义文件
cli-jaw memory save structured/semantic/cli-jaw.md "- Memory runtime uses task snapshots before response generation"
# 保存有时间标记的情景记忆
cli-jaw memory save structured/episodes/live/2026-03-07.md "## 16:30\n- Decided to remove query-provider setup from memory UX"
重要:仅保存稳定、持久的事实。"当前任务进度"或"临时调试笔记"等临时数据不应存入记忆。如有疑问,请考虑这个事实下周是否仍然有意义。
列表 & 初始化
用于检查和初始化记忆目录的实用命令。
# 列出所有记忆文件及其大小
cli-jaw memory list
# 初始化记忆目录结构(首次设置)
cli-jaw memory init
存储布局
记忆被组织为 ~/.cli-jaw/memory/ 下的结构化目录层级。每个子目录有不同的用途:
| 路径 | 用途 | 何时使用 |
|---|---|---|
structured/profile.md |
稳定的档案、偏好、长期项目上下文 | 用户偏好、工具设置、默认行为 |
structured/episodes/ |
按时间排序的情景记忆 | 会话结果、带日期的决策、有时限的事件 |
structured/semantic/ |
持久事实和提取的知识 | 技术知识、项目架构笔记、API 模式 |
structured/procedures/ |
可重用的工作流和规则 | 分步指南、部署流程、标准流程 |
structured/sessions/ |
可选的会话衍生记忆 | 从已完成会话中自动提取的洞察 |
structured/index.sqlite |
搜索索引 | 自动维护;为 memory search 提供支持 |
~/.cli-jaw/memory/
structured/
profile.md # 用户偏好和身份
index.sqlite # 全文搜索索引
episodes/
live/
2026-03-07.md # 每日情景条目
2026-05-29.md
semantic/
cli-jaw.md # CLI-JAW 相关知识
deployment.md # 部署流程
project-architecture.md # 架构决策
procedures/
release-checklist.md # 可重用的工作流
code-review-process.md
sessions/
session-2026-05-29-abc123.md # 自动提取的会话笔记
工作流
Memory 技能定义了四种标准工作流,规范在对话中如何使用记忆。
新对话
当新会话开始时:
1如果存在已注入的记忆上下文,则直接使用(系统可能会预加载相关记忆)
2如果任务依赖于先前的决策或偏好,则搜索记忆
3当需要精确措辞或详细信息时,读取相关文件
用户提到偏好
当用户表达偏好时(例如,"我喜欢用 Tab 而不是空格"):
1简要确认("好的,已记录。")
2保存到
structured/profile.md3如果是项目特定的,也保存到相应的语义文件中
用户问"你记得...吗?"
当用户询问之前是否讨论过某事时:
1运行
cli-jaw memory search "<keywords>"2如果找到,回答记忆中的事实并引用源文件
3如果未找到,说明没有已保存的记录并提议保存
重要会话结束时
当会话产生了重要的决策或结果时:
1保存持久性的决策或事实
2使用情景文件(
episodes/)保存有时间标记的结果3使用语义或档案文件保存长期知识
使用示例(~해줌)
以下是 CLI-JAW 能理解的、以自然韩语风格编写的实际使用模式。
"내가 저번에 Tailwind 쓰다고 했던 거 기억해?"
触发"你记得...吗?"工作流。代理运行
cli-jaw memory search "Tailwind",在 structured/profile.md 中找到已保存的偏好,并返回确切的条目及其源文件。"앞으로 코드는 영어, UI 텍스트는 한국어로 해줌"
触发"用户提到偏好"工作流。代理进行确认,然后将
- Code language: English, UI text: Korean 保存到 structured/profile.md,以便所有后续会话遵循此偏好。"지난번 배포 때 DB 마이그레이션 어떻게 했더라?"
触发"回答前先搜索"规则。代理搜索"DB migration deploy"和"배포 마이그레이션",然后读取相关的情景条目以回忆确切的迁移步骤。
"이 프로젝트에서 API 에러 해들링은 항상 ErrorResponse 타입 쓰기로 결정했어. 기억해줌."
触发立即保存。代理将
- API error handling: always use ErrorResponse type 保存到 structured/semantic/project-architecture.md,使此架构决策得以持久化。"다른 인스턴스에서 이 프로젝트 어떻게 설정했는지 찾아뵐"
触发 L2 仪表盘记忆。代理识别到"其他实例"并运行
cli-jaw dashboard memory search "project setup" 进行跨实例联合查询,返回来自仪表盘的只读结果。应该保存 vs. 应该跳过
| 保存(持久性) | 跳过(临时性) |
|---|---|
| 用户在所有 UI 中偏好暗色模式 | 当前任务:"修复登录 bug" |
| 项目使用 pnpm 而非 npm | 阶段日志:"第二阶段于下午 3 点开始" |
| API 响应格式决策 | 临时调试清单 |
| 生产环境部署流程 | "提醒我明天检查这个" |
| 架构:使用事件总线的微服务 | 进行中的待办事项列表 |
| 团队使用 Conventional Commits | 会话特定的变量值 |
选择正确的目标路径
保存事实时,根据信息的性质选择目标路径:
| 信息类型 | 目标路径 | 示例 |
|---|---|---|
| 个人偏好 | structured/profile.md | "用户偏好韩语 UI、英语代码" |
| 项目架构事实 | structured/semantic/<project>.md | "CLI-JAW 使用 SQLite 作为记忆索引" |
| 带日期的决策 | structured/episodes/live/<date>.md | "2026-05-29: 选择 Drizzle ORM 而非 Prisma" |
| 可重用的工作流 | structured/procedures/<name>.md | "发布清单:lint、test、tag、deploy" |
| 领域知识 | structured/semantic/<domain>.md | "Cloudflare D1 每个数据库有 10GB 限制" |
搜索技巧
记忆搜索索引支持全文关键词匹配。为获得最佳结果:
- 使用两种语言 — 如果用户使用双语工作,请同时搜索"auth"和"인증"
- 包含错误代码 — 搜索"401 unauthorized"以查找与认证相关的记忆
- 尝试文件名 — 搜索"launchd"或"plist"以查找系统服务相关的记忆
- 先精确后宽泛 — 先搜索"Cloudflare D1 migration",然后回退到"database migration"
- 搜索符号 — 错误代码如"ECONNREFUSED"或配置键如"JAW_HOME"均已被索引
嵌入搜索是可选的,默认关闭。该技能不假定向量/语义搜索可用。所有搜索操作默认使用 SQLite 全文索引。
注意事项
- 优先使用简洁、持久的条目,避免冗长的日志
- 按照惯例,记忆是仅追加的 — 保存命令追加内容,不会覆盖
- 搜索索引(
index.sqlite)在文件保存时自动维护 - 跨实例(L2)记忆始终是只读的;你无法保存到其他实例
- 如果你的实例启用了嵌入搜索,它是关键词搜索的补充而非替代