Adding Capabilities
이 문서는 OpenClaw core 개발자를 위한 contributor guide입니다. 외부 plugin을 만드는 중이라면 Building Plugins을 보세요.
- plugin = ownership boundary
- capability = shared core contract
언제 capability를 만들어야 하나
다음이 모두 참일 때 새로운 capability를 만드세요:- 둘 이상의 vendor가 구현할 수 있음
- channel/tool/feature plugin이 vendor를 몰라도 이를 소비해야 함
- fallback, policy, config, delivery behavior를 core가 책임져야 함
표준 순서
- typed core contract 정의
- plugin registration 추가
- 공용 runtime helper 추가
- 실제 vendor plugin 하나 연결
- feature/channel consumer를 runtime helper로 이동
- contract test 추가
- 운영자용 config와 ownership model 문서화
무엇을 어디에 두나
Core:- request/response type
- provider registry + resolution
- fallback behavior
- config schema와 help
- runtime helper surface
- vendor API 호출
- vendor 인증 처리
- vendor 전용 request normalization
- capability 구현 등록
api.runtime.*또는 대응되는plugin-sdk/*-runtimehelper 호출- vendor 구현을 직접 호출하지 않음
파일 체크리스트
src/<capability>/types.tssrc/<capability>/...registry/runtime.tssrc/plugins/types.tssrc/plugins/registry.tssrc/plugins/captured-registration.tssrc/plugins/contracts/registry.tssrc/plugins/runtime/types-core.tssrc/plugins/runtime/index.tssrc/plugin-sdk/<capability>.tssrc/plugin-sdk/<capability>-runtime.ts- 하나 이상의
extensions/<vendor>/... - config/docs/tests
예시: 이미지 생성
- core가
ImageGenerationProvider정의 - core가
registerImageGenerationProvider(...)노출 - core가
runtime.imageGeneration.generate(...)노출 openai,googleplugin이 vendor-backed 구현 등록- 이후 vendor는 채널/도구를 수정하지 않고 같은 contract를 구현 가능
agents.defaults.imageModel= 이미지 분석agents.defaults.imageGenerationModel= 이미지 생성
리뷰 체크리스트
- channel/tool이 vendor 코드를 직접 import하지 않는가
- runtime helper가 공용 경로인가
- 최소 하나의 contract test가 bundled ownership를 검증하는가
- config 문서가 새 모델/config 키를 설명하는가
- plugin 문서가 ownership boundary를 설명하는가