coding-harness plugin entry (v1)

plugin-entry.v1.schema.json

Overview

The common entry core plus an embedded, verbatim Claude Code plugin.json document, validated against schemas/vendor/plugin.schema.json, plus a ga4gh sibling object recording which coding harnesses the plugin targets and how to install it for each (internal project documentation Section 3.5.5). The vendored plugin.schema.json places no additionalProperties restriction at its root (Claude Code documents that it ignores unrecognised top-level fields), so the ga4gh object sits alongside plugin's own fields without invalidating it; stripping ga4gh MUST leave a valid, unmodified plugin.json.

Full specification: spec/plugin-card.md

This schema extends entry-core.v1.schema.json via allOf: every entry-core field is also required or available on this entry type, in addition to the fields below. This entry type additionally requires: plugin, ga4gh. No properties beyond entry-core's and those listed below are permitted on this entry type.

Properties

  • typestringoptional

    Always "plugin" for entries of this type.

    • Fixed value: "plugin"
  • pluginobject (embedded external schema)required

    Claude Code's plugin.json schema, vendored verbatim (not rendered here). This entry embeds a full, valid plugin.json document. View plugin.schema.json on the repository ↗

  • ga4ghobjectrequired
    • keywordsarray of stringoptional
      • Items must be unique
    • categorystringoptional

      Free text in v1 (internal project documentation Section 3.6): a closed enumeration is premature at roughly two dozen packages.

    • harnessesarray of objectrequired

      The field none of the six surveyed plugin ecosystems (Claude Code, Codex, Gemini CLI, opencode, VS Code, JetBrains) expresses natively, because each targets exactly one harness by construction. A single ga4gh-plugins package routinely ships both a Cordis plugin and a standalone MCP server usable by any MCP-capable harness, so this array must be able to express more than one target.

      • Minimum items: 1
      • harnessstringrequired

        Closed enumeration, backed by schemas/vocab/harnesses.json.

        • Allowed values: "claude-code", "codex", "gemini-cli", "opencode", "mcp-generic", "agent-plugins"
      • installCommandstringrequired

        Exact copy-to-clipboard command or configuration snippet for this harness.

      • manifestPathstringoptional

        Optional path to a harness-specific manifest within the plugin's repository.

      • compatibilityobjectoptional

        JetBrains-style compatibility range: set a lower bound, generally omit the upper bound so the plugin is not needlessly pinned.

        • minVersionstringrequired
        • maxVersionstringoptional

Raw schema

View raw schema JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://registry.biocommons.ai/schemas/plugin-entry.v1.schema.json",
  "x-ga4gh-schema-revision": "1.1.1",
  "title": "GA4GH AI Registry: coding-harness plugin entry (v1)",
  "description": "The common entry core plus an embedded, verbatim Claude Code plugin.json document, validated against schemas/vendor/plugin.schema.json, plus a ga4gh sibling object recording which coding harnesses the plugin targets and how to install it for each (internal project documentation Section 3.5.5). The vendored plugin.schema.json places no additionalProperties restriction at its root (Claude Code documents that it ignores unrecognised top-level fields), so the ga4gh object sits alongside plugin's own fields without invalidating it; stripping ga4gh MUST leave a valid, unmodified plugin.json.",
  "allOf": [
    {
      "$ref": "entry-core.v1.schema.json"
    },
    {
      "type": "object",
      "properties": {
        "type": {
          "const": "plugin"
        },
        "plugin": {
          "$ref": "vendor/plugin.schema.json"
        },
        "ga4gh": {
          "type": "object",
          "required": [
            "harnesses"
          ],
          "properties": {
            "keywords": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "uniqueItems": true
            },
            "category": {
              "type": "string",
              "description": "Free text in v1 (internal project documentation Section 3.6): a closed enumeration is premature at roughly two dozen packages."
            },
            "harnesses": {
              "type": "array",
              "description": "The field none of the six surveyed plugin ecosystems (Claude Code, Codex, Gemini CLI, opencode, VS Code, JetBrains) expresses natively, because each targets exactly one harness by construction. A single ga4gh-plugins package routinely ships both a Cordis plugin and a standalone MCP server usable by any MCP-capable harness, so this array must be able to express more than one target.",
              "minItems": 1,
              "items": {
                "type": "object",
                "required": [
                  "harness",
                  "installCommand"
                ],
                "properties": {
                  "harness": {
                    "type": "string",
                    "description": "Closed enumeration, backed by schemas/vocab/harnesses.json.",
                    "enum": [
                      "claude-code",
                      "codex",
                      "gemini-cli",
                      "opencode",
                      "mcp-generic",
                      "agent-plugins"
                    ]
                  },
                  "installCommand": {
                    "type": "string",
                    "description": "Exact copy-to-clipboard command or configuration snippet for this harness."
                  },
                  "manifestPath": {
                    "type": "string",
                    "description": "Optional path to a harness-specific manifest within the plugin's repository."
                  },
                  "compatibility": {
                    "type": "object",
                    "description": "JetBrains-style compatibility range: set a lower bound, generally omit the upper bound so the plugin is not needlessly pinned.",
                    "required": [
                      "minVersion"
                    ],
                    "properties": {
                      "minVersion": {
                        "type": "string"
                      },
                      "maxVersion": {
                        "type": "string"
                      }
                    },
                    "unevaluatedProperties": false
                  }
                },
                "unevaluatedProperties": false
              }
            }
          },
          "unevaluatedProperties": false
        }
      },
      "required": [
        "plugin",
        "ga4gh"
      ]
    }
  ],
  "unevaluatedProperties": false
}