Skip to content

Repository files navigation

ChatGPT Codex App Plus
把好用的 Codex 客製化,變成可安裝、可驗證、可持續同步的公開工具箱。

繁體中文 · English · About · Security

CI MIT License Python 3.11+

社群維護的獨立專案,並非 OpenAI、Anthropic 或其他上游專案的官方發行版。

30 秒看懂

Codex 很強,但真正順手的工作環境通常散落在個人設定、skills、PowerShell 工具與長期累積的操作規則裡。這個 repo 把其中可公開、可重用的部分整理成一套「Plus」層:

  • 工程技能不分叉:review、長跑監督、驗證與 incident workflows 統一指向獨立的 canonical toolkit,不再維護第二份副本。
  • Session 工作看得清楚:Context Canvas 把 hook transport identity、可選的任務地圖、明示 offload 的可回取 references,以及一次性 opt-in 歷史 snapshot 分開;另附只在 meaningful checkpoint 觸發的 evidence-first reflection skill。缺少 Canvas 不會把原本可做的工作卡住。
  • 分工有煞車:需要 subagent 時先做成本、獨立性與寫入所有權判斷,再用原生 per-spawn model/effort 路由合適的 worker。
  • 設定可重現:提供安全預設、全域 AGENTS.md 範例與可選安裝器。
  • 同步不洩密:只有 manifest allow-list 內的檔案能進 repo;任何憑證、私有路徑或未知檔案都會 fail closed。

內容

Component 解決什麼問題 發佈方式
context-canvas-codex 可選的 session 任務導航、跨 session 明示延續、具 digest-bound range 與 deterministic preview 的文字 references、default-off 一次性 snapshots,以及 advisory bounded reflection 內含 plugin、選配
smart-agentic-engineering-toolkit 工程 skills,涵蓋規格、實作、審查與驗收;區分模擬、真實事件回放及真實派工證據 canonical repo,版本鎖定 pointer
operate-a2a-superhub A2A Superhub 的 bounded operation 與診斷流程 內含、選配
baton-fanout-skill 通用 dispatch brake,加上 Codex 原生 Luna/max bounded codegen/低判斷力 scout route 與相對 working lane 的 review floor canonical repo
Understand Anything codebase knowledge graph 與理解工具 上游 pointer
OpenAI skills 官方與 curated skills 上游 pointer

完整需求、成熟度與來源請看 component catalog。已有 canonical public repo 的項目不重複 vendoring,以避免授權混淆與 fork 漂移。

Context Canvas 的 Hermes 對照、Codex 適配、安全邊界與可重跑效能量測整理在 技術說明

快速開始

git clone https://github.com/phenomenoner/Chatgpt-Codex-App-Plus.git
Set-Location Chatgpt-Codex-App-Plus
python scripts/public_sync.py validate

安裝 canonical Smart Agentic Engineering Toolkit:下列固定 commit 包含 v0.5.0 之後的驗收回報更新,並非新的版本標籤。未完成真實派工時,會分別說明自動測試預算與必要的人工操作。

codex plugin marketplace add phenomenoner/smart-agentic-engineering-toolkit --ref e64c60f946fb42289ffaabecd59660a4940c0826
codex plugin add smart-agentic-engineering-toolkit@smart-agentic-engineering-toolkit
codex plugin list

安裝 Context Canvas plugin:

codex plugin marketplace add phenomenoner/Chatgpt-Codex-App-Plus --ref context-canvas-codex-v0.7.0
codex plugin add context-canvas-codex@codex-app-plus
codex plugin list

先開一個新 task,確認模型真的收到該 task 的 opaque Context Canvas ID。 若只有 plugin/skill/MCP 出現、卻沒有新 ID,請從本 repo 根目錄安裝同一份 SessionStartUserPromptSubmitPostToolUse hooks 到 Codex 的 user config layer:

python -I plugins/context-canvas-codex/scripts/install_context_canvas_hook.py install
python -I plugins/context-canvas-codex/scripts/install_context_canvas_hook.py check

