package.json 메타데이터), 매니페스트(openclaw.plugin.json), 설정 엔트리 및 구성 스키마에 대한 참고 자료입니다.
패키지 메타데이터
package.json에는 Plugin 시스템에 Plugin이 제공하는 기능을 알리는 openclaw 필드가 필요합니다.
- 채널 Plugin
- Provider Plugin / ClawHub 기준
ClawHub에 외부 게시하려면
compat 및 build가 필요합니다. 표준 게시 스니펫은 docs/snippets/plugin-publish/에 있습니다.openclaw 필드
string[]
엔트리 포인트 파일입니다(패키지 루트 기준 상대 경로). 워크스페이스 및 git 체크아웃 개발에 유효한 소스 엔트리입니다.
string[]
extensions에 대응하는 빌드된 JavaScript 파일입니다. OpenClaw가 설치된 npm 패키지를 로드할 때 우선 사용됩니다. 소스/빌드 결과의 해석 순서는 SDK 엔트리 포인트를 참조하세요.string
설정 전용 경량 엔트리입니다(선택 사항).
string
setupEntry에 대응하는 빌드된 JavaScript 파일입니다. setupEntry도 설정되어 있어야 합니다.object
{ id, label } 대체 Plugin 식별 정보입니다. id 또는 레이블을 파생할 채널/Provider 메타데이터가 Plugin에 없을 때 사용됩니다.object
설정, 선택기, 빠른 시작 및 상태 화면을 위한 채널 카탈로그 메타데이터입니다.
object
설치 힌트입니다:
npmSpec, localPath, defaultChoice, minHostVersion, expectedIntegrity, allowInvalidConfigRecovery, requiredPlatformPackages.object
시작 동작 플래그입니다.
object
이 Plugin이 지원하는
pluginApi 버전 범위입니다. 외부 ClawHub 게시에 필수입니다.Provider ID(
providers: string[])는 패키지 메타데이터가 아니라 매니페스트 메타데이터입니다. 여기서 선언하지 말고 openclaw.plugin.json에서 선언하세요. Plugin 매니페스트를 참조하세요.openclaw.channel
openclaw.channel은 런타임이 로드되기 전에 채널 검색 및 설정 화면에서 사용하는 가벼운 패키지 메타데이터입니다.
예시:
exposure에서 지원하는 항목은 다음과 같습니다.
configured: 구성됨/상태 형식의 목록 화면에 채널을 포함합니다.setup: 대화형 설정/구성 선택기에 채널을 포함합니다.docs: 문서/탐색 화면에서 채널을 공개 대상으로 표시합니다.
showConfigured 및 showInSetup은 기존 별칭으로 계속 지원됩니다. exposure를 우선 사용하세요.openclaw.install
openclaw.install은 매니페스트 메타데이터가 아니라 패키지 메타데이터입니다.
온보딩 동작
온보딩 동작
대화형 온보딩에서는 요청 시 설치 화면에
openclaw.install을 사용합니다. Plugin이 런타임 로드 전에 Provider 인증 선택 항목 또는 채널 설정/카탈로그 메타데이터를 노출하면 온보딩에서 ClawHub, npm 또는 로컬 설치 여부를 묻고 Plugin을 설치하거나 활성화한 다음 선택한 흐름을 계속할 수 있습니다. ClawHub 선택 항목은 clawhubSpec을 사용하며, 값이 있으면 우선됩니다. npm 선택 항목에는 레지스트리 npmSpec이 포함된 신뢰할 수 있는 카탈로그 메타데이터가 필요합니다(정확한 버전 및 expectedIntegrity는 선택적 고정값이며, 설정된 경우 설치/업데이트 시 적용됩니다). “표시할 내용”은 openclaw.plugin.json에, “설치 방법”은 package.json에 유지하세요.minHostVersion 적용
minHostVersion 적용
minHostVersion이 설정되면 설치 및 비번들 매니페스트 레지스트리 로드 모두에서 이를 적용합니다. 이전 버전의 호스트는 외부 Plugin을 건너뛰며, 유효하지 않은 버전 문자열은 거부됩니다. 번들 소스 Plugin은 호스트 체크아웃과 동일한 버전인 것으로 간주합니다.고정된 npm 설치
고정된 npm 설치
고정된 npm 설치의 경우
npmSpec에 정확한 버전을 유지하고 예상 아티팩트 무결성을 추가하세요.allowInvalidConfigRecovery 범위
allowInvalidConfigRecovery 범위
allowInvalidConfigRecovery는 손상된 구성을 일반적으로 우회하는 기능이 아닙니다. 이는 번들 Plugin 전용의 제한된 복구 기능으로, 재설치/설정 과정에서 누락된 번들 Plugin 경로나 같은 Plugin의 오래된 channels.<id> 항목처럼 알려진 업그레이드 잔여 문제를 복구할 수 있게 합니다. 관련 없는 이유로 구성이 손상된 경우 설치는 여전히 안전하게 실패하며 운영자에게 openclaw doctor --fix를 실행하라고 안내합니다.전체 로드 지연
채널 Plugin은 다음 설정을 사용하여 지연 로드를 활성화할 수 있습니다.setupEntry만 로드합니다. 전체 엔트리는 Gateway가 수신 대기를 시작한 후 로드됩니다.
설정/전체 엔트리가 Gateway RPC 메서드를 등록한다면 Plugin별 접두사 아래에 두세요. 예약된 핵심 관리 네임스페이스(config.*, exec.approvals.*, wizard.*, update.*)는 핵심에서 계속 소유하며 항상 operator.admin으로 정규화됩니다.
Plugin 매니페스트
모든 네이티브 Plugin은 패키지 루트에openclaw.plugin.json을 포함하여 배포해야 합니다. OpenClaw는 이를 사용해 Plugin 코드를 실행하지 않고 구성을 검증합니다.
channels를 추가하고, 제공자 Plugin의 경우 providers를 추가합니다.
ClawHub 게시
Skills와 Plugin 패키지는 서로 다른 ClawHub 게시 명령을 사용합니다. Plugin 패키지에는 패키지 전용 명령을 사용하세요.clawhub skill publish <path>는 Plugin 패키지가 아닌 Skills 폴더를 게시하는 별도의 명령입니다. ClawHub에 게시하기를 참조하세요.설정 진입점
setup-entry.ts는 OpenClaw에 설정 표면(온보딩, 구성 복구, 비활성화된 채널 검사)만 필요할 때 로드하는 index.ts의 경량 대안입니다.
defineSetupPluginEntry(...) 대신 openclaw/plugin-sdk/channel-entry-contract의 defineBundledChannelSetupEntry(...)를 사용할 수 있습니다. 이 번들 계약은 선택적 runtime 내보내기도 지원하므로 설정 시점의 런타임 연결을 경량화하고 명시적으로 유지할 수 있습니다.
OpenClaw가 전체 진입점 대신 setupEntry를 사용하는 경우
OpenClaw가 전체 진입점 대신 setupEntry를 사용하는 경우
- 채널이 비활성화되어 있지만 설정/온보딩 표면이 필요한 경우.
- 채널이 활성화되어 있지만 구성되지 않은 경우.
- 지연 로딩이 활성화된 경우(
deferConfiguredChannelFullLoadUntilAfterListen).
setupEntry가 등록해야 하는 항목
setupEntry가 등록해야 하는 항목
- 채널 Plugin 객체(
defineSetupPluginEntry를 통해). - Gateway 수신 전에 필요한 모든 HTTP 경로.
- 시작 중 필요한 모든 Gateway 메서드.
config.* 또는 update.* 같은 예약된 핵심 관리 네임스페이스는 사용하지 않아야 합니다.setupEntry에 포함하지 않아야 하는 항목
setupEntry에 포함하지 않아야 하는 항목
- CLI 등록.
- 백그라운드 서비스.
- 무거운 런타임 가져오기(암호화, SDK).
- 시작 후에만 필요한 Gateway 메서드.
범위가 좁은 설정 도우미 가져오기
설정 전용 핫 경로에서 설정 표면의 일부만 필요하다면 더 광범위한plugin-sdk/setup 통합 진입점보다 범위가 좁은 설정 도우미 연결부를 사용하세요.
moveSingleAccountChannelSectionToDefaultAccount(...) 같은 구성 패치 도우미를 포함해 공유 설정 도구 모음 전체가 필요하다면 더 광범위한 plugin-sdk/setup 연결부를 사용하세요.
고정된 설정 마법사 문구에는 createSetupTranslator(...)를 사용하세요. 이 함수는 CLI 마법사의 로캘(OPENCLAW_LOCALE, 그다음 시스템 로캘 변수)을 따르며, 사용할 수 없으면 영어로 대체합니다. Plugin별 설정 문구는 Plugin 소유 코드에 유지하고, 공통 설정 레이블, 상태 문구 및 공식 번들 Plugin 설정 문구에만 공유 카탈로그 키를 사용하세요.
설정 패치 어댑터는 가져올 때도 핫 경로의 안전성을 유지합니다. 번들 단일 계정 승격 계약 표면 조회는 지연 실행되므로, plugin-sdk/setup-runtime을 가져와도 어댑터가 실제로 사용되기 전에는 번들 계약 표면 탐색을 즉시 로드하지 않습니다.
채널 소유 단일 계정 승격
채널이 단일 계정용 최상위 구성에서channels.<id>.accounts.*로 업그레이드될 때, 기본 공유 동작은 승격되는 계정 범위의 값을 accounts.default로 이동합니다.
번들 채널은 설정 계약 표면을 통해 이 승격 범위를 좁히거나 동작을 재정의할 수 있습니다.
singleAccountKeysToMove: 승격된 계정으로 이동해야 하는 추가 최상위 키namedAccountPromotionKeys: 명명된 계정이 이미 존재할 때 승격된 계정으로 이동할 키만 지정합니다. 공유 정책/전달 키는 채널 루트에 유지됩니다.resolveSingleAccountPromotionTarget(...): 승격된 값을 받을 기존 계정을 선택합니다.
Matrix는 현재 번들 예시입니다. 명명된 Matrix 계정이 정확히 하나만 이미 존재하거나
defaultAccount가 Ops와 같은 기존 비정규 키를 가리키는 경우, 승격 시 새로운 accounts.default 항목을 만드는 대신 해당 계정을 유지합니다.구성 스키마
Plugin 구성은 매니페스트의 JSON Schema를 기준으로 검증됩니다. 사용자는 다음과 같이 Plugin을 구성합니다.api.pluginConfig로 전달받습니다.
채널별 구성에는 대신 채널 구성 섹션을 사용하세요.
채널 구성 스키마 빌드
buildChannelConfigSchema를 사용하여 Zod 스키마를 Plugin 소유 구성 아티팩트에서 사용하는 ChannelConfigSchema 래퍼로 변환하세요.
openclaw.plugin.json#channelConfigs에 반영하여 구성 스키마, 설정 및 UI 표면이 런타임 코드를 로드하지 않고도 channels.<id>를 검사할 수 있게 하세요.
설정 마법사
채널 Plugin은openclaw onboard에 대화형 설정 마법사를 제공할 수 있습니다. 마법사는 ChannelPlugin의 ChannelSetupWizard 객체입니다.
ChannelSetupWizard는 textInputs, dmPolicy, allowFrom, groupAccess, prepare, finalize 등도 지원합니다. 전체 번들 예시는 Discord Plugin의 src/setup-core.ts를 참조하세요.
공유 allowFrom 프롬프트
공유 allowFrom 프롬프트
표준
note -> prompt -> parse -> merge -> patch 흐름만 필요한 DM 허용 목록 프롬프트에는 openclaw/plugin-sdk/setup의 공유 설정 헬퍼인 createPromptParsedAllowFromForAccount(...), createTopLevelChannelParsedAllowFromPrompt(...), createNestedChannelParsedAllowFromPrompt(...)를 사용하는 것이 좋습니다.표준 채널 설정 상태
표준 채널 설정 상태
레이블, 점수 및 선택적 추가 줄만 달라지는 채널 설정 상태 블록에는 각 Plugin에서 동일한
status 객체를 직접 작성하는 대신 openclaw/plugin-sdk/setup의 createStandardChannelSetupStatus(...)를 사용하는 것이 좋습니다.선택적 채널 설정 표면
선택적 채널 설정 표면
특정 컨텍스트에서만 표시해야 하는 선택적 설정 표면에는 선택적 설치 표면의 한쪽만 필요한 경우,
openclaw/plugin-sdk/channel-setup의 createOptionalChannelSetupSurface를 사용하세요.plugin-sdk/channel-setup은 더 저수준의 createOptionalChannelSetupAdapter(...) 및 createOptionalChannelSetupWizard(...) 빌더도 제공합니다.생성된 선택적 어댑터/마법사는 실제 구성 쓰기에서 안전하게 실패합니다. validateInput, applyAccountConfig, finalize 전반에서 하나의 설치 필요 메시지를 재사용하며, docsPath가 설정되어 있으면 문서 링크를 추가합니다.바이너리 기반 설정 도우미
바이너리 기반 설정 도우미
바이너리 기반 설정 UI에서는 동일한 바이너리/상태 연결 코드를 모든 채널에 복사하는 대신 공유 위임 도우미를 사용하는 것이 좋습니다.
- 레이블, 힌트, 점수, 바이너리 감지만 달라지는 상태 블록에는
createDetectedBinaryStatus(...) - 경로 기반 텍스트 입력에는
createCliPathTextInput(...) setupEntry가 필요할 때 더 복잡한 전체 마법사로 지연 위임해야 하는 경우createDelegatedSetupWizardStatusResolvers(...),createDelegatedPrepare(...),createDelegatedFinalize(...),createDelegatedResolveConfigured(...)setupEntry가textInputs[*].shouldPrompt결정만 위임하면 되는 경우createDelegatedTextInputShouldPrompt(...)
게시 및 설치
외부 Plugin: ClawHub에 게시한 후 설치합니다.- npm
- ClawHub 전용
- npm 패키지 명세
clawhub:, npm:, git:, npm-pack:을 사용하세요. 자세한 내용은 Plugin 관리를 참조하세요.npm에서 가져오는 설치의 경우
openclaw plugins install은 수명 주기 스크립트를 비활성화한 상태(--ignore-scripts)로 ~/.openclaw/npm/projects 아래의 Plugin별 프로젝트에 패키지를 설치합니다. Plugin 종속성 트리는 순수 JS/TS로 유지하고 postinstall 빌드가 필요한 패키지는 피하세요.Gateway 시작 과정에서는 Plugin 종속성을 설치하지 않습니다. npm/git/ClawHub 설치 흐름이 종속성 수렴을 담당하며, 로컬 Plugin은 종속성이 이미 설치되어 있어야 합니다.
관련 항목
- Plugin 구축 — 단계별 시작 가이드
- Plugin 매니페스트 — 전체 매니페스트 스키마 참조
- SDK 진입점 —
definePluginEntry및defineChannelPluginEntry