Status: Frozen v1
| Capability | Allows | Required | If missing |
|---|---|---|---|
providers |
provideItems, ctx.registerProvider |
Yes | permission_denied, operation ignored |
commands |
onCommand, ctx.registerCommand |
Yes | permission_denied, operation ignored |
decorate-items |
decorateItems |
Yes | permission_denied, decoration not applied |
input-accessory |
ctx.setInputAccessory, ctx.clearInputAccessory |
Yes | permission_denied, accessory unchanged |
keys |
onKey |
Yes | permission_denied, event not routed |
- The manifest declares intent.
- The runtime validates capability before sensitive operations.
- Without the capability, the operation is rejected.
- The module remains isolated.
- Rejection records module + operation + required capability.
Declare the smallest set that supports the module behavior.
Examples:
capabilities = ["providers"]capabilities = ["commands"]capabilities = ["input-accessory"]capabilities = ["keys"]capabilities = ["providers", "commands", "input-accessory"]Avoid:
- declaring all capabilities “just in case”,
- depending on unauthorized operations failing silently,
- mixing too many responsibilities into one module without need.
- Public API:
MODULES_API_SPEC_V1.md. - Action semantics:
CTX_ACTIONS_SPEC_V1.md. - Operations/debugging:
MODULES_OPERATIONS_GUIDE.md.