CodeWhale 原生记忆系统:全离线本地存储的完整设计

发布时间:2026/8/30 12:53:54
CodeWhale 原生记忆系统:全离线本地存储的完整设计 CodeWhale 原生记忆系统全离线本地存储的完整设计【免费下载链接】CodeWhaleOpen-source coding agent for your terminal, built in Rust and on a journey of continuous community improvement. Issues and PRs welcome.项目地址: https://gitcode.com/GitHub_Trending/de/CodeWhaleCodeWhale用 Rust 编写的开源终端编码代理内置了一套原生记忆系统Native Memory你的偏好和约定以纯 Markdown 文件保存在本地磁盘再用 SQLite FTS5 建立可丢弃的全文索引全程离线、零云端依赖。模型说我习惯 4 空格缩进下次会话自动记得无需每次重复交代。为什么编码代理需要记忆传统对话式 AI 是金鱼记忆关掉终端所有上下文清零。下次打开你得重新解释我喜欢 pytest 而不是 unittest这个仓库用 4 空格缩进部署只在周二进行CodeWhale 的解法是把持久信号沉淀到本地文件Markdown 是人类可读的真相来源source of truthSQLite 只负责加速查找。设计文档见 docs/MEMORY.md。总体架构Markdown 为真相SQLite 为可丢弃缓存整个记忆库位于~/.codewhale/memory/结构极其简单~/.codewhale/memory/ ├── global/MEMORY.md # 用户级记忆跟随你所有项目 ├── workspace/id/MEMORY.md # 仓库级记忆id 为 git origin 的哈希 ├── index.sqlite3 # 可重建的 SQLite FTS5 索引 └── JOURNAL.md # 变更审计日志不参与索引三个关键设计决策Markdown 是唯一真相。index.sqlite3是纯缓存随时可以删掉一条/memory native reindex命令即可完整重建实现见 crates/tui/src/native_memory.rs。双作用域分离global存放跟人走的偏好workspace存放跟仓库走的知识两者互不污染。索引自愈SQLite 文件损坏或 schema 版本不匹配时自动重置缓存并从 Markdown 重建不会丢失任何记忆crates/tui/src/native_memory.rs。仓库隔离用 git origin 哈希划分作用域workspace 的目录名不是随机值而是git remote.origin.url的SHA-256 哈希crates/tui/src/native_memory.rs。这意味着同一个仓库的多个 worktree 共享同一份记忆A 仓库的笔记永远不会泄漏到 B 仓库的提示词中没有 origin 的临时目录不会获得 workspace 作用域完全离线的隐私与安全边界全离线不只是口号架构上有多重保障本地驻留记忆库只存在于你的机器上从不上传任何云服务。不信任包裹注入系统提示词的记忆块被包裹在native_memory_recall trustuntrusted标签内明确标记为用户数据而非指令层——记忆里的内容不能变成模型的新指令crates/tui/src/native_memory.rs。注入有界每次最多注入 32 条、12,000 字符按最新的优先截断防止记忆膨胀挤占上下文预算。文件锁保护并发读写通过.memory.lock读写锁串行化读操作走共享读锁只有检测到 Markdown 树变化时才升级为写锁重建索引crates/tui/src/native_memory.rs。三种写入记忆的方式CodeWhale 提供从手动到自动的完整写入路径方式一#前缀快捷记录在输入框输入以单个#开头的行##和#!除外TUI 直接拦截并写入全局记忆库不触发对话轮次——状态栏确认后继续打字即可# remember to use 4-space indentation in this repo方式二/memory斜杠命令手动管理整个记忆库常用子命令实现见 crates/tui/src/commands/groups/memory/memory.rs命令效果/memory native status查看存储根目录与索引状态/memory native remember global note追加一条记忆/memory native search queryFTS5 全文搜索/memory native get id读取单条记忆/memory native reindex重建 FTS5 索引/memory native export导出全部记忆方式三remember工具自动捕获启用记忆后模型获得一个自动批准的remember工具可在会话中主动捕获值得长期保留的偏好、约定或事实。它支持三种动作crates/tui/src/tools/remember.rsappend追加新笔记revise修订旧笔记——必须提供精确的原文replaces和依据evidence且只能匹配唯一一条出现歧义时拒绝猜测retire退役过时笔记——同样需要依据删除后仍可从审计日志找回记忆检索memory_search 与 memory_get注入提示词的是记忆头部更深的历史靠检索工具按需拉取。模型可调用的两个工具crates/tui/src/tools/native_memory.rsmemory_search基于 FTS5 的全文检索支持limit参数1–20结果按 BM25 相关性排序memory_get按 id 精确读取单条完整记忆两者都被限制在全局 当前仓库的作用域内数值 id 本身不构成越权凭据。审计日志让改自己的记忆可追溯只追加不修订的记忆会腐烂错误事实不断累积注入块逐渐变成噪音。因此 CodeWhale 的每次就地修改revise/retire都会追加到JOURNAL.md记录操作类型、时间戳、修改前后内容和证据。精妙之处在于JOURNAL.md虽然是 Markdown却被刻意排除在索引之外crates/tui/src/native_memory.rs——否则被退役的旧笔记会通过before:行重新混回可检索集合让审计过的记忆反而比不审计更差。子代理也会继承记忆主代理分派给子代理sub-agent的并行任务同样继承这套记忆系统子代理既能读取注入的记忆块也能调用remember工具写入实现见 docs/SUBAGENTS.md。快速启用 CodeWhale 原生记忆记忆功能默认关闭opt-in。启用只需二选一然后重启 TUI# 方式 A环境变量 export DEEPSEEK_MEMORYon# 方式 B写入 ~/.codewhale/config.toml [memory] enabled true配置项默认值说明enabledfalse启用后才会加载/拦截/暴露remember工具backendoff显式指定native或off存储根目录~/.codewhale/memory/由memory_path锚点派生什么不该放进记忆记忆里只该存持久信号以下四类明确排除密钥API key、令牌、密码——文件是明文且会进入提示词临时任务状态我正在写解析器这类每次会话都变的内容对话片段引用式笔记属于note工具长指令超过几句话的内容应放进AGENTS.md或技能skill相关源码与文档内容路径官方记忆文档docs/MEMORY.md核心存储实现Markdown FTS5 锁 自愈crates/tui/src/native_memory.rsremember工具append/revise/retirecrates/tui/src/tools/remember.rsmemory_search/memory_get工具crates/tui/src/tools/native_memory.rs/memory命令实现crates/tui/src/commands/groups/memory/memory.rs单元测试crates/tui/src/native_memory/tests.rs一句话总结CodeWhale 的原生记忆系统用最朴素的技术Markdown SQLite解决了 AI 编码代理的记忆问题而把工程复杂度花在了安全边界上——离线、有界注入、作用域隔离、可审计值得每一个自研 agent 记忆系统的团队参考。【免费下载链接】CodeWhaleOpen-source coding agent for your terminal, built in Rust and on a journey of continuous community improvement. Issues and PRs welcome.项目地址: https://gitcode.com/GitHub_Trending/de/CodeWhale创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考