接著在 Codex CLI 用 /hooks 檢查並信任三個定義。若目前 task 的下一個 prompt 收到 opaque ID,代表這個版本有載入 UserPromptSubmit;缺少 ID 只代表 Canvas 能力不可用,不會阻塞原任務。若要驗證 capture,再開一個全新 task 重驗 SessionStart ID,先用 snapshot_capture_next 指定下一個 harmless tool call, 再確認 _snapshots/events 出現且只出現該次 request 的新 manifest。 Codex CLI 0.146.0 的先前本機實測是 plugin MCP/skill 會載入、plugin-bundled hook 卻未執行;這個顯式 installer 就是相容層。它只接受精確 manifest-bound v1/v2/v3 hook generations 與可證明 owned 的 adapter bytes,保留既有 hooks 與 hash-addressed backup。顯式 install 可以在備份後接管已完全等同目前定義的 groups;uninstall 則必須先由 canonical manifest 或精確的目前 adapter 證明刪除權,只有 group 結構相等並不足夠。單一 Codex-home-scoped OS lock 序列化 cooperating install/check/uninstall;該 lock 只是 host coordination metadata,不是 ownership 證據、Canvas 狀態或工作 gate。安裝、catalog discovery 或 tool call 顯示 started 都不等於實際執行完成。

本 repo 不再複製 general-engineering skills。若要安裝仍由這裡維護的選配 operate-a2a-superhub,先預覽安裝位置與動作:

pwsh -File scripts/install.ps1 -Skill operate-a2a-superhub -WhatIf

確認後安裝:

pwsh -File scripts/install.ps1 -Skill operate-a2a-superhub

Codex 目前會從 user-level .agents/skills、repo-level .agents/skills 與系統位置載入 skills;如新增 skill 後未立即出現,重啟 Codex。Plugin 則可同時包 skills、MCP server 與 lifecycle hooks。詳見官方 Build skillsPackage plugins

安全設定先行

config/config.example.tomlworkspace-writeon-request,不把個人的 full-access 設定包裝成公開 quick start。config/AGENTS.example.md 則把最小充分測試、review fixed point、Baton 與公開 hygiene 組成可選的全域規則範例。

Codex 現在支援 [agents] default_subagent_modeldefault_subagent_reasoning_effort 與每次 spawn 的明確 override;explicit spawn 值優先於全域 default。範例把 defaults 留在註解中,因為 Baton 依 task class 路由:穩定 codegen 與低判斷力 bounded scouts 可用 Luna/max,架構、安全與獨立 review 不應被同一個 default 誤派。詳見官方 SubagentsConfig reference

為什麼同步器是 fail closed

scripts/public_sync.py 不會掃描或鏡像整個 Codex home。它只接受 public source manifest 內逐項核准的來源,並且:

  1. 拒絕 source/destination path escape、symlink、binary、backup 與 runtime-state 檔案。
  2. 拒絕個人絕對路徑、token、secret assignment 與 private runtime 訊號。
  3. 將文字正規化為 UTF-8/LF,再生成逐檔 SHA-256 lock。
  4. 對少數非機密但容易誤判的字串,只允許 manifest 內逐檔、逐 finding、附理由的例外。
  5. 新來源、新 component 或擴大的 include pattern 必須先由人工修改 allow-list;既有核准 component 內的新檔仍須通過完整 public diff 檢閱,自動化不得自行擴權。

架構與 threat model 見 docs/architecture.md,每週同步契約見 docs/weekly-sync.md

Context Canvas 的分層

0.7 延續 0.6 的四層 Canvas core,並加上一個獨立的 context-canvas-reflection v0 preview skill。它只在 repeated same-cause、關鍵假設被推翻、local green 但 real use 失敗、scope 漂移、material phase boundary 或尚未取得 owner approval 的 authority-sensitive 下一步等 meaningful checkpoint 進行一次 reflection;先重驗 current evidence,再輸出一個 bounded CONTINUEINVESTIGATEESCALATE disposition。第一次普通失敗、健康前進、固定時間間隔或只是有/沒有 Canvas 都不構成 trigger。它是 advisory companion,不是 controller,也不擁有 replan、rollback、pause、publication 或 external effect。Public plugin 預設關閉 implicit invocation;使用者可用 $context-canvas-reflection 明示呼叫,或在自己控制的 AGENTS.md 加入 bounded trigger policy 來 opt in。

