플러그인 SDK 개요
플러그인 SDK는 플러그인과 core 사이의 타입 지정 계약입니다. 이 페이지는 무엇을 import해야 하는지와 무엇을 등록할 수 있는지에 대한 참조입니다.import 규칙
항상 특정 하위 경로에서 import하세요.openclaw/plugin-sdk/channel-core를 우선 사용하고, 더 넓은 umbrella 표면과
buildChannelConfigSchema 같은 공유 헬퍼에는 openclaw/plugin-sdk/core를 유지하세요.
openclaw/plugin-sdk/slack, openclaw/plugin-sdk/discord,
openclaw/plugin-sdk/signal, openclaw/plugin-sdk/whatsapp 또는
채널 브랜드 헬퍼 표면 같은 provider 이름 기반 편의 seam을 추가하거나 이에 의존하지 마세요.
번들 플러그인은 자체 api.ts 또는 runtime-api.ts 배럴 안에서 일반적인
SDK 하위 경로를 조합해야 하며, core는 해당 필요가 진정으로 채널 간 요구일 때
그 플러그인 로컬 배럴을 사용하거나 좁은 범위의 일반 SDK 계약을 추가해야 합니다.
생성된 export 맵에는 여전히 plugin-sdk/feishu, plugin-sdk/feishu-setup,
plugin-sdk/zalo, plugin-sdk/zalo-setup, plugin-sdk/matrix*와 같은
소수의 번들 플러그인 헬퍼 seam이 포함되어 있습니다. 이 하위 경로들은
번들 플러그인 유지보수 및 호환성을 위해서만 존재하며, 아래의 일반 표에서는 의도적으로 제외되어 있고
새로운 서드파티 플러그인에 권장되는 import 경로가 아닙니다.
하위 경로 참조
용도별로 그룹화한 가장 일반적으로 사용되는 하위 경로입니다. 200개가 넘는 하위 경로의 생성된 전체 목록은scripts/lib/plugin-sdk-entrypoints.json에 있습니다.
예약된 번들 플러그인 헬퍼 하위 경로는 여전히 그 생성된 목록에 나타납니다.
문서 페이지가 이를 공개 표면으로 명시적으로 안내하지 않는 한, 구현 세부 사항/호환성 표면으로 취급하세요.
플러그인 엔트리
| 하위 경로 | 주요 export |
|---|---|
plugin-sdk/plugin-entry | definePluginEntry |
plugin-sdk/core | defineChannelPluginEntry, createChatChannelPlugin, createChannelPluginBase, defineSetupPluginEntry, buildChannelConfigSchema |
plugin-sdk/config-schema | OpenClawSchema |
plugin-sdk/provider-entry | defineSingleProviderPluginEntry |
채널 하위 경로
채널 하위 경로
provider 하위 경로
provider 하위 경로
| 하위 경로 | 주요 export |
|---|---|
plugin-sdk/provider-entry | defineSingleProviderPluginEntry |
plugin-sdk/provider-setup | 선별된 로컬/셀프호스팅 provider setup 헬퍼 |
plugin-sdk/self-hosted-provider-setup | 집중된 OpenAI 호환 셀프호스팅 provider setup 헬퍼 |
plugin-sdk/cli-backend | CLI 백엔드 기본값 + watchdog 상수 |
plugin-sdk/provider-auth-runtime | provider plugin용 런타임 API 키 해결 헬퍼 |
plugin-sdk/provider-auth-api-key | upsertApiKeyProfile 같은 API 키 온보딩/profile-write 헬퍼 |
plugin-sdk/provider-auth-result | 표준 OAuth auth-result 빌더 |
plugin-sdk/provider-auth-login | provider plugin용 공유 대화형 로그인 헬퍼 |
plugin-sdk/provider-env-vars | provider 인증 env var 조회 헬퍼 |
plugin-sdk/provider-auth | createProviderApiKeyAuthMethod, ensureApiKeyFromOptionEnvOrPrompt, upsertAuthProfile, upsertApiKeyProfile, writeOAuthCredentials |
plugin-sdk/provider-model-shared | ProviderReplayFamily, buildProviderReplayFamilyHooks, normalizeModelCompat, 공유 replay-policy 빌더, provider 엔드포인트 헬퍼, normalizeNativeXaiModelId 같은 모델 id 정규화 헬퍼 |
plugin-sdk/provider-catalog-shared | findCatalogTemplate, buildSingleProviderApiKeyCatalog, supportsNativeStreamingUsageCompat, applyProviderNativeStreamingUsageCompat |
plugin-sdk/provider-http | 일반 provider HTTP/엔드포인트 기능 헬퍼 |
plugin-sdk/provider-web-fetch-contract | enablePluginInConfig 및 WebFetchProviderPlugin 같은 좁은 범위의 web-fetch config/선택 계약 헬퍼 |
plugin-sdk/provider-web-fetch | web-fetch provider 등록/캐시 헬퍼 |
plugin-sdk/provider-web-search-config-contract | 플러그인 활성화 wiring이 필요하지 않은 provider용 좁은 범위의 web-search config/자격 증명 헬퍼 |
plugin-sdk/provider-web-search-contract | createWebSearchProviderContractFields, enablePluginInConfig, resolveProviderWebSearchPluginConfig, 범위 지정 자격 증명 setter/getter 같은 좁은 범위의 web-search config/자격 증명 계약 헬퍼 |
plugin-sdk/provider-web-search | web-search provider 등록/캐시/런타임 헬퍼 |
plugin-sdk/provider-tools | ProviderToolCompatFamily, buildProviderToolCompatFamilyHooks, Gemini 스키마 정리 + 진단, resolveXaiModelCompatPatch / applyXaiModelCompat 같은 xAI 호환 헬퍼 |
plugin-sdk/provider-usage | fetchClaudeUsage 및 유사 항목 |
plugin-sdk/provider-stream | ProviderStreamFamily, buildProviderStreamFamilyHooks, composeProviderStreamWrappers, 스트림 래퍼 타입, 공유 Anthropic/Bedrock/Google/Kilocode/Moonshot/OpenAI/OpenRouter/Z.A.I/MiniMax/Copilot 래퍼 헬퍼 |
plugin-sdk/provider-onboard | 온보딩 config 패치 헬퍼 |
plugin-sdk/global-singleton | 프로세스 로컬 singleton/map/cache 헬퍼 |
인증 및 보안 하위 경로
인증 및 보안 하위 경로
| 하위 경로 | 주요 export |
|---|---|
plugin-sdk/command-auth | resolveControlCommandGate, 명령 레지스트리 헬퍼, 발신자 인증 헬퍼 |
plugin-sdk/command-status | buildCommandsMessagePaginated, buildHelpMessage 같은 명령/도움말 메시지 빌더 |
plugin-sdk/approval-auth-runtime | 승인자 해결 및 동일 채팅 액션 인증 헬퍼 |
plugin-sdk/approval-client-runtime | 네이티브 exec 승인 프로필/필터 헬퍼 |
plugin-sdk/approval-delivery-runtime | 네이티브 승인 기능/전달 어댑터 |
plugin-sdk/approval-gateway-runtime | 공유 승인 게이트웨이 해결 헬퍼 |
plugin-sdk/approval-handler-adapter-runtime | hot 채널 엔트리포인트용 경량 네이티브 승인 어댑터 로딩 헬퍼 |
plugin-sdk/approval-handler-runtime | 더 넓은 승인 핸들러 런타임 헬퍼; 더 좁은 adapter/gateway seam으로 충분하다면 그것을 우선 사용하세요 |
plugin-sdk/approval-native-runtime | 네이티브 승인 대상 + account-binding 헬퍼 |
plugin-sdk/approval-reply-runtime | exec/plugin 승인 응답 payload 헬퍼 |
plugin-sdk/command-auth-native | 네이티브 명령 인증 + 네이티브 session-target 헬퍼 |
plugin-sdk/command-detection | 공유 명령 감지 헬퍼 |
plugin-sdk/command-surface | 명령 본문 정규화 및 명령 표면 헬퍼 |
plugin-sdk/allow-from | formatAllowFromLowercase |
plugin-sdk/channel-secret-runtime | 채널/플러그인 secret 표면용 좁은 범위의 secret 계약 수집 헬퍼 |
plugin-sdk/secret-ref-runtime | secret 계약/config 파싱용 좁은 범위의 coerceSecretRef 및 SecretRef 타이핑 헬퍼 |
plugin-sdk/security-runtime | 공유 trust, DM 게이팅, 외부 콘텐츠, secret 수집 헬퍼 |
plugin-sdk/ssrf-policy | 호스트 allowlist 및 private-network SSRF 정책 헬퍼 |
plugin-sdk/ssrf-runtime | pinned-dispatcher, SSRF 보호 fetch, SSRF 정책 헬퍼 |
plugin-sdk/secret-input | secret 입력 파싱 헬퍼 |
plugin-sdk/webhook-ingress | webhook 요청/대상 헬퍼 |
plugin-sdk/webhook-request-guards | 요청 본문 크기/타임아웃 헬퍼 |
런타임 및 저장소 하위 경로
런타임 및 저장소 하위 경로
기능 및 테스트 하위 경로
기능 및 테스트 하위 경로
| 하위 경로 | 주요 export |
|---|---|
plugin-sdk/media-runtime | 공유 미디어 fetch/transform/store 헬퍼와 미디어 payload 빌더 |
plugin-sdk/media-generation-runtime | 공유 미디어 생성 failover 헬퍼, 후보 선택, 누락된 모델 메시지 처리 |
plugin-sdk/media-understanding | 미디어 이해 provider 타입과 provider용 image/audio 헬퍼 export |
plugin-sdk/text-runtime | 어시스턴트 표시 텍스트 제거, Markdown 렌더/chunking/표 헬퍼, 민감 정보 가리기 헬퍼, directive 태그 헬퍼, safe-text 유틸리티 같은 공유 텍스트/Markdown/로깅 헬퍼 |
plugin-sdk/text-chunking | 아웃바운드 텍스트 chunking 헬퍼 |
plugin-sdk/speech | 음성 provider 타입과 provider용 directive, 레지스트리, 검증 헬퍼 |
plugin-sdk/speech-core | 공유 음성 provider 타입, 레지스트리, directive, 정규화 헬퍼 |
plugin-sdk/realtime-transcription | 실시간 전사 provider 타입 및 레지스트리 헬퍼 |
plugin-sdk/realtime-voice | 실시간 음성 provider 타입 및 레지스트리 헬퍼 |
plugin-sdk/image-generation | 이미지 생성 provider 타입 |
plugin-sdk/image-generation-core | 공유 이미지 생성 타입, failover, 인증, 레지스트리 헬퍼 |
plugin-sdk/music-generation | 음악 생성 provider/요청/결과 타입 |
plugin-sdk/music-generation-core | 공유 음악 생성 타입, failover 헬퍼, provider 조회, model-ref 파싱 |
plugin-sdk/video-generation | 비디오 생성 provider/요청/결과 타입 |
plugin-sdk/video-generation-core | 공유 비디오 생성 타입, failover 헬퍼, provider 조회, model-ref 파싱 |
plugin-sdk/webhook-targets | webhook 대상 레지스트리 및 라우트 설치 헬퍼 |
plugin-sdk/webhook-path | webhook 경로 정규화 헬퍼 |
plugin-sdk/web-media | 공유 원격/로컬 미디어 로딩 헬퍼 |
plugin-sdk/zod | 플러그인 SDK 소비자를 위한 zod 재내보내기 |
plugin-sdk/testing | installCommonResolveTargetErrorCases, shouldAckReaction |
메모리 하위 경로
메모리 하위 경로
| 하위 경로 | 주요 export |
|---|---|
plugin-sdk/memory-core | manager/config/file/CLI 헬퍼를 위한 번들된 memory-core 헬퍼 표면 |
plugin-sdk/memory-core-engine-runtime | 메모리 인덱스/검색 런타임 파사드 |
plugin-sdk/memory-core-host-engine-foundation | 메모리 호스트 foundation 엔진 export |
plugin-sdk/memory-core-host-engine-embeddings | 메모리 호스트 embedding 엔진 export |
plugin-sdk/memory-core-host-engine-qmd | 메모리 호스트 QMD 엔진 export |
plugin-sdk/memory-core-host-engine-storage | 메모리 호스트 스토리지 엔진 export |
plugin-sdk/memory-core-host-multimodal | 메모리 호스트 멀티모달 헬퍼 |
plugin-sdk/memory-core-host-query | 메모리 호스트 쿼리 헬퍼 |
plugin-sdk/memory-core-host-secret | 메모리 호스트 secret 헬퍼 |
plugin-sdk/memory-core-host-events | 메모리 호스트 이벤트 저널 헬퍼 |
plugin-sdk/memory-core-host-status | 메모리 호스트 상태 헬퍼 |
plugin-sdk/memory-core-host-runtime-cli | 메모리 호스트 CLI 런타임 헬퍼 |
plugin-sdk/memory-core-host-runtime-core | 메모리 호스트 core 런타임 헬퍼 |
plugin-sdk/memory-core-host-runtime-files | 메모리 호스트 파일/런타임 헬퍼 |
plugin-sdk/memory-host-core | 메모리 호스트 core 런타임 헬퍼의 벤더 중립 별칭 |
plugin-sdk/memory-host-events | 메모리 호스트 이벤트 저널 헬퍼의 벤더 중립 별칭 |
plugin-sdk/memory-host-files | 메모리 호스트 파일/런타임 헬퍼의 벤더 중립 별칭 |
plugin-sdk/memory-host-markdown | 메모리 인접 플러그인을 위한 공유 managed-markdown 헬퍼 |
plugin-sdk/memory-host-search | search-manager 액세스를 위한 활성 메모리 런타임 파사드 |
plugin-sdk/memory-host-status | 메모리 호스트 상태 헬퍼의 벤더 중립 별칭 |
plugin-sdk/memory-lancedb | 번들된 memory-lancedb 헬퍼 표면 |
예약된 번들 헬퍼 하위 경로
예약된 번들 헬퍼 하위 경로
등록 API
register(api) 콜백은 다음 메서드를 가진 OpenClawPluginApi 객체를 받습니다.
기능 등록
| 메서드 | 등록 대상 |
|---|---|
api.registerProvider(...) | 텍스트 추론(LLM) |
api.registerAgentHarness(...) | 실험적 저수준 에이전트 실행기 |
api.registerCliBackend(...) | 로컬 CLI 추론 백엔드 |
api.registerChannel(...) | 메시징 채널 |
api.registerSpeechProvider(...) | 텍스트 음성 변환 / STT 합성 |
api.registerRealtimeTranscriptionProvider(...) | 스트리밍 실시간 전사 |
api.registerRealtimeVoiceProvider(...) | 양방향 실시간 음성 세션 |
api.registerMediaUnderstandingProvider(...) | 이미지/오디오/비디오 분석 |
api.registerImageGenerationProvider(...) | 이미지 생성 |
api.registerMusicGenerationProvider(...) | 음악 생성 |
api.registerVideoGenerationProvider(...) | 비디오 생성 |
api.registerWebFetchProvider(...) | 웹 fetch / scrape provider |
api.registerWebSearchProvider(...) | 웹 검색 |
도구 및 명령
| 메서드 | 등록 대상 |
|---|---|
api.registerTool(tool, opts?) | 에이전트 도구(필수 또는 { optional: true }) |
api.registerCommand(def) | 사용자 지정 명령(LLM 우회) |
인프라
| 메서드 | 등록 대상 |
|---|---|
api.registerHook(events, handler, opts?) | 이벤트 hook |
api.registerHttpRoute(params) | 게이트웨이 HTTP 엔드포인트 |
api.registerGatewayMethod(name, handler) | 게이트웨이 RPC 메서드 |
api.registerCli(registrar, opts?) | CLI 하위 명령 |
api.registerService(service) | 백그라운드 서비스 |
api.registerInteractiveHandler(registration) | 대화형 핸들러 |
api.registerMemoryPromptSupplement(builder) | 추가형 메모리 인접 프롬프트 섹션 |
api.registerMemoryCorpusSupplement(adapter) | 추가형 메모리 검색/읽기 corpus |
config.*, exec.approvals.*, wizard.*,
update.*)는 플러그인이 더 좁은 게이트웨이 메서드 scope를 할당하려고 해도 항상 operator.admin으로 유지됩니다. 플러그인 소유 메서드에는 플러그인별 접두사를 우선 사용하세요.
CLI 등록 메타데이터
api.registerCli(registrar, opts?)는 두 종류의 최상위 메타데이터를 받습니다.
commands: registrar가 소유하는 명시적 명령 루트descriptors: 루트 CLI 도움말, 라우팅, 지연 플러그인 CLI 등록에 사용되는 파싱 시점 명령 descriptor
descriptors를 제공하세요.
commands를 단독으로 사용하세요.
이 eager 호환성 경로는 계속 지원되지만, 파싱 시점 지연 로딩을 위한
descriptor 기반 placeholder는 설치하지 않습니다.
CLI 백엔드 등록
api.registerCliBackend(...)를 사용하면 플러그인이 codex-cli 같은 로컬
AI CLI 백엔드의 기본 config를 소유할 수 있습니다.
- 백엔드
id는codex-cli/gpt-5같은 모델 ref의 provider 접두사가 됩니다. - 백엔드
config는agents.defaults.cliBackends.<id>와 동일한 형태를 사용합니다. - 사용자 config가 여전히 우선합니다. OpenClaw는 CLI를 실행하기 전에
플러그인 기본값 위에
agents.defaults.cliBackends.<id>를 병합합니다. - 백엔드가 병합 후 호환성 재작성이 필요하면
normalizeConfig를 사용하세요 (예: 오래된 플래그 형태 정규화).
독점 슬롯
| 메서드 | 등록 대상 |
|---|---|
api.registerContextEngine(id, factory) | 컨텍스트 엔진(한 번에 하나만 활성). assemble() 콜백은 엔진이 프롬프트 추가를 조정할 수 있도록 availableTools와 citationsMode를 받습니다. |
api.registerMemoryCapability(capability) | 통합 메모리 기능 |
api.registerMemoryPromptSection(builder) | 메모리 프롬프트 섹션 빌더 |
api.registerMemoryFlushPlan(resolver) | 메모리 flush 계획 해결기 |
api.registerMemoryRuntime(runtime) | 메모리 런타임 어댑터 |
메모리 임베딩 어댑터
| 메서드 | 등록 대상 |
|---|---|
api.registerMemoryEmbeddingProvider(adapter) | 활성 플러그인용 메모리 임베딩 어댑터 |
registerMemoryCapability가 선호되는 독점 메모리 플러그인 API입니다.registerMemoryCapability는 동반 플러그인이 특정 메모리 플러그인의 비공개 레이아웃에 접근하는 대신openclaw/plugin-sdk/memory-host-core를 통해 export된 메모리 아티팩트를 소비할 수 있도록publicArtifacts.listArtifacts(...)도 노출할 수 있습니다.registerMemoryPromptSection,registerMemoryFlushPlan,registerMemoryRuntime은 레거시 호환 독점 메모리 플러그인 API입니다.registerMemoryEmbeddingProvider를 사용하면 활성 메모리 플러그인이 하나 이상의 임베딩 어댑터 id(예:openai,gemini, 또는 플러그인 정의 사용자 지정 id)를 등록할 수 있습니다.agents.defaults.memorySearch.provider,agents.defaults.memorySearch.fallback같은 사용자 config는 이렇게 등록된 어댑터 id를 기준으로 해결됩니다.
이벤트 및 생명주기
| 메서드 | 동작 |
|---|---|
api.on(hookName, handler, opts?) | 타입 지정 생명주기 hook |
api.onConversationBindingResolved(handler) | 대화 바인딩 콜백 |
Hook 결정 의미
before_tool_call:{ block: true }를 반환하면 최종 결정입니다. 어떤 핸들러든 이것을 설정하면 우선순위가 더 낮은 핸들러는 건너뜁니다.before_tool_call:{ block: false }를 반환하면 결정 없음으로 취급됩니다(block생략과 동일). 재정의가 아닙니다.before_install:{ block: true }를 반환하면 최종 결정입니다. 어떤 핸들러든 이것을 설정하면 우선순위가 더 낮은 핸들러는 건너뜁니다.before_install:{ block: false }를 반환하면 결정 없음으로 취급됩니다(block생략과 동일). 재정의가 아닙니다.reply_dispatch:{ handled: true, ... }를 반환하면 최종 결정입니다. 어떤 핸들러든 디스패치를 맡으면 우선순위가 더 낮은 핸들러와 기본 모델 디스패치 경로는 건너뜁니다.message_sending:{ cancel: true }를 반환하면 최종 결정입니다. 어떤 핸들러든 이것을 설정하면 우선순위가 더 낮은 핸들러는 건너뜁니다.message_sending:{ cancel: false }를 반환하면 결정 없음으로 취급됩니다(cancel생략과 동일). 재정의가 아닙니다.
API 객체 필드
| 필드 | 타입 | 설명 |
|---|---|---|
api.id | string | 플러그인 id |
api.name | string | 표시 이름 |
api.version | string? | 플러그인 버전(선택 사항) |
api.description | string? | 플러그인 설명(선택 사항) |
api.source | string | 플러그인 소스 경로 |
api.rootDir | string? | 플러그인 루트 디렉터리(선택 사항) |
api.config | OpenClawConfig | 현재 config 스냅샷(사용 가능한 경우 활성 in-memory 런타임 스냅샷) |
api.pluginConfig | Record<string, unknown> | plugins.entries.<id>.config의 플러그인별 config |
api.runtime | PluginRuntime | 런타임 헬퍼 |
api.logger | PluginLogger | 범위 지정 logger(debug, info, warn, error) |
api.registrationMode | PluginRegistrationMode | 현재 로드 모드. "setup-runtime"은 가벼운 전체 엔트리 전 시작/startup/setup 구간입니다 |
api.resolvePath(input) | (string) => string | 플러그인 루트를 기준으로 경로 해결 |
내부 모듈 규칙
플러그인 내부에서는 내부 import에 로컬 배럴 파일을 사용하세요.api.ts, runtime-api.ts,
index.ts, setup-entry.ts, 그 밖의 유사한 공개 엔트리 파일)은 이제
OpenClaw가 이미 실행 중일 때 활성 런타임 config 스냅샷을 우선 사용합니다.
아직 런타임 스냅샷이 없으면 디스크의 해결된 config 파일로 폴백합니다.
provider plugin은 헬퍼가 의도적으로 provider 전용이고 아직 일반 SDK
하위 경로에 속하지 않을 때 좁은 범위의 플러그인 로컬 계약 배럴을 노출할 수도 있습니다.
현재 번들 예시: Anthropic provider는 Anthropic 베타 헤더와 service_tier
로직을 일반 plugin-sdk/* 계약으로 승격하는 대신, Claude stream 헬퍼를 자체 공개 api.ts / contract-api.ts seam에 유지합니다.
그 밖의 현재 번들 예시:
@openclaw/openai-provider:api.ts는 provider 빌더, 기본 모델 헬퍼, 실시간 provider 빌더를 export합니다@openclaw/openrouter-provider:api.ts는 provider 빌더와 온보딩/config 헬퍼를 export합니다
관련 문서
- 엔트리포인트 —
definePluginEntry및defineChannelPluginEntry옵션 - 런타임 헬퍼 — 전체
api.runtime네임스페이스 참조 - 설정 및 Config — 패키징, 매니페스트, config 스키마
- 테스트 — 테스트 유틸리티 및 lint 규칙
- SDK 마이그레이션 — deprecated 표면에서 마이그레이션
- 플러그인 내부 구조 — 심층 아키텍처 및 기능 모델