OpenClaw 플러그인 매니페스트 작성 가이드: 필수 설정 완벽 정리
이 페이지는 네이티브 OpenClaw 플러그인 매니페스트만을 위한 가이드예요.
호환 가능한 번들 레이아웃에 대해서는 Plugin bundles를 참고해 주세요.
호환되는 번들 포맷은 다음과 같이 서로 다른 매니페스트 파일을 사용해요:
- Codex 번들:
.codex-plugin/plugin.json - Claude 번들:
.claude-plugin/plugin.json또는 매니페스트가 없는 기본 Claude 컴포넌트 레이아웃 - Cursor 번들:
.cursor-plugin/plugin.json
OpenClaw는 이러한 번들 레이아웃도 자동으로 감지하지만, 여기서 설명하는 openclaw.plugin.json 스키마를 기준으로 검증하지는 않아요.
호환 번들의 경우, 레이아웃이 OpenClaw 런타임 기대치와 일치할 때 OpenClaw는 번들 메타데이터와 선언된 skill roots, Claude command roots, Claude 번들 settings.json 기본값, Claude 번들 LSP 기본값, 그리고 지원되는 hook 팩을 읽어와요.
모든 네이티브 OpenClaw 플러그인은 플러그인 루트에 openclaw.plugin.json 파일을 반드시 포함해야 해요. OpenClaw는 이 매니페스트를 사용하여 플러그인 코드를 실행하지 않고도 설정을 검증해요. 매니페스트가 없거나 유효하지 않으면 플러그인 오류로 처리되어 설정 검증이 차단돼요.
전체 플러그인 시스템 가이드는 Plugins를, 네이티브 기능 모델과 현재 외부 호환성 가이드는 Capability model을 확인해 보세요.
이 파일의 역할
섹션 제목: “이 파일의 역할”openclaw.plugin.json은 OpenClaw가 플러그인 코드를 로드하기 전에 읽는 메타데이터예요.
다음과 같은 용도로 사용하세요:
- 플러그인 식별 (identity)
- 설정 검증 (config validation)
- 플러그인 런타임을 부팅하지 않고도 사용할 수 있어야 하는 인증 및 온보딩 메타데이터
- 플러그인 런타임이 로드되기 전에 해결되어야 하는 alias 및 자동 활성화 메타데이터
- 런타임 로드 전 플러그인을 자동 활성화해야 하는 단축형 model-family 소유권 메타데이터
- 번들 호환성 연결 및 컨트랙트 커버리지에 사용되는 정적 기능 소유권 스냅샷
- 런타임을 로드하지 않고 카탈로그 및 검증 영역에 병합되어야 하는 채널별 설정 메타데이터
- 설정 UI 힌트
다음 용도로는 사용하지 마세요:
- 런타임 동작 등록
- 코드 엔트리포인트(entrypoints) 선언
- npm install 메타데이터
이러한 항목들은 플러그인 코드나 package.json에 포함되어야 해요.
최소 예시
섹션 제목: “최소 예시”{ "id": "voice-call", "configSchema": { "type": "object", "additionalProperties": false, "properties": {} }}상세 예시
섹션 제목: “상세 예시”{ "id": "openrouter", "name": "OpenRouter", "description": "OpenRouter provider plugin", "version": "1.0.0", "providers": ["openrouter"], "modelSupport": { "modelPrefixes": ["router-"] }, "cliBackends": ["openrouter-cli"], "providerAuthEnvVars": { "openrouter": ["OPENROUTER_API_KEY"] }, "providerAuthAliases": { "openrouter-coding": "openrouter" }, "channelEnvVars": { "openrouter-chatops": ["OPENROUTER_CHATOPS_TOKEN"] }, "providerAuthChoices": [ { "provider": "openrouter", "method": "api-key", "choiceId": "openrouter-api-key", "choiceLabel": "OpenRouter API key", "groupId": "openrouter", "groupLabel": "OpenRouter", "optionKey": "openrouterApiKey", "cliFlag": "--openrouter-api-key", "cliOption": "--openrouter-api-key <key>", "cliDescription": "OpenRouter API key", "onboardingScopes": ["text-inference"] } ], "uiHints": { "apiKey": { "label": "API key", "placeholder": "sk-or-v1-...", "sensitive": true } }, "configSchema": { "type": "object", "additionalProperties": false, "properties": { "apiKey": { "type": "string" } } }}최상위 필드 레퍼런스
섹션 제목: “최상위 필드 레퍼런스”| 필드 | 필수 여부 | 타입 | 의미 |
|---|---|---|---|
id | Yes | string | 정식 플러그인 id입니다. plugins.entries.<id>에서 사용되는 id예요. |
configSchema | Yes | object | 이 플러그인 설정에 대한 인라인 JSON Schema입니다. |
enabledByDefault | No | true | 번들 플러그인을 기본적으로 활성화 상태로 표시해요. 생략하거나 true가 아닌 값을 설정하면 기본적으로 비활성화돼요. |
legacyPluginIds | No | string[] | 이 정식 플러그인 id로 정규화되는 이전 id 목록이에요. |
autoEnableWhenConfiguredProviders | No | string[] | 인증, 설정 또는 모델 참조에서 해당 provider id가 언급될 때 이 플러그인을 자동 활성화해요. |
kind | No | "memory" | "context-engine" | plugins.slots.*에서 사용되는 독점적인 플러그인 종류를 선언해요. |
channels | No | string[] | 이 플러그인이 소유한 채널 id 목록이에요. 검색 및 설정 검증에 사용돼요. |
providers | No | string[] | 이 플러그인이 소유한 provider id 목록이에요. |
modelSupport | No | object | 런타임 전에 플러그인을 자동 로드하기 위해 사용되는 매니페스트 소유의 단축형 model-family 메타데이터예요. |
cliBackends | No | string[] | 이 플러그인이 소유한 CLI 추론 백엔드 id 목록이에요. 명시적 설정 참조를 통한 시작 시 자동 활성화에 사용돼요. |
commandAliases | No | object[] | 런타임 로드 전에 플러그인 인식 설정 및 CLI 진단을 생성해야 하는 이 플러그인 소유의 커맨드 이름이에요. |
providerAuthEnvVars | No | Record<string, string[]> | OpenClaw가 플러그인 코드를 로드하지 않고 검사할 수 있는 가벼운 provider-auth 환경 변수 메타데이터예요. |
providerAuthAliases | No | Record<string, string> | 인증 조회를 위해 다른 provider id를 재사용해야 하는 provider id 목록이에요. (예: 기본 API key를 공유하는 코딩 provider) |
channelEnvVars | No | Record<string, string[]> | OpenClaw가 플러그인 코드를 로드하지 않고 검사할 수 있는 가벼운 채널 환경 변수 메타데이터예요. 환경 변수 기반 채널 설정에 사용하세요. |
providerAuthChoices | No | object[] | 온보딩 선택기, 선호 provider 결정, 간단한 CLI 플래그 연결을 위한 가벼운 인증 선택 메타데이터예요. |
contracts | No | object | 음성, 실시간 전사, 실시간 음성, 미디어 이해, 이미지 생성, 음악 생성, 비디오 생성, 웹 페치, 웹 검색 및 도구 소유권에 대한 정적 번들 기능 스냅샷이에요. |
channelConfigs | No | Record<string, object> | 런타임 로드 전에 검색 및 검증 영역에 병합되는 매니페스트 소유의 채널 설정 메타데이터예요. |
skills | No | string[] | 플러그인 루트를 기준으로 로드할 skill 디렉토리 목록이에요. |
name | No | string | 사용자가 읽을 수 있는 플러그인 이름이에요. |
description | No | string | 플러그인 화면에 표시될 짧은 요약 설명이에요. |
version | No | string | 정보 제공용 플러그인 버전이에요. |
uiHints | No | Record<string, object> | 설정 필드에 대한 UI 레이블, 플레이스홀더 및 민감도 힌트예요. |
새로운 도구를 연동할 때 설정 파일이나 인증 방식을 하나하나 맞추는 일은 꽤 번거롭죠. 특히 사용자에게 어떤 옵션을 보여줄지, CLI에서 어떻게 입력받을지 결정하는 과정에서 실수가 생기기 쉬워요. OpenClaw는 이런 메타데이터를 체계적으로 관리할 수 있는 명확한 구조를 제공해요.
providerAuthChoices 레퍼런스
섹션 제목: “providerAuthChoices 레퍼런스”각 providerAuthChoices 항목은 온보딩이나 인증 선택지를 정의해요. OpenClaw는 provider 런타임이 로드되기 전에 이 정보를 먼저 읽어요.
| 필드 | 필수 여부 | 타입 | 설명 |
|---|---|---|---|
provider | Yes | string | 이 선택지가 속한 Provider id예요. |
method | Yes | string | 전달할 인증 방식 id예요. |
choiceId | Yes | string | 온보딩 및 CLI 흐름에서 사용하는 고유한 auth-choice id예요. |
choiceLabel | No | string | 사용자에게 표시될 라벨이에요. 생략하면 OpenClaw가 choiceId를 대신 사용해요. |
choiceHint | No | string | 선택 도구(picker)에 표시될 짧은 도움말이에요. |
assistantPriority | No | number | 값이 낮을수록 어시스턴트 기반 대화형 선택 도구에서 먼저 정렬돼요. |
assistantVisibility | No | "visible" | "manual-only" | 어시스턴트 선택 도구에서 이 선택지를 숨기면서도 CLI에서 수동으로 선택할 수 있게 설정해요. |
deprecatedChoiceIds | No | string[] | 사용자를 이 대체 선택지로 리다이렉트해야 하는 이전 버전의 choice id 목록이에요. |
groupId | No | string | 관련 선택지를 그룹화하기 위한 선택적 그룹 id예요. |
groupLabel | No | string | 해당 그룹의 사용자용 라벨이에요. |
groupHint | No | string | 그룹에 대한 짧은 도움말이에요. |
optionKey | No | string | 단순한 단일 플래그 인증 흐름을 위한 내부 옵션 키예요. |
cliFlag | No | string | --openrouter-api-key와 같은 CLI 플래그 이름이에요. |
cliOption | No | string | --openrouter-api-key <key>와 같은 전체 CLI 옵션 형태예요. |
cliDescription | No | string | CLI 도움말에서 사용하는 설명이에요. |
onboardingScopes | No | Array<"text-inference" | "image-generation"> | 이 선택지가 나타날 온보딩 영역이에요. 생략하면 기본값은 ["text-inference"]가 돼요. |
commandAliases 레퍼런스
섹션 제목: “commandAliases 레퍼런스”플러그인이 특정 런타임 커맨드 이름을 소유하고 있을 때 commandAliases를 사용하세요. 사용자가 실수로 plugins.allow에 넣거나 루트 CLI 커맨드로 실행하려고 할 때 유용해요. OpenClaw는 플러그인 런타임 코드를 임포트하지 않고도 이 메타데이터를 사용해 진단 작업을 수행해요.
{ "commandAliases": [ { "name": "dreaming", "kind": "runtime-slash", "cliCommand": "memory" } ]}| 필드 | 필수 여부 | 타입 | 설명 |
|---|---|---|---|
name | Yes | string | 이 플러그인에 속한 커맨드 이름이에요. |
kind | No | "runtime-slash" | 해당 별칭을 루트 CLI 커맨드가 아닌 채팅 슬래시(/) 커맨드로 표시해요. |
cliCommand | No | string | CLI 작업 시 제안할 관련 루트 CLI 커맨드가 있다면 지정해요. |
uiHints 레퍼런스
섹션 제목: “uiHints 레퍼런스”uiHints는 설정 필드 이름을 작은 렌더링 힌트에 매핑해주는 기능이에요.
{ "uiHints": { "apiKey": { "label": "API key", "help": "Used for OpenRouter requests", "placeholder": "sk-or-v1-...", "sensitive": true } }}각 필드 힌트에는 다음 항목을 포함할 수 있어요:
| 필드 | 타입 | 설명 |
|---|---|---|
label | string | 사용자에게 표시될 필드 라벨이에요. |
help | string | 짧은 도움말 텍스트예요. |
tags | string[] | 선택 사항인 UI 태그예요. |
advanced | boolean | 해당 필드를 고급 설정으로 표시해요. |
sensitive | boolean | 해당 필드를 비밀번호나 민감한 정보로 표시해요. |
placeholder | string | 폼 입력창에 표시될 플레이스홀더 텍스트예요. |
contracts 레퍼런스
섹션 제목: “contracts 레퍼런스”OpenClaw가 플러그인 런타임을 임포트하지 않고도 읽을 수 있는 정적 기능 소유권 메타데이터가 필요할 때만 contracts를 사용하세요.
{ "contracts": { "speechProviders": ["openai"], "realtimeTranscriptionProviders": ["openai"], "realtimeVoiceProviders": ["openai"], "mediaUnderstandingProviders": ["openai", "openai-codex"], "imageGenerationProviders": ["openai"], "videoGenerationProviders": ["qwen"], "webFetchProviders": ["firecrawl"], "webSearchProviders": ["gemini"], "tools": ["firecrawl_search", "firecrawl_scrape"] }}각 목록은 선택 사항이에요:
| 필드 | 타입 | 설명 |
|---|---|---|
speechProviders | string[] | 이 플러그인이 소유한 Speech provider id 목록이에요. |
realtimeTranscriptionProviders | string[] | 이 플러그인이 소유한 Realtime-transcription provider id 목록이에요. |
realtimeVoiceProviders | string[] | 이 플러그인이 소유한 Realtime-voice provider id 목록이에요. |
mediaUnderstandingProviders | string[] | 이 플러그인이 소유한 Media-understanding provider id 목록이에요. |
imageGenerationProviders | string[] | 이 플러그인이 소유한 Image-generation provider id 목록이에요. |
videoGenerationProviders | string[] | 이 플러그인이 소유한 Video-generation provider id 목록이에요. |
webFetchProviders | string[] | 이 플러그인이 소유한 Web-fetch provider id 목록이에요. |
webSearchProviders | string[] | 이 플러그인이 소유한 Web-search provider id 목록이에요. |
tools | string[] | 번들 컨트랙트 체크를 위해 이 플러그인이 소유한 에이전트 도구 이름 목록이에요. |
다음 단계
섹션 제목: “다음 단계”channelConfigs 참조
섹션 제목: “channelConfigs 참조”런타임이 로드되기 전에 채널 플러그인에 가벼운 설정 메타데이터가 필요한 경우 channelConfigs를 사용하세요.
{ "channelConfigs": { "matrix": { "schema": { "type": "object", "additionalProperties": false, "properties": { "homeserverUrl": { "type": "string" } } }, "uiHints": { "homeserverUrl": { "label": "Homeserver URL", "placeholder": "https://matrix.example.com" } }, "label": "Matrix", "description": "Matrix homeserver connection", "preferOver": ["matrix-legacy"] } }}각 채널 항목에는 다음 필드를 포함할 수 있어요:
| 필드 | 타입 | 의미 |
|---|---|---|
schema | object | channels.<id>를 위한 JSON Schema입니다. 선언된 각 채널 설정 항목에 필수입니다. |
uiHints | Record<string, object> | 해당 채널 설정 섹션에 대한 선택적인 UI 레이블, placeholder, 민감한 정보 힌트입니다. |
label | string | 런타임 메타데이터가 준비되지 않았을 때 picker나 inspect 화면에 표시될 채널 레이블입니다. |
description | string | inspect 및 catalog 화면에 표시될 짧은 채널 설명입니다. |
preferOver | string[] | 선택 화면에서 이 채널이 우선순위를 가져야 할 레거시 또는 낮은 우선순위의 플러그인 ID 목록입니다. |
modelSupport 참조
섹션 제목: “modelSupport 참조”플러그인 런타임이 로드되기 전에 OpenClaw가 gpt-5.4나 claude-sonnet-4.6 같은 단축 모델 ID를 보고 해당 Provider 플러그인을 추론해야 한다면 modelSupport를 사용하세요.
{ "modelSupport": { "modelPrefixes": ["gpt-", "o1", "o3", "o4"], "modelPatterns": ["^computer-use-preview"] }}OpenClaw는 다음 우선순위를 적용해요:
- 명시적인
provider/model참조는 소유권을 가진providersManifest 메타데이터를 사용해요. modelPatterns가modelPrefixes보다 우선해요.- 번들되지 않은 플러그인과 번들된 플러그인이 모두 일치하는 경우, 번들되지 않은 플러그인이 우선권을 가져요.
- 남은 모호한 부분은 사용자나 설정에서 Provider를 직접 지정할 때까지 무시돼요.
필드 설명:
| 필드 | 타입 | 의미 |
|---|---|---|
modelPrefixes | string[] | 단축 모델 ID에 대해 startsWith로 매칭되는 접두사 목록입니다. |
modelPatterns | string[] | 프로필 접미사 제거 후 단축 모델 ID에 대해 매칭되는 Regex 소스 목록입니다. |
기존의 최상위 Capability 키들은 더 이상 사용되지 않아요(deprecated). speechProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, mediaUnderstandingProviders, imageGenerationProviders, videoGenerationProviders, webFetchProviders, webSearchProviders를 contracts 아래로 옮기려면 openclaw doctor --fix를 사용하세요. 이제 일반 Manifest 로딩 과정에서 이러한 최상위 필드를 Capability 소유권으로 처리하지 않아요.
Manifest와 package.json 비교
섹션 제목: “Manifest와 package.json 비교”이 두 파일은 서로 다른 역할을 수행해요.
| 파일 | 용도 |
|---|---|
openclaw.plugin.json | 플러그인 코드가 실행되기 전에 반드시 존재해야 하는 Discovery, 설정 검증, auth-choice 메타데이터, UI 힌트 |
package.json | npm 메타데이터, 종속성 설치, 그리고 엔트리포인트, 설치 제어, 설정, 카탈로그 메타데이터에 사용되는 openclaw 블록 |
특정 메타데이터를 어디에 두어야 할지 헷갈린다면 이 규칙을 따르세요.
- OpenClaw가 플러그인 코드를 로드하기 전에 해당 내용을 알아야 한다면
openclaw.plugin.json에 넣으세요. - 패키징, 엔트리 파일, 또는 npm install 동작에 관한 내용이라면
package.json에 넣으세요.
discovery에 영향을 주는 package.json 필드
섹션 제목: “discovery에 영향을 주는 package.json 필드”런타임 전의 플러그인 메타데이터 중 일부는 의도적으로 openclaw.plugin.json 대신 package.json의 openclaw 블록에 위치해요.
주요 예시는 다음과 같아요.
| 필드 | 의미 |
|---|---|
openclaw.extensions | 네이티브 플러그인 엔트리포인트를 선언해요. |
openclaw.setupEntry | 온보딩 및 지연된 channel 시작 중에 사용되는 가벼운 setup 전용 엔트리포인트예요. |
openclaw.channel | 레이블, 문서 경로, 별칭, 선택 문구와 같은 가벼운 channel 카탈로그 메타데이터예요. |
openclaw.channel.configuredState | 전체 channel 런타임을 로드하지 않고도 “환경 전용 설정이 이미 존재하는지”에 답할 수 있는 가벼운 설정 상태 확인 메타데이터예요. |
openclaw.channel.persistedAuthState | 전체 channel 런타임을 로드하지 않고도 “이미 로그인된 항목이 있는지”에 답할 수 있는 가벼운 인증 상태 확인 메타데이터예요. |
openclaw.install.npmSpec / openclaw.install.localPath | 번들로 제공되거나 외부로 배포된 플러그인을 위한 설치/업데이트 힌트예요. |
openclaw.install.defaultChoice | 여러 설치 소스를 사용할 수 있을 때 선호되는 설치 경로예요. |
openclaw.install.minHostVersion | >=2026.3.22와 같은 semver 형식을 사용하는 OpenClaw 호스트의 최소 지원 버전이에요. |
openclaw.install.allowInvalidConfigRecovery | 설정이 유효하지 않을 때 제한적인 범위 내에서 번들 플러그인의 재설정 복구 경로를 허용해요. |
openclaw.startup.deferConfiguredChannelFullLoadUntilAfterListen | 시작 중에 전체 channel 플러그인을 로드하기 전에 setup 전용 channel 화면을 먼저 로드할 수 있게 해요. |
openclaw.install.minHostVersion은 설치 및 manifest registry를 로드할 때 강제 적용돼요. 유효하지 않은 값은 거부되며, 유효하지만 호스트보다 최신 버전인 경우에는 이전 버전의 호스트에서 해당 플러그인을 건너뛰게 돼요.
openclaw.install.allowInvalidConfigRecovery는 의도적으로 좁은 범위에만 적용돼요. 망가진 설정을 아무렇게나 설치할 수 있게 해주는 것이 아니에요. 현재는 누락된 번들 플러그인 경로 또는 동일한 번들 플러그인에 대한 오래된 channels.<id> 항목과 같이, 특정 번들 플러그인 업그레이드 실패 상황에서만 복구 흐름을 허용해요. 이와 관련 없는 설정 오류는 여전히 설치를 차단하며, 운영자가 openclaw doctor --fix를 실행하도록 안내해요.
openclaw.channel.persistedAuthState는 작은 체커 모듈을 위한 패키지 메타데이터예요.
{ "openclaw": { "channel": { "id": "whatsapp", "persistedAuthState": { "specifier": "./auth-presence", "exportName": "hasAnyWhatsAppAuth" } } }}전체 channel 플러그인이 로드되기 전에 setup, doctor, 또는 설정 상태 흐름에서 가벼운 인증 확인이 필요할 때 이 기능을 사용하세요. 대상 export는 저장된 상태만 읽는 작은 함수여야 하며, 전체 channel 런타임으로 연결되지 않도록 주의해야 해요.
openclaw.channel.configuredState도 가벼운 환경 전용 설정 확인을 위해 동일한 구조를 따라요.
{ "openclaw": { "channel": { "id": "telegram", "configuredState": { "specifier": "./configured-state", "exportName": "hasTelegramConfiguredState" } } }}channel이 환경 변수나 다른 작은 비런타임 입력값으로 설정 상태를 확인할 수 있을 때 사용하세요. 만약 확인 과정에서 전체 설정 확인(resolution)이나 실제 channel 런타임이 필요하다면, 해당 로직은 플러그인의 config.hasConfiguredState hook에 그대로 두는 것이 좋아요.
JSON Schema 요구 사항
섹션 제목: “JSON Schema 요구 사항”- 모든 플러그인은 반드시 JSON Schema를 제공해야 해요. 설정을 받지 않는 플러그인이라도 예외는 아니에요.
- 빈 스키마(예:
{ "type": "object", "additionalProperties": false })를 사용하는 것도 괜찮아요. - 스키마 검증은 런타임이 아니라 설정을 읽거나 쓰는 시점에 수행돼요.
- 유효하지 않은 스키마는 플러그인 로드나 설정 업데이트를 차단할 수 있어요.
검증 동작 (Validation behavior)
섹션 제목: “검증 동작 (Validation behavior)”channels.*에 알 수 없는 키가 있으면 에러로 처리돼요. 단, plugin manifest에 해당 channel id가 정의되어 있다면 괜찮아요.plugins.entries.<id>,plugins.allow,plugins.deny,plugins.slots.*는 반드시 찾을 수 있는(discoverable) plugin id를 참조해야 해요. 알 수 없는 id는 에러를 발생시켜요.- 플러그인이 설치되었지만 manifest나 schema가 깨졌거나 누락된 경우, 검증에 실패하고 Doctor가 플러그인 에러를 보고해요.
- 플러그인 설정은 존재하지만 플러그인이 **비활성화(disabled)**된 경우, 설정은 유지되지만 Doctor와 로그에 **경고(warning)**가 표시돼요.
전체 plugins.* schema는 Configuration reference에서 확인할 수 있어요.
참고 사항 (Notes)
섹션 제목: “참고 사항 (Notes)”- 로컬 파일 시스템 로드를 포함하여 네이티브 OpenClaw 플러그인에는 manifest가 필수예요.
- Runtime은 플러그인 모듈을 별도로 로드해요. manifest는 오직 탐색(discovery)과 검증(validation) 용도로만 쓰여요.
- 네이티브 manifest는 JSON5로 파싱돼요. 그래서 최종 값이 객체 형태이기만 하면 주석, trailing comma, 따옴표 없는 키를 모두 사용할 수 있어요.
- manifest loader는 문서화된 manifest 필드만 읽어요. 여기에 커스텀 최상위 키를 추가하는 건 피해 주세요.
providerAuthEnvVars는 auth probe, env-marker 검증처럼 환경 변수 이름만 확인하면 되는 작업을 위한 가벼운 메타데이터 경로예요. 이를 위해 플러그인 runtime을 굳이 실행할 필요가 없어요.providerAuthAliases를 사용하면 core에 해당 관계를 하드코딩하지 않고도 다른 provider의 auth env vars, auth profiles, 설정 기반 auth, API-key 온보딩 선택 사항을 재사용할 수 있어요.channelEnvVars는 shell-env fallback, setup prompt 등을 위한 가벼운 메타데이터 경로예요. env 이름을 확인하려고 플러그인 runtime을 실행하지 않아도 돼요.providerAuthChoices는 provider runtime이 로드되기 전, auth-choice 선택기,--auth-choice확인, 선호하는 provider 매핑, 간단한 온보딩 CLI flag 등록을 위한 메타데이터 경로예요. provider 코드가 필요한 runtime 마법사 메타데이터는 Provider runtime hooks를 확인해 보세요.- 독점적인(Exclusive) 플러그인 종류는
plugins.slots.*를 통해 선택돼요.kind: "memory"는plugins.slots.memory로 선택해요.kind: "context-engine"은plugins.slots.contextEngine으로 선택해요 (기본값: 내장된legacy).
- 플러그인에 필요하지 않다면
channels,providers,cliBackends,skills는 생략할 수 있어요. - 플러그인이 네이티브 모듈에 의존하는 경우, 빌드 단계와 패키지 매니저의 allowlist 요구 사항(예: pnpm
allow-build-scripts-pnpm rebuild <package>)을 문서에 적어 주세요.
관련 문서 (Related)
섹션 제목: “관련 문서 (Related)”- Building Plugins — 플러그인 개발 시작하기
- Plugin Architecture — 내부 아키텍처
- SDK Overview — Plugin SDK 레퍼런스
OpenClaw Expert
아직 막혀 있나요?
이 문서에서 답을 못 찾았다면 OpenClaw Expert에게 바로 물어보세요.