Permissions
Declare what you need in manifest.json. The user is asked once, at install,
and sees your list before agreeing.
Your bridge is built from what was granted, not what you asked for. A
declined permission is not an error at install time — your plugin runs, and
those calls resolve false. Handle it.
| Permission | What the user is told | Grants |
|---|---|---|
voice |
"Speak" | voice.speak |
eyes |
"Move the eyes" | eyes.look, eyes.express |
led |
"Change the dock lights" | led.set, led.reset |
motor |
"Move the robot" | motor.pan, motor.tilt, motor.center |
camera |
"Use the camera" | camera.start/stop and face/hand events |
data |
"Read weather" | data.weather |
motor and camera are marked sensitive and are presented more
prominently. Ask for them only if you use them — a permission you request and
never call costs you installs.
What camera is not
It does not give you the picture. You receive face and hand positions; there is no API that returns a frame, and the image never leaves the phone.
The user still sees the camera indicator while your plugin runs, so tell them why you need it.
Updates
An update that adds a permission does not inherit consent. The user is
asked again, and until they agree the new permission stays ungranted while the
rest keep working. Adding camera in v2 will not silently gain you a camera.
Users can change their mind
Permissions can be reviewed and revoked per plugin at any time in Settings.
Check info.get() at startup rather than assuming what you had last run.