Permission Model
Plugin permission is not a once-granted forever state; the real code filters by tenant, role, scope, status, and market review.
Visibility filters
GET /api/v4/plugins: owner/admin tenant plugins withstatus=APPROVEDandis_enabled=true.GET /api/v4/public/plugins: anonymous, but requiresstatus=APPROVED,market_status=APPROVED, andis_enabled=true.GET /api/v4/skill-store: public skills requirescope=PUBLIC,status=APPROVED, not deleted, and not archived.GET /api/v4/tools: JWT user or Desktop OAuth withtoolsscope.
OAuth scope
Desktop OAuth's skills group includes skill_store, tools, and tools:execute. Skill install/certify uses skill_store; tool listing uses tools.
Safety boundary
API keys are encrypted at rest. Public-market readme and usageInstructions are content-checked. Skill upload checks ZIP safety, URLs, schemas, and prompt injection.