先简单说明一下:
上一个帖子中,模型可以选择 「Jev Codex Router」 表示:当前任务交给 Jev 做“模型选择”,而不是固定使用某一个模型。
简单说:每个任务开始时,Jev 会根据难度选择合适的模型和推理强度。
所以它更像一个“自动变速箱”:
在同一个用户回合里,如果只是连续执行工具,Jev 可能维持同一个模型;遇到新问题、新回合、错误或上下文变化时,会重新判断。
下面是教程部分:
我没有直接运行网上的 curl | bash,是一套我实际走通的、可回滚的安装方法。
目标是:
▸ 不覆盖原来的 Codex 配置
▸ 不把 Jev 设成永久默认模型
▸ 不让 secret 进入 Git 或日志
▸ 随时可以恢复到安装前状态
完整流程分 7 步,建议照顺序执行。
第 1 步:准备环境和试用目录
要求:
•macOS
•Codex 已正常登录
•Node.js ≥ 22.19
•Python 3.12
•Git
•TypeSafe API Key
终端运行:
export TRIAL_ROOT="$HOME/Documents/jev-router-trial-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$TRIAL_ROOT"/{backup,logs,private,source}
chmod 700 "$TRIAL_ROOT/private"
node --version
python3 --version
git --version
如果 Node 版本太旧,先切换到 Node 24:
nvm install 24
nvm use 24
第 2 步:备份 Codex 配置
cp -p "$HOME/.codex/config.toml" \
"$TRIAL_ROOT/backup/config.toml"
/usr/bin/shasum -a 256 \
"$TRIAL_ROOT/backup/config.toml" \
> "$TRIAL_ROOT/backup/config.sha256"
确认备份有效:
/usr/bin/shasum -a 256 -c \
"$TRIAL_ROOT/backup/config.sha256"
输出必须是 OK。
同时记录当前默认模型:
grep -E '^(model|model_provider|model_reasoning_effort)' \
"$HOME/.codex/config.toml"
这一阶段不要修改任何 Codex 文件。
第 3 步:固定仓库版本,并先读安装脚本
git clone \
https://github.com/0xNatoshi/jev-codex-router.git \
"$TRIAL_ROOT/source/jev-codex-router"
git -C "$TRIAL_ROOT/source/jev-codex-router" \
checkout 8701ef788aa8cb0948f299538747fb01029d32b8
先看文档和脚本:
sed -n '1,240p' \
"$TRIAL_ROOT/source/jev-codex-router/README.md"
sed -n '1,260p' \
"$TRIAL_ROOT/source/jev-codex-router/install.sh"
sed -n '1,220p' \
"$TRIAL_ROOT/source/jev-codex-router/server/INSTALL.md"
不要直接运行根目录安装脚本。
我在固定版本中发现:根安装脚本会先关闭 discovery,再尝试启用 ChatGPT session,顺序存在冲突。
所以后面使用审阅过的手动安装步骤。
第 4 步:安装本地 Codex Router
export REPO_ROOT="$TRIAL_ROOT/source/jev-codex-router"
export ROUTER_ROOT="$REPO_ROOT/router"
cd "$ROUTER_ROOT"
npm ci --include=dev --ignore-scripts
./install.sh --no-provider --no-tray
这里不要加 --no-discovery。
安装后检查:
"$ROUTER_ROOT/bin/codex-router" status
"$ROUTER_ROOT/bin/codex-router" doctor
如果安装器最后因为“没有 provider”返回非零,但状态里显示 Router 已启动、4200–4203 正在监听,不要立即重装。接下来注册 Jev provider 后再重新检查。
第 5 步:配置 TypeSafe 和 Jev provider
先创建只允许当前用户读取的 secret 文件:
umask 077
touch "$TRIAL_ROOT/private/jev.env"
chmod 600 "$TRIAL_ROOT/private/jev.env"
用编辑器打开:
"${EDITOR:-vi}" "$TRIAL_ROOT/private/jev.env"
写入下面这一行,把值替换成你自己的 key:
TYPESAFE_API_KEY=你的_API_KEY
不要把 key 写进命令行、Git、截图或日志。
然后执行:
cd "$REPO_ROOT"
export JEV_ENV_FILE="$TRIAL_ROOT/private/jev.env"
node server/configure-model.mjs
node server/configure-auth.mjs
"$ROUTER_ROOT/bin/codex-router" refresh-catalog
"$ROUTER_ROOT/bin/control" picker set jev/auto show
"$ROUTER_ROOT/bin/codex-router" chatgpt-session enable
检查模型目录里是否出现 jev/auto:
"$ROUTER_ROOT/bin/codex-router" status
第 6 步:启动 Jev 服务并重新加载父 Router
cd "$REPO_ROOT"
bash server/install-service.sh
"$ROUTER_ROOT/bin/control" service restart
检查 Jev 服务:
curl -fsS http://127.0.0.1:4319/health
预期看到:
{"ok":true,"service":"jev-router",...}
再检查端口:
/usr/sbin/lsof -nP -iTCP:4202 -sTCP:LISTEN
/usr/sbin/lsof -nP -iTCP:4319 -sTCP:LISTEN
注册 provider 后必须重启父 Router,否则它可能还不知道 jev/auto 已经存在。
第 7 步:做 3 个真实 smoke test
先做最小测试:
cd "$REPO_ROOT"
python3 server/smoke.py
然后分别测试:
A:简单文本修改
B:小型代码实现
C:安全审查或架构分析
观察每次的:
→实际模型
→thinking / effort
→是否 fallback
→是否 retry
→HTTP 状态
→总耗时
我这次的结果是:
A → GPT-5.6-Luna / low
B → GPT-5.6-Terra / low
C → GPT-6-Astra / high
三次都是 HTTP 200,没有 fallback,也没有 retry。
最后运行:
"$ROUTER_ROOT/bin/codex-router" doctor
git -C "$REPO_ROOT" status --short
确认 doctor 通过、仓库没有源码改动,再退出并重新打开 Codex,在模型选择器里手动选择 Auto (Jev)。
如果成功,重启后就可以在对话框中选择「Jev Codex Router」模型了!