참고
터미널에 입력 copilot plugin [SUBCOMMAND] --help 하여 플러그 인 사용에 대한 도움말을 찾을 수 있습니다.
플러그 인의 정의 및 클라이언트에서 Copilot 작동하는 방식에 대한 개요는 플러그 인 정보 GitHub Copilot을 참조하세요.
CLI 명령
터미널에서 다음 명령을 사용하여 플러그 인 코파일럿 CLI을 관리할 수 있습니다.
copilot plugin와 copilot plugins는 서로 바꿔 사용할 수 있으므로, 하위 명령에 더 자연스러운 표현을 사용하세요.
| Command | 설명 |
|---|---|
copilot plugin install SPECIFICATION | 플러그 인을 설치합니다. 아래 명령의 플러그 인 사양을 install 참조하세요. |
copilot plugin uninstall NAME | 플러그 인 제거 |
copilot plugin list | 설치된 플러그 인 나열 |
copilot plugin update NAME | 명명된 플러그 인을 업데이트합니다. 설치된 모든 플러그 인을 한 번에 업데이트하는 데 사용합니다 --all . |
copilot plugin enable NAME | 이전에 사용하지 않도록 설정된 플러그 인 사용 |
copilot plugin disable NAME | 플러그 인을 제거하지 않고 사용하지 않도록 설정 |
copilot plugin marketplace add SPECIFICATION | 마켓플레이스를 등록합니다. 매니페스트에서 marketplace.json 마켓플레이스의 고유한 이름은 등록 키가 되며 사용자 지정 로컬 이름을 설정할 수 있는 옵션은 없습니다. |
copilot plugin marketplace list | 등록된 마켓플레이스 나열 |
copilot plugin marketplace browse NAME | 마켓플레이스 플러그 인 찾아보기 |
copilot plugin marketplace update [NAME] (별칭 refresh) | 마켓플레이스의 플러그 인 카탈로그를 다시 가져옵니다. 등록된 모든 마켓플레이스의 카탈로그를 새로 고치려면 NAME를 생략합니다. |
copilot plugin marketplace remove NAME | 마켓플레이스 등록을 취소합니다. 마켓플레이스의 플러그인이 여전히 설치되어 있으면 거부됩니다. 해당 플러그인도 제거하려면 --force을(를) 지정하세요. |
비대화형으로 copilot plugins enable NAME --plugin, copilot plugins disable NAME --plugin 및 copilot plugins remove NAME --plugin는 동일한 활성화, 비활성화 및 제거 작업을 제공합니다.
--plugin 는 기본 종류이며 이러한 세 가지 명령에 대해 생략할 수 있습니다. 이러한 명령을 MCP 서버 및 기술로 확장하는 비대화형 및 --mcp 종류는 --skill을 참조하세요.
명령에 대한 install 플러그 인 사양
| 포맷 | 예시 | 설명 |
|---|---|---|
| 마켓플레이스 | plugin@marketplace | 등록된 마켓플레이스에서 플러그 인 |
| GitHub | OWNER/REPO | 리포지토리의 GitHub 루트 |
| GitHub 서브디렉터리 | OWNER/ | 리포지토리의 하위 디렉터리 |
| Git URL | https:/ | 모든 Git URL |
| 로컬 경로 | ||
./my-plugin 또는 /abs/path | 로컬 디렉터리 |
copilot plugins install 옵션
사양에서 플러그 인을 설치하는 것 외에도 파일, copilot plugins install URL 또는 디렉터리 --skill에서 개별 기술을 설치할 수 있습니다. 기술 설치는 플러그 인 설치가 아니며 마켓플레이스를 거치지 않습니다. 기술 자체에 대한 자세한 내용은 GitHub Copilot CLI 명령 참조 을 참조하세요.
| Option | 설명 |
|---|---|
--plugin | 플러그 인(기본값)을 설치합니다. |
--skill | 로컬 경로 또는 URL에서 기술을 설치합니다. |
--scope SCOPE | 파일 또는 URL --skill 설치 시: user (기본값) 또는 project. |
project 는 사용자 계정 대신 현재 리포지토리의 .github/skills 디렉터리로 설치 범위를 지정하고 파일 또는 URL 기술 설치에만 적용됩니다. | |
--config-dir=DIRECTORY | 구성 디렉터리의 경로입니다. 이 옵션은 사용되지 않습니다. |
COPILOT_HOME를 대신 사용하세요. |
디렉터리를 설치하면 디렉터리를 복사하는 대신 사용자 지정 기술 원본으로 등록합니다. 파일 또는 URL을 설치하면 기술 콘텐츠가 개인 또는 프로젝트 기술 디렉터리에 복사됩니다.
MCP 서버는 인증 및 대화형 비밀 항목이 필요한 정책 구성 레지스트리에서 설치됩니다.
copilot plugins install 대신 /plugins 대시보드(온라인 모드) 또는 /mcp 슬래시 명령을 사용해 MCP 서버를 추가하세요.
copilot plugins update 옵션
| Option | 설명 |
|---|---|
--all | 설치된 모든 플러그 인 업데이트 |
copilot plugins marketplace 하위 명령어
기본 제공 마켓플레이스는 런타임과 함께 제공되며 제거할 수 없습니다.
| 하위 명령 | 설명 |
|---|---|
list [--json] | 기본 제공 기본값을 포함하여 등록된 모든 마켓플레이스 나열 |
add SOURCE | 마켓플레이스(owner/repo, owner/repo#refURL 또는 로컬 경로) 추가 |
remove NAME [--force] | 마켓플레이스를 제거하면 --force 해당 마켓플레이스에서 설치한 플러그인도 제거됩니다. |
browse NAME [--json] | 마켓플레이스 카탈로그에서 제공하는 플러그 인 나열 |
update [NAME] (별칭 refresh) | 마켓플레이스 하나의 플러그인 카탈로그를 새로 고치거나, NAME가 생략되면 모든 마켓플레이스의 카탈로그를 새로 고칩니다. |
plugin.json
모든 플러그 인은 플러그 인 디렉터리의 루트에 있는 plugin.json 매니페스트 파일을 포함하는 플러그 인 디렉터리로 구성됩니다.
에 대한 플러그 인 만들기 GitHub Copilot 명령 줄 인터페이스 (CLI)을(를) 참조하세요.
필수 필드
| 분야 | 유형 | 설명 |
|---|---|---|
name | 문자열 | Kebab-case 플러그 인 이름(문자, 숫자, 하이픈만 해당). 최대 64자 |
선택적 메타데이터 필드
| 분야 | 유형 | 설명 |
|---|---|---|
description | 문자열 | 간략한 설명입니다. 최대 1024자 |
version | 문자열 | 의미 체계 버전(예: 1.0.0). |
author | 객체 | |
name (필수), email (선택 사항), url (선택 사항) | ||
homepage | 문자열 | 플러그 인 홈페이지 URL입니다. |
repository | 문자열 | 원본 리포지토리 URL입니다. |
license | 문자열 | 라이선스 식별자(예: MIT). |
keywords | 문자열[] | 키워드를 검색합니다. |
category | 문자열 | 플러그 인 범주입니다. |
tags | 문자열[] | 추가 태그입니다. |
구성 요소 경로 필드
그러면 플러그 인의 구성 요소를 찾을 수 있는 위치를 CLI에 알립니다. 모두 선택 사항입니다. 생략하면 CLI는 기본 규칙을 사용합니다.
| 분야 | 유형 | 기본값 | 설명 |
|---|---|---|---|
agents | 문자열 | 문자열[] | agents/ | 에이전트 디렉터리(.agent.md 파일)에 대한 경로입니다. |
skills | 문자열 | 문자열[] | skills/ | 기술 디렉터리(SKILL.md 파일)에 대한 경로입니다. |
commands | 문자열 | 문자열[] | — | 명령 디렉터리에 대한 경로입니다. |
hooks | string | 개체 | — | 후크 구성 파일 또는 인라인 후크 개체의 경로입니다. |
extensions | string | string[] | 개체 | — | 확장 디렉터리에 대한 경로입니다. 기본 제공 확장 기능을 사용하지 않도록 하려면 { paths: [...], exclusive: true }을(를) 사용합니다. |
mcpServers | string | 개체 | — | MCP 구성 파일(예: .mcp.json) 또는 인라인 서버 정의에 대한 경로입니다. |
lspServers | string | 개체 | — | LSP 구성 파일 또는 인라인 서버 정의에 대한 경로입니다. |
예제 plugin.json 파일
{
"name": "my-dev-tools",
"description": "React development utilities",
"version": "1.2.0",
"author": {
"name": "Jane Doe",
"email": "jane@example.com"
},
"license": "MIT",
"keywords": ["react", "frontend"],
"agents": "agents/",
"skills": ["skills/", "extra-skills/"],
"hooks": "hooks.json",
"mcpServers": ".mcp.json"
}
{
"name": "my-dev-tools",
"description": "React development utilities",
"version": "1.2.0",
"author": {
"name": "Jane Doe",
"email": "jane@example.com"
},
"license": "MIT",
"keywords": ["react", "frontend"],
"agents": "agents/",
"skills": ["skills/", "extra-skills/"],
"hooks": "hooks.json",
"mcpServers": ".mcp.json"
}
LSP 서버 구성
플러그인에 LSP(언어 서버 프로토콜) 서버를 포함하려면 플러그인 디렉터리에 lsp-config/servers.json 파일을 만들거나, lspServers의 plugin.json 필드를 사용하여 경로 또는 인라인 객체를 지정합니다.
예제 lsp-config/servers.json(또는 lspServers에서 plugin.json을 통한 인라인 방식):
{
"lspServers": {
"my-lsp": {
"command": "my-language-server",
"fileExtensions": { ".myext": "mylang" }
}
}
}
플랫폼 간 지원을 위해 bash 대신 powershell 및 command을 사용하세요:
{
"lspServers": {
"my-lsp": {
"bash": "${PLUGIN_ROOT}/scripts/start-lsp.sh",
"powershell": "${PLUGIN_ROOT}/scripts/start-lsp.ps1",
"fileExtensions": { ".myext": "mylang" }
}
}
}
| 분야 | 유형 | 필수 | 설명 |
|---|---|---|---|
command | 문자열 | * | 언어 서버를 시작하는 실행 파일입니다. |
bash | 문자열 | * | 서버를 실행하기 위한 Bash 스크립트(Linux/macOS); bash -c SCRIPT를 통해 실행됩니다. |
powershell | 문자열 | * | 서버(Windows)를 시작하는 PowerShell 스크립트로, pwsh -c SCRIPT 통해 실행됩니다. |
cwd | 문자열 | No | 작업 디렉터리입니다. 설정 파일을 기준으로 절대 경로 또는 상대 경로로 지정합니다. |
${PLUGIN_ROOT}지원합니다. | |||
args | 문자열[] | No | |
command에 전달할 인수(bash 및 powershell의 경우 무시됨). | |||
env | 객체 | No | 서버를 생성할 때 설정할 환경 변수입니다. |
fileExtensions | 객체 | 예 | 파일 확장자를 언어 ID에 매핑합니다(예: { ".ts": "typescript" }). |
rootUri | 문자열 | No | git 루트를 기준으로 한 프로젝트 루트(기본값: .). |
initialization | any | No | LSP initialize 요청에서 서버로 전송되는 옵션입니다. |
(*) 하나 이상의 command, bash또는 powershell 필수입니다.
bash 및 powershell 모두 지정되면 플랫폼에 적합한 항목이 자동으로 선택됩니다(Windows PowerShell, 다른 위치의 Bash).
플러그 인 디렉터리 내의 경로를 참조하는 데 사용합니다 ${PLUGIN_ROOT} .
marketplace.json
리포지토리의 marketplace.json 디렉터리에 .github/plugin/ 파일을 만들어 저장하면, 사람들이 플러그인을 검색하고 설치할 수 있는 플러그인 마켓플레이스를 만들 수 있습니다. 파일을 로컬 파일 시스템에 저장할 수도 있습니다 marketplace.json. 예를 들어 파일을 다음과 같이 /PATH/TO/my-marketplace/.github/plugin/marketplace.json 저장하면 다음 명령을 사용하여 CLI에 파일을 추가할 수 있습니다.
copilot plugin marketplace add /PATH/TO/my-marketplace
참고
코파일럿 CLI는 또한 .claude-plugin/ 디렉터리에서 marketplace.json 파일을 찾습니다.
자세한 내용은 에 대한 플러그 인 마켓플레이스 만들기 GitHub Copilot 명령 줄 인터페이스 (CLI)을(를) 참조하세요.
예제 marketplace.json 파일
{
"name": "my-marketplace",
"owner": {
"name": "Your Organization",
"email": "plugins@example.com"
},
"metadata": {
"description": "Curated plugins for our team",
"version": "1.0.0"
},
"plugins": [
{
"name": "frontend-design",
"description": "Create a professional-looking GUI ...",
"version": "2.1.0",
"source": "./plugins/frontend-design"
},
{
"name": "security-checks",
"description": "Check for potential security vulnerabilities ...",
"version": "1.3.0",
"source": "./plugins/security-checks"
}
]
}
{
"name": "my-marketplace",
"owner": {
"name": "Your Organization",
"email": "plugins@example.com"
},
"metadata": {
"description": "Curated plugins for our team",
"version": "1.0.0"
},
"plugins": [
{
"name": "frontend-design",
"description": "Create a professional-looking GUI ...",
"version": "2.1.0",
"source": "./plugins/frontend-design"
},
{
"name": "security-checks",
"description": "Check for potential security vulnerabilities ...",
"version": "1.3.0",
"source": "./plugins/security-checks"
}
]
}
참고
각 플러그 인에 source 대한 필드 값은 리포지토리의 루트를 기준으로 플러그 인 디렉터리의 경로입니다. 경로의 시작 부분에 사용할 ./ 필요는 없습니다. 예를 들어 "./plugins/plugin-name"와 "plugins/plugin-name"은 동일한 디렉터리로 해결됩니다.
marketplace.json 필드
최상위 필드
| 분야 | 유형 | 필수 | 설명 |
|---|---|---|---|
name | 문자열 | 예 | 케밥 케이스 형식의 마켓플레이스 이름을 말합니다. 최대 64자 |
owner | 객체 | 예 | |
{ name, email? } — 마켓플레이스 소유자 정보입니다. | |||
plugins | array | 예 | 플러그 인 항목 목록(아래 표 참조). |
metadata | 객체 | No | { description?, version?, pluginRoot? } |
플러그 인 항목 필드(배열 내의 plugins 개체)
| 분야 | 유형 | 필수 | 설명 |
|---|---|---|---|
name | 문자열 | 예 | Kebab-case 플러그 인 이름입니다. 최대 64자 |
source | string | 개체 | 예 | 플러그 인(상대 경로 또는 GitHubURL)을 가져올 위치입니다. |
description | 문자열 | No | 플러그 인 설명입니다. 최대 1024자 |
version | 문자열 | No | 플러그 인 버전입니다. |
author | 객체 | No | { name, email?, url? } |
homepage | 문자열 | No | 플러그 인 홈페이지 URL입니다. |
repository | 문자열 | No | 원본 리포지토리 URL입니다. |
license | 문자열 | No | 라이선스 식별자 |
keywords | 문자열[] | No | 키워드를 검색합니다. |
category | 문자열 | No | 플러그 인 범주입니다. |
tags | 문자열[] | No | 추가 태그입니다. |
commands | 문자열 | 문자열[] | No | 명령 디렉터리에 대한 경로입니다. |
agents | 문자열 | 문자열[] | No | 에이전트 디렉터리에 대한 경로입니다. |
skills | 문자열 | 문자열[] | No | 기술 디렉터리에 대한 경로입니다. |
hooks | string | 개체 | No | 후크 구성 또는 인라인 후크 개체에 대한 경로입니다. |
mcpServers | string | 개체 | No | 플러그 인이 설치될 때 활성화할 MCP 서버입니다. 인라인 서버 맵 또는 JSON 구성 파일의 경로를 허용합니다. 플러그 인 원본이 자체 MCP 구성을 제공하지 않는 경우에 사용됩니다. |
lspServers | string | 개체 | No | LSP 구성 또는 인라인 서버 정의에 대한 경로입니다. |
strict | 부울 | No | |
true (기본값) 플러그 인은 전체 스키마 및 유효성 검사 규칙을 준수해야 합니다. 완화된 유효성 검사가 사용되면, 특히 false 직접 설치 또는 레거시 플러그인의 경우 더 유연해질 수 있습니다. |
플러그 인 소스 형식
source 플러그 인 항목의 필드는 상대 경로 문자열 또는 리포지토리 또는 Git URL 원본을 GitHub 설명하는 개체를 허용합니다.
{
"source": {
"source": "github",
"repo": "owner/repo",
"ref": "v1.0.0",
"path": "plugins/my-plugin"
}
}
github 및 url 소스 형식은 모두, sha에 추가로(또는 이를 대신해) 설치를 정확한 커밋에 고정하기 위한 선택적 ref 필드를 지원합니다:
{
"source": {
"source": "github",
"repo": "owner/repo",
"sha": "a94a8fe5ccb19ba61c4c0873d391e987982fbbd3",
"path": "plugins/my-plugin"
}
}
sha 는 전체 40자 커밋 SHA여야 합니다. 강제 푸시나 태그/브랜치 이동의 영향을 받지 않는 재현 가능한 설치를 위해 sha에 고정합니다.
파일 위치
| Item | Path |
|---|---|
| 설치된 플러그 인 | |
~/ (마켓플레이스를 통해 설치) 및 ~/ (직접 설치) | |
| Marketplace 캐시 | 플랫폼 캐시 디렉터리: ~/ (Linux), ~/ (macOS). |
COPILOT_CACHE_로 재정의할 수 있습니다. | |
| 플러그 인 매니페스트 | |
.plugin/, plugin.json, .github/또는 .claude-plugin/ (이 순서로 확인됨) | |
| Marketplace 매니페스트 | |
marketplace.json, .plugin/, .github/또는 .claude-plugin/ (이 순서로 확인됨) | |
| 에이전트 | |
agents/ (기본값, 매니페스트에서 재정의 가능) | |
| 기술 | |
skills/ (기본값, 매니페스트에서 재정의 가능) | |
| 후크 구성 | |
hooks.json 또는 hooks/hooks.json | |
| MCP 구성 | |
.mcp.json, .github/mcp.json | |
| LSP 구성 | |
lsp.json 또는 .github/lsp.json | |
| 플러그 인 데이터 | |
${COPILOT_PLUGIN_(${CLAUDE_PLUGIN_로도 사용 가능). 설치된 각 플러그 인에 고유한 지속적이고 쓰기 가능한 디렉터리를 가리킵니다. 설치된 플러그 인 캐시 디렉터리 내의 경로 대신 플러그 인 관련 런타임 데이터에 사용합니다. |
로드 순서 및 우선 순위
여러 플러그 인을 설치하는 경우 MCP 서버를 통해 제공되는 일부 사용자 지정 에이전트, 기술, MCP 서버 또는 도구에 중복 이름이 있을 수 있습니다. 이 경우 CLI는 우선 순위에 따라 사용할 구성 요소를 결정합니다.
-
에이전트 및 기술은 먼저 발견된 것이 우선하는 규칙을 따릅니다.
설치한 플러그 인의 이름과 ID가 같은 프로젝트 수준 사용자 지정 에이전트 또는 기술이 있는 경우 플러그 인의 에이전트 또는 기술은 자동으로 무시됩니다. 플러그 인은 프로젝트 수준 또는 개인 구성을 재정의할 수 없습니다. 사용자 지정 에이전트는 파일 이름에서 파생된 ID를 기반으로 중복이 제거됩니다(예: 파일 이름이
reviewer.agent.md인 경우, 에이전트 ID는reviewer가 됩니다). 기술은SKILL.md파일 내에서 이름 필드를 기준으로 중복이 제거됩니다. -
MCP 서버 는 마지막 우선 순위를 사용합니다.
이미 설치한 MCP 서버와 동일한 서버 이름을 가진 MCP 서버를 정의하는 플러그 인을 설치하는 경우 플러그 인의 정의가 우선합니다. 명령줄 옵션
--additional-mcp-config을 사용하여 플러그인을 통해 설치된 MCP 서버 구성과 동일한 이름의 구성을 재정의할 수 있습니다. 둘 이상의 플러그 인이 동일한 이름으로 MCP 서버를 선언하는 경우 CLI는 마지막으로 로드된 플러그 인의 버전을 사용하고 이를 정의한 모든 이전 플러그 인의 이름을 지정하는 경고를 표시합니다. -
기본 제공 도구 및 에이전트는 항상 존재하며 사용자 정의 구성 요소에서 재정의할 수 없습니다.
다음 다이어그램에서는 로드 순서 및 우선 순위 규칙을 보여 줍니다.
┌──────────────────────────────────────────────────────────────────┐
│ BUILT-IN - HARDCODED, ALWAYS PRESENT │
│ • tools: bash, view, apply_patch, glob, rg, task, ... │
│ • agents: explore, task, code-review, general-purpose, research │
└────────────────────────┬─────────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────────────┐
│ CUSTOM AGENTS - FIRST LOADED IS USED (dedup by ID) │
│ 1. ~/.copilot/agents/ (user, .github convention) │
│ 2. <project>/.github/agents/ (project) │
│ 3. <parents>/.github/agents/ (inherited, monorepo) │
│ 4. <project>/.claude/agents/ (project) │
│ 5. <parents>/.claude/agents/ (inherited, monorepo) │
│ 6. PLUGIN: agents/ dirs (plugin, by install order) │
│ 7. Remote org/enterprise agents (remote, via API) │
└──────────────────────┬──────────────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────────────┐
│ AGENT SKILLS - FIRST LOADED IS USED (dedup by name) │
│ 1. <project>/.github/skills/ (project) │
│ 2. <project>/.agents/skills/ (project) │
│ 3. <project>/.claude/skills/ (project) │
│ 4. <parents>/.github/skills/ etc. (inherited) │
│ 5. ~/.copilot/skills/ (personal-copilot) │
│ 6. ~/.agents/skills/ (personal-agents) │
│ 7. PLUGIN: skills/ dirs (plugin) │
│ 8. COPILOT_SKILLS_DIRS env + config (custom) │
│ --- then commands (.claude/commands/), skills override commands ---│
└──────────────────────┬──────────────────────────────────────────────┘
│
┌──────────────────────▼──────────────────────────────────────────────┐
│ MCP SERVERS - LAST LOADED IS USED (dedup by server name) │
│ 1. ~/.copilot/mcp-config.json (lowest priority) │
│ 2. PLUGIN: MCP configs (plugins) │
│ 3. --additional-mcp-config flag (highest priority) │
└─────────────────────────────────────────────────────────────────────┘