Thanks for helping grow the Codex plugin ecosystem!
- Fork this repository
- Run the scanner on your plugin (see Scanner Requirements below)
- Add your entry to the appropriate section in
README.md - Add your plugin bundle under
plugins/<owner>/<repo>/ - Follow the format described below
- Submit a PR with a clear description and your scanner report
All plugins submitted to this list must pass the HOL AI Plugin Scanner.
- Score: ≥ 80/100
- Severity: No critical or high findings
- Action: Your repo must have the scanner running in CI (see Example Workflows)
# Install
pipx install plugin-scanner
# Scan your plugin
plugin-scanner scan . --format text
# Or lint for quick fixes
plugin-scanner lint . --format text
# Verify install readiness
plugin-scanner verify . --format textYour plugin repository must include:
.codex-plugin/plugin.json— Valid manifest with required fieldsSECURITY.md— Vulnerability disclosure policyLICENSE— MIT or Apache-2.0 recommendedREADME.md— Clear description of what the plugin does- No hardcoded secrets — Scanner will flag API keys, tokens, passwords
- No dangerous MCP commands — No
rm -rf,sudo,curl | sh,eval,execpatterns - SHA-pinned GitHub Actions — If you use Actions, pin to commit SHAs
- Dependency lockfiles —
package-lock.jsonorrequirements-lock.txt
| Category | Max Points | What to Check |
|---|---|---|
| Manifest Validation | 31 | plugin.json valid, required fields, semver, kebab-case |
| Security | 36 | SECURITY.md, LICENSE, no secrets, hardened MCP remotes |
| Operational Security | 20 | Pinned Actions, no write-all, Dependabot, lockfiles |
| Best Practices | 15 | README.md, skills directory, SKILL.md frontmatter, .codexignore |
| Marketplace | 15 | marketplace.json valid, safe source paths |
| Skill Security | 15 | Cisco scan clean, no elevated findings, analyzable |
| Code Quality | 10 | No eval/new Function, no shell injection |
Total: 130 points. Aim for 80+ to qualify.
Add this to your plugin repo at .github/workflows/scanner.yml:
name: HOL Plugin Scanner
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
permissions:
contents: read
security-events: write
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: HOL Plugin Scanner
uses: hashgraph-online/ai-plugin-scanner-action@v1
with:
plugin_dir: "."
mode: scan
min_score: 80
fail_on_severity: high
format: sarif
upload_sarif: truename: HOL Plugin Scanner — Strict
on:
push:
branches: [main, master]
pull_request:
branches: [main, master]
permissions:
contents: read
security-events: write
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: HOL Plugin Scanner
uses: hashgraph-online/ai-plugin-scanner-action@v1
with:
plugin_dir: "."
mode: scan
min_score: 90
fail_on_severity: medium
format: sarif
upload_sarif: true
- name: Submit to Registry if Eligible
if: github.ref == 'refs/heads/main'
uses: hashgraph-online/ai-plugin-scanner-action@v1
with:
plugin_dir: "."
mode: submit
min_score: 90
submission_enabled: true
submission_score_threshold: 90name: HOL Plugin Scanner — Lint
on:
pull_request:
branches: [main, master]
permissions:
contents: read
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: HOL Plugin Linter
uses: hashgraph-online/ai-plugin-scanner-action@v1
with:
plugin_dir: "."
mode: lint
fail_on_severity: highEvery plugin submission must include a bundle under plugins/<owner>/<repo>/ with the following structure:
plugins/<owner>/<repo>/
.codex-plugin/
plugin.json # Required - plugin manifest
assets/
icon.svg # Required - plugin icon (SVG preferred, PNG acceptable)
... # Other plugin files (skills, commands, etc.)
Must be valid JSON at .codex-plugin/plugin.json with at minimum:
{
"name": "my-plugin",
"version": "1.0.0",
"description": "What this plugin does",
"repository": "https://github.com/<owner>/<repo>",
"license": "MIT",
"interface": {
"displayName": "My Plugin",
"shortDescription": "Brief one-liner",
"composerIcon": "./assets/icon.svg"
}
}Required fields:
name- machine-readable plugin identifierversion- semver version stringdescription- what the plugin doesrepository- GitHub repository URLlicense- SPDX license identifierinterface.composerIcon- path to the icon file (relative to plugin root)
- Format: SVG preferred. PNG also accepted.
- Size: 512x512px recommended. Must read clearly at small sizes (32x32).
- Location:
assets/icon.svg(orassets/icon.png) - Style: Simple, distinctive. Avoid text-heavy designs.
- File size: Keep under 50KB. Optimize SVGs (no embedded raster images).
Add your plugin as a single line in the appropriate category section:
- [Plugin Name](https://github.com/<owner>/<repo>) - One-line description of what it does.Rules:
- One plugin per line
- Alphabetical order within each category
- Description must be a single sentence
- Link must point to the GitHub repository root
- Plugin must have a public GitHub repository
- Must be functional with a valid
.codex-plugin/plugin.jsonmanifest - Must include an icon as described above
- Include a description that explains what the plugin does
- Must pass the HOL Plugin Scanner (score ≥ 80, no critical/high findings)
- Must have scanner running in CI (GitHub Action or equivalent)
- One plugin per PR (unless adding multiple related plugins)
- Development & Workflow - Tools for coding, planning, and development workflows
- Tools & Integrations - External service integrations and utilities
Before submitting, verify:
- README.md entry is alphabetically sorted within its category
- Plugin bundle exists under
plugins/<owner>/<repo>/ -
.codex-plugin/plugin.jsonexists and is valid JSON -
composerIconfield is set inplugin.jsoninterface section - Icon file exists at the path referenced by
composerIcon - All links in the README entry are valid
- No placeholder or TODO values in plugin.json
- Plugin Scanner score ≥ 80 (attach report or link to CI)
- No critical or high severity findings in scanner report
- Scanner CI is configured in your plugin's repo (link to workflow file)
-
SECURITY.mdexists in your plugin repo -
LICENSEexists in your plugin repo
All PRs to this repo are automatically validated. The CI will check:
- Alphabetical order - README entries must be sorted within each section
- Plugin manifest -
plugin.jsonmust exist and contain required fields - Icon presence -
composerIconmust point to an existing file - Marketplace sync -
plugins.jsonandmarketplace.jsonstay in sync with README - Markdown links - All URLs in README must be reachable
- Scanner verification - PR description must include scanner score or CI link
If CI fails, check the logs for specific errors and fix before re-pushing.
- Scanner docs: HOL Guard
- Scanner action: ai-plugin-scanner-action
- Registry: hol.org/registry/plugins
- Issues: Open an issue in this repo with the
[scanner]label