Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

EstellaNines/CodexPlusPlus

Repository files navigation

更新日志

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
Loading

1.2.1 变更地图

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 更新源]
Loading

发布链路

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]
Loading

插件制作流程

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
Loading

1. 先选插件类型

类型 适合做什么 最小产物
脚本市场用户脚本 修改 Codex App 页面、显示统计、增加按钮、补 UI 能力 一个 .js 文件与市场 index.json 条目
Skill 插件 给 Codex 增加一套工作流、说明书、领域知识或固定操作方法 .codex-plugin/plugin.jsonskills/<name>/SKILL.md
MCP 插件 接入外部服务、本地工具、数据库、浏览器或自动化能力 .codex-plugin/plugin.json.mcp.json
App 插件 声明可被 Codex 调起或协作的本地应用能力 .codex-plugin/plugin.json.app.json

若只是改 Codex App 页面,优先做"脚本市场用户脚本"。若要让 Codex 获得新的工具、流程或外部能力,做"原生插件包"。

2. 制作脚本市场用户脚本

脚本市场脚本会被 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_VERSIONwindow.__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 后重新安装即可。

3. 制作原生插件包

原生插件包适合承载 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.displayNameshortDescriptionlongDescriptiondeveloperNamecategorycapabilitiesdefaultPrompt 都要填写。
  • 不保留 TODO 占位,不写未被支持的字段。
  • skillsmcpServersapps 只指向真实存在的目录或文件。
  • 市场条目须包含 policy.installationpolicy.authenticationcategory

4. 插件验收清单

  • 名称稳定: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 - 2026年06月07日

  • 技术说明: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 - 2026年06月07日

  • 将项目版本更新为 1.2.0+1,并将默认更新源切换到 EstellaNines/CodexPlusPlus
  • 修复 Codex 原生模型/推理位置中 Fast 模式重复显示的问题,只在最外层推理触发器上显示一枚状态标签。
  • 将原生服务模式菜单改为幂等更新,避免扫描时反复删除和重建菜单区块。
  • 更新 macOS 打包逻辑,将 1.2.0+1 拆分为标准 plist 版本字段:CFBundleShortVersionString=1.2.0CFBundleVersion=1
  • 新增回归测试,覆盖 Fast 原生控件去重、菜单幂等、fork 更新源和 macOS plist 版本字段。
  • 重新构建并发布 CodexPlusPlus-1.2.0+1-macos-arm64.dmg,同时上传 latest.json 供更新检查使用。

1.1.8 - 2026年05月26日

  • 新增上游分支 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_effortplan_mode_reasoning_effort 重复写入导致 TOML 解析失败的问题。
  • 修复重复插件表、空配置体、布尔值解析等导致配置文件解析失败的问题。
  • 优化供应商详情页布局,保持顶部返回和提示区域固定,增大默认窗口尺寸并减少顶部缝隙。
  • 移除脚本安装时的 checksum 阻断,避免市场脚本校验不一致导致安装失败。
  • 清理关于页和状态页中不需要展示的登录、当前供应商、配置文件路径等信息。
  • 调整提示信息居中显示,避免遮挡重启按钮。
  • 更新讨论群二维码、README 说明和 macOS DMG 打包脚本。

About

An enhanced tool for CodexApp, striving to make Codex better to use and more comfortable 一个CodexApp的增强工具,努力让Codex变得更好用更舒服

Resources

Contributing

Stars

Watchers

Forks

Packages

Contributors

Languages

  • Rust 65.8%
  • JavaScript 20.8%
  • TypeScript 10.7%
  • CSS 2.2%
  • Shell 0.3%
  • NSIS 0.2%

AltStyle によって変換されたページ (->オリジナル) /