Claudian + Codex + Ollama 本地模型配置
概述
把 Obsidian 的 Claudian(BRAT 安装的 realclaudian)聊天插件接到本地 Codex CLI,再让 Codex 走 Ollama 本地模型,实现"Obsidian 对话框 → Codex → Ollama 本地推理"的纯本地链路。
触发场景
- 用户要在 Claudian 里用 Codex / Ollama / 本地模型
- Claudian 对话框打不开、没有模型、或默认 provider 起不来
- 提到 realclaudian、Claudian + Codex、Obsidian 调本地 codex
⚠️ 头号坑:真实配置文件位置
Claudian 的 provider 配置不在插件目录的 data.json 里,而在 vault 根目录的:
<vault>/.claudian/claudian-settings.json
插件代码里 Sh = ".claudian/claudian-settings.json"。插件目录下的 plugins/realclaudian/data.json 只存标签页布局等次要数据(tabManagerState),不是 provider 配置来源。改错文件 = 完全不生效。
> 反面教训:曾经连改 4 版 data.json 都没用,因为根本不读它做 provider 配置。
前置检查
确认三者就位(并行执行即可):
which codex && codex --version # Codex CLI
which ollama && ollama list # Ollama + 已装模型
curl -s http://127.0.0.1:11434/v1/models # Ollama API 健康(应 200)
ls <vault>/.obsidian/plugins/realclaudian/main.js # Claudian 已装
若 claude CLI 未装但用户只想用 Codex,无需安装 claude——但必须把默认 provider 切到 codex(见步骤 4),否则默认 provider 是 claude 会起不来导致对话框打不开。
配置流程
步骤 1:让 Codex 走 Ollama(~/.codex/config.toml)
检查 ~/.codex/config.toml。Codex 用 Ollama 的标志是存在 model_provider 指向 ollama,例如:
model_provider = "ollama-launch-codex-app"
model = "gemma4:12b"
若已配好则跳过。Ollama 的 OpenAI 兼容端点是 http://127.0.0.1:11434/v1。验证链路:
cd ~ && timeout 200 codex exec --skip-git-repo-check --model gemma4:12b "只回复一个字:好"
# 应输出「好」
步骤 2:让 vault 成为 Codex 受信目录(关键坑)
Codex 拒绝在"非受信 git 仓库目录"运行;而 Claudian 调 codex 时不传 --skip-git-repo-check,所以 vault 必须是受信 git 仓库,否则 Claudian 一调 codex 就被拦。
VAULT="<vault 绝对路径>"
git -C "$VAULT" init # 只建 .git,不提交任何文件,可逆
在 ~/.codex/config.toml 追加信任项(注意 TOML 键名要带引号包裹含特殊字符的路径):
[projects."<vault 绝对路径>"]
trust_level = "trusted"
验证(在 vault 内、不带 skip 标志,应能出结果):
cd "<vault>" && timeout 200 codex exec --json --model gemma4:12b "只回复一个字:好"
无 not a trusted directory 报错即通过。
步骤 3:取本地 Ollama 对话模型清单
ollama list | awk 'NR>1{print $1}'
排除纯嵌入模型(如 nomic-embed-text),只保留对话模型。模型名带冒号(如 gemma4:12b)会原样传给 codex --model,归一化只按行拆分,冒号保留,不要改名。
步骤 4:改对文件 —— .claudian/claudian-settings.json
先备份再改:
cp "<vault>/.claudian/claudian-settings.json" "<vault>/.claudian/claudian-settings.json.bak"
在该文件中改/设以下字段(codex 的完整字段见 references/codex-provider-schema.md):
providerConfigs.codex.enabled→trueproviderConfigs.codex.cliPath→ codex CLI 绝对路径(如/opt/homebrew/bin/codex)providerConfigs.codex.customModels→ 本地模型名,换行分隔的字符串(步骤 3 的结果)settingsProvider→"codex"(关键:若 claude CLI 未装,必须切到 codex,否则默认 provider 起不来、对话框打不开)savedProviderModel.codex→ 默认模型(如"gemma4:12b")savedProviderPermissionMode.codex→"yolo"savedProviderEffort.codex→"high"
customModels 字符串示例(JSON 中换行转义为 \n):
"customModels": "qwen3:8b\ngemma4:e4b\ngemma4:12b\nqwen3.5:9b\nqwen3-coder:30b\nqwen3.6:35b"
改完用 python3 -c "import json;json.load(open('<文件>'))" 校验合法性。
> ⚠️ 不要去改 plugins/realclaudian/data.json,没用。
步骤 5:重启 Obsidian 并验证
Claudian 在启动时读 .claudian/claudian-settings.json,改完必须:
- 完全退出 Obsidian(macOS Cmd+Q)再重开。
- 打开对话框:左侧 ribbon 的机器人图标,或 Cmd+P →
Open chat view。 - 默认应已是 Codex;左下角模型选择器里能看到带 "Custom model" 标记的本地模型,选一个发「你好」测试。
自动化脚本
scripts/configure.py 可一键完成步骤 2–4(传 vault 路径):自动 git init + 写 codex 信任、取 ollama 模型、备份并 patch .claudian/claudian-settings.json、设 settingsProvider=codex。
python3 scripts/configure.py "<vault 绝对路径>" --codex-path /opt/homebrew/bin/codex
脚本会先备份、校验 JSON、并在末尾提示重启 Obsidian。详见脚本内说明。
排查清单
- 对话框打不开:99% 是
settingsProvider指向了没装 CLI 的 provider(默认 claude)。切到 codex。其次按 Cmd+Shift+I 看 Console 红色报错。 - 没有模型:
customModels没填或填错文件(要填.claudian/claudian-settings.json,不是data.json)。界面里的 Discover 按钮对 Ollama 本地模型无效(它查的是云端 app-server),靠customModels手填。 - Codex 调用被拦(trusted directory):vault 没做
git init+ 信任配置。补步骤 2。 - Codex 报 model provider 错:
~/.codex/config.toml的model_provider没指向 ollama,或 ollama 没启动(11434 不通)。 - 改了配置没生效:没真正重启 Obsidian(光关窗口不行,要 Cmd+Q)。
关键事实速记
| 项 | 值 |
|---|---|
| Claudian 真实配置文件 | <vault>/.claudian/claudian-settings.json |
| 插件目录 data.json | 仅存次要数据,不是 provider 配置来源 |
| Codex 配置文件 | ~/.codex/config.toml |
| Codex 信任坑 | Claudian 不传 --skip-git-repo-check,vault 需 git init + trust_level=trusted |
| Ollama 端点 | http://127.0.0.1:11434/v1 |
| 本地模型填充字段 | providerConfigs.codex.customModels(换行分隔字符串) |
| 默认 provider 切换 | settingsProvider: "codex"(claude CLI 缺失时必做) |