如何把 OpenViking 接入 OpenCode,让编码会话自动召回和捕获记忆
如何把 OpenViking 接入 OpenCode让编码会话自动召回和捕获记忆【免费下载链接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.项目地址: https://gitcode.com/GitHub_Trending/op/OpenVikingOpenViking 是面向 AI Agent 的自进化上下文数据库统一管理 Agent 记忆、知识 RAG 与 Skills。OpenCode 是命令行编码工具两者之间的官方插件完成接入后每次 OpenCode 对话都会自动召回相关记忆并注入为隐藏上下文同时把当前轮次的消息与工具结果捕获回服务端在会话 commit 时归档并抽取为长期记忆——编码会话由此获得跨项目、跨会话的记忆能力。本文给出从前提条件、安装、配置到验证的完整路径以及接入后的自动行为和常见异常排查方式。前提条件按 OpenCode 插件文档 与 插件 README需要OpenCode 已安装Node.js 18一个运行中的 OpenViking HTTP server且服务端支持viking://~home-alias召回目标viking://~/memories与viking://~/skills依赖它新版服务端会拒绝无 uid 的viking://user/memories简写如果服务端启用了鉴权需要一个可用的 OpenViking API key。先启动 OpenViking serveropenviking-server --config ~/.openviking/ov.conf在另一个终端检查服务curl http://localhost:1933/health安装插件npm 包主路径已发布的 npm 包是openviking/opencode-plugin先确认包可获取npm view openviking/opencode-plugin version首次配置 OpenCode 时创建配置文件mkdir -p ~/.config/opencode cat ~/.config/opencode/opencode.json JSON { $schema: https://opencode.ai/config.json, plugin: [openviking/opencode-plugin] } JSON opencode已有~/.config/opencode/opencode.json时不要覆盖原文件只把openviking/opencode-plugin合并进已有的plugin数组。OpenCode 启动时会自动下载这个 npm 包插件随后自动注册 OpenViking 的 MCP server。源码安装可选分支如果当前环境不能通过 package 安装开发调试或 PR 测试在 OpenViking 仓库根目录执行mkdir -p ~/.config/opencode/plugins/openviking cp examples/opencode-plugin/wrappers/openviking.js ~/.config/opencode/plugins/openviking.js cp examples/opencode-plugin/index.mjs examples/opencode-plugin/package.json ~/.config/opencode/plugins/openviking/ cp -r examples/opencode-plugin/lib ~/.config/opencode/plugins/openviking/ cp -r examples/opencode-plugin/servers ~/.config/opencode/plugins/openviking/安装后 OpenCode 能发现的目录结构~/.config/opencode/plugins/ ├── openviking.js └── openviking/ ├── index.mjs ├── package.json ├── lib/ └── servers/顶层openviking.js只是一个 wrapper把 OpenCode 能发现的一级插件入口转发到实际安装目录源码安装必须使用这个.jswrapper因为 OpenCode 的本地插件扫描器发现的是 JavaScript/TypeScript 插件文件。npm 包安装则通过package.json直接加载index.mjs不需要 wrapper。统一安装器可选分支OpenCode 与 Claude Code、Codex 共用同一个安装器脚本在仓库的 install.sh用--harness opencode参数选择 OpenCode。每一步都是幂等的重复运行安全它注册 npm 插件TOS 渠道则安装本地文件插件把openvikingMCP server 条目写进~/.config/opencode/opencode.json并配置~/.openviking/ovcli.conf。官方文档提供以bash (curl -fsSL …)形式拉取脚本并运行的一行命令在 GitHub 访问困难的地区可改用文档中给出的火山引擎 TOS 镜像地址完整命令见 OpenCode 插件文档 的安装章节。配置凭据凭据与 Claude Code / Codex 记忆插件共用。推荐用环境变量OPENVIKING_API_KEY的优先级高于ovcli.confexport OPENVIKING_API_KEYyour-api-key-here # 替换为你自己的 key export OPENVIKING_ACCOUNTdefault # 可选仅 trusted-mode 部署需要 export OPENVIKING_USERopencode # 可选仅 trusted-mode 部署需要 export OPENVIKING_PEER_IDopencode # 可选peer 维度记忆路由需要另一种方式是在仓库根目录运行 setup 向导交互式写入~/.openviking/ovcli.conf统一安装器也会写这个文件node examples/opencode-plugin/scripts/setup.mjsAPI key 会由 hooks 和 MCP proxy 作为Authorization: Bearer ...发送account和user是 trusted-mode 身份头。旧版openviking-config.json里的凭据字段仍会作为迁移 fallback 读取但新安装建议使用ovcli.conf或环境变量。peer 影响记忆落在哪个空间默认插件从项目目录的 git 身份派生 peer归一化后的originURL取不到则回落仓库根路径。不在 git 仓库中时什么都不发送在那里记下的内容进入用户级空间viking://user/you/memories。需要覆盖派生值时用OPENVIKING_PEER_ID。行为配置可选~/.config/opencode/openviking-config.json只放行为旋钮示例来自 插件 README{ enabled: true, mcp: { enabled: true }, timeoutMs: 30000, repoContext: { enabled: true, cacheTtlMs: 60000 }, autoRecall: { enabled: true, limit: 6, scoreThreshold: 0.35, maxContentChars: 500, preferAbstract: true, tokenBudget: 2000, minQueryLength: 3 }, commitTokenThreshold: 20000, commitKeepRecentCount: 10, profileTokenBudget: 10000, resumeContextBudget: 32000 }文档对其中两个字段给出了明确说明autoRecall.limit是遗留的配额缩放输入不是最终结果上限。显式设置为 1 到 5 时有效总配额仍为 6因为六个 coding 分类各保留一个检索槽位需要精确的分类上限时直接使用 Contextquotas。如果 OpenViking 已经通过另一个 MCP server 暴露把mcp.enabled设为false插件保留生命周期 hooksrepo context、自动召回、消息捕获、生命周期 commit继续工作且不会添加或覆盖 OpenCode 的mcp.openviking条目。高级场景下OPENVIKING_PLUGIN_CONFIG可以指向另一个配置文件路径。验证接入修改插件或 OpenViking 配置后需要重启 OpenCode。进入新的 session 后插件应暴露openvikingMCP server透传服务端完整 MCP 工具集15 个工具。OpenCode 会给 MCP 工具加openviking_前缀openviking_find、openviking_searchopenviking_search的modecontext替代原 recall 工具openviking_read、openviking_list、openviking_tree、openviking_grep、openviking_globopenviking_remember、openviking_write、openviking_edit、openviking_add_resourceopenviking_list_watches、openviking_cancel_watch、openviking_forget、openviking_health让 OpenCode 搜索或浏览 OpenViking memory例如通过openviking_search或openviking_find服务端已有数据时应返回检索结果。行为异常时先查看运行时文件插件默认把运行时文件写入~/.config/opencode/openviking/ls ~/.config/opencode/openviking/ tail -n 100 ~/.config/opencode/openviking/openviking-memory.log该目录下有openviking-memory.log错误与运行日志和openviking-session-state.json会话状态可通过配置里的runtime.dataDir修改目录。本地 server 场景再确认一次curl http://localhost:1933/health。自动召回与捕获如何发生安装完成后召回与捕获都由插件 hook 自动执行不需要 agent 运行任何ov命令召回触发每条chat.message中的 user 消息触发一次召回query 取自非 synthetic text part若消息正文已含openviking-context跳过本轮召回避免注入内容被二次处理。召回结果合成一个 synthetic part 插到当前消息 parts 最前。召回目标为viking://~/memories与viking://~/skillsresources 被刻意排除在自动召回之外资源类文档由模型主动调用openviking_search获取。开场注入每会话首条chat.message注入一次 profile 与可用记忆清单预算 10000 tokensubagent 会话跳过开场注入每会话只尝试一次失败后本进程内不重试。repo 上下文已索引的viking://resources/仓库列表经experimental.chat.system.transform放进 system prompt由repoContext开关控制。捕获user 与 assistant 文本消息捕获到服务端工具调用与结果作为独立的toolpart 捕获tool_output原样上报。截断由服务端负责超过tool_output_externalization.threshold_chars默认20000的输出写入 session 的 tool-result 存储part 中只保留 synopsis stub 和tool_output_ref原文仍可通过/api/v1/sessions/{id}/tool-results接口读回。commit 与记忆抽取每个 OpenCode 会话映射为oc-idsubagent 为oc-parent__subagent-child挂在父命名空间下。session.idle路径在 flush 执行后需满足pending_tokens ≥ 20000才 commitkeep 10session.deleted与session.error强制 commitdispose强制 commit宿主 ≥ 1.15.11 才有该 hook旧版本关闭时不 commit一次宿主压缩在experimental.session.compacting前与session.compacted后各触发一次 commit。commit 完成归档并触发记忆抽取捕获的对话由此沉淀为长期记忆。离线补偿可重试的写入失败进入磁盘队列~/.openviking/pending在会话启动时重放≤50 条/次、≤3 次/条、TTL 7 天4xx含 401/403判为不可重试不入队。故障排查与限制问题排查方向插件没有加载确认~/.config/opencode/opencode.json引用了openviking/opencode-plugin源码安装时确认~/.config/opencode/plugins/openviking.js存在MCP tools 连到了错误的 server检查~/.openviking/ovcli.conf或用OPENVIKING_*环境变量 /OPENVIKING_PLUGIN_CONFIG指向正确配置OpenViking 返回 401 / 403检查OPENVIKING_API_KEYtrusted-mode 部署还要检查OPENVIKING_ACCOUNT和OPENVIKING_USERrecall 为空确认 OpenViking 中已有 memories/resources并且autoRecall.enabled为true注意自动召回不覆盖 resources资源检索要靠模型主动调openviking_search本地openviking_add_resource失败传入文件路径而不是目录目前还不支持自动上传本地目录两个容易误判的现象OpenCode 本地read、glob、grep工具读不了viking://URIagent 误用时插件会阻止这次本地文件系统调用并提示改用openviking_read、openviking_glob或openviking_search——这是预期行为不是故障。另外dispose的宿主 shutdown 预算为 5s多会话串行 commit 超预算时会被截断且 pending queue 不覆盖此场景这是文档明确给出的边界。相关文档OpenCode 插件安装、配置与排查的集成页插件 README 与 安装说明完整工具说明、openviking_add_resource的三类输入远端 URL、本地文件、file://与使用建议集成能力参考 的 opencode 档案卡opencode 与其他 harness 在召回、commit、关闭语义上的横向对照。【免费下载链接】OpenVikingSelf-evolving Context Database for AI Agents. Unify Agent Memory, Knowledge RAG and Skills.项目地址: https://gitcode.com/GitHub_Trending/op/OpenViking创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考