Canvas core 仍把四件事拆開:hook-derived opaque ID 只是 Canvas transport provenance;session map 提供目標、決策、進度、依賴、阻塞與下一步導航;大型文字結果用 reference_put/search/preview/read/delete 明示 offload 與有界回取;歷史 tool payload 只有先呼叫 snapshot_capture_next 才保存下一個匹配 callback。Canvas 不是 source of truth、授權系統、WAL、release gate 或 workflow engine,缺少 identity、map 或 lineage 不會阻塞工作。canvas_start 只在導航有具體價值時建立;同 ID 的文字差異只回報 conflict、不覆寫,跨 session 延續仍用 canvas_continue 明示前身以保留 v3 相容性。

明示 reference 會先套用文字 redaction,再以 bounded UTF-8 chunks 原生回取。內容搜尋結果帶有 source digest、精確 UTF-8 byte range 與可直接使用的 read hint;reference_preview 則用 log-v1 或嚴格 line-oriented search-results-v1 產生 ephemeral exact slices。Preview 不會自動執行、不改寫 stored body、不建立衍生 cache,也不以 lossy summary 冒充原文;無法形成更小的安全預覽時會回傳明確 bounded status。Reference 是歷史資料,若要做 current-state claim 仍需重查 live source。Snapshot capture 預設關閉;armed request 有 expiry、只消耗一次、精確 tool mismatch 不會消耗,Canvas 自己的工具也會被忽略。前版留下且其他欄位完全 canonical 的 wildcard request 只允許 cancel、exact replace 或 expiry retirement,永不匹配 callback;其他 malformed state 保留並 fail closed。匹配時保存 hook 收到的完整 model-facing payload(依宣告 policy sanitization,超過上限則整筆跳過而不截斷),並以 SHA-256+deterministic gzip 做 dedupe。Sanitizer 與既有 TTL、pin、transitive blob 驗證及 GC 相容行為保留。snapshot_list 回傳 manifest;snapshot_read(include_payload=true) 可明示讀取 bounded chunks,完整本機檔案 export 仍走 CLI。

目前 Codex 會在支援的 handler 回傳已 opt-in post-tool payload 時呼叫 PostToolUse;這是 host transport surface,不是 Canvas 的自動保存規則。Bash 即使 non-zero exit 仍可能有 callback;dispatch/handler failure 若沒有 callback payload 就無法保存。安裝後應在全新 task 先 arm 一次 harmless exact tool call,再檢查新 manifest;不能只看 plugin catalog 或設定檔推論 capture 已生效。

repo 內附 machine-readable benchmark,涵蓋 persistent MCP read、fresh CLI、snapshot store write、warm dedupe、manifest read、exact GC preview,以及 cold small/large hook。直接 store-write 的量測不代表產品預設會 capture。GC 會驗證 event/object/blob graph 並找出 orphan;數字也會受 Python、ACL、儲存、防毒、同機負載與 payload shape 影響。

非互動 CLI 若採 approval_policy = "never",需要核准的 MCP call 會被取消, 不是自動放行。驗收時必須明確設定已審過的 plugin-scoped MCP approval policy,並以 completed tool receipt 加 canonical JSON readback 判定;詳見 技術說明

這個 repo 現在提供可直接安裝的 Context Canvas community plugin、選配 A2A skill,以及指向 canonical engineering toolkit 的版本鎖定 pointer。它不是 OpenAI 官方 plugin;repo marketplace 只是讓來源、版本與安裝路徑可檢查、可重現。

License

本 repo 自有內容採 MIT License。Pointer 指向的第三方或上游內容仍適用各自的授權;本 repo 不重新授權那些內容。詳見 NOTICE.md

Releases

Packages

Contributors

Languages