본문으로 건너뛰기
LVIS AI

Architecture

권한 모델 — 3단계 위험도 × 4가지 reviewer 모드

LVIS의 권한 모델은 두 개의 직교 축. 도구 위험도(RiskLevel: low/medium/high)와 자동 reviewer 모드(disabled/rule/llm/strict)가 만나서 어떤 도구가 자동 실행되고, 어떤 도구가 사용자 승인 카드를 띄울지 결정합니다.

src/permissions/reviewer/risk-classifier.ts
src/tools/types.ts:33
agentApproval 표준 경로

Risk levels — low / medium / high

// src/permissions/reviewer/risk-classifier.ts:44
export type RiskLevel = "low" | "medium" | "high";

// :53
const LEVEL_RANK: Record<RiskLevel, number> = { low: 0, medium: 1, high: 2 };

Reviewer 모드 4종

disabled

자동 검토 끔. 모든 도구는 카테고리 기반 카드/다이얼로그.

rule

정적 규칙 기반. 도구 카테고리 + 인자 패턴 + grant 만으로 판정.

llm

LLM 보조 검토. 위험 인자 정황 + 자연어 reason 평가 후 권고.

strict

모든 medium/high 는 사용자 다이얼로그 강제. 자동화 최소화.

도구 카테고리 (5종)

// src/tools/types.ts:16
export type ToolSource   = "builtin" | "plugin" | "mcp";

// :33
export type ToolCategory = "read" | "write" | "shell" | "network" | "meta";

플러그인은 manifest toolSchemas.<tool>.category 로 각 도구의 카테고리를 선언합니다. 예: msgraph_email_reply = write, msgraph_email_list = read.

평가 격자 — Risk × Category × Mode
Riskreadwriteshellnetwork
low자동자동 (rule 모드만)카드 확인자동
medium자동카드 확인다이얼로그카드 확인
high카드 확인다이얼로그다이얼로그 + agentApproval다이얼로그

위 표는 일반적 매핑 — strict 모드에선 medium 도 다이얼로그로 격상. 실제 판정은 reviewer 코드가 사용자 grant + 모드 + reason 까지 함께 평가.

agentApproval — 위임된 위험 액션 표준 경로

Plugin 이 위험한 cross-plugin 액션 (파일 공유, 작업 위임, 외부 API 호출) 을 수행할 때는hostApi.agentApproval.request({ toolName, args, reason, scope }) 를 호출합니다. 승인 다이얼로그가 사용자에게 표시되고 ApprovalChoice 가 반환됩니다. 승인 응답은 respond(requestId, choice, nonce?, hmac?) 로 cryptographic chain 에 추가됩니다.

권한 grant 저장 위치

  • ~/.lvis/permissions.json — 사용자 grant 저장 (src/permissions/permissions-store.ts)
  • 0o600 file, 0o700 directory 강제.
  • 회수된 권한을 다시 요구하는 도구 호출은 fallback 없이 즉시 reject + 재허용 카드 발사 (LVIS no-fallback 룰).
No-fallback 룰 — 검증 사례
2026-04-30 work-assistant repo (구 work-proactive) PR #17 의 hardcoded outlook.com 허용 → PR #19 revert + configSchema.meetingDetectorAllowedSenderDomains 외부화. 현재 코드: meeting-detector.ts:141readPolicyExtra() + setPolicyAllowedDomains() 로 환경 변수/config 우선, default fail-closed (빈 배열).