Skip to content

Commit d8bae0e

Browse files
authored
Add Everything OpenAI Codex (#128)
* Add Everything OpenAI Codex * Trim Everything OpenAI Codex marketplace bundle * Add newline to EOC icon * Sync EOC marketplace metadata * Keep EOC mirror metadata-only
1 parent 9f127f0 commit d8bae0e

8 files changed

Lines changed: 173 additions & 3 deletions

File tree

.agents/plugins/marketplace.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,21 @@
265265
"category": "Development & Workflow",
266266
"description": "MCP server exposing reasoning, code, anti-deception, and memory harness tools for Codex."
267267
},
268+
{
269+
"name": "eoc",
270+
"displayName": "Everything OpenAI Codex",
271+
"source": {
272+
"source": "local",
273+
"path": "./plugins/mturac/everything-openai-codex"
274+
},
275+
"policy": {
276+
"installation": "AVAILABLE",
277+
"authentication": "ON_INSTALL"
278+
},
279+
"category": "Development & Workflow",
280+
"description": "EOC is an open-source operating system for Codex workflows with 200+ skills, agents, hooks, rules, memory, safety gates, install profiles, and cross-harness adapters.",
281+
"icon": "./plugins/mturac/everything-openai-codex/assets/icon.svg"
282+
},
268283
{
269284
"name": "frappe-agent",
270285
"displayName": "Frappe Agent",

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ Third-party plugins built by the community. [PRs welcome](#contributing)!
142142
- [Development Skills](https://github.com/reidemeister94/development-skills) - Three-tier triage (PASS_THROUGH / LIGHT / FULL 4-phase) development workflow for Codex and Claude Code with language auto-detection (Python, Java, TypeScript, Swift, frontend) and a staff-reviewer subagent for fresh-eyes review on every change.
143143
- [ejentum-mcp](https://github.com/ejentum/ejentum-mcp) - MCP server exposing reasoning, code, anti-deception, and memory harness tools for Codex.
144144
- [Env Lint](./plugins/mturac/env-lint) - `.env` vs `.env.example` key parity — never prints values.
145+
- [Everything OpenAI Codex](https://github.com/mturac/everything-openai-codex) - EOC is an open-source operating system for Codex workflows with 200+ skills, agents, hooks, rules, memory, safety gates, install profiles, and cross-harness adapters.
145146
- [Flaky Detector](./plugins/mturac/flaky-detector) - Run a test command N times, report per-test flakiness %.
146147
- [Frappe Agent](https://github.com/Dkm0315/frappe-agent) - Frappe and ERPNext coding, customization, bench, and review intelligence for Codex.
147148
- [GrayMatter](https://github.com/ValkyrLabs/GrayMatter) - Durable memory and shared graph state for Codex and OpenClaw agents, with live ValkyrAI schema awareness.

plugins.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,16 @@
189189
"source": "awesome-codex-plugins",
190190
"install_url": "https://raw.githubusercontent.com/ejentum/ejentum-mcp/HEAD/.codex-plugin/plugin.json"
191191
},
192+
{
193+
"name": "Everything OpenAI Codex",
194+
"url": "https://github.com/mturac/everything-openai-codex",
195+
"owner": "mturac",
196+
"repo": "everything-openai-codex",
197+
"description": "EOC is an open-source operating system for Codex workflows with 200+ skills, agents, hooks, rules, memory, safety gates, install profiles, and cross-harness adapters.",
198+
"category": "Development & Workflow",
199+
"source": "awesome-codex-plugins",
200+
"install_url": "https://raw.githubusercontent.com/mturac/everything-openai-codex/HEAD/.codex-plugin/plugin.json"
201+
},
192202
{
193203
"name": "Frappe Agent",
194204
"url": "https://github.com/Dkm0315/frappe-agent",
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"name": "eoc",
3+
"version": "2.0.0-rc.1",
4+
"description": "Open-source Codex workflow collection with install profiles, repo conventions, validation checks, and documentation.",
5+
"author": {
6+
"name": "Mehmet Turac",
7+
"url": "https://github.com/mturac"
8+
},
9+
"homepage": "https://github.com/mturac/everything-openai-codex",
10+
"repository": "https://github.com/mturac/everything-openai-codex",
11+
"license": "MIT",
12+
"keywords": [
13+
"codex",
14+
"workflow",
15+
"documentation"
16+
],
17+
"mcpServers": {},
18+
"interface": {
19+
"displayName": "Everything OpenAI Codex",
20+
"shortDescription": "Codex workflow collection with install profiles, repo conventions, validation checks, and documentation.",
21+
"longDescription": "Everything OpenAI Codex (EOC) is a community-maintained Codex workflow collection. The upstream repository contains the full documentation, install profiles, skills, commands, and validation material.",
22+
"developerName": "Mehmet Turac",
23+
"composerIcon": "./assets/icon.svg",
24+
"category": "Coding",
25+
"capabilities": [
26+
"Read",
27+
"Write"
28+
],
29+
"websiteURL": "https://github.com/mturac/everything-openai-codex"
30+
}
31+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
node_modules/
2+
dist/
3+
build/
4+
.next/
5+
coverage/
6+
tmp/
7+
logs/
8+
.opencode/dist/
9+
*.log
10+
*.pyc
11+
__pycache__/
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 Mehmet Turac
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.
Lines changed: 1 addition & 0 deletions
Loading

scripts/generate_plugins_json.py

Lines changed: 83 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@
4242
"yarn.lock",
4343
".codexignore",
4444
)
45+
METADATA_ONLY_MIRROR_REPOS = {
46+
# EOC's repo-root Codex plugin references a large skills/commands catalog.
47+
# Keep the directory mirror installable as marketplace metadata without
48+
# copying the full upstream repository or leaving broken local references.
49+
"mturac/everything-openai-codex",
50+
}
4551

4652

4753
def normalize_relative_path(value: str) -> str:
@@ -208,6 +214,68 @@ def collect_selected_paths(
208214
return selected
209215

210216

217+
def is_metadata_only_mirror(plugin: dict[str, str]) -> bool:
218+
return f"{plugin['owner']}/{plugin['repo']}" in METADATA_ONLY_MIRROR_REPOS
219+
220+
221+
def collect_metadata_only_paths(
222+
manifest: dict[str, object],
223+
all_names: set[str],
224+
plugin_root: PurePosixPath,
225+
) -> set[str]:
226+
selected = {".codex-plugin/plugin.json"}
227+
228+
for optional_name in ("LICENSE", "LICENSE.md", "LICENSE.txt", ".codexignore"):
229+
candidate = plugin_root.joinpath(optional_name).as_posix()
230+
if candidate in all_names:
231+
selected.add(optional_name)
232+
233+
interface = manifest.get("interface")
234+
if isinstance(interface, dict):
235+
for key in ("composerIcon", "logo"):
236+
value = interface.get(key)
237+
if isinstance(value, str):
238+
add_recursive_selection(selected, all_names, plugin_root, value)
239+
240+
return selected
241+
242+
243+
def sanitize_metadata_only_manifest(manifest: dict[str, object], plugin: dict[str, str]) -> dict[str, object]:
244+
sanitized = json.loads(json.dumps(manifest))
245+
246+
for key in ("skills", "commands", "hooks", "apps", "app", "appConfig"):
247+
sanitized.pop(key, None)
248+
249+
if f"{plugin['owner']}/{plugin['repo']}" == "mturac/everything-openai-codex":
250+
repo_url = "https://github.com/mturac/everything-openai-codex"
251+
sanitized["description"] = (
252+
"Open-source Codex workflow collection with install profiles, repo "
253+
"conventions, validation checks, and documentation."
254+
)
255+
sanitized["author"] = {
256+
"name": "Mehmet Turac",
257+
"url": "https://github.com/mturac",
258+
}
259+
sanitized["homepage"] = repo_url
260+
261+
interface = sanitized.setdefault("interface", {})
262+
if isinstance(interface, dict):
263+
interface["shortDescription"] = (
264+
"Codex workflow collection with install profiles, repo conventions, "
265+
"validation checks, and documentation."
266+
)
267+
interface["longDescription"] = (
268+
"Everything OpenAI Codex (EOC) is a community-maintained Codex "
269+
"workflow collection. The upstream repository contains the full "
270+
"documentation, install profiles, skills, commands, and validation material."
271+
)
272+
interface["developerName"] = "Mehmet Turac"
273+
interface["category"] = "Coding"
274+
interface["websiteURL"] = repo_url
275+
276+
return sanitized
277+
278+
211279
def mirror_plugin_bundle(plugin: dict[str, str]) -> tuple[dict[str, object], str, str]:
212280
owner_repo = f"{plugin['owner']}/{plugin['repo']}"
213281
try:
@@ -220,7 +288,13 @@ def mirror_plugin_bundle(plugin: dict[str, str]) -> tuple[dict[str, object], str
220288
except ValueError:
221289
raise ValueError(f"Archive for {owner_repo} does not contain .codex-plugin/plugin.json") from None
222290
manifest = load_manifest(archive, plugin_root)
223-
selected_paths = collect_selected_paths(manifest, names, plugin_root)
291+
metadata_only = is_metadata_only_mirror(plugin)
292+
selected_paths = (
293+
collect_metadata_only_paths(manifest, names, plugin_root)
294+
if metadata_only
295+
else collect_selected_paths(manifest, names, plugin_root)
296+
)
297+
mirrored_manifest = sanitize_metadata_only_manifest(manifest, plugin) if metadata_only else manifest
224298

225299
destination_root = PLUGINS_ROOT / plugin["owner"] / plugin["repo"]
226300
# Clear destination to avoid stale files from previous runs (Thread 2 fix)
@@ -232,9 +306,15 @@ def mirror_plugin_bundle(plugin: dict[str, str]) -> tuple[dict[str, object], str
232306
archive_name = plugin_root.joinpath(PurePosixPath(relative_path)).as_posix()
233307
destination_path = destination_root / PurePosixPath(relative_path)
234308
destination_path.parent.mkdir(parents=True, exist_ok=True)
235-
destination_path.write_bytes(archive.read(archive_name))
309+
if relative_path == ".codex-plugin/plugin.json":
310+
destination_path.write_text(
311+
json.dumps(mirrored_manifest, indent=2, ensure_ascii=False) + "\n",
312+
encoding="utf-8",
313+
)
314+
else:
315+
destination_path.write_bytes(archive.read(archive_name))
236316

237-
return manifest, f"./plugins/{plugin['owner']}/{plugin['repo']}", plugin_root_relative_path(plugin_root)
317+
return mirrored_manifest, f"./plugins/{plugin['owner']}/{plugin['repo']}", plugin_root_relative_path(plugin_root)
238318

239319

240320
def build_marketplace_entry(

0 commit comments

Comments
 (0)