플러그인 빌드하기
ChatGPT용 플러그인을 만들고 테스트하고 배포하세요
이 페이지는 플러그인 작성자를 위한 문서입니다. 웹의 ChatGPT Work 또는 ChatGPT 데스크톱 앱의 ChatGPT Work나 Codex에서 플러그인을 찾아보고 설치하고 사용하려면 플러그인을 참조하세요. 아직 하나의 저장소나 개인 워크플로를 개선하는 중이라면 로컬 스킬부터 시작하세요. 해당 워크플로를 여러 팀과 공유하거나, 커넥터 또는 MCP 구성을 묶거나, 수명 주기 훅을 패키징하거나, 안정적인 패키지를 게시하려면 플러그인을 빌드하세요.
플러그인에는 스킬, MCP 기반 앱 또는 둘 다를 포함할 수 있습니다. 플러그인에서 서비스에 연결하거나 MCP 서버를 통해 도구를 노출해야 한다면 앱 빌드하기를 참조하세요.
완전한 공개 예시는 Figma, Notion, 웹 앱 빌드하기에서 확인하세요.
@plugin-creator을 사용하여 플러그인 만들기
가장 빠르게 설정하려면 기본 제공 @plugin-creator 스킬을 사용하세요.
이 스킬은 필수 .codex-plugin/plugin.json 매니페스트의 기본 구조를 만들며,
테스트용 로컬 마켓플레이스 항목도 생성할 수 있습니다. 이미 플러그인 폴더가
있더라도 @plugin-creator을 사용하여 로컬 마켓플레이스에
연결할 수 있습니다.
MCP 서버 기반 개발 모드 앱을 가리키는 플러그인을 로컬에서 만들고 테스트하기
MCP 서버 기반 앱이 포함된 플러그인을 로컬에서 테스트하려는 경우에도 plugin-creator 스킬을 사용할 수 있습니다. 플러그인에는 여전히 로컬 플러그인 폴더와 매니페스트가 필요하지만, 앱 자체는 ChatGPT 개발자 모드에서 시작됩니다.
먼저 ChatGPT에서 개발자 모드를 활성화하세요.
- ChatGPT를 엽니다.
- 설정을 엽니다.
- 보안 및 로그인을 선택합니다.
- 개발자 모드를 켭니다.
그런 다음 개발자 모드에서 앱을 만드세요.
- 설정 → 플러그인 또는 플러그인 페이지를 엽니다.
- 더하기 버튼을 선택합니다.
- 모달의 항목을 작성하여 MCP 서버용 개발자 모드 앱을 만듭니다.
- ChatGPT가 앱을 만든 후 브라우저 URL에서 앱 ID를 복사합니다. 이 ID는
plugin_asdk_app로 시작합니다.
해당 plugin_asdk_app... ID를 ChatGPT Work 채팅의 @plugin-creator 또는
Codex의 $plugin-creator에 전달하세요. 예를 들어 ChatGPT Work에서는 다음과 같습니다.
플러그인 생성기 프롬프트@plugin-creator create a Codex plugin for my ChatGPT app.
Use plugin_asdk_app_6a4c0062f3b88191855c0a80eac5d53d and name it Acme Support.
Include a personal marketplace entry so I can test it locally.plugin-creator 스킬은 플러그인 폴더와 필수
.codex-plugin/plugin.json을 만들고 ChatGPT 앱 연결 구성을 추가합니다. 개인
마켓플레이스 항목도 만들도록 요청하면 테스트할 수 있도록 플러그인 디렉터리의
로컬 소스 아래에 플러그인이 표시됩니다.
plugin-creator 스킬이 플러그인을 만든 후에는 다음을 수행하세요.
.app.json을 검토하고 올바른plugin_asdk_app...ID를 가리키는지 확인합니다..codex-plugin/plugin.json을 검토하고apps필드가./.app.json을 가리키는지 확인합니다.- 앱과 함께 반복 가능한 워크플로를 플러그인에 포함해야 한다면 번들 스킬을
skills/아래에 추가합니다. - 스킬이 개인 마켓플레이스 항목을 만들었다면 ChatGPT를 새로 고친 후 플러그인 디렉터리의 로컬 소스에서 플러그인을 설치합니다. 그런 다음 새 채팅에서 테스트합니다.
매니페스트 구조와 파일 레이아웃은 플러그인 구조와 경로 규칙을 참조하세요.
자체 선별 플러그인 목록 만들기
마켓플레이스는 플러그인의 JSON 카탈로그입니다. @plugin-creator은 플러그인
하나를 위한 카탈로그를 생성할 수 있으며, 같은 마켓플레이스에 항목을 계속
추가하여 저장소, 팀 또는 개인 워크플로를 위한 자체 선별 목록을 만들 수 있습니다.
ChatGPT 데스크톱 앱의 ChatGPT Work 또는 Codex에서 각 마켓플레이스는
플러그인 디렉터리에서 선택할 수 있는 소스로 표시됩니다. 저장소 범위 목록에는
$REPO_ROOT/.agents/plugins/marketplace.json을 사용하고, 개인 목록에는
~/.agents/plugins/marketplace.json을 사용하세요. plugins[] 아래에
플러그인마다 항목 하나를 추가하고, 각 source.path이 마켓플레이스 루트를 기준으로
./ 접두사가 붙은 경로를 사용하여 플러그인 폴더를 가리키도록 한 다음,
interface.displayName을 앱의 마켓플레이스 선택기에 표시할 레이블로 설정하세요.
그런 다음 ChatGPT 데스크톱 앱을 다시 시작합니다. 이후 플러그인
디렉터리를 열고 마켓플레이스를 선택하여 해당 선별 목록의 플러그인을 찾아보거나
설치하세요.
플러그인마다 별도의 마켓플레이스가 필요한 것은 아닙니다. 테스트 중에는 하나의 마켓플레이스에서 플러그인 하나만 제공하다가, 플러그인을 더 추가하면서 더 큰 선별 카탈로그로 확장할 수 있습니다.
CLI에서 마켓플레이스 추가하기
config.toml을 직접 편집하는 대신 codex plugin marketplace add을 사용하여
마켓플레이스 소스를 추가하고 추적하세요. 이 명령은 플러그인 작성과
카탈로그 설정을 지원합니다. 로컬 플러그인을 설치하고 테스트하려면 ChatGPT 데스크톱 앱을 사용하세요.
codex plugin marketplace add owner/repo
codex plugin marketplace add owner/repo --ref main
codex plugin marketplace add https://github.com/example/plugins.git --sparse .agents/plugins
codex plugin marketplace add ./local-marketplace-root마켓플레이스 소스에는 GitHub 축약형(owner/repo 또는
owner/repo@ref), HTTP 또는 HTTPS Git URL, SSH Git URL, 로컬 마켓플레이스 루트
디렉터리를 사용할 수 있습니다. Git ref를 고정하려면 --ref을 사용하고, Git 기반
마켓플레이스 저장소에 sparse checkout을 사용하려면 --sparse PATH을 반복해서 지정하세요.
--sparse은 Git 마켓플레이스 소스에만 유효합니다.
구성된 마켓플레이스를 검사하거나 새로 고치거나 제거하려면 다음을 실행하세요.
codex plugin marketplace list
codex plugin marketplace upgrade
codex plugin marketplace upgrade marketplace-name
codex plugin marketplace remove marketplace-namecodex plugin marketplace list은 Codex가 고려하는 각 마켓플레이스와
해당 마켓플레이스가 확인되는 루트 경로를 출력하며, 여기에는 로컬 기본 마켓플레이스와
구성된 마켓플레이스 스냅샷이 포함됩니다.
플러그인을 수동으로 만들기
스킬 하나를 패키징하는 최소 플러그인으로 시작하세요.
.codex-plugin/plugin.json에 매니페스트가 있는 플러그인 폴더를 만듭니다.
mkdir -p my-first-plugin/.codex-pluginmy-first-plugin/.codex-plugin/plugin.json
{
"name": "my-first-plugin",
"version": "1.0.0",
"description": "Reusable greeting workflow",
"skills": "./skills/"
}kebab-case 형식의 안정적인 플러그인 name을 사용하세요. Codex는 이를 플러그인
식별자와 컴포넌트 네임스페이스로 사용합니다.
skills/<skill-name>/SKILL.md아래에 스킬을 추가합니다.
mkdir -p my-first-plugin/skills/hellomy-first-plugin/skills/hello/SKILL.md
---
name: hello
description: Greet the user with a friendly message.
---
Greet the user warmly and ask how you can help.- 플러그인을 마켓플레이스에 추가합니다.
@plugin-creator을 사용하여 마켓플레이스를 생성하거나, 자체 선별 플러그인 목록 만들기를 따라 플러그인을 Codex에 수동으로 연결하세요.
이후 필요에 따라 MCP 구성, 커넥터 또는 마켓플레이스 메타데이터를 추가할 수 있습니다.
로컬 플러그인을 수동으로 설치하기
플러그인 또는 선별 목록에 액세스할 수 있어야 하는 대상에 따라 저장소 마켓플레이스나 개인 마켓플레이스를 사용하세요.
저장소
`$REPO_ROOT/.agents/plugins/marketplace.json`에 마켓플레이스 파일을 추가하고
`$REPO_ROOT/plugins/` 아래에 플러그인을 저장합니다.
**저장소 마켓플레이스 예시**
1단계: 플러그인 폴더를 `$REPO_ROOT/plugins/my-plugin`에 복사합니다.mkdir -p ./plugins
cp -R /absolute/path/to/my-plugin ./plugins/my-plugin2단계: `$REPO_ROOT/.agents/plugins/marketplace.json`을 추가하거나 업데이트하여
`source.path`이 `./` 접두사가 붙은 상대 경로로 해당 플러그인
디렉터리를 가리키도록 합니다.{
"name": "local-repo",
"plugins": [
{
"name": "my-plugin",
"source": {
"source": "local",
"path": "./plugins/my-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
]
}3단계: ChatGPT 데스크톱 앱을 다시 시작하고 플러그인이 표시되는지 확인합니다.개인
`~/.agents/plugins/marketplace.json`에 마켓플레이스 파일을 추가하고
`~/.codex/plugins/` 아래에 플러그인을 저장합니다.
**개인 마켓플레이스 예시**
1단계: 플러그인 폴더를 `~/.codex/plugins/my-plugin`에 복사합니다.mkdir -p ~/.codex/plugins
cp -R /absolute/path/to/my-plugin ~/.codex/plugins/my-plugin2단계: 플러그인 항목의 `source.path`이 해당 디렉터리를
가리키도록 `~/.agents/plugins/marketplace.json`을 추가하거나 업데이트합니다.
3단계: ChatGPT 데스크톱 앱을 다시 시작하고 플러그인이 표시되는지 확인합니다.마켓플레이스 파일이 플러그인 위치를 가리키므로 이러한 디렉터리는 고정된
요구 사항이 아니라 예시입니다. Codex는 source.path을
.agents/plugins/ 폴더가 아니라 마켓플레이스 루트를 기준으로 확인합니다. 파일 형식은
마켓플레이스 메타데이터를 참조하세요.
플러그인을 변경한 후에는 마켓플레이스 항목이 가리키는 플러그인 디렉터리를 업데이트하고 ChatGPT 데스크톱 앱을 다시 시작하여 로컬 설치에 새 파일이 반영되도록 하세요.
로컬 플러그인을 워크스페이스와 공유하기
플러그인을 만든 후 ChatGPT 데스크톱 앱에서 추가하세요. ChatGPT를 선택한 뒤 전환기에서 Work로 전환하거나 Codex를 선택한 다음 플러그인을 여세요. 그러면 ChatGPT 워크스페이스의 다른 구성원과 플러그인을 공유할 수 있습니다.
- ChatGPT 데스크톱 앱에서 플러그인을 엽니다.
- 내가 만든 항목으로 이동하여 플러그인 세부 정보 페이지를 엽니다.
- 공유를 선택합니다.
- 워크스페이스 구성원이나 워크스페이스 그룹을 추가하거나 공유 링크를 복사합니다.
- 액세스 권한을 부여할 대상을 선택한 다음 초대 또는 링크를 보냅니다.
공유 대상 사용자는 플러그인 디렉터리의 나와 공유됨에서 플러그인을 찾을 수 있습니다. 로컬 플러그인을 워크스페이스와 공유해도 공개 플러그인 디렉터리에 게시되지는 않습니다. 공유 플러그인은 워크스페이스와 조직 경계 내에 유지되며, 해당 워크스페이스에 로그인하지 않은 계정은 액세스할 수 없습니다. 팀이나 역할이 동일한 플러그인 액세스 권한을 공유해야 할 때는 그룹을 사용하세요. 저장소 또는 CLI를 통해 배포하려면 마켓플레이스를 사용하고, 선택한 팀원이 ChatGPT 데스크톱 앱에서 플러그인을 설치할 수 있게 하려면 워크스페이스 공유를 사용하세요.
워크스페이스 관리자는 클라우드 관리 요구 사항의 requirements.toml에
features.plugin_sharing = false을 추가하여 플러그인 공유를 비활성화할 수 있습니다.
features.plugin_sharing = false마켓플레이스 메타데이터
저장소 마켓플레이스를 관리한다면
$REPO_ROOT/.agents/plugins/marketplace.json에서 정의하세요. 개인 마켓플레이스에는
~/.agents/plugins/marketplace.json을 사용하세요. 마켓플레이스 파일은 ChatGPT 데스크톱 앱에서
플러그인 순서와 설치 정책을 제어합니다. 테스트 중인 플러그인 하나만 나타내거나,
앱에서 하나의 마켓플레이스 이름 아래 함께 표시할 선별 플러그인 목록을 나타낼 수
있습니다. 플러그인을 마켓플레이스에 추가하기 전에 해당 version, 게시자
메타데이터, 설치 화면 문구를 다른 개발자에게 공개할 준비가 되었는지 확인하세요.
{
"name": "local-example-plugins",
"interface": {
"displayName": "Local Example Plugins"
},
"plugins": [
{
"name": "my-plugin",
"source": {
"source": "local",
"path": "./plugins/my-plugin"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
},
{
"name": "research-helper",
"source": {
"source": "local",
"path": "./plugins/research-helper"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}
]
}- 최상위
name을 사용하여 마켓플레이스를 식별합니다. - ChatGPT 데스크톱 앱에 표시되는 마켓플레이스 제목에는
interface.displayName을 사용합니다. plugins아래에 플러그인당 하나의 객체를 추가하여 앱이 해당 마켓플레이스 제목 아래에 표시할 선별된 목록을 구성합니다.- 각 플러그인 항목의
source.path이 Codex에서 로드할 플러그인 디렉터리를 가리키도록 설정합니다. 리포지토리 설치의 경우 일반적으로./plugins/아래에 있습니다. 개인용 설치의 일반적인 패턴은./.codex/plugins/<plugin-name>입니다. source.path은 마켓플레이스 루트를 기준으로 하는 상대 경로로 유지하고./로 시작하며 해당 루트 내부에 있도록 합니다.- 로컬 항목의 경우
source은"./plugins/my-plugin"같은 일반 문자열 경로일 수도 있습니다. - 각 플러그인 항목에 항상
policy.installation,policy.authentication및category을 포함합니다. AVAILABLE,INSTALLED_BY_DEFAULT또는NOT_AVAILABLE같은policy.installation값을 사용합니다.- 인증을 설치 시 수행할지 최초 사용 시 수행할지는
policy.authentication을 사용하여 결정합니다.
마켓플레이스는 Codex가 플러그인을 로드할 위치를 제어합니다. 플러그인이 이러한
예시 디렉터리 외부에 있는 경우 로컬 source.path이 다른 위치를 가리키도록
설정할 수 있습니다. 마켓플레이스 파일은 플러그인을 개발 중인 리포지토리나
별도의 마켓플레이스 리포지토리에 둘 수 있으며, 하나의 마켓플레이스 파일이
하나 또는 여러 플러그인을 가리킬 수 있습니다.
마켓플레이스 항목은 Git 기반 플러그인 소스를 가리킬 수도 있습니다. 플러그인이
리포지토리 루트에 있으면 "source": "url"을 사용하고, 플러그인이 하위 디렉터리에
있으면 "source": "git-subdir"을 사용합니다.
{
"name": "remote-helper",
"source": {
"source": "git-subdir",
"url": "https://github.com/example/codex-plugins.git",
"path": "./plugins/remote-helper",
"ref": "main"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}Git 기반 항목은 ref 또는 sha 선택자를 사용할 수 있습니다. Codex가
마켓플레이스 항목의 소스를 확인할 수 없으면 전체 마켓플레이스를 실패 처리하지 않고
해당 플러그인 항목을 건너뜁니다.
마켓플레이스 항목은 JavaScript 패키지 레지스트리에서 플러그인을 설치할 수도 있습니다.
{
"name": "npm-helper",
"source": {
"source": "npm",
"package": "@example/codex-plugin",
"version": "^1.2.0",
"registry": "https://registry.npmjs.org"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Productivity"
}package은 필수이며 레지스트리 범위를 포함할 수 있습니다. version은 선택 사항이며
패키지 버전, 배포 태그 및 버전 범위를 허용하지만 경로나 URL 선택자는
허용하지 않습니다.
registry은 선택 사항이며 자격 증명, 쿼리 또는 프래그먼트가 포함되지 않은
HTTPS URL이어야 합니다. Codex는 수명 주기 스크립트를 실행하지 않고 패키지를
다운로드합니다. npm CLI가 설치되어 있어야 하며, 레지스트리 인증은
해당 구성에서 가져옵니다.
ChatGPT 데스크톱 앱에서 마켓플레이스를 사용하는 방식
플러그인 마켓플레이스는 ChatGPT 데스크톱 앱에서 읽고 설치할 수 있는 플러그인의 JSON 카탈로그입니다.
앱은 다음 위치에서 마켓플레이스 파일을 읽을 수 있습니다.
- 공식 Plugins Directory를 제공하는 선별된 마켓플레이스
$REPO_ROOT/.agents/plugins/marketplace.json의 리포지토리 마켓플레이스$REPO_ROOT/.claude-plugin/marketplace.json의 레거시 호환 마켓플레이스~/.agents/plugins/marketplace.json의 개인용 마켓플레이스
마켓플레이스를 통해 제공되는 모든 플러그인을 설치할 수 있습니다. 앱은
플러그인을
~/.codex/plugins/cache/$MARKETPLACE_NAME/$PLUGIN_NAME/$VERSION/에 설치합니다. 로컬
플러그인의 경우 $VERSION은 local이며, 앱은 마켓플레이스 항목에서 직접 로드하지 않고
해당 캐시 경로에 설치된 복사본을 로드합니다.
각 플러그인을 개별적으로 활성화하거나 비활성화할 수 있습니다. 앱은 각 플러그인의
활성화 또는 비활성화 상태를 ~/.codex/config.toml에 저장합니다.
플러그인 패키징 및 배포
플러그인 구조
모든 플러그인에는 .codex-plugin/plugin.json에 매니페스트가 있습니다. 또한
skills/ 디렉터리, 수명 주기 훅을 위한 hooks/ 디렉터리, 하나 이상의 커넥터를
가리키는 .app.json 파일, MCP 서버를 구성하는 .mcp.json 파일과
지원되는 화면 전반에서 플러그인을 표시하는 데 사용되는 에셋을 포함할 수 있습니다.
my-plugin/
├── .codex-plugin/
│ └── plugin.json # Required: plugin manifest
├── skills/
│ └── my-skill/
│ └── SKILL.md # Optional: skill instructions
├── hooks/
│ └── hooks.json # Optional: lifecycle hooks
├── .app.json # Optional: app or connector mappings
├── .mcp.json # Optional: MCP server configuration
└── assets/ # Optional: icons, logos, screenshots.codex-plugin/에는 plugin.json만 둡니다. skills/, hooks/,
assets/, .mcp.json 및 .app.json은 플러그인 루트에 둡니다.
게시된 플러그인은 일반적으로 빠른 시작 스캐폴드에 나오는 최소 예시보다 더 풍부한 매니페스트를 사용합니다. 매니페스트에는 다음 세 가지 역할이 있습니다.
- 플러그인을 식별합니다.
- 스킬, 커넥터, MCP 서버 또는 훅과 같은 번들 구성 요소를 가리킵니다.
- 설명, 아이콘 및 법적 고지 링크와 같은 설치 화면 메타데이터를 제공합니다.
다음은 완전한 매니페스트 예시입니다.
{
"name": "my-plugin",
"version": "0.1.0",
"description": "Bundle reusable skills and connectors.",
"author": {
"name": "Your team",
"email": "team@example.com",
"url": "https://example.com"
},
"homepage": "https://example.com/plugins/my-plugin",
"repository": "https://github.com/example/my-plugin",
"license": "MIT",
"keywords": ["research", "crm"],
"skills": "./skills/",
"mcpServers": "./.mcp.json",
"apps": "./.app.json",
"hooks": "./hooks/hooks.json",
"interface": {
"displayName": "My Plugin",
"shortDescription": "Reusable skills and connectors",
"longDescription": "Distribute skills and connectors together.",
"developerName": "Your team",
"category": "Productivity",
"capabilities": ["Read", "Write"],
"websiteURL": "https://example.com",
"privacyPolicyURL": "https://example.com/privacy",
"termsOfServiceURL": "https://example.com/terms",
"defaultPrompt": [
"Use My Plugin to summarize new CRM notes.",
"Use My Plugin to triage new customer follow-ups."
],
"brandColor": "#10A37F",
"composerIcon": "./assets/icon.png",
"logo": "./assets/logo.png",
"screenshots": ["./assets/screenshot-1.png"]
}
}.codex-plugin/plugin.json은 필수 진입점입니다. 다른 매니페스트
필드는 선택 사항이지만 게시된 플러그인에서는 일반적으로 사용됩니다.
매니페스트 필드
최상위 필드를 사용하여 패키지 메타데이터를 정의하고 번들 구성 요소를 가리킵니다.
name,version및description은 플러그인을 식별합니다.author,homepage,repository,license및keywords는 게시자 및 검색 메타데이터를 제공합니다.skills,mcpServers,apps및hooks은 플러그인 루트를 기준으로 번들 구성 요소를 가리킵니다.interface은 설치 화면에 플러그인이 표시되는 방식을 제어합니다.
설치 화면 메타데이터에는 interface 객체를 사용합니다.
displayName,shortDescription및longDescription은 제목과 설명 문구를 제어합니다.developerName,category및capabilities은 게시자와 기능 메타데이터를 추가합니다.websiteURL,privacyPolicyURL및termsOfServiceURL은 외부 링크를 제공합니다.defaultPrompt,brandColor,composerIcon,logo및screenshots는 시작 프롬프트와 시각적 표현을 제어합니다.
경로 규칙
- 매니페스트 경로는 플러그인 루트를 기준으로 하는 상대 경로로 유지하고
./로 시작합니다. - 가능한 경우
composerIcon,logo및screenshots같은 시각적 에셋은./assets/아래에 저장합니다. - 번들 스킬 폴더에는
skills을,.app.json에는apps을,.mcp.json에는mcpServers을, 수명 주기 훅에는hooks를 사용합니다. - 활성화된 플러그인에는 스킬, MCP 서버 및 커넥터와 함께 수명 주기 훅이 포함될 수 있습니다.
- 플러그인이
./hooks/hooks.json에 훅을 저장하는 경우.codex-plugin/plugin.json에hooks항목을 추가할 필요가 없습니다. Codex는 해당 기본 파일을 자동으로 확인합니다.
번들 MCP 서버 및 수명 주기 훅
mcpServers은 직접 서버 맵 또는 래핑된 mcp_servers 객체를 포함하는
.mcp.json 파일을 가리킬 수 있습니다.
직접 서버 맵:
{
"docs": {
"command": "docs-mcp",
"args": ["--stdio"]
}
}래핑된 서버 맵:
{
"mcp_servers": {
"docs": {
"command": "docs-mcp",
"args": ["--stdio"]
}
}
}설치 후 사용자는 플러그인을 편집하지 않고도 Codex 구성에서 번들 MCP 서버를
활성화하거나 비활성화하고 도구 승인 정책을 조정할 수 있습니다. 플러그인 범위
MCP 서버 정책에는 plugins.<plugin>.mcp_servers.<server>을 사용합니다.
[plugins."my-plugin".mcp_servers.docs]
enabled = true
default_tools_approval_mode = "prompt"
enabled_tools = ["search"]
[plugins."my-plugin".mcp_servers.docs.tools.search]
approval_mode = "approve"플러그인이 활성화되면 Codex는 사용자, 프로젝트 및 관리형 훅과 함께 플러그인의 수명 주기 훅을 로드할 수 있습니다.
플러그인을 설치하거나 활성화해도 해당 훅을 자동으로 신뢰하지는 않습니다. 플러그인 번들 훅은 비관리형 훅이므로 사용자가 현재 훅 정의를 검토하고 신뢰할 때까지 Codex가 이를 건너뜁니다.
기본 플러그인 훅 파일은 hooks/hooks.json입니다.
{
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "python3 ${PLUGIN_ROOT}/hooks/session_start.py",
"statusMessage": "Loading plugin context"
}
]
}
]
}
}.codex-plugin/plugin.json에 hooks을 정의하면 Codex는 기본 hooks/hooks.json 대신 해당 매니페스트
항목을 사용합니다. 매니페스트 필드는 단일 경로, 경로 배열, 인라인 훅 객체
또는 인라인 훅 객체 배열일 수 있습니다.
{
"name": "repo-policy",
"hooks": ["./hooks/session.json", "./hooks/tools.json"]
}훅 경로는 skills, apps 및
mcpServers과 동일한 매니페스트 경로 규칙을 따릅니다. ./로 시작하고 플러그인 루트를 기준으로
해석되며 플러그인 루트 내부에 있어야 합니다.
플러그인 훅 명령은 Codex 전용 환경 변수
PLUGIN_ROOT 및 PLUGIN_DATA를 받습니다. PLUGIN_ROOT은 설치된 플러그인
루트를 가리키고, PLUGIN_DATA는 플러그인의 쓰기 가능한 데이터 디렉터리를 가리킵니다. Codex는
기존 플러그인 훅과의 호환성을 위해 CLAUDE_PLUGIN_ROOT 및 CLAUDE_PLUGIN_DATA도 설정합니다.
플러그인 훅은 일반 훅과 동일한 이벤트 스키마를 사용합니다. 지원되는 이벤트, 입력, 출력, 신뢰 검토 및 현재 제한 사항은 훅을 참조하세요.
공식 공개 플러그인 게시
공개적으로 사용할 플러그인을 게시하려면 플러그인 제출 포털을 통해 제출하세요. 전체 검토 및 게시 절차는 플러그인 제출을 참조하세요.