-
Notifications
You must be signed in to change notification settings - Fork 164
Add machine-readable plugins.json with sync validation #9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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" | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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", | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Resolved in commit 461196a. |
||
| "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" | ||
| } | ||
| ] | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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", | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Resolved in commit 461196a. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Resolved in commit 461196a. |
||
| } | ||
| ) | ||
|
|
||
| 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() | ||
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Resolved in commit 461196a.