플러그인 매니페스트 (openclaw.plugin.json)

모든 플러그인은 플러그인 루트openclaw.plugin.json 파일을 반드시 포함해야 합니다. OpenClaw는 플러그인 코드를 실행하지 않고 이 매니페스트를 사용하여 설정을 검증합니다. 매니페스트가 없거나 유효하지 않으면 플러그인 오류로 처리되어 설정 검증이 차단됩니다.

전체 플러그인 시스템 가이드: 플러그인.

필수 필드

{
  "id": "voice-call",
  "configSchema": {
    "type": "object",
    "additionalProperties": false,
    "properties": {}
  }
}

필수 키:

  • id (문자열): 정식 플러그인 ID.
  • configSchema (객체): 플러그인 설정을 위한 JSON Schema (인라인).

선택 키:

  • kind (문자열): 플러그인 종류 (예: "memory", "context-engine").
  • channels (배열): 이 플러그인이 등록하는 채널 ID (예: ["matrix"]).
  • providers (배열): 이 플러그인이 등록하는 프로바이더 ID.
  • skills (배열): 로드할 스킬 디렉토리 (플러그인 루트 기준 상대 경로).
  • name (문자열): 플러그인 표시 이름.
  • description (문자열): 짧은 플러그인 요약.
  • uiHints (객체): UI 렌더링을 위한 설정 필드 레이블/플레이스홀더/민감 정보 플래그.
  • version (문자열): 플러그인 버전 (정보 제공용).

JSON Schema 요구사항

  • 모든 플러그인은 JSON Schema를 반드시 제공해야 합니다, 설정을 받지 않더라도.
  • 빈 스키마도 허용됩니다 (예: { "type": "object", "additionalProperties": false }).
  • 스키마는 런타임이 아닌 설정 읽기/쓰기 시점에 검증됩니다.

검증 동작

  • 플러그인 매니페스트에 선언되지 않은 channels.* 키는 오류입니다.
  • plugins.entries.<id>, plugins.allow, plugins.deny, plugins.slots.*검색 가능한 플러그인 ID를 참조해야 합니다. 알 수 없는 ID는 오류입니다.
  • 플러그인이 설치되었지만 매니페스트 또는 스키마가 손상되었거나 없으면, 검증이 실패하고 Doctor가 플러그인 오류를 보고합니다.
  • 플러그인 설정이 존재하지만 플러그인이 비활성화된 경우, 설정은 유지되고 Doctor + 로그에 경고가 표시됩니다.

참고

  • 매니페스트는 로컬 파일시스템 로드를 포함한 모든 플러그인에 필수입니다.
  • 런타임은 플러그인 모듈을 별도로 로드합니다. 매니페스트는 검색 + 검증 용도입니다.
  • 배타적 플러그인 종류는 plugins.slots.*를 통해 선택됩니다.
    • kind: "memory"plugins.slots.memory로 선택됩니다.
    • kind: "context-engine"plugins.slots.contextEngine으로 선택됩니다 (기본값: 내장 legacy).
  • 플러그인이 네이티브 모듈에 의존하는 경우, 빌드 단계와 패키지 관리자 허용 목록 요구사항을 문서화하세요 (예: pnpm allow-build-scripts
    • pnpm rebuild <package>).