Files
ECC/schemas/install-modules.schema.json
T
Brian SwigerandCopilot d58441072d feat(install): add a copilot project target for skills and agents
GitHub Copilot CLI discovers SKILL.md skills from .github/skills/ and custom
agents from .github/agents/, so ECC's catalog can be installed there without a
conversion step. This adds a managed-project install target that places both.

Scope is deliberately limited to agents and skills. ECC hooks are written
against Claude Code's event model, and commands rely on slash-command argument
substitution Copilot does not provide, so neither is installed.

Agent frontmatter goes through an allowlist transform rather than a passthrough:
Copilot resolves the session model from user configuration, so a Claude model id
makes it warn and fall back on every invocation; Claude tool names are not
Copilot tool names, and Copilot governs tool access per session via
--allow-tool/--deny-tool. Unknown keys added to ECC agents later therefore
cannot leak into the Copilot copy.

Target selection stays permissive in supportsModule so dependency-anchor modules
still resolve; planOperations is what narrows the install, matching the
convention used by the other adapters.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-09-04 20:58:17 +01:00

118 lines
2.5 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ECC Install Modules",
"type": "object",
"properties": {
"version": {
"type": "integer",
"minimum": 1
},
"modules": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^[a-z0-9-]+$"
},
"kind": {
"type": "string",
"enum": [
"rules",
"agents",
"commands",
"hooks",
"platform",
"orchestration",
"skills",
"docs"
]
},
"description": {
"type": "string",
"minLength": 1
},
"paths": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"minLength": 1
}
},
"targets": {
"type": "array",
"minItems": 1,
"items": {
"type": "string",
"enum": [
"claude",
"claude-project",
"cursor",
"antigravity",
"codex",
"copilot",
"gemini",
"opencode",
"codebuddy",
"joycode",
"qwen",
"zed",
"hermes",
"openclaw",
"kimi",
"adal"
]
}
},
"dependencies": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9-]+$"
}
},
"defaultInstall": {
"type": "boolean"
},
"cost": {
"type": "string",
"enum": [
"light",
"medium",
"heavy"
]
},
"stability": {
"type": "string",
"enum": [
"experimental",
"beta",
"stable"
]
}
},
"required": [
"id",
"kind",
"description",
"paths",
"targets",
"dependencies",
"defaultInstall",
"cost",
"stability"
],
"additionalProperties": false
}
}
},
"required": [
"version",
"modules"
],
"additionalProperties": false
}