플러그인 manifest (openclaw.plugin.json)
모든 plugin은 plugin root에 openclaw.plugin.json 파일을 반드시 포함해야 합니다.
OpenClaw는 이 manifest를 사용해 plugin 코드를 실행하지 않고도 설정을 검증합니다. manifest가 없거나 잘못되면 plugin 오류로 간주되어 config 검증이 차단됩니다.
전체 plugin 시스템 가이드는 Plugins를 참고하세요.
필수 필드
id(string): 정식 plugin idconfigSchema(object): plugin config용 JSON Schema(인라인)
kind(string): plugin kind(예:"memory","context-engine")channels(array): 이 plugin이 등록하는 channel id(예:["matrix"])providers(array): 이 plugin이 등록하는 provider idskills(array): 로드할 skill 디렉터리(plugin root 기준 상대 경로)name(string): plugin 표시 이름description(string): 짧은 plugin 설명uiHints(object): UI 렌더링용 config 필드 라벨/placeholder/민감 정보 플래그version(string): 플러그인 버전(정보용)
JSON Schema 요구사항
- 모든 plugin은 JSON Schema를 반드시 포함해야 하며, config를 받지 않더라도 예외가 아닙니다.
- 빈 스키마도 허용됩니다(예:
{ "type": "object", "additionalProperties": false }). - 스키마는 런타임이 아니라 config 읽기/쓰기 시점에 검증됩니다.
검증 동작
- plugin manifest가 해당 channel id를 선언하지 않았다면, 알 수 없는
channels.*키는 오류입니다. plugins.entries.<id>,plugins.allow,plugins.deny,plugins.slots.*는 발견 가능한 plugin id를 참조해야 합니다. 알 수 없는 id는 오류입니다.- plugin이 설치되어 있지만 manifest나 schema가 깨져 있거나 누락되어 있다면 검증은 실패하고 Doctor가 plugin 오류를 보고합니다.
- plugin config가 존재하지만 plugin이 비활성화되어 있으면 config는 유지되며, Doctor와 log에서 경고가 표시됩니다.
참고
- manifest는 모든 plugin에 필수이며, 로컬 filesystem load도 예외가 아닙니다.
- runtime은 plugin module을 별도로 로드합니다. manifest는 discovery와 validation에만 사용됩니다.
- 배타적인 plugin kind는
plugins.slots.*를 통해 선택됩니다.kind: "memory"는plugins.slots.memory로 선택kind: "context-engine"는plugins.slots.contextEngine로 선택(기본값: 내장legacy)
- plugin이 native module에 의존한다면, build 단계와 package manager allowlist 요구사항(예: pnpm
allow-build-scriptspnpm rebuild <package>)을 문서화하세요.