01
개방하되 호스트 권한은 내주지 않습니다.
RightMenu 플러그인은 독립 관리되는 JavaScript 패키지입니다. 호스트가 검증, 설치, 동의 및 실행 경계를 담당하며 플러그인은 현재 액션에 선언되고 사용자가 허용한 기능만 받습니다.
보안 경계
플러그인은 주변 권한이 없고 네이티브 코드를 로드할 수 없습니다. 파일 접근, 변경, AI 공개 및 시스템 권한은 호스트가 별도로 통제합니다.
독립 수명 주기
호스트와 각 플러그인은 별도 저장소, 버전 및 출시 주기를 가집니다. 비즈니스 로직, 문구, 아이콘, 자산과 릴리스 노트는 플러그인 저장소에 둡니다.
현재 범위는 공개 개발, 로컬 가져오기 및 사용자 신뢰입니다. 마켓플레이스, 커뮤니티 인덱스, 자동 업데이트는 포함하지 않습니다.
02
빠른 시작
RightMenu 설치 후 App에 포함된 서명된 CLI로 프로젝트를 생성하고 doctor를 실행합니다.
내장 CLI 경로
/Applications/RightMenu.app/Contents/Helpers/rightmenu-pluginctl실행 가능한 프로젝트 생성
init은 기존 경로를 덮어쓰지 않습니다. 생성물에는 실행 가능한 플러그인, API v1.5 Schema 및 TypeScript 선언이 포함됩니다.
CLI="/Applications/RightMenu.app/Contents/Helpers/rightmenu-pluginctl"
"$CLI" init ./MyPlugin \
--id dev.example.my-plugin \
--name "My Plugin"
"$CLI" doctor ./MyPlugin선택 사항 AI Agent로 개발
아래 표준 지시문을 Codex, Claude Code, Cursor 등의 Agent에 붙여 넣으세요. Agent는 프로젝트의 로컬 규격을 먼저 읽고 doctor 통과를 완료 조건으로 사용합니다.
현재 디렉터리에서 RightMenu Plugin API v1.5 플러그인을 개발하세요.
플러그인 요구사항: [여기에 기능 설명]
요구사항:
- 먼저 README.md, schema/rightmenu-plugin-manifest-v1.5.schema.json, types/rightmenu-plugin-api-v1.5.d.ts를 읽으세요.
- 현재 플러그인 프로젝트만 수정하고 RightMenu 호스트 소스는 변경하지 마세요.
- JavaScriptCore 호환 출력을 만들고 모든 import를 번들링하며 Node.js require 또는 네이티브 코드를 사용하지 마세요.
- 모든 action과 uiContribution에 requiredCapabilities를 선언하고 permissions를 최소화하세요.
- payload 파일 변경 후 manifest.json files의 byteCount와 SHA-256을 갱신하세요.
- 마지막에 "/Applications/RightMenu.app/Contents/Helpers/rightmenu-pluginctl" doctor .를 실행하세요.
- doctor가 종료 코드 0과 validation.ok를 보고해야 완료입니다.
- 명시적으로 요청되지 않으면 개인 키 생성, 서명 또는 pack을 하지 마세요.03
생성된 패키지 구조
플러그인 패키지는 .rightmenuplugin으로 끝납니다. manifest.json은 진입점, 액션, 권한 및 모든 payload 파일을 선언하며 배포 시 번들된 일반 JavaScript만 사용합니다.
MyPlugin/
├── README.md
├── plugin/
│ └── my-plugin.rightmenuplugin/
│ ├── manifest.json
│ └── main.js
├── schema/
│ └── rightmenu-plugin-manifest-v1.5.schema.json
└── types/
└── rightmenu-plugin-api-v1.5.d.ts04
Manifest와 API v1.5
모든 Finder 액션과 UI contribution은 requiredCapabilities를 선언해야 하며 필요 없으면 빈 배열을 씁니다. 각 기능은 permissions에 있어야 하고 사용하지 않는 광범위 권한은 거부됩니다.
{
"apiVersion": "1.5",
"permissions": [{
"capability": "selection.read",
"reason": "Reads metadata for selected Finder items."
}],
"actions": [
{ "id": "about", "title": "About", "requiredCapabilities": [] },
{ "id": "inspect", "title": "Inspect", "requiredCapabilities": ["selection.read"] }
],
"uiContributions": []
}globalThis.rightMenuPlugin = Object.freeze({
run(actionID, input) {
if (actionID !== "inspect") return { handled: false };
return RightMenu.call("selection.read", {});
}
});JSON Schema는 편집기 피드백용입니다. 파일 안전, 해시, 배열 간 규칙, 호환성 및 서명은 rightmenu-pluginctl doctor가 최종 기준입니다.
05
doctor로 개발 및 검증
JavaScript 변경 후 manifest의 byteCount와 SHA-256을 갱신하고 doctor를 실행합니다. 최대 32개의 제한된 진단을 출력하며 오류가 있으면 0이 아닌 상태로 종료합니다.
- 1
JavaScriptCore 호환 결과물을 만들고 모든 import를 번들하며 Node.js require를 남기지 않습니다.
- 2
files의 바이트 수와 SHA-256을 갱신하고 manifest.json 자체는 포함하지 않습니다.
- 3
validation.ok가 나올 때까지 doctor를 실행하고 API, 기능, 서명 또는 구조 진단을 해결합니다.
"$CLI" doctor ./MyPlugin
"$CLI" doctor ./MyPlugin/plugin/my-plugin.rightmenuplugin06
로컬 가져오기와 개발자 모드
RightMenu → 설정 → 플러그인을 엽니다. 서명 패키지는 ‘서명된 플러그인 가져오기’를 사용합니다. 서명되지 않은 디렉터리는 개발자 모드를 명시적으로 켠 뒤 ‘서명되지 않은 개발 플러그인 가져오기’를 사용합니다. 두 저장 위치는 물리적으로 분리됩니다.
설치는 권한 부여가 아닙니다. 호스트는 복사 전후 검증하고 최종 이동 후에만 설치를 완료합니다. 개발자 모드를 끄면 서명되지 않은 플러그인은 실행되지 않습니다.
07
액션별 권한
API v1.5는 액션별로 기능 집합을 평가합니다. 권한이 없으면 의존 액션만 숨고 다른 허용된 액션은 유지됩니다. 모든 권한은 철회할 수 있습니다.
selection.read선택 항목 정보 · 명시적 허용vision.recognizeText로컬 텍스트 인식 · 명시적 허용files.rename.*파일 이름 변경 · 명시적 허용 및 변경 확인ai.generateStructured구조화 AI · 명시적 허용 및 플러그인/제공자별 공개 동의ui.flashScreen / desktopItems.toggleVisibility화면 효과와 데스크탑 표시 · 자동 허용, 철회 가능diagnostics.log진단 · 명시적 허용08
게시자 서명과 지문
배포에는 Ed25519를 사용합니다. 알 수 없는 자체 발급 게시자를 처음 가져올 때 사용자는 전체 SHA-256 공개 키 지문을 비교한 뒤 ‘신뢰 및 설치’를 선택합니다. 서명은 실행 기능을 부여하지 않습니다.
"$CLI" keygen ./publisher.private.json "Example Publisher"
"$CLI" sign \
./MyPlugin/plugin/my-plugin.rightmenuplugin \
./publisher.private.json
"$CLI" inspect-signature \
./MyPlugin/plugin/my-plugin.rightmenuplugin
"$CLI" pack \
./MyPlugin/plugin/my-plugin.rightmenuplugin \
./my-plugin.rightmenuplugin.zip개인 키는 프로젝트 밖에 안전하게 백업하고 절대 커밋하거나 배포하지 마세요. 분실하면 기존 설치가 같은 게시자 신원의 업데이트를 받을 수 없습니다.
동일 플러그인 ID 업데이트는 설치된 버전과 정확히 같은 서명 키를 사용해야 합니다. 다른 신뢰 키도 인수할 수 없습니다. 자동 업데이트와 키 회전은 제공되지 않습니다.
09
주요 진단 코드
자동화는 안정적인 code와 프로세스 종료 상태를 사용하고 설명 문구를 파싱하지 않아야 합니다.
validation.okManifest, 파일 크기 및 해시 통과.api.current / api.legacy현재 또는 호환 레거시 API.capability.unsupported호스트가 선언된 기능을 제공하지 않음.signature.missing서명 없음. 개발자 모드 전용.signature.self-issued-valid자체 발급 게시자와 서명 통과.manifest.*Manifest 계약 오류.package.*패키지 구조, 무결성 또는 제한 오류.invocation.*호스트 또는 Runner 수명 주기 결과.10
호환성과 실행 제약
새 프로젝트는 API v1.5와 RightMenu 0.1.41 이상이 필요합니다. v1.0–v1.4와 하위 호환되지만 이전 패키지는 플러그인 전체 권한 방식을 유지합니다. JavaScriptCore를 대상으로 루프, 재귀, 메모리 및 출력을 제한하세요.
Finder 액션은 1–20개의 로컬 일반 파일로 구성된 지원 선택에서 동작합니다. 호출 전 호스트가 다시 스캔하고 액션과 정확한 권한 집합을 검증합니다.
11
버전 고정 참조 파일
아래 파일은 RightMenu 0.1.41(commit 9a25a54)의 Documentation 디렉터리에서 바이트 단위로 복사되었습니다. 검증 스크립트가 호스트 기준과의 차이를 방지합니다.