OpenCode 插件接入
通过 DuMemory OpenCode 插件(@baidu/opencode-memory)接入 Agent 记忆服务,可在 OpenCode 会话中使用云端长期记忆能力。插件安装后可提供 dumemory_retain、dumemory_recall、dumemory_reflect 等工具,并支持自动召回和自动沉淀配置。
OpenCode 插件接入与 Skill 接入不同:OpenCode 插件通过 opencode plugin 安装原生插件包,适合希望在 OpenCode 中开箱即用接入记忆服务的场景;Skill 接入通过指令文件引导 Agent 调用 API,适合需要自定义触发规则的场景。
连接信息
| 信息 | 值 |
|---|---|
| API Base URL | https://cloud.memory.bj.baidubce.com/api |
| API Key | 在控制台“API Key”页签中创建,写入插件 options 的 duMemoryApiToken |
| Bank ID | 在控制台创建记忆库时设定,可静态指定,也可按 Agent、项目等维度动态派生 |
| 插件下载地址 | https://cloud-memory.bj.bcebos.com/baidu-opencode-memory-0.2.6.tgz |
API Base URL 已包含
/api,不要再额外拼接。API Key 请勿写入公开仓库、公开文档或截图。
前提条件
确认已经安装 OpenCode:
1opencode --version
同时需要:
- 已创建记忆库,并获取 API Base URL、API Key 和 Bank ID
- 本机可访问插件包下载地址
- 本机可访问 duMemory Cloud API
下载插件包
建议先创建稳定的本地插件包目录,便于后续重新安装、升级和排查问题:
1mkdir -p "$HOME/opencode-plugins"
2curl -L \
3 "https://cloud-memory.bj.bcebos.com/baidu-opencode-memory-0.2.6.tgz" \
4 -o "$HOME/opencode-plugins/baidu-opencode-memory-0.2.6.tgz"
安装方式
OpenCode 插件支持项目级安装和全局安装。
| 安装方式 | 生效范围 | 推荐场景 | 配置文件 |
|---|---|---|---|
| 项目级安装 | 当前项目 | 不同项目使用不同记忆库或不同插件配置 | .opencode/opencode.json |
| 全局安装 | 所有项目 | 个人工作环境默认启用长期记忆 | ~/.config/opencode/opencode.json |
如果某个项目同时存在项目级配置和全局配置,项目级配置优先。
项目级安装
在需要启用 DuMemory OpenCode 插件的项目目录下执行:
1opencode plugin @baidu/opencode-memory@file:$HOME/opencode-plugins/baidu-opencode-memory-0.2.6.tgz
首次安装时,OpenCode 会在当前项目生成:
1.opencode/opencode.json
生成的配置通常类似:
1{
2 "plugin": [
3 [
4 "@baidu/opencode-memory@file:/Users/you/opencode-plugins/baidu-opencode-memory-0.2.6.tgz",
5 {
6 "duMemoryApiToken": "your-api-key",
7 "dynamicBankId": true,
8 "dynamicBankGranularity": ["agent", "gitProject"]
9 }
10 ]
11 ]
12}
把 your-api-key 替换为控制台创建的 API Key。
项目级安装只对当前项目生效,适合希望不同项目使用不同记忆空间的场景。
全局安装
如果希望所有项目默认启用 DuMemory OpenCode 插件,可以执行:
1opencode plugin -g @baidu/opencode-memory@file:$HOME/opencode-plugins/baidu-opencode-memory-0.2.6.tgz
首次全局安装时,OpenCode 会生成全局配置:
1~/.config/opencode/opencode.json
配置格式与项目级相同:
1{
2 "plugin": [
3 [
4 "@baidu/opencode-memory@file:/Users/you/opencode-plugins/baidu-opencode-memory-0.2.6.tgz",
5 {
6 "duMemoryApiToken": "your-api-key",
7 "dynamicBankId": true,
8 "dynamicBankGranularity": ["agent", "gitProject"]
9 }
10 ]
11 ]
12}
把 your-api-key 替换为控制台创建的 API Key。
如果某个项目需要覆盖全局插件版本或配置,可以在该项目目录下再次执行项目级安装命令。
推荐配置
固定 Bank ID
如果希望当前 OpenCode 环境固定写入控制台中指定的记忆库,可将插件 options 配置为:
1{
2 "plugin": [
3 [
4 "@baidu/opencode-memory@file:/Users/you/opencode-plugins/baidu-opencode-memory-0.2.6.tgz",
5 {
6 "duMemoryApiUrl": "https://cloud.memory.bj.baidubce.com/api",
7 "duMemoryApiToken": "<your-api-key>",
8 "dynamicBankId": false,
9 "bankId": "<your-bank-id>"
10 }
11 ]
12 ]
13}
固定 Bank ID 适合单用户、单项目或希望明确绑定某个控制台 Bank 的场景。
动态 Bank ID
多项目场景可启用动态 Bank ID:
1{
2 "plugin": [
3 [
4 "@baidu/opencode-memory@file:/Users/you/opencode-plugins/baidu-opencode-memory-0.2.6.tgz",
5 {
6 "duMemoryApiToken": "<your-api-key>",
7 "dynamicBankId": true,
8 "dynamicBankGranularity": ["agent", "gitProject"]
9 }
10 ]
11 ]
12}
常用 dynamicBankGranularity: ["agent", "gitProject"],可让同一 repo 的多个 linked worktree 共享记忆,同时不同项目之间自动隔离。
更新插件
收到新版本本地包后,例如:
1~/opencode-plugins/baidu-opencode-memory-0.2.7.tgz
更新项目级安装:
1opencode plugin -f @baidu/opencode-memory@file:$HOME/opencode-plugins/baidu-opencode-memory-0.2.7.tgz
更新全局安装:
1opencode plugin -g -f @baidu/opencode-memory@file:$HOME/opencode-plugins/baidu-opencode-memory-0.2.7.tgz
更新后检查 opencode.json 中的插件路径是否已经变成新版本包路径,并确认 duMemoryApiToken 仍然是有效的 API Key。
生效与检查
安装或更新后,重新打开 OpenCode session。
可以在项目目录执行以下命令检查最终配置:
1opencode debug config
配置中应能看到 plugin 或 plugin_origins 包含:
1@baidu/opencode-memory@file:
进入 OpenCode 后,可以直接向 Agent 提问:
1你现在有哪些工具可用?
回答中的可用工具应包含:
1dumemory_retain
2dumemory_recall
3dumemory_reflect
如果插件加载失败并提示 API Key 缺失,请检查 opencode.json 中的 duMemoryApiToken 是否仍为 your-api-key 占位值。
可配置选项
以下选项都写在 opencode.json 的插件 options 中。
| 选项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
duMemoryApiUrl |
string | https://cloud.memory.bj.baidubce.com/api |
DuMemory API 地址,通常不需要修改 |
duMemoryApiToken |
string | 无 | DuMemory API Key,必须配置 |
bankId |
string | opencode |
静态 Memory Bank ID;启用动态 Bank ID 时不使用该默认值 |
bankIdPrefix |
string | 空字符串 | Bank ID 前缀 |
dynamicBankId |
boolean | false |
是否根据项目等维度自动生成 Bank ID;多项目场景建议设为 true |
dynamicBankGranularity |
string[] | ["agent", "project"] |
动态 Bank ID 组成维度,常用 ["agent", "gitProject"] |
agentName |
string | opencode |
动态 Bank ID 中 agent 维度的值 |
bankMission |
string | 空字符串 | Bank 的总体说明,非空时插件会尝试写入 Bank 配置 |
retainMission |
string | 无 | retain 抽取说明,通常不需要设置 |
autoRecall |
boolean | true |
是否自动召回记忆并注入 OpenCode 上下文 |
recallBudget |
string | mid |
recall 预算,可选 low、mid、high |
recallMaxTokens |
number | 1024 |
自动 recall 返回内容的最大 token 数 |
recallTypes |
string[] | ["world", "experience"] |
recall 的记忆类型,可包含 world、experience、observation |
recallContextTurns |
number | 1 |
context compaction 时,构造 recall query 使用的最近对话轮数 |
recallMaxQueryChars |
number | 800 |
自动 recall query 的最大字符数 |
recallPromptPreamble |
string | 内置说明文本 | 注入召回记忆前的提示说明 |
recallTags |
string[] | [] |
recall 时按 tags 过滤 |
recallTagsMatch |
string | any |
tag 匹配模式,可选 any、all、any_strict、all_strict |
autoRetain |
boolean | true |
是否在 OpenCode session idle 和 compaction 前自动写入记忆 |
retainMode |
string | full-session |
自动 retain 模式,可选 full-session、last-turn |
retainEveryNTurns |
number | 3 |
每隔多少个 user turn 自动 retain 一次 |
retainOverlapTurns |
number | 2 |
last-turn 模式下保留多少个重叠 turn |
retainContext |
string | opencode |
retain 写入时的 context 字段 |
retainTags |
string[] | [] |
retain 写入时附加的 tags |
retainMetadata |
object | {} |
retain 写入时附加到 memory unit 的自定义 metadata |
常见问题
项目里没有生效,但全局配置已经安装
项目级配置优先于全局配置。请检查当前项目是否存在 .opencode/opencode.json,其中是否覆盖了全局插件配置。
插件加载失败并提示 API Key 缺失
检查 opencode.json 中的 duMemoryApiToken 是否仍为 your-api-key,并替换为控制台创建的 API Key。
多个 worktree 的记忆没有共享
建议使用:
1{
2 "dynamicBankId": true,
3 "dynamicBankGranularity": ["agent", "gitProject"]
4}
这样同一 git 项目的多个 linked worktree 可共享同一记忆库。
想让所有项目默认启用记忆,但个别项目单独配置
先使用全局安装作为默认配置,再在需要单独隔离的项目目录执行项目级安装。项目级配置会覆盖全局配置。
使用建议
- 单项目或明确绑定控制台 Bank 的场景,使用固定
bankId。 - 多项目工作区建议启用
dynamicBankId,并使用gitProject维度。 - API Key 不要提交到公开仓库;如果项目配置需要入库,应改用安全的配置管理方式或在提交前移除敏感字段。
- 安装或更新后重新打开 OpenCode session,并用
opencode debug config检查最终生效配置。
评价此篇文章
