Codex
Codex 桌面端和 CLI 共用同一套记忆配置,让你的 Codex 记住过往决策、查找相关上下文,并从每次会话中积累经验。
给你的智能体
把这行交给你的智能体。它应该先使用统一安装指南;这一页保留为行为说明和排障参考:
读取 https://mem.nowledge.co/SKILL.md,按其中说明为 Codex 安装或更新 Nowledge Mem。用 nmem status 和 Working Memory 检查验证结果,并总结你改了什么。Codex 复用型记忆包
现代 Codex 的推荐做法是:安装插件、保留插件内置的 Nowledge Mem MCP,并运行一次 hook setup。SessionStart 会自动注入当前 Nowledge 上下文,每轮的轻量路由会把历史问题指向跨工具知识源,MCP 提供更顺手的检索和写入工具,Stop hook 则自动捕获真实会话。
在 Codex、Claude Code、Gemini、Cursor 之间切换,不丢失上下文。这个 Codex 包会在启动时注入 Context Bundle / Working Memory,内置本地 MCP 连接,把延续型工作引导到检索,并自动捕获 Codex 对话线程。Codex 仍会判断何时需要进一步检索,但不再只靠 skill 描述来发现 Nowledge,因此推荐组合是:插件 + MCP + hook。
Codex 桌面端和 Codex CLI 共用同一个 ~/.codex 配置、插件缓存、hook 和 MCP 设置。这份指南会使用 codex 命令,因为安装和更新由 CLI 管理;但装好之后,这个连接同时适用于桌面端和 CLI。
如何确认安装成功
开始一次会话,先问「我在做什么?」你应该看到最近的工作重点和优先事项。然后再问一个延续型问题,比如「我们之前对这个发布流程做过什么决定?」正常情况下,Codex 不应该停在简报这里,而会继续进入检索。完成一个短回合后,运行 nmem t search "这轮里的一句话" --source codex,应该能看到被捕获的 Codex 线程。
开始之前
- Nowledge Mem 已在本地运行(安装指南),或有可访问的远程 Mem 服务
- 已安装 Codex 桌面端或 Codex CLI
nmemCLI 在你的PATH中
设置
安装 nmem
# 方式一:uvx
curl -LsSf https://astral.sh/uv/install.sh | sh
uvx --from nmem-cli nmem --version
# 方式二:pip
pip install nmem-cli如果 Nowledge Mem 桌面应用已在同一台机器上运行,推荐的方式是 Settings → Preferences → Developer Tools → Install CLI。
安装插件
优先使用 marketplace 安装
如果你看到旧文档让你手动复制文件到 ~/.codex/plugins/cache/local/...,请把它当作兼容旧流程。当前推荐路径是:先添加 marketplace,从这个 marketplace 安装插件,最后在配置里启用。
codex plugin marketplace add nowledge-co/community --sparse .agents --sparse nowledge-mem-codex-plugin
codex plugin add nowledge-mem@nowledge-community如果你的 Codex 还是旧版顶层子命令:
codex marketplace add nowledge-co/community你也可以打开 Codex 的 /plugins,从那里安装 nowledge-mem@nowledge-community。
优先使用上面的 sparse marketplace 命令。它只让 Codex 拉取 marketplace 元数据和 Codex 插件包,不再克隆整个 community 仓库,可以避开网络稍慢时 30 秒 clone 超时的问题。
启用插件
把下面这段放进 ~/.codex/config.toml:
[features]
plugins = true
hooks = true
[plugins."nowledge-mem@nowledge-community"]
enabled = true安装完成后重启 Codex。
插件里已经包含什么
当前插件包已经内置本地 Nowledge Mem MCP,地址是 http://127.0.0.1:14242/mcp/。如果你在 ~/.codex/config.toml 里自己定义 mcp_servers.nowledge-mem,Codex 会优先使用你的配置,所以远程 Mem 和自定义端口仍然是显式可控的。
开启生命周期上下文与线程捕获
Codex 依靠 hook 自动加载启动上下文、完成记忆路由并捕获线程。当前 Codex 会自动读取已启用插件内置的 hook;旧版曾经需要单独的 plugin_hooks 开关。setup 会先检测宿主能力,只在旧版仍需要时添加兼容开关。安装或更新插件后,运行一次插件自带的 hook setup:
HOOK_SETUP="$(find ~/.codex/plugins/cache -path '*/nowledge-mem/*/scripts/install_hooks.py' -print 2>/dev/null | sort | tail -1)"
if [ -z "$HOOK_SETUP" ]; then
echo "没有找到 hook setup。请打开 Codex,运行 /plugins,安装 nowledge-mem@nowledge-community,然后重试。"
else
python3 "$HOOK_SETUP"
fisetup 完成后重启 Codex。Codex 提示你检查新增或变更的 hook 时,请信任 Nowledge Mem 的 SessionStart、UserPromptSubmit 和 Stop hook;“启用”与“信任命令”是两道独立的安全确认。
SessionStart hook 会注入 Context Bundle,必要时退回 Working Memory。一段很短的 UserPromptSubmit 路由会确保延续、复盘、回归、发布、连接器、历史决策和精确会话问题进入 Nowledge 检索。Stop hook 则调用 nmem t save --from codex,先读取本机 transcript,再通过你的 nmem 客户端配置上传。因此本地 Mem 和远程 Mem 使用同一套配置。如果 Codex 同时看到插件内置 Stop hook 和宿主级兜底 hook,同一份 transcript 状态只会保存一次。
同一个 setup 也会检查你的 nmem 客户端配置。如果 nmem 里已经保存了 API key,或你使用的不是默认本地地址,setup 会在 ~/.codex/config.toml 里写入一段托管的 Codex MCP 配置,让 Codex 和 CLI 指向同一个 Mem。
在 Windows PowerShell 中,用 Python launcher 运行同一个已安装 setup 脚本:
$HookSetup = Get-ChildItem "$env:USERPROFILE\.codex\plugins\cache" -Recurse -Filter install_hooks.py |
Where-Object { $_.FullName -like "*nowledge-mem*" } |
Sort-Object FullName |
Select-Object -Last 1
if ($null -eq $HookSetup) {
Write-Host "没有找到 hook setup。请打开 Codex,运行 /plugins,安装 nowledge-mem@nowledge-community,然后重试。"
} else {
py -3 $HookSetup.FullName
}如果你也使用 Codex 官方 Memory
Codex 本地 Memory 和 Nowledge Mem 可以同时使用,但它们不是同一个知识库。Codex Memory 是当前 CODEX_HOME 下的本地生成状态;Nowledge Mem 负责当前 Working Memory、精确会话、可追溯决策、Spaces,以及跨所有已连接 AI 工具的知识。
避免重复学习
在 Codex Settings → Personalization 中关闭 Allow memory generation from tool-assisted tasks。这样,使用过 Nowledge MCP、网页搜索或工具搜索的任务就不会再进入 Codex 自己的记忆生成器。若你仍想保留 Codex 的本地回忆层,可以继续开启 Enable memories。
对应的 ~/.codex/config.toml 配置是:
[memories]
disable_on_external_context = true如果不做这层隔离,Codex 可能把刚从 Nowledge 取回的内容再次总结进本地 Memory;后续任务就可能直接使用这份较旧的摘要,而不再查询当前的跨工具知识源。插件 0.1.26 起会额外注入明确的路由边界,但这个开关才能从写入侧关闭重复学习回路。setup 检测到这种组合时只会提示,不会替你修改 Codex Memory 设置。
你也可以继续关闭 Codex 本地 Memory。Nowledge 的启动上下文、检索、蒸馏和线程捕获都不受影响。
可选:添加项目级引导
将插件的 AGENTS.md 复制或合并到你的项目根目录,增强该仓库中的记忆行为:
git clone https://github.com/nowledge-co/community.git /tmp/nowledge-community
cp /tmp/nowledge-community/nowledge-mem-codex-plugin/AGENTS.md ./AGENTS.md
rm -rf /tmp/nowledge-community如果你的项目已经有 AGENTS.md,请把 Nowledge 部分合并进去,而不是直接覆盖。这一步能明显改善 continuation-heavy 仓库里只读 Working Memory、不继续搜索的情况。
不要修改已安装插件里的文件
把你仓库自己的 AGENTS.md 当作长期 override 层。插件包里的 AGENTS.md 只是参考文本,用来复制或合并,不要直接去改 Codex 插件安装目录里的那份。
需要远程 Mem 时配置
nmem config client set url https://mem.example.com
nmem config client set api-key nmem_your_keynmem 的连接优先级:
--api-url/--api-key参数NMEM_API_URL/NMEM_API_KEY环境变量~/.nowledge-mem/config.json- 默认值
如果 Mem 在远程机器上,也要在 ~/.codex/config.toml 中覆盖插件内置的本地 MCP 地址:
nmem config mcp show --host codex把生成的 TOML 放进 ~/.codex/config.toml。如果你安装的插件版本是 0.1.11 或更新,也可以直接重新运行上面的 hook setup。直接 MCP 客户端不会自动读取 ~/.nowledge-mem/config.json;这一步能确保 Codex MCP 和本机 nmem 客户端指向同一台 Mem 服务器。MCP 给 Codex 直接工具,nmem 继续负责插件里的兜底行为和真实 save-thread。
项目级安装(可选方案)
除了共享 marketplace 源,也可以把插件打包进项目仓库,通过本地 Codex marketplace 文件让 Codex 自动发现。这样克隆仓库的人可以直接使用。
git clone https://github.com/nowledge-co/community.git /tmp/nowledge-community
mkdir -p .agents
cp -r /tmp/nowledge-community/nowledge-mem-codex-plugin ./.agents/nowledge-mem
rm -rf /tmp/nowledge-community
mkdir -p .agents/plugins创建 .agents/plugins/marketplace.json:
{
"name": "local",
"plugins": [
{
"name": "nowledge-mem",
"source": {
"source": "local",
"path": "./.agents/nowledge-mem"
},
"policy": {
"installation": "INSTALLED_BY_DEFAULT",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
]
}path 相对于仓库根目录,而非 marketplace 文件本身。这个本地方案需要使用:
[plugins."nowledge-mem@local"]
enabled = true然后从项目内插件运行 hook setup:
python3 ./.agents/nowledge-mem/scripts/install_hooks.py更新
如果你是在 0.1.14 之前安装的 Codex 包,请先刷新 marketplace。当前 Codex 有时只会刷新 marketplace checkout,不会重新安装已经缓存的插件包;在插件包本身更新之前,hook setup 文件或插件内置 hook 的变化仍可能不存在。
(codex plugin marketplace remove nowledge-community || codex marketplace remove nowledge-community || true)
codex plugin marketplace add nowledge-co/community --sparse .agents --sparse nowledge-mem-codex-plugin
codex plugin add nowledge-mem@nowledge-community这会用 Codex sparse checkout 重新添加 marketplace。旧安装使用的是完整 community 仓库 clone;如果 Codex 报 git clone marketplace source timed out after 30s 或 early EOF,这就是恢复路径。你也可以从 Codex 的 /plugins 更新或重新安装 nowledge-mem@nowledge-community。插件包更新后,请重启 Codex。
插件包本身更新完成后,再刷新 hook runtime:
HOOK_SETUP="$(find ~/.codex/plugins/cache -path '*/nowledge-mem/*/scripts/install_hooks.py' -print 2>/dev/null | sort | tail -1)"
if [ -z "$HOOK_SETUP" ]; then
echo "hook setup 仍然不存在。请从 Codex /plugins 重新安装 nowledge-mem@nowledge-community,然后重试。"
else
python3 "$HOOK_SETUP"
fi如果这个 marketplace 还没有注册,请运行:
codex plugin marketplace add nowledge-co/community --sparse .agents --sparse nowledge-mem-codex-plugin || codex marketplace add nowledge-co/community然后重启 Codex。如果你用的是项目内 @local 源,请更新本地源路径。
技能
在 hybrid 配置里,这些技能仍然重要。它们负责告诉 Codex 什么时候该用记忆,而 MCP 负责在 Codex 决定行动时,给它一个更顺手的执行入口。
| 技能 | 触发条件 | 功能 |
|---|---|---|
$nowledge-mem:working-memory | 会话开始、”我在做什么” | 读取当天的工作记忆简报;如果有 MCP,就优先走 read_working_memory |
$nowledge-mem:search-memory | 涉及过往工作、过去的决策 | 搜索记忆和对话,支持逐层深入查看;如果有 MCP,就优先走检索工具 |
$nowledge-mem:save-thread | 用户明确要求保存,或 hook setup 不可用时 | 通过 nmem t save --from codex 导入真实 Codex 会话 |
$nowledge-mem:distill-memory | 做出决策、发现经验教训 | 主动将有价值的洞察保存为记忆;如果有 MCP,就优先走写入工具 |
$nowledge-mem:status | "Mem 能用吗"、出错时 | 检查服务器连接和配置状态 |
Codex 使用 Nowledge FS
Nowledge FS 是知识树背后的共享路径层,不是 Codex 专属功能。Codex 可以通过同一个 MCP 服务器使用 mem_fs,在记忆、线程、Wiki、工作记忆、动态、来源和产物之间按路径浏览。
mem_fs: recall "为什么改了 token refresh?" --in /memories -k 5
mem_fs: cat /memories/by-id/<id>.memory.md
mem_fs: ls /memories/by-label/auth如果当前环境没有 MCP,可以直接用 CLI:
nmem fs recall "session token strategy" --in /memories -k 5
nmem fs grep "JWT rotation" /memories
nmem fs cat /memories/by-id/<id>.memory.md模糊问题用 recall,结构化条件用 find,精确短语用 grep;读取大内容前先用 stat 看元数据,确定路径后再 cat。grep 默认忽略大小写;需要严格大小写时用 --case-sensitive,需要正则时用 -E。这个预览版走 API,可用于桌面端、Web 端和远程连接;真正挂载成系统文件夹会在后续阶段实现。
直接使用 nmem
nmem 仍然是通用兜底层,也是 Codex 真实线程导入的正确路径。Stop hook 自动调用的也是同一个命令:
nmem --json wm read
nmem --json m search "auth token rotation" --mode deep
nmem --json t save --from codex -p . -s "完成了 auth 重构"
nmem --json m add "JWT 刷新失败源于时钟偏移" --title "JWT 刷新失败追溯到时钟偏移" --importance 0.9 --unit-type learning -l auth -s codex默认情况下,nmem t save --from codex 会去 ~/.codex 里找会话。如果 Codex Home 在其他位置,设置 CODEX_HOME 即可。
如果要导入更早的 Codex 会话,先预览:
nmem t sync --from codex --all-projects --limit 20确认无误后再导入:
nmem t sync --from codex --all-projects --apply如果只想导入某个项目,用 -p /path/to/project 代替 --all-projects。这个命令会读取本机 Codex transcript 文件,并写入 nmem 当前配置的 Mem 服务器。
从自定义提示词迁移
如果之前使用的是 nowledge-mem-codex-prompts,这个插件完整覆盖了原有功能:
- 安装插件(见上方步骤)。
- 删除旧提示词:
rm ~/.codex/prompts/{read_working_memory,search_memory,save_session,distill}.md - 插件技能一一对应替代旧提示词。
| 旧提示词 | 新技能 |
|---|---|
/prompts:read_working_memory | $nowledge-mem:working-memory |
/prompts:search_memory | $nowledge-mem:search-memory |
/prompts:save_session | $nowledge-mem:save-thread |
/prompts:distill | $nowledge-mem:distill-memory |
| (无) | $nowledge-mem:status |
常见问题
找不到 nmem 命令
用 pip install nmem-cli 安装,或使用 uvx --from nmem-cli nmem。参见安装指南。
无法连接服务器
运行 nmem status 和 nmem config client show 检查远程配置是否正确。参见远程访问。
技能没有出现
安装插件后需重启 Codex。确认三件事:已经添加 marketplace、已经通过 codex plugin add 或 /plugins 安装 nowledge-mem@nowledge-community,以及 ~/.codex/config.toml 中包含 [features] plugins = true、hooks = true 和 [plugins."nowledge-mem@nowledge-community"] enabled = true。旧版宿主可能还需要 plugin_hooks = true;请重新运行 setup 让它检测,不要手工猜测。如果你是项目内本地源方案,使用 [plugins."nowledge-mem@local"]。
Codex 提示 unknown field description, expected hooks
把插件更新到 0.1.19 或更新版本,然后重启 Codex:
(codex plugin marketplace remove nowledge-community || codex marketplace remove nowledge-community || true)
codex plugin marketplace add nowledge-co/community --sparse .agents --sparse nowledge-mem-codex-plugin
codex plugin add nowledge-mem@nowledge-community这个提示来自 Codex 的严格 hook 解析器:它不接受 hooks/hooks.json 里的额外元数据。当前版本已经让这个文件只保留 Codex 需要的 hook schema。
在 WSL 里使用 Codex
请在实际运行 Codex 的同一个 WSL 发行版里安装和更新插件。Windows 桌面端可以提示 WSL 里的 Codex 插件已过期,但不能安全地替你在 Windows 侧执行更新,因为 shell、插件缓存、Python 和 ~/.codex home 都不是同一个环境。请从 Mem 复制更新命令,在 WSL 终端里运行,然后重启那里的 Codex。
启动上下文或 Codex 线程没有自动出现
重新运行 hook setup,然后重启 Codex:
HOOK_SETUP="$(find ~/.codex/plugins/cache -path '*/nowledge-mem/*/scripts/install_hooks.py' -print 2>/dev/null | sort | tail -1)"
test -n "$HOOK_SETUP" && python3 "$HOOK_SETUP"setup 会开启当前的 hook 功能,只在宿主仍暴露旧版 plugin-hook gate 时添加兼容开关,并为仍需要 ~/.codex/hooks.json 的 Codex 版本保留宿主级 Stop 兜底。打开 /hooks,确认 Nowledge Mem 的 SessionStart、UserPromptSubmit 和 Stop hook 均已启用并受信任。信任确认必须由用户完成,setup 不会绕过它。
codex mcp list 显示 Not logged in
先更新 nmem,确保它和你的 Mem app/server 版本一致。如果你使用本机桌面版 Mem,请在桌面端重新安装 CLI 配置,然后重新运行 hook setup:
pip install -U nmem-cli
nmem status
HOOK_SETUP="$(find ~/.codex/plugins/cache -path '*/nowledge-mem/*/scripts/install_hooks.py' -print 2>/dev/null | sort | tail -1)"
test -n "$HOOK_SETUP" && python3 "$HOOK_SETUP"不要运行 codex mcp login nowledge-mem。这个命令是给 OAuth MCP 服务器用的。Nowledge Mem 的 Codex 路径使用 nmem config mcp show --host codex 生成的 URL 和 headers。
显示 "plugin is not installed"
先运行 codex plugin marketplace add nowledge-co/community --sparse .agents --sparse nowledge-mem-codex-plugin(旧版 Codex 用 codex marketplace add nowledge-co/community),再用 codex plugin add nowledge-mem@nowledge-community 或 /plugins 安装,然后检查 ~/.codex/config.toml 里的插件 key 是否正确。
只会读取 Working Memory,不继续搜索或蒸馏
请先把插件更新到 0.1.26 或更高版本,重新运行 hook setup,并确认 Codex 能看到内置的 nowledge-mem MCP 与 UserPromptSubmit hook。如果你开启了 Codex 本地 Memory,请关闭 Allow memory generation from tool-assisted tasks。需要更强的仓库级行为时,再把插件里的 AGENTS.md 合并到项目根目录。如果 Mem 在远程机器上,或本地端口不是默认值,请在 ~/.codex/config.toml 中添加 mcp_servers.nowledge-mem 来覆盖内置地址。