Files
ECC/schemas/ecc-install-config.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

70 lines
1.3 KiB
JSON

{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "ECC Install Config",
"type": "object",
"additionalProperties": false,
"required": [
"version"
],
"properties": {
"$schema": {
"type": "string",
"minLength": 1
},
"version": {
"type": "integer",
"const": 1
},
"target": {
"type": "string",
"enum": [
"claude",
"claude-project",
"cursor",
"antigravity",
"codex",
"copilot",
"gemini",
"opencode",
"codebuddy",
"joycode",
"qwen",
"zed",
"hermes",
"openclaw",
"kimi",
"adal"
]
},
"profile": {
"type": "string",
"pattern": "^[a-z0-9-]+$"
},
"modules": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9-]+$"
}
},
"include": {
"type": "array",
"items": {
"type": "string",
"pattern": "^(baseline|lang|framework|capability):[a-z0-9-]+$"
}
},
"exclude": {
"type": "array",
"items": {
"type": "string",
"pattern": "^(baseline|lang|framework|capability):[a-z0-9-]+$"
}
},
"options": {
"type": "object",
"additionalProperties": true
}
}
}