diff --git a/.github/workflows/validate-plugins.yml b/.github/workflows/validate-plugins.yml new file mode 100644 index 00000000..de493723 --- /dev/null +++ b/.github/workflows/validate-plugins.yml @@ -0,0 +1,35 @@ +name: Validate plugins.json + +on: + pull_request: + paths: + - README.md + - plugins.json + - scripts/generate_plugins_json.py + push: + branches: [main] + paths: + - README.md + - plugins.json + - scripts/generate_plugins_json.py + +jobs: + validate: + name: Check plugins.json matches README + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: "3.12" + - name: Regenerate and compare + run: | + python3 scripts/generate_plugins_json.py + if ! git diff --quiet plugins.json; then + echo "::error::plugins.json is out of sync with README.md. Run: python3 scripts/generate_plugins_json.py" + git diff plugins.json + exit 1 + fi + echo "plugins.json is up to date" diff --git a/plugins.json b/plugins.json new file mode 100644 index 00000000..0f8c498e --- /dev/null +++ b/plugins.json @@ -0,0 +1,203 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "name": "awesome-codex-plugins", + "version": "1.0.0", + "last_updated": "2026-03-30", + "total": 19, + "categories": [ + "Development & Workflow", + "Tools & Integrations" + ], + "plugins": [ + { + "name": "Registry Broker", + "url": "https://github.com/hashgraph-online/registry-broker-codex-plugin", + "owner": "hashgraph-online", + "repo": "registry-broker-codex-plugin", + "description": "Delegate tasks to specialist AI agents via the HOL Registry, plan, find, summon, and recover sessions.", + "category": "Development & Workflow", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/hashgraph-online/registry-broker-codex-plugin/main/.codex-plugin/plugin.json" + }, + { + "name": "AgentOps", + "url": "https://github.com/boshu2/agentops", + "owner": "boshu2", + "repo": "agentops", + "description": "DevOps layer for coding agents with flow, feedback, and memory that compounds between sessions.", + "category": "Development & Workflow", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/boshu2/agentops/main/.codex-plugin/plugin.json" + }, + { + "name": "Claude Octopus", + "url": "https://github.com/nyldn/claude-octopus", + "owner": "nyldn", + "repo": "claude-octopus", + "description": "Multi-LLM orchestration dispatching to 8 providers (Codex, Gemini, Copilot, Qwen, Perplexity, OpenRouter, Ollama, OpenCode) with Double Diamond workflows, adversarial review, and safety gates.", + "category": "Development & Workflow", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/nyldn/claude-octopus/main/.codex-plugin/plugin.json" + }, + { + "name": "Codex Multi Auth", + "url": "https://github.com/ndycode/codex-multi-auth", + "owner": "ndycode", + "repo": "codex-multi-auth", + "description": "Multi-account OAuth manager for the official Codex CLI with switching, health checks, and recovery tools.", + "category": "Development & Workflow", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/ndycode/codex-multi-auth/main/.codex-plugin/plugin.json" + }, + { + "name": "Codex Reviewer", + "url": "https://github.com/schuettc/codex-reviewer", + "owner": "schuettc", + "repo": "codex-reviewer", + "description": "Second-pass review of Claude-driven plans and implementations.", + "category": "Development & Workflow", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/schuettc/codex-reviewer/main/.codex-plugin/plugin.json" + }, + { + "name": "HOTL Plugin", + "url": "https://github.com/yimwoo/hotl-plugin", + "owner": "yimwoo", + "repo": "hotl-plugin", + "description": "Human-on-the-Loop AI coding workflow plugin for Codex, Claude Code, and Cline with structured planning, review, and verification guardrails.", + "category": "Development & Workflow", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/yimwoo/hotl-plugin/main/.codex-plugin/plugin.json" + }, + { + "name": "Project Autopilot", + "url": "https://github.com/AlexMi64/codex-project-autopilot", + "owner": "AlexMi64", + "repo": "codex-project-autopilot", + "description": "Turn an idea into a structured project workflow with planning, execution, verification, and handoff.", + "category": "Development & Workflow", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/AlexMi64/codex-project-autopilot/main/.codex-plugin/plugin.json" + }, + { + "name": "Apple Productivity", + "url": "https://github.com/matk0shub/apple-productivity-mcp", + "owner": "matk0shub", + "repo": "apple-productivity-mcp", + "description": "Local Apple Calendar and Reminders tooling for macOS with Codex plugin adapters.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/matk0shub/apple-productivity-mcp/main/.codex-plugin/plugin.json" + }, + { + "name": "Chrome DevTools", + "url": "https://github.com/win4r/chrome-devtools-codex-plugin", + "owner": "win4r", + "repo": "chrome-devtools-codex-plugin", + "description": "One-click Codex plugin wrapper for chrome-devtools-mcp.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/win4r/chrome-devtools-codex-plugin/main/.codex-plugin/plugin.json" + }, + { + "name": "Codex Be Serious", + "url": "https://github.com/lulucatdev/codex-be-serious", + "owner": "lulucatdev", + "repo": "codex-be-serious", + "description": "Enforce formal, textbook-grade written register across all agent output.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/lulucatdev/codex-be-serious/main/.codex-plugin/plugin.json" + }, + { + "name": "Codex Mem", + "url": "https://github.com/2kDarki/codex-mem", + "owner": "2kDarki", + "repo": "codex-mem", + "description": "Automatically capture, compress, and inject session context back into future Codex sessions.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/2kDarki/codex-mem/main/.codex-plugin/plugin.json" + }, + { + "name": "Context Pack", + "url": "https://github.com/Rothschildiuk/context-pack", + "owner": "Rothschildiuk", + "repo": "context-pack", + "description": "Generate compact first-pass repository briefings for coding agents before deeper exploration.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/Rothschildiuk/context-pack/main/.codex-plugin/plugin.json" + }, + { + "name": "Langfuse Observability", + "url": "https://github.com/avivsinai/langfuse-mcp", + "owner": "avivsinai", + "repo": "langfuse-mcp", + "description": "Query traces, debug exceptions, analyze sessions, and manage prompts via MCP tools.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/avivsinai/langfuse-mcp/main/.codex-plugin/plugin.json" + }, + { + "name": "Launch Fast", + "url": "https://github.com/BlockchainHB/launchfast_codex_plugin", + "owner": "BlockchainHB", + "repo": "launchfast_codex_plugin", + "description": "Official Launch Fast plugin adapter for rapid SaaS deployment.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/BlockchainHB/launchfast_codex_plugin/main/.codex-plugin/plugin.json" + }, + { + "name": "OC ChatGPT Multi Auth", + "url": "https://github.com/ndycode/oc-chatgpt-multi-auth", + "owner": "ndycode", + "repo": "oc-chatgpt-multi-auth", + "description": "Codex setup skill and OpenCode plugin for ChatGPT Plus/Pro OAuth, GPT-5/Codex presets, and multi-account failover.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/ndycode/oc-chatgpt-multi-auth/main/.codex-plugin/plugin.json" + }, + { + "name": "OpenProject", + "url": "https://github.com/varaprasadreddy9676/team-codex-plugins", + "owner": "varaprasadreddy9676", + "repo": "team-codex-plugins", + "description": "Team collaboration via OpenProject integration.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/varaprasadreddy9676/team-codex-plugins/main/.codex-plugin/plugin.json" + }, + { + "name": "OrgX", + "url": "https://github.com/useorgx/orgx-codex-plugin", + "owner": "useorgx", + "repo": "orgx-codex-plugin", + "description": "MCP access and initiative-aware skills for organizational workflows.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/useorgx/orgx-codex-plugin/main/.codex-plugin/plugin.json" + }, + { + "name": "PapersFlow", + "url": "https://github.com/papersflow-ai/papersflow-codex-plugin", + "owner": "papersflow-ai", + "repo": "papersflow-codex-plugin", + "description": "Paper discovery, citation verification, graph exploration, and DeepScan analysis.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/papersflow-ai/papersflow-codex-plugin/main/.codex-plugin/plugin.json" + }, + { + "name": "Yandex Direct", + "url": "https://github.com/nebelov/yandex-direct-for-all", + "owner": "nebelov", + "repo": "yandex-direct-for-all", + "description": "GitHub-ready Codex plugin bundle for Yandex Direct, Wordstat, Metrika, and Roistat.", + "category": "Tools & Integrations", + "source": "awesome-codex-plugins", + "install_url": "https://raw.githubusercontent.com/nebelov/yandex-direct-for-all/main/.codex-plugin/plugin.json" + } + ] +} diff --git a/scripts/generate_plugins_json.py b/scripts/generate_plugins_json.py new file mode 100755 index 00000000..58a1cff8 --- /dev/null +++ b/scripts/generate_plugins_json.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python3 +"""Regenerate plugins.json from the README.md Community Plugins section. + +Usage: + python3 scripts/generate_plugins_json.py + +This should be run after any change to the plugin list in README.md. +""" +import datetime +import json +import re +from pathlib import Path + +README = Path(__file__).parent.parent / "README.md" +OUTPUT = Path(__file__).parent.parent / "plugins.json" + + +def parse_plugins(readme_path: Path) -> list[dict]: + lines = readme_path.read_text(encoding="utf-8").splitlines() + + start = None + end = None + for i, line in enumerate(lines): + if line.strip() == "## Community Plugins": + start = i + 1 + if start and line.strip().startswith("## ") and line.strip() != "## Community Plugins": + end = i + break + + if end is None: + end = len(lines) + if start is None: + raise ValueError("Could not find Community Plugins section") + + section = lines[start:end] + plugins = [] + current_category = "Uncategorized" + seen = set() + + for line in section: + cat_match = re.match(r"^### (.+)", line.strip()) + if cat_match: + current_category = cat_match.group(1) + continue + + m = re.match( + r"^- \[([^\]]+)\]\((https://github\.com/([^/]+)/([^)#]+?))(?:#readme)?\)\s*[-–]\s*(.+)", + line.strip(), + ) + if m: + owner, repo = m.group(3), m.group(4) + key = f"{owner}/{repo}" + if key in seen: + continue + seen.add(key) + # TODO: Detect default branch via GitHub API; some repos use 'master' or other names + plugins.append( + { + "name": m.group(1), + "url": m.group(2), + "owner": owner, + "repo": repo, + "description": m.group(5).strip(), + "category": current_category, + "source": "awesome-codex-plugins", + "install_url": f"https://raw.githubusercontent.com/{owner}/{repo}/main/.codex-plugin/plugin.json", + } + ) + + return plugins + + +def main(): + plugins = parse_plugins(README) + data = { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "name": "awesome-codex-plugins", + "version": "1.0.0", + "last_updated": datetime.date.today().isoformat(), + "total": len(plugins), + "categories": sorted({p["category"] for p in plugins}), + "plugins": plugins, + } + OUTPUT.write_text(json.dumps(data, indent=2, ensure_ascii=False) + "\n", encoding="utf-8") + print(f"Wrote {len(plugins)} plugins to {OUTPUT}") + + +if __name__ == "__main__": + main()