Host · Permissions
디렉토리 / 파일 권한
플러그인의 모든 파일 접근은 hostApi.storage.* sandboxed FS 를 통해서만 가능하고, 호스트 코어는 별도의 사용자 grant + reviewer 평가를 거칩니다. grant 저장: ~/.lvis/permissions.json (0o600).
src/permissions/permissions-store.ts
0o700 dir / 0o600 file
no fallback
Plugin storage — sandbox 가 우선
플러그인이 디렉토리 접근을 위해 우선 사용하는 것은 manifest 의 namespace 안에서만 동작하는hostApi.storage sub-object 입니다:
storage.resolve(...segments) | read(relPath) | readText(relPath, encoding?)
readJson<T>(relPath) | write(relPath, data, encoding?)
writeJson<T>(relPath, value, indent?) | rm(relPath, options?)
list(relPath?) | exists(relPath) | mkdir(relPath)모든 경로는 ~/.lvis/plugins/<pluginId>/ 아래로 제한됩니다 — sandbox 탈출 불가.
호스트 사용자 grant — namespace 밖 접근
- 01
요청 트리거
builtin / mcp 도구 또는 special host 액션이 사용자 home/work 디렉토리에 파일을 쓰려고 시도 → reviewer 평가.
- 02
권한 카드
read-only / read+write / scope (이 폴더만 / 하위 포함) / 유효기간 선택. Tool category =
write+ RiskLevel =medium이상이면 자동 카드. - 03
Grant 저장
감사 추적~/.lvis/permissions.json(src/permissions/permissions-store.ts) 에 grant 추가. 디렉토리 0o700, 파일 0o600. - 04
사용
이후 같은 도구 호출은 grant 통과 시 자동, 범위 밖 접근 시 reject. 회수 후엔 fallback 없이 재허용 카드.
Sandbox + reviewer 두 단계 모두 통과 필요
Plugin 도구: (1)
storage sandbox 가 경로 제한 → (2) reviewer 가 RiskLevel × Category × grant 평가. 둘 중 하나라도 reject 면 호출 실패. Builtin / MCP 도구: (2) 만 — sandbox 가 없으므로 reviewer 가 더 보수적으로 판단.