ai-memory社区贡献指南:从添加新Agent支持开始
【免费下载链接】ai-memorySolution for long term memory for agent coding CLIs and to facilitate handoff between different agent vendors项目地址: https://gitcode.com/GitHub_Trending/ai/ai-memory
ai-memory是一个用 Rust 编写的开源项目,为 AI 编程 CLI 提供长期记忆,让 Claude Code、Codex、Cursor 等 20 多种 Agent 在同一个项目间无缝交接(handoff)——退出 Claude Code,换到 Codex 继续工作,不用重新解释架构和失败尝试。🎯 本指南面向想给这个热门开源项目提第一个 PR 的贡献者,带你从最典型、最友好的切入方式——添加新 Agent 支持——完整走一遍社区贡献流程。
贡献前准备:开发环境搭建
ai-memory 对贡献者非常友好:构建完全自包含(SQLite 通过rusqlitebundled 打包,libgit2通过 vendored 方式引入),只需要一个标准 C 工具链,不需要额外安装系统库。📦
- 克隆仓库:
git clone https://gitcode.com/GitHub_Trending/ai/ai-memory - 构建并跑全量测试:
cargo build --workspace然后cargo test --workspace --all-targets - 注意 Rust 版本要求1.95,已由 rust-toolchain.toml 锁定,rustup 会自动切换
日常开发建议安装预推送钩子,它会在每次git push前自动跑完整测试层:
scripts/install-git-hooks.sh详细开发规范见 CONTRIBUTING.md,完整贡献者规则集中在 AGENTS.md(单一权威规则文件,CLAUDE.md只是指向它的指针)。
添加新 Agent 支持:完整五步路径
当你想支持一个还没有的 Agent(比如某款新发布的编程 CLI),参考最近的真实案例Kiro CLI(迁移版本 V45),完整路径如下:
第 1 步:在 AgentKind 枚举中注册新 Agent
所有 Agent 的身份都收敛在一个类型上:AgentKind。你需要同步改动四处(缺一不可):
- 枚举本体:新增变体(如
KiroCli)并写一行 doc 注释; AgentKind::ALL常量数组——它驱动"数据库约束覆盖全部 Agent"的守护测试,历史上 Zero 集成就因漏掉迁移只被线上测试抓出(源码注释里明确写着这个教训);as_str():返回 kebab-case 的线上传输字符串(如"kiro-cli");from_wire():解析别名(如"claude-code" | "claude_code" | "claude"都映射到 Claude Code)。
第 2 步:新增 SQLite 迁移脚本,扩展 agent_kind 约束
数据库的sessions.agent_kind列有 CHECK 约束,必须为新 Agent 加值。铁律:永远新增迁移文件,绝不修改已发布的迁移。
参考 V45__sessions_kiro_cli_agent_kind.sql 的模板:用sessions_new临时表重建 schema、把kiro-cli加进 CHECK 值列表、原样回迁全部行和索引、重建 scope 配对触发器。文件名按V<序号>__描述.sql递增,放在 crates/ai-memory-store/migrations/。
第 3 步:编写生命周期 hooks 脚本
每个 Agent 一个目录,提供 shell 和 PowerShell 双版本脚本,参考 hooks/kiro-cli/ 的结构:
session-start.sh / .ps1—— 会话开始,注入上一轮的交接(handoff)user-prompt-submit.sh、pre-tool-use.sh、post-tool-use.sh—— 采集提示词与工具调用stop.sh—— 轮次结束- (部分 Agent 还有
pre-compact.sh、session-end.sh、subagent-start.sh等)
脚本统一调用 hooks/lib/ai-memory-hook.ps1 与 hooks/_lib.sh 公共库,把观察结果 POST 到服务端/hook接口。隐私脱敏由服务端的类型化边界(Sanitized构造)统一完成,脚本层不需要关心。
第 4 步:打通 CLI 的安装命令
在 crates/ai-memory-cli/src/cli.rs 中为新 Agent 添加两个选择项:
--client <name>(MCP 注册,写入该 Agent 的mcp.json等配置文件)--agent <name>(hooks 安装,把上一步的脚本部署到 Agent 的配置目录)
实现可参考 install_hooks.rs 与 install_mcp.rs 中已有 Agent 的分发逻辑。完成后,用户只需两条命令即可接入新 Agent:
ai-memory install-mcp --client <new-agent> --apply ai-memory install-hooks --agent <new-agent> --apply第 5 步:更新文档与支持矩阵(合并门槛)
⚠️ 这一步最容易被忘记,却被视为blocking:
- 在 CHANGELOG.md 的
## [Unreleased]下按### Added加一条过去时描述、尾部带 PR 编号的条目; - 更新 README 支持矩阵和 docs/support-matrix.md 的对应行,写清安装命令、限制与备注(比如"无真正 SessionEnd,需用
finalize-session"); - 为新 Agent 添加回归测试——解析器、ID 推导类改动尤其需要。
通过 CI 必过的质量门禁
提交前在本地跑完以下门禁,CI 与发布流程会原样复查:
| 门禁 | 命令 | 检查内容 |
|---|---|---|
| 格式 | cargo fmt --all -- --check | 代码格式统一 |
| 空白 | git diff --check | 无尾随空白等 |
| 静态检查 | cargo clippy --workspace --all-targets -- -D warnings | 零警告 |
| 全量测试 | cargo test --workspace --all-targets | 所有 crate 全部测试 |
| 依赖策略 | cargo deny check | 许可证与安全策略 |
日常迭代不必每次都跑全量:cargo t(nextest 别名)约 20 秒跑完常规层,慢速/压力测试(slow、stress命名的模块)只由预推送钩子和 CI 执行。💡
进阶方向:从 Hooks 支持到 Managed Workstream
如果你的目标不止"能采集",而是让ai-memory run <agent>直接托管新 Agent 的原生会话(精确恢复、只读导入转录、启动时注入上下文),项目提供了专门的贡献协议:docs/managed-harness-contributions.md。它定义了七道要求——原生契约确认、刻意注册(含AgentKind::ALL与迁移)、argv 保真、只读发现与导出、"先交付上下文再确认"、workstream 不变量,以及必过的测试清单(包括 scripts/managed-workstream-acceptance.sh 里的确定性假进程验收)。
新接入的 Agent 最终会出现在 Web 视图中,供团队浏览每个项目的记忆页面:
小结:你的第一个 PR 清单
- ✅ 环境:Rust 1.95 +
scripts/install-git-hooks.sh - ✅ 五步:
AgentKind枚举 → 新迁移 → hooks 脚本 → CLI 安装命令 → 文档 + CHANGELOG - ✅ 门禁:fmt / diff / clippy / 全量测试 / cargo deny
- ✅ 提交归属:推送前检查每个 commit 的邮箱(
git log --format='%h %an <%ae>'),避免 PR 合并后追溯修正 - ✅ 语义化版本:新增 Agent 属于minor级附加变更,CHANGELOG 条目放在
### Added
从"给支持矩阵加一行"开始,就是参与 ai-memory 社区最实际的第一步。祝你的第一个 PR 顺利合并!🚀
【免费下载链接】ai-memorySolution for long term memory for agent coding CLIs and to facilitate handoff between different agent vendors项目地址: https://gitcode.com/GitHub_Trending/ai/ai-memory
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考