Latest Release Date macOS Status
timeline
title Codex++ 版本脉络
2026年06月07日 : 1.2.1 : 插件版本门控 : Provider Sync 目标选择 : fork 发布线
2026年06月07日 : 1.2.0+1 : Fast 模式去重 : 菜单幂等更新 : fork 更新源
2026年05月26日 : 1.1.8 : Upstream worktree : 工具与插件页 : Provider Sync
flowchart LR
A[Codex App 版本] --> B{插件解锁策略}
B -->|旧版| C[强制解锁入口]
B -->|新版| D[插件市场解锁]
B -->|未知| E[双策略兜底]
F[Provider Sync] --> G[config 目标]
F --> H[rollout 历史目标]
F --> I[sqlite 索引目标]
F --> J[manual 保存目标]
K[保留 fork 特性] --> L[Fast 去重]
K --> M[渐变图标]
K --> N[EstellaNines 更新源]
flowchart TD
A[源码版本 1.2.1] --> B[cargo build --release]
B --> C[package-dmg.sh 1.2.1 arm64]
C --> D[CodexPlusPlus-1.2.1-macos-arm64.dmg]
D --> E[签名与 plist 校验]
E --> F[GitHub Release v1.2.1]
F --> G[latest.json]
flowchart LR
A[确定插件类型] --> B{运行位置}
B -->|Codex App 页面| C[脚本市场用户脚本]
B -->|Codex 工具体系| D[原生插件包]
C --> E[编写单文件 JS]
C --> F[index.json 登记]
D --> G[.codex-plugin/plugin.json]
D --> H[skills / mcp / apps]
E --> I[校验与发布]
F --> I
G --> I
H --> I
| 类型 | 适合做什么 | 最小产物 |
|---|---|---|
| 脚本市场用户脚本 | 修改 Codex App 页面、显示统计、增加按钮、补 UI 能力 | 一个 .js 文件与市场 index.json 条目 |
| Skill 插件 | 给 Codex 增加一套工作流、说明书、领域知识或固定操作方法 | .codex-plugin/plugin.json 与 skills/<name>/SKILL.md |
| MCP 插件 | 接入外部服务、本地工具、数据库、浏览器或自动化能力 | .codex-plugin/plugin.json 与 .mcp.json |
| App 插件 | 声明可被 Codex 调起或协作的本地应用能力 | .codex-plugin/plugin.json 与 .app.json |
若只是改 Codex App 页面,优先做"脚本市场用户脚本"。若要让 Codex 获得新的工具、流程或外部能力,做"原生插件包"。
脚本市场脚本会被 Codex++ 下载到用户脚本目录,并随注入脚本一起进入 Codex App 页面。推荐一个脚本只做一件事,例如统计 token、显示上下文、增加导出按钮或修补某个 UI。
最小脚本形制:
(() => { "use strict"; const SCRIPT_ID = "my-codex-widget"; const SCRIPT_VERSION = "0.1.0"; const STYLE_ID = "my-codex-widget-style"; if (window.__myCodexWidgetVersion === SCRIPT_VERSION) return; window.__myCodexWidgetVersion = SCRIPT_VERSION; function ensureStyle() { if (document.getElementById(STYLE_ID)) return; const style = document.createElement("style"); style.id = STYLE_ID; style.textContent = ` .my-codex-widget { display: inline-flex; gap: 6px; } `; document.head.appendChild(style); } function mount() { ensureStyle(); const target = document.querySelector("main"); if (!target || target.querySelector(".my-codex-widget")) return; const node = document.createElement("div"); node.className = "my-codex-widget"; node.textContent = `${SCRIPT_ID} ${SCRIPT_VERSION}`; target.appendChild(node); } mount(); new MutationObserver(mount).observe(document.documentElement, { childList: true, subtree: true, }); })();
脚本写作要点:
- 用 IIFE 包裹,避免污染全局变量。
- 用
SCRIPT_VERSION与window.__xxxVersion做幂等保护,更新时记得升版。 - 所有 DOM 查询都要容错,Codex App 页面结构会随版本变化。
- 样式使用唯一
STYLE_ID,节点使用唯一 class,避免和 Codex 原生样式冲突。 - 不在脚本里写死密钥、token 或私人路径。
- 若脚本会安装到市场,先在本地跑
node --check scripts/<name>.js。
市场条目写在脚本市场仓的 index.json 中:
{
"version": 1,
"updated_at": "2026年06月07日T00:00:00.000Z",
"scripts": [
{
"id": "my-codex-widget",
"name": "My Codex Widget",
"description": "在 Codex App 页面中显示一个示例组件。",
"version": "0.1.0",
"author": "EstellaNines",
"tags": ["codex", "ui"],
"homepage": "https://github.com/EstellaNines/my-codex-widget",
"script_url": "https://raw.githubusercontent.com/EstellaNines/CodexPlusPlusScriptMarket/main/scripts/my-codex-widget.js",
"sha256": "<shasum -a 256 scripts/my-codex-widget.js 的结果>"
}
]
}发布前检查:
node --check scripts/my-codex-widget.js
shasum -a 256 scripts/my-codex-widget.js
jq -e '.scripts[] | select(.id == "my-codex-widget")' index.json发布后在 Codex++ 管理工具中进入"脚本市场",刷新市场并安装脚本;若已安装旧版,升高 version 后重新安装即可。
原生插件包适合承载 Skill、MCP、App 声明和配套资源。插件名使用小写短横线,长度不超过 64 个字符。
推荐目录:
my-plugin/
.codex-plugin/
plugin.json
skills/
my-skill/
SKILL.md
scripts/
assets/
.mcp.json
.app.json
最小 plugin.json:
{
"name": "my-plugin",
"version": "0.1.0",
"description": "My Plugin plugin",
"author": {
"name": "EstellaNines"
},
"skills": "./skills/",
"interface": {
"displayName": "My Plugin",
"shortDescription": "Use My Plugin in Codex.",
"longDescription": "My Plugin adds one focused workflow to Codex.",
"developerName": "EstellaNines",
"category": "Productivity",
"capabilities": [],
"defaultPrompt": "Help me use My Plugin."
}
}若插件确实包含 MCP 或 App 声明,再加入对应字段;没有对应文件时不要写:
{
"mcpServers": "./.mcp.json",
"apps": "./.app.json"
}个人市场条目示例:
{
"name": "personal",
"interface": {
"displayName": "Personal"
},
"plugins": [
{
"name": "my-plugin",
"source": {
"source": "local",
"path": "./plugins/my-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
]
}原生插件制作要点:
.codex-plugin/plugin.json必须存在,name与外层目录名保持一致。version使用严格 semver,例如0.1.0。interface.displayName、shortDescription、longDescription、developerName、category、capabilities、defaultPrompt都要填写。- 不保留
TODO占位,不写未被支持的字段。 skills、mcpServers、apps只指向真实存在的目录或文件。- 市场条目须包含
policy.installation、policy.authentication与category。
- 名称稳定:
id/name小写、短横线、无空格。 - 版本已升:脚本市场脚本与原生插件都要随发布递增版本。
- 可回滚:旧脚本或旧插件条目仍可从 Git 历史恢复。
- 可校验:脚本至少通过
node --check,市场 JSON 至少通过jq。 - 可解释:README 写清功能、安装方式、权限边界和已知限制。
- 不越权:不收集隐私数据,不写死凭据,不访问无关站点。
| 版本 | 日期 | 重点 | 产物 |
|---|---|---|---|
1.2.1 |
2026年06月07日 | 插件版本门控、Provider Sync 目标选择、fork 特性保留 | CodexPlusPlus-1.2.1-macos-arm64.dmg |
1.2.0+1 |
2026年06月07日 | Fast 去重、菜单幂等、fork 更新源、macOS 版本字段规范 | CodexPlusPlus-1.2.0+1-macos-arm64.dmg |
1.1.8 |
2026年05月26日 | Upstream worktree、工具与插件页、Provider Sync、配置隔离 | 多平台发行件 |
- 技术说明:1.2.1 相对 1.2.0 技术更新说明。
- 将项目版本更新为
1.2.1,继续使用EstellaNines/CodexPlusPlus作为默认更新源。 - 从源仓
v1.2.3保守移植插件版本门控:根据 Codex App 版本选择 legacy 入口解锁或 modern 插件市场解锁,未知版本双策略兜底。 - 拆分插件增强开关,分别提供「插件市场解锁」「强制解锁入口」「特殊插件强制安装」,避免旧版入口解锁与新版市场解锁互相牵连。
- 从源仓
v1.2.3保守移植 Provider Sync 目标选择,可从 config、rollout、sqlite 与手动保存记录发现同步目标。 - 增强 Provider Sync 备份 metadata,并修复 global state 中
open-in-target-preferences.perPath的路径归一。 - 脚本市场默认源改为
EstellaNines/CodexPlusPlusScriptMarket,首批自家清单收录 Token Usage 与 Context Used Meter。 - 保留 fork 既有 Fast 原生位置去重、服务模式菜单幂等、渐变图标、macOS
AppBundles打包结构与 README 精简策略。
- 将项目版本更新为
1.2.0+1,并将默认更新源切换到EstellaNines/CodexPlusPlus。 - 修复 Codex 原生模型/推理位置中 Fast 模式重复显示的问题,只在最外层推理触发器上显示一枚状态标签。
- 将原生服务模式菜单改为幂等更新,避免扫描时反复删除和重建菜单区块。
- 更新 macOS 打包逻辑,将
1.2.0+1拆分为标准 plist 版本字段:CFBundleShortVersionString=1.2.0、CFBundleVersion=1。 - 新增回归测试,覆盖 Fast 原生控件去重、菜单幂等、fork 更新源和 macOS plist 版本字段。
- 重新构建并发布
CodexPlusPlus-1.2.0+1-macos-arm64.dmg,同时上传latest.json供更新检查使用。
- 新增上游分支 worktree 支持,可从上游仓库/分支创建和选择独立工作区。
- 新增上游分支列表获取、默认值处理、远端解析和 worktree 创建相关接口与测试。
- 优化供应商同步逻辑,保留 rollout 文件 mtime,减少同步后不必要的会话状态变化。
- 新增独立的「工具与插件」页面,用于统一管理 Codex++ / Codex 的 MCP、skills、plugins,不再绑定到单个供应商。
- 切换供应商时会合并当前启用的工具与插件配置,同时避免把供应商专属配置误写入通用配置。
- 工具与插件列表改为从当前 Codex 配置实时读取启用状态,支持直接开关和删除条目。
- 调整通用配置提取逻辑,改为手动提取,减少自动覆盖和配置污染。
- 修复供应商切换隔离问题,避免
model_catalog_json、旧model_provider、历史 provider 表和旧auth.json被带到新供应商。 - 修复纯 API 模式下
auth.json没有写入 API Key 的问题,并固定供应商 provider 名称为CodexPlusPlus。 - 优化模型目录写入方式,支持与原始模型目录合并,并在预览中显示真实路径。
- 供应商配置页新增模型插入方式、模型列表、上下文大小、压缩上下文大小、目标功能等配置项。
- 官方模式下隐藏仅混入 API Key 场景使用的模型列表和模型插入方式。
- 将 Base URL、API Key、上游协议移动到模型列表之前,测试模型和上下文选项收进「更多选项」。
- 修复
model_reasoning_effort、plan_mode_reasoning_effort重复写入导致 TOML 解析失败的问题。 - 修复重复插件表、空配置体、布尔值解析等导致配置文件解析失败的问题。
- 优化供应商详情页布局,保持顶部返回和提示区域固定,增大默认窗口尺寸并减少顶部缝隙。
- 移除脚本安装时的 checksum 阻断,避免市场脚本校验不一致导致安装失败。
- 清理关于页和状态页中不需要展示的登录、当前供应商、配置文件路径等信息。
- 调整提示信息居中显示,避免遮挡重启按钮。
- 更新讨论群二维码、README 说明和 macOS DMG 打包脚本。