machinaos 0.0.12 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/client/package.json +1 -1
  2. package/client/src/components/OutputPanel.tsx +3 -2
  3. package/client/src/components/parameterPanel/InputSection.tsx +4 -3
  4. package/package.json +1 -1
  5. package/server/routers/websocket.py +5 -5
  6. package/server/services/ai.py +38 -13
  7. package/server/services/deployment/manager.py +14 -0
  8. package/server/services/execution/executor.py +2 -0
  9. package/server/services/execution/models.py +8 -0
  10. package/server/services/handlers/ai.py +71 -23
  11. package/server/services/handlers/tools.py +103 -6
  12. package/server/skills/android_agent/app-launcher-skill/SKILL.md +137 -0
  13. package/server/skills/android_agent/app-list-skill/SKILL.md +148 -0
  14. package/server/skills/android_agent/audio-skill/SKILL.md +169 -0
  15. package/server/skills/android_agent/battery-skill/SKILL.md +114 -0
  16. package/server/skills/android_agent/bluetooth-skill/SKILL.md +151 -0
  17. package/server/skills/android_agent/camera-skill/SKILL.md +148 -0
  18. package/server/skills/android_agent/environmental-skill/SKILL.md +140 -0
  19. package/server/skills/android_agent/location-skill/SKILL.md +163 -0
  20. package/server/skills/android_agent/motion-skill/SKILL.md +141 -0
  21. package/server/skills/android_agent/screen-control-skill/SKILL.md +164 -0
  22. package/server/skills/android_agent/wifi-skill/SKILL.md +182 -0
  23. package/server/skills/assistant/subagent-skill/SKILL.md +62 -30
  24. package/server/skills/coding_agent/javascript-skill/SKILL.md +196 -0
  25. package/server/skills/coding_agent/python-skill/SKILL.md +165 -0
  26. package/server/skills/social_agent/whatsapp-db-skill/SKILL.md +284 -0
  27. package/server/skills/social_agent/whatsapp-send-skill/SKILL.md +180 -0
  28. package/server/skills/task_agent/cron-scheduler-skill/SKILL.md +215 -0
  29. package/server/skills/task_agent/task-manager-skill/SKILL.md +251 -0
  30. package/server/skills/task_agent/timer-skill/SKILL.md +168 -0
  31. package/server/skills/travel_agent/geocoding-skill/SKILL.md +186 -0
  32. package/server/skills/travel_agent/nearby-places-skill/SKILL.md +234 -0
  33. package/server/skills/web_agent/http-request-skill/SKILL.md +211 -0
  34. package/server/skills/android/skill/SKILL.md +0 -84
  35. package/server/skills/assistant/code-skill/SKILL.md +0 -176
  36. package/server/skills/assistant/http-skill/SKILL.md +0 -163
  37. package/server/skills/assistant/maps-skill/SKILL.md +0 -172
  38. package/server/skills/assistant/scheduler-skill/SKILL.md +0 -86
  39. package/server/skills/assistant/whatsapp-skill/SKILL.md +0 -285
  40. /package/server/skills/{android → android_agent}/personality/SKILL.md +0 -0
  41. /package/server/skills/{assistant → web_agent}/web-search-skill/SKILL.md +0 -0
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: app-launcher-skill
3
+ description: Launch Android applications by package name. Open any installed app programmatically.
4
+ allowed-tools: app_launcher
5
+ metadata:
6
+ author: machina
7
+ version: "1.0"
8
+ category: android
9
+ icon: "🚀"
10
+ color: "#8B5CF6"
11
+ ---
12
+
13
+ # App Launcher Tool
14
+
15
+ Launch applications on Android device.
16
+
17
+ ## How It Works
18
+
19
+ This skill provides instructions for the **App Launcher** tool node. Connect the **App Launcher** node to Zeenie's `input-tools` handle to enable app launching.
20
+
21
+ ## app_launcher Tool
22
+
23
+ Launch an installed application by package name.
24
+
25
+ ### Schema Fields
26
+
27
+ | Field | Type | Required | Description |
28
+ |-------|------|----------|-------------|
29
+ | action | string | Yes | `"launch"` |
30
+ | parameters | object | Yes | Contains `package_name` |
31
+
32
+ ### Parameters
33
+
34
+ | Field | Type | Required | Description |
35
+ |-------|------|----------|-------------|
36
+ | package_name | string | Yes | Android package name of the app |
37
+
38
+ ### Example
39
+
40
+ **Launch an app:**
41
+ ```json
42
+ {
43
+ "action": "launch",
44
+ "parameters": {
45
+ "package_name": "com.whatsapp"
46
+ }
47
+ }
48
+ ```
49
+
50
+ ### Common Package Names
51
+
52
+ | App | Package Name |
53
+ |-----|--------------|
54
+ | WhatsApp | `com.whatsapp` |
55
+ | Chrome | `com.android.chrome` |
56
+ | Gmail | `com.google.android.gm` |
57
+ | YouTube | `com.google.android.youtube` |
58
+ | Maps | `com.google.android.apps.maps` |
59
+ | Camera | `com.android.camera2` |
60
+ | Phone | `com.android.dialer` |
61
+ | Messages | `com.google.android.apps.messaging` |
62
+ | Settings | `com.android.settings` |
63
+ | Play Store | `com.android.vending` |
64
+ | Spotify | `com.spotify.music` |
65
+ | Netflix | `com.netflix.mediaclient` |
66
+ | Twitter/X | `com.twitter.android` |
67
+ | Instagram | `com.instagram.android` |
68
+ | Telegram | `org.telegram.messenger` |
69
+
70
+ ### Response Format
71
+
72
+ **Success:**
73
+ ```json
74
+ {
75
+ "success": true,
76
+ "service": "app_launcher",
77
+ "action": "launch",
78
+ "data": {
79
+ "message": "App launched successfully",
80
+ "package_name": "com.whatsapp"
81
+ }
82
+ }
83
+ ```
84
+
85
+ **Error:**
86
+ ```json
87
+ {
88
+ "error": "App not installed: com.example.notinstalled",
89
+ "service": "app_launcher",
90
+ "action": "launch"
91
+ }
92
+ ```
93
+
94
+ ## Use Cases
95
+
96
+ | Use Case | Description |
97
+ |----------|-------------|
98
+ | Quick launch | Open apps on command |
99
+ | Automation | Start apps as part of workflow |
100
+ | Shortcuts | Voice-controlled app opening |
101
+ | Workflows | Chain app launches with other actions |
102
+
103
+ ## Common Workflows
104
+
105
+ ### Open app and send message
106
+
107
+ 1. Launch WhatsApp
108
+ 2. User manually selects contact
109
+ 3. (Alternative: use whatsapp_send for automated messaging)
110
+
111
+ ### Daily routine
112
+
113
+ 1. Launch news app in morning
114
+ 2. Launch email app
115
+ 3. Launch calendar
116
+
117
+ ## Finding Package Names
118
+
119
+ To find an app's package name:
120
+
121
+ 1. Use the **App List** tool to list installed apps
122
+ 2. Look for the app name in the list
123
+ 3. Use the returned package_name
124
+
125
+ ### Example workflow:
126
+
127
+ ```
128
+ 1. app_list.status -> get list of apps
129
+ 2. Find desired app in results
130
+ 3. app_launcher.launch with package_name
131
+ ```
132
+
133
+ ## Setup Requirements
134
+
135
+ 1. Connect the **App Launcher** node to Zeenie's `input-tools` handle
136
+ 2. Android device must be paired
137
+ 3. App must be installed on the device
@@ -0,0 +1,148 @@
1
+ ---
2
+ name: app-list-skill
3
+ description: Get list of installed Android applications with package names, versions, and metadata.
4
+ allowed-tools: app_list
5
+ metadata:
6
+ author: machina
7
+ version: "1.0"
8
+ category: android
9
+ icon: "📱"
10
+ color: "#06B6D4"
11
+ ---
12
+
13
+ # App List Tool
14
+
15
+ Get list of installed applications on Android device.
16
+
17
+ ## How It Works
18
+
19
+ This skill provides instructions for the **App List** tool node. Connect the **App List** node to Zeenie's `input-tools` handle to enable app listing.
20
+
21
+ ## app_list Tool
22
+
23
+ Get list of installed applications.
24
+
25
+ ### Schema Fields
26
+
27
+ | Field | Type | Required | Description |
28
+ |-------|------|----------|-------------|
29
+ | action | string | Yes | `"status"` - Get installed apps |
30
+
31
+ ### Example
32
+
33
+ **Get installed apps:**
34
+ ```json
35
+ {
36
+ "action": "status"
37
+ }
38
+ ```
39
+
40
+ ### Response Format
41
+
42
+ ```json
43
+ {
44
+ "success": true,
45
+ "service": "app_list",
46
+ "action": "status",
47
+ "data": {
48
+ "apps": [
49
+ {
50
+ "name": "WhatsApp",
51
+ "package_name": "com.whatsapp",
52
+ "version": "2.24.1.5",
53
+ "version_code": 2241005,
54
+ "system_app": false,
55
+ "enabled": true
56
+ },
57
+ {
58
+ "name": "Chrome",
59
+ "package_name": "com.android.chrome",
60
+ "version": "121.0.6167.101",
61
+ "version_code": 616710100,
62
+ "system_app": false,
63
+ "enabled": true
64
+ },
65
+ {
66
+ "name": "Settings",
67
+ "package_name": "com.android.settings",
68
+ "version": "14",
69
+ "version_code": 34,
70
+ "system_app": true,
71
+ "enabled": true
72
+ }
73
+ ],
74
+ "total_apps": 85,
75
+ "user_apps": 42,
76
+ "system_apps": 43
77
+ }
78
+ }
79
+ ```
80
+
81
+ ### Response Fields
82
+
83
+ | Field | Type | Description |
84
+ |-------|------|-------------|
85
+ | name | string | Display name of the app |
86
+ | package_name | string | Android package identifier |
87
+ | version | string | Version string |
88
+ | version_code | int | Version code number |
89
+ | system_app | boolean | True if pre-installed system app |
90
+ | enabled | boolean | True if app is enabled |
91
+
92
+ ### Summary Fields
93
+
94
+ | Field | Description |
95
+ |-------|-------------|
96
+ | total_apps | Total number of apps |
97
+ | user_apps | User-installed apps count |
98
+ | system_apps | Pre-installed system apps count |
99
+
100
+ ## Use Cases
101
+
102
+ | Use Case | Description |
103
+ |----------|-------------|
104
+ | Find apps | Discover what's installed |
105
+ | Get package names | Find package name for app_launcher |
106
+ | Version check | Verify app versions |
107
+ | Inventory | Audit installed applications |
108
+
109
+ ## Common Workflows
110
+
111
+ ### Find and launch app
112
+
113
+ 1. Get app list with `app_list.status`
114
+ 2. Search for desired app by name
115
+ 3. Use package_name with `app_launcher.launch`
116
+
117
+ ### Check if app is installed
118
+
119
+ 1. Get app list
120
+ 2. Search for specific package_name
121
+ 3. Report if found or not
122
+
123
+ ### App version audit
124
+
125
+ 1. Get app list
126
+ 2. Check versions against known values
127
+ 3. Report outdated apps
128
+
129
+ ## Filtering Results
130
+
131
+ The tool returns all apps. To find specific apps:
132
+
133
+ 1. Get full list
134
+ 2. Filter by name or package_name
135
+ 3. Check system_app to separate user/system apps
136
+
137
+ ### Example: Find messaging apps
138
+
139
+ ```
140
+ 1. Get app list
141
+ 2. Filter where name contains "message" or "chat"
142
+ 3. Return matching apps
143
+ ```
144
+
145
+ ## Setup Requirements
146
+
147
+ 1. Connect the **App List** node to Zeenie's `input-tools` handle
148
+ 2. Android device must be paired
@@ -0,0 +1,169 @@
1
+ ---
2
+ name: audio-skill
3
+ description: Control Android audio - get/set volume, mute/unmute for media, ringtone, notification, and call volumes.
4
+ allowed-tools: audio_automation
5
+ metadata:
6
+ author: machina
7
+ version: "1.0"
8
+ category: android
9
+ icon: "🔊"
10
+ color: "#F97316"
11
+ ---
12
+
13
+ # Audio Automation Tool
14
+
15
+ Control audio and volume on Android device.
16
+
17
+ ## How It Works
18
+
19
+ This skill provides instructions for the **Audio Automation** tool node. Connect the **Audio Automation** node to Zeenie's `input-tools` handle to enable audio control.
20
+
21
+ ## audio_automation Tool
22
+
23
+ Control audio settings and volume levels.
24
+
25
+ ### Schema Fields
26
+
27
+ | Field | Type | Required | Description |
28
+ |-------|------|----------|-------------|
29
+ | action | string | Yes | Action to perform (see below) |
30
+ | parameters | object | No | Additional parameters for set actions |
31
+
32
+ ### Actions
33
+
34
+ | Action | Description |
35
+ |--------|-------------|
36
+ | `status` | Get current volume levels and audio state |
37
+ | `set_volume` | Set volume for a stream |
38
+ | `mute` | Mute audio |
39
+ | `unmute` | Unmute audio |
40
+
41
+ ### Volume Streams
42
+
43
+ | Stream | Description |
44
+ |--------|-------------|
45
+ | `media` | Music, videos, games |
46
+ | `ring` | Ringtone volume |
47
+ | `notification` | Notification sounds |
48
+ | `alarm` | Alarm volume |
49
+ | `voice_call` | Call volume |
50
+ | `system` | System sounds (clicks, etc.) |
51
+
52
+ ### Examples
53
+
54
+ **Get audio status:**
55
+ ```json
56
+ {
57
+ "action": "status"
58
+ }
59
+ ```
60
+
61
+ **Set media volume:**
62
+ ```json
63
+ {
64
+ "action": "set_volume",
65
+ "parameters": {
66
+ "stream": "media",
67
+ "level": 50
68
+ }
69
+ }
70
+ ```
71
+
72
+ **Mute all audio:**
73
+ ```json
74
+ {
75
+ "action": "mute"
76
+ }
77
+ ```
78
+
79
+ **Unmute:**
80
+ ```json
81
+ {
82
+ "action": "unmute"
83
+ }
84
+ ```
85
+
86
+ ### Response Formats
87
+
88
+ **Status response:**
89
+ ```json
90
+ {
91
+ "success": true,
92
+ "service": "audio_automation",
93
+ "action": "status",
94
+ "data": {
95
+ "media_volume": 75,
96
+ "ring_volume": 100,
97
+ "notification_volume": 80,
98
+ "alarm_volume": 100,
99
+ "voice_call_volume": 50,
100
+ "system_volume": 50,
101
+ "muted": false,
102
+ "ringer_mode": "normal"
103
+ }
104
+ }
105
+ ```
106
+
107
+ **Set volume response:**
108
+ ```json
109
+ {
110
+ "success": true,
111
+ "service": "audio_automation",
112
+ "action": "set_volume",
113
+ "data": {
114
+ "stream": "media",
115
+ "previous_level": 100,
116
+ "new_level": 50
117
+ }
118
+ }
119
+ ```
120
+
121
+ ### Ringer Modes
122
+
123
+ | Mode | Description |
124
+ |------|-------------|
125
+ | `normal` | All sounds enabled |
126
+ | `vibrate` | Vibrate only |
127
+ | `silent` | No sounds or vibration |
128
+
129
+ ## Use Cases
130
+
131
+ | Use Case | Action | Description |
132
+ |----------|--------|-------------|
133
+ | Check volume | status | Get current levels |
134
+ | Lower volume | set_volume | Reduce for quiet time |
135
+ | Silent mode | mute | Mute all audio |
136
+ | Restore sound | unmute | Re-enable audio |
137
+ | Night mode | set_volume | Lower ring/notification |
138
+
139
+ ## Common Workflows
140
+
141
+ ### Meeting mode
142
+
143
+ 1. Mute device
144
+ 2. Attend meeting
145
+ 3. Unmute when done
146
+
147
+ ### Night routine
148
+
149
+ 1. Set ring volume to 20
150
+ 2. Set notification volume to 0
151
+ 3. Keep alarm at 100
152
+
153
+ ### Media playback
154
+
155
+ 1. Check current media volume
156
+ 2. Set to desired level
157
+ 3. Play media
158
+
159
+ ## Volume Level Range
160
+
161
+ - All volumes are 0-100 (percentage)
162
+ - 0 = muted/off
163
+ - 100 = maximum
164
+
165
+ ## Setup Requirements
166
+
167
+ 1. Connect the **Audio Automation** node to Zeenie's `input-tools` handle
168
+ 2. Android device must be paired
169
+ 3. Volume control permission required
@@ -0,0 +1,114 @@
1
+ ---
2
+ name: battery-skill
3
+ description: Monitor Android device battery status, level, charging state, temperature, and health.
4
+ allowed-tools: battery_monitor
5
+ metadata:
6
+ author: machina
7
+ version: "1.0"
8
+ category: android
9
+ icon: "🔋"
10
+ color: "#22C55E"
11
+ ---
12
+
13
+ # Battery Monitor Tool
14
+
15
+ Monitor Android device battery status and information.
16
+
17
+ ## How It Works
18
+
19
+ This skill provides instructions for the **Battery Monitor** tool node. Connect the **Battery Monitor** node to Zeenie's `input-tools` handle to enable battery monitoring.
20
+
21
+ ## battery Tool
22
+
23
+ Get battery status and information from the Android device.
24
+
25
+ ### Schema Fields
26
+
27
+ | Field | Type | Required | Description |
28
+ |-------|------|----------|-------------|
29
+ | action | string | Yes | `"status"` - Get current battery information |
30
+
31
+ ### Actions
32
+
33
+ | Action | Description |
34
+ |--------|-------------|
35
+ | `status` | Get current battery level, charging state, health, temperature |
36
+
37
+ ### Example
38
+
39
+ **Get battery status:**
40
+ ```json
41
+ {
42
+ "action": "status"
43
+ }
44
+ ```
45
+
46
+ ### Response Format
47
+
48
+ ```json
49
+ {
50
+ "success": true,
51
+ "service": "battery",
52
+ "action": "status",
53
+ "data": {
54
+ "level": 85,
55
+ "status": "charging",
56
+ "health": "good",
57
+ "temperature": 28.5,
58
+ "voltage": 4200,
59
+ "plugged": "ac",
60
+ "technology": "Li-ion"
61
+ }
62
+ }
63
+ ```
64
+
65
+ ### Response Fields
66
+
67
+ | Field | Type | Description |
68
+ |-------|------|-------------|
69
+ | level | int | Battery percentage (0-100) |
70
+ | status | string | `"charging"`, `"discharging"`, `"full"`, `"not_charging"` |
71
+ | health | string | `"good"`, `"overheat"`, `"dead"`, `"cold"` |
72
+ | temperature | float | Temperature in Celsius |
73
+ | voltage | int | Voltage in millivolts |
74
+ | plugged | string | `"ac"`, `"usb"`, `"wireless"`, `"none"` |
75
+ | technology | string | Battery technology (e.g., "Li-ion") |
76
+
77
+ ### Error Response
78
+
79
+ ```json
80
+ {
81
+ "error": "Failed to get battery status",
82
+ "service": "battery",
83
+ "action": "status"
84
+ }
85
+ ```
86
+
87
+ ## Use Cases
88
+
89
+ | Use Case | Description |
90
+ |----------|-------------|
91
+ | Low battery alert | Trigger actions when battery is low |
92
+ | Charging monitor | Detect when device starts/stops charging |
93
+ | Health check | Monitor battery health over time |
94
+ | Temperature warning | Alert on overheating |
95
+
96
+ ## Common Workflows
97
+
98
+ ### Low battery notification
99
+
100
+ 1. Check battery status
101
+ 2. If level < 20%, send notification
102
+ 3. Optionally enable power saving
103
+
104
+ ### Charging complete alert
105
+
106
+ 1. Periodically check battery status
107
+ 2. When status = "full", send notification
108
+ 3. Optionally suggest unplugging
109
+
110
+ ## Setup Requirements
111
+
112
+ 1. Connect the **Battery Monitor** node to Zeenie's `input-tools` handle
113
+ 2. Android device must be paired (green status indicator)
114
+ 3. Battery monitoring permission required on device
@@ -0,0 +1,151 @@
1
+ ---
2
+ name: bluetooth-skill
3
+ description: Control Android Bluetooth - enable, disable, get status, and list paired devices.
4
+ allowed-tools: bluetooth_automation
5
+ metadata:
6
+ author: machina
7
+ version: "1.0"
8
+ category: android
9
+ icon: "📱"
10
+ color: "#0EA5E9"
11
+ ---
12
+
13
+ # Bluetooth Automation Tool
14
+
15
+ Control Bluetooth on Android devices.
16
+
17
+ ## How It Works
18
+
19
+ This skill provides instructions for the **Bluetooth Automation** tool node. Connect the **Bluetooth Automation** node to Zeenie's `input-tools` handle to enable Bluetooth control.
20
+
21
+ ## bluetooth_automation Tool
22
+
23
+ Control Bluetooth settings and get device information.
24
+
25
+ ### Schema Fields
26
+
27
+ | Field | Type | Required | Description |
28
+ |-------|------|----------|-------------|
29
+ | action | string | Yes | Action to perform (see below) |
30
+
31
+ ### Actions
32
+
33
+ | Action | Description |
34
+ |--------|-------------|
35
+ | `status` | Get Bluetooth status and paired devices |
36
+ | `enable` | Turn Bluetooth on |
37
+ | `disable` | Turn Bluetooth off |
38
+
39
+ ### Examples
40
+
41
+ **Get Bluetooth status:**
42
+ ```json
43
+ {
44
+ "action": "status"
45
+ }
46
+ ```
47
+
48
+ **Enable Bluetooth:**
49
+ ```json
50
+ {
51
+ "action": "enable"
52
+ }
53
+ ```
54
+
55
+ **Disable Bluetooth:**
56
+ ```json
57
+ {
58
+ "action": "disable"
59
+ }
60
+ ```
61
+
62
+ ### Response Formats
63
+
64
+ **Status response:**
65
+ ```json
66
+ {
67
+ "success": true,
68
+ "service": "bluetooth_automation",
69
+ "action": "status",
70
+ "data": {
71
+ "enabled": true,
72
+ "discovering": false,
73
+ "name": "My Phone",
74
+ "address": "AA:BB:CC:DD:EE:FF",
75
+ "paired_devices": [
76
+ {
77
+ "name": "AirPods Pro",
78
+ "address": "11:22:33:44:55:66",
79
+ "type": "audio",
80
+ "bonded": true
81
+ },
82
+ {
83
+ "name": "Car Stereo",
84
+ "address": "77:88:99:AA:BB:CC",
85
+ "type": "audio",
86
+ "bonded": true
87
+ }
88
+ ]
89
+ }
90
+ }
91
+ ```
92
+
93
+ **Enable/Disable response:**
94
+ ```json
95
+ {
96
+ "success": true,
97
+ "service": "bluetooth_automation",
98
+ "action": "enable",
99
+ "data": {
100
+ "message": "Bluetooth enabled successfully"
101
+ }
102
+ }
103
+ ```
104
+
105
+ ### Response Fields
106
+
107
+ | Field | Description |
108
+ |-------|-------------|
109
+ | enabled | Bluetooth radio is on |
110
+ | discovering | Scanning for new devices |
111
+ | name | Device Bluetooth name |
112
+ | address | Device Bluetooth MAC address |
113
+ | paired_devices | List of bonded devices |
114
+
115
+ ### Paired Device Fields
116
+
117
+ | Field | Description |
118
+ |-------|-------------|
119
+ | name | Device name |
120
+ | address | Device MAC address |
121
+ | type | Device type (audio, computer, phone, etc.) |
122
+ | bonded | Currently paired |
123
+
124
+ ## Use Cases
125
+
126
+ | Use Case | Action | Description |
127
+ |----------|--------|-------------|
128
+ | Check Bluetooth | status | See if BT is on and paired devices |
129
+ | Toggle Bluetooth | enable/disable | Control BT radio |
130
+ | List devices | status | Get paired device list |
131
+ | Battery saving | disable | Turn off when not needed |
132
+
133
+ ## Common Workflows
134
+
135
+ ### Connect to car
136
+
137
+ 1. Check Bluetooth status
138
+ 2. If not enabled, enable it
139
+ 3. Car should auto-connect if paired
140
+
141
+ ### Battery saving mode
142
+
143
+ 1. Check Bluetooth status
144
+ 2. If no audio playing and no connected devices
145
+ 3. Disable Bluetooth to save battery
146
+
147
+ ## Setup Requirements
148
+
149
+ 1. Connect the **Bluetooth Automation** node to Zeenie's `input-tools` handle
150
+ 2. Android device must be paired
151
+ 3. Bluetooth permission required on device