hackshop-mcp 0.0.2 → 0.0.4

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 (38) hide show
  1. package/README.md +63 -9
  2. package/SAMPLING.md +12 -6
  3. package/catalog.json +1877 -54
  4. package/dist/catalog/schema.d.ts +510 -0
  5. package/dist/catalog/schema.js +47 -0
  6. package/dist/catalog/schema.js.map +1 -1
  7. package/dist/platforms/index.d.ts +26 -0
  8. package/dist/platforms/index.js +51 -0
  9. package/dist/platforms/index.js.map +1 -0
  10. package/dist/platforms/load.d.ts +4 -0
  11. package/dist/platforms/load.js +78 -0
  12. package/dist/platforms/load.js.map +1 -0
  13. package/dist/platforms/schema.d.ts +383 -0
  14. package/dist/platforms/schema.js +53 -0
  15. package/dist/platforms/schema.js.map +1 -0
  16. package/dist/sampling.d.ts +4 -0
  17. package/dist/sampling.js +17 -19
  18. package/dist/sampling.js.map +1 -1
  19. package/dist/server.js +135 -23
  20. package/dist/server.js.map +1 -1
  21. package/dist/telemetry.d.ts +29 -0
  22. package/dist/telemetry.js +100 -0
  23. package/dist/telemetry.js.map +1 -0
  24. package/dist/tools/assess_hackability.d.ts +4 -0
  25. package/dist/tools/assess_hackability.js +44 -4
  26. package/dist/tools/assess_hackability.js.map +1 -1
  27. package/dist/tools/plan_gadget.d.ts +66 -0
  28. package/dist/tools/plan_gadget.js +406 -0
  29. package/dist/tools/plan_gadget.js.map +1 -0
  30. package/dist/tools/propose_hardware.d.ts +2 -0
  31. package/dist/tools/propose_hardware.js +38 -2
  32. package/dist/tools/propose_hardware.js.map +1 -1
  33. package/dist/tools/simulate_assembly.d.ts +315 -0
  34. package/dist/tools/simulate_assembly.js +145 -0
  35. package/dist/tools/simulate_assembly.js.map +1 -0
  36. package/package.json +4 -1
  37. package/platforms.json +448 -0
  38. package/tags.md +1 -0
package/platforms.json ADDED
@@ -0,0 +1,448 @@
1
+ [
2
+ {
3
+ "id": "muse-esp32",
4
+ "name": "Muse Gadgets: ESP32 Device SDK",
5
+ "vendor": "Meta",
6
+ "kind": "agent-gadget",
7
+ "launched": "2026-10-02",
8
+ "homepage": "https://gadgets.muse.ai/",
9
+ "sdk_repo": "https://github.com/facebookincubator/muse-gadget-sdk",
10
+ "sdk_path": "esp32",
11
+ "docs_url": "https://github.com/facebookincubator/muse-gadget-sdk/tree/main/esp32",
12
+ "license": "Apache-2.0 (third-party exceptions listed in the repo README; the Jollybot avatar is not covered)",
13
+ "summary": "Open-source ESP32 firmware that turns an off-the-shelf board into a device for Muse, Meta's personal AI agent. The board pairs to the Muse app over BLE, joins Wi-Fi and holds an encrypted session to your Muse VM.",
14
+ "toolchain": "ESP-IDF v6.0.1 only (other versions unsupported); macOS or Linux host.",
15
+ "requires": [
16
+ "A Muse account and the Muse app (iOS/Android) with Settings > Devices > Developer mode on",
17
+ "An SDK token (mgst_...) from gadgets.muse.ai > Account > SDK tokens",
18
+ "One of the supported boards below"
19
+ ],
20
+ "setup_steps": [
21
+ "Get an SDK token at https://gadgets.muse.ai/settings/sdk-tokens (never commit it or paste it into a public repo).",
22
+ "Install ESP-IDF v6.0.1: git clone -b v6.0.1 --recursive https://github.com/espressif/esp-idf.git ~/esp/esp-idf-v6 && ~/esp/esp-idf-v6/install.sh esp32c5,esp32s3,esp32c6,esp32 && . ~/esp/esp-idf-v6/export.sh",
23
+ "git clone https://github.com/facebookincubator/muse-gadget-sdk && cd muse-gadget-sdk/esp32",
24
+ "Set the token: idf.py menuconfig > ESP32 Device SDK > Muse Gadgets SDK token (or CONFIG_GADGET_SDK_TOKEN in the build's sdkconfig).",
25
+ "Build and flash with the board's command below, then idf.py -p PORT flash monitor. If flashing can't connect: hold BOOT, tap RESET, release BOOT.",
26
+ "In the Muse app: Settings > Devices > Add Device, pick MuseGadget-XXXXXX, press the board's button when the light breathes blue. Green = connected."
27
+ ],
28
+ "agent_quickstart": "curl -fsSL https://dev.meta.ai/install.sh | sh && git clone https://github.com/facebookincubator/muse-gadget-sdk && cd muse-gadget-sdk/esp32 && muse --disable-sandbox # then: \"Build this firmware for my <board> and flash it.\" Any coding agent that reads AGENTS.md can do the same.",
29
+ "tiers": [
30
+ {
31
+ "id": "full-ui",
32
+ "label": "Full UI",
33
+ "description": "LVGL animated avatar, push-to-talk and on-device settings; over-the-air updates on."
34
+ },
35
+ {
36
+ "id": "status",
37
+ "label": "Status",
38
+ "description": "Status on a light, LED ring, e-paper or simple screen; over-the-air updates off."
39
+ }
40
+ ],
41
+ "caveats": [
42
+ "Boards without PSRAM (classic ESP32, ESP32-C6) run without the home-network tunnel; Muse can still reach and control them.",
43
+ "The home-network tunnel lets Muse reach devices on your LAN that expose a local HTTP API. Treat it like giving the agent a foothold on your network.",
44
+ "Pairing has no manufacturer verification and can't prevent an active man-in-the-middle attack.",
45
+ "Builds are signed with the included development key and never enable Secure Boot. Enable NVS encryption (CONFIG_HOMEHUB_NVS_ENCRYPTION).",
46
+ "Custom ESP32 commands are not a documented API yet: the command set (display.draw_url, sensors.read, camera.capture, ...) is hardcoded in main/app.c."
47
+ ],
48
+ "terms": {
49
+ "url": "https://gadgets.muse.ai/sdk-terms",
50
+ "summary": "Personal, non-commercial use with your own Muse account. A token can be linked to at most 50 devices. You may not put it in any device you sell, advertise, or list publicly or in a marketplace or app store; other distribution needs Meta's written permission. Provided as-is; Meta can change, withdraw or revoke access at any time.",
51
+ "personal_noncommercial_only": true,
52
+ "max_devices_per_token": 50,
53
+ "selling_allowed": false,
54
+ "revocable": true
55
+ },
56
+ "community_url": "https://discord.gg/3bhjCkZdd6",
57
+ "boards": [
58
+ {
59
+ "device_id": "espressif-esp32-c5-devkitc-1",
60
+ "support": "official",
61
+ "tier": "status",
62
+ "kind": "light",
63
+ "build": "idf.py build",
64
+ "features": {
65
+ "home_tunnel": true,
66
+ "images": "none",
67
+ "push_to_talk": "none",
68
+ "audio": "none",
69
+ "touch": false,
70
+ "camera": false,
71
+ "air_sensors": false,
72
+ "ota": false,
73
+ "battery": "no",
74
+ "round_display": false,
75
+ "display_in": null
76
+ },
77
+ "note": "Status light and button. Muse's recommended starting point."
78
+ },
79
+ {
80
+ "device_id": "ideaspark-esp32-1-9-lcd",
81
+ "support": "official",
82
+ "tier": "status",
83
+ "kind": "status-screen",
84
+ "build": "tools/board.sh ideaspark build",
85
+ "features": {
86
+ "home_tunnel": false,
87
+ "images": "color",
88
+ "push_to_talk": "none",
89
+ "audio": "none",
90
+ "touch": false,
91
+ "camera": false,
92
+ "air_sensors": false,
93
+ "ota": false,
94
+ "battery": "no",
95
+ "round_display": false,
96
+ "display_in": 1.9
97
+ },
98
+ "note": "No PSRAM, so no home-network tunnel; draws images straight to the screen."
99
+ },
100
+ {
101
+ "device_id": "seeed-sensecap-indicator",
102
+ "support": "official",
103
+ "tier": "status",
104
+ "kind": "status-screen",
105
+ "build": "tools/board.sh sensecap-indicator build",
106
+ "features": {
107
+ "home_tunnel": true,
108
+ "images": "color",
109
+ "push_to_talk": "none",
110
+ "audio": "none",
111
+ "touch": true,
112
+ "camera": false,
113
+ "air_sensors": true,
114
+ "ota": false,
115
+ "battery": "no",
116
+ "round_display": false,
117
+ "display_in": 3.95
118
+ },
119
+ "note": "Air sensors only on D1S/D1Pro (temp/humidity via the bundled Grove AHT20)."
120
+ },
121
+ {
122
+ "device_id": "seeed-reterminal-e1001",
123
+ "support": "official",
124
+ "tier": "status",
125
+ "kind": "e-paper",
126
+ "build": "tools/board.sh reterminal-e1001 build",
127
+ "features": {
128
+ "home_tunnel": true,
129
+ "images": "black-and-white",
130
+ "push_to_talk": "none",
131
+ "audio": "none",
132
+ "touch": false,
133
+ "camera": false,
134
+ "air_sensors": false,
135
+ "ota": false,
136
+ "battery": "yes",
137
+ "round_display": false,
138
+ "display_in": 7.5
139
+ },
140
+ "note": "Status text and black-and-white images on 7.5\" e-paper."
141
+ },
142
+ {
143
+ "device_id": "home-assistant-voice-pe",
144
+ "support": "official",
145
+ "tier": "status",
146
+ "kind": "light",
147
+ "build": "tools/board.sh home-assistant-voice build",
148
+ "features": {
149
+ "home_tunnel": true,
150
+ "images": "none",
151
+ "push_to_talk": "voice",
152
+ "audio": "speaker-mic",
153
+ "touch": false,
154
+ "camera": false,
155
+ "air_sensors": false,
156
+ "ota": false,
157
+ "battery": "no",
158
+ "round_display": false,
159
+ "display_in": null
160
+ },
161
+ "note": "Status on the LED ring, push-to-talk, dial as volume."
162
+ },
163
+ {
164
+ "device_id": "waveshare-esp32-s3-touch-amoled-1-75c",
165
+ "support": "official",
166
+ "tier": "full-ui",
167
+ "kind": "ui",
168
+ "build": "tools/muse/board.sh build s3",
169
+ "features": {
170
+ "home_tunnel": true,
171
+ "images": "color",
172
+ "push_to_talk": "voice",
173
+ "audio": "speaker-mic",
174
+ "touch": true,
175
+ "camera": false,
176
+ "air_sensors": false,
177
+ "ota": true,
178
+ "battery": "optional",
179
+ "round_display": true,
180
+ "display_in": 1.75
181
+ },
182
+ "note": "Round AMOLED avatar; best desk object."
183
+ },
184
+ {
185
+ "device_id": "aipi-lite",
186
+ "support": "official",
187
+ "tier": "full-ui",
188
+ "kind": "ui",
189
+ "build": "tools/muse/board.sh build aipi",
190
+ "features": {
191
+ "home_tunnel": true,
192
+ "images": "color",
193
+ "push_to_talk": "voice",
194
+ "audio": "speaker-mic",
195
+ "touch": false,
196
+ "camera": false,
197
+ "air_sensors": false,
198
+ "ota": true,
199
+ "battery": "yes",
200
+ "round_display": false,
201
+ "display_in": null
202
+ },
203
+ "note": "Palm-size voice buddy with a snap-on battery and a two-button menu."
204
+ },
205
+ {
206
+ "device_id": "waveshare-esp32-c6-touch-amoled-1-8",
207
+ "support": "official",
208
+ "tier": "full-ui",
209
+ "kind": "ui",
210
+ "build": "tools/muse/board.sh build c6",
211
+ "features": {
212
+ "home_tunnel": false,
213
+ "images": "none",
214
+ "push_to_talk": "text",
215
+ "audio": "speaker-mic",
216
+ "touch": true,
217
+ "camera": false,
218
+ "air_sensors": false,
219
+ "ota": true,
220
+ "battery": "optional",
221
+ "round_display": false,
222
+ "display_in": 1.8
223
+ },
224
+ "note": "No PSRAM: voice notes go over the control session and replies come back as scrolling text."
225
+ },
226
+ {
227
+ "device_id": "seeed-sensecap-watcher",
228
+ "support": "official",
229
+ "tier": "full-ui",
230
+ "kind": "ui",
231
+ "build": "tools/muse/board.sh build watcher",
232
+ "features": {
233
+ "home_tunnel": true,
234
+ "images": "color",
235
+ "push_to_talk": "voice",
236
+ "audio": "speaker-mic",
237
+ "touch": true,
238
+ "camera": true,
239
+ "air_sensors": false,
240
+ "ota": true,
241
+ "battery": "yes",
242
+ "round_display": true,
243
+ "display_in": 1.45
244
+ },
245
+ "note": "camera.capture returns a JPEG (CONFIG_MUSE_WATCHER_CAMERA=y)."
246
+ },
247
+ {
248
+ "device_id": "m5stack-sticks3",
249
+ "support": "official",
250
+ "tier": "full-ui",
251
+ "kind": "ui",
252
+ "build": "tools/muse/board.sh build sticks3",
253
+ "features": {
254
+ "home_tunnel": true,
255
+ "images": "color",
256
+ "push_to_talk": "voice",
257
+ "audio": "speaker-mic",
258
+ "touch": false,
259
+ "camera": false,
260
+ "air_sensors": false,
261
+ "ota": true,
262
+ "battery": "yes",
263
+ "round_display": false,
264
+ "display_in": 1.14
265
+ },
266
+ "note": "Pocket stick with speaker, mic, IMU and battery; the best push-to-talk remote."
267
+ },
268
+ {
269
+ "device_id": "m5stack-stickc-plus2",
270
+ "support": "official",
271
+ "tier": "full-ui",
272
+ "kind": "ui",
273
+ "build": "tools/muse/board.sh build plus2",
274
+ "features": {
275
+ "home_tunnel": true,
276
+ "images": "color",
277
+ "push_to_talk": "voice",
278
+ "audio": "buzzer-mic",
279
+ "touch": false,
280
+ "camera": false,
281
+ "air_sensors": false,
282
+ "ota": true,
283
+ "battery": "yes",
284
+ "round_display": false,
285
+ "display_in": 1.14
286
+ },
287
+ "eol": true,
288
+ "note": "End of life at M5Stack; buzzer only, so no spoken replies."
289
+ }
290
+ ],
291
+ "sources": [
292
+ "https://gadgets.muse.ai/",
293
+ "https://github.com/facebookincubator/muse-gadget-sdk/blob/main/esp32/README.md",
294
+ "https://github.com/facebookincubator/muse-gadget-sdk/blob/main/esp32/devices/README.md",
295
+ "https://github.com/facebookincubator/muse-gadget-sdk/blob/main/esp32/AGENTS.md",
296
+ "https://gadgets.muse.ai/sdk-terms",
297
+ "https://www.engadget.com/2276312/meta-muse-gadgets-open-source-smart-home-link/"
298
+ ],
299
+ "last_verified": "2026-10-02"
300
+ },
301
+ {
302
+ "id": "muse-linux",
303
+ "name": "Muse Gadgets: Linux Device SDK",
304
+ "vendor": "Meta",
305
+ "kind": "agent-gadget",
306
+ "launched": "2026-10-02",
307
+ "homepage": "https://gadgets.muse.ai/",
308
+ "sdk_repo": "https://github.com/facebookincubator/muse-gadget-sdk",
309
+ "sdk_path": "linux",
310
+ "docs_url": "https://github.com/facebookincubator/muse-gadget-sdk/tree/main/linux",
311
+ "license": "Apache-2.0",
312
+ "summary": "A Python service (musegadget) that turns a Linux box with Bluetooth LE into a Muse gadget. Muse gets shell, file and health commands on the machine and can push messages back to you.",
313
+ "toolchain": "Python 3.9+, BlueZ, python3-dbus and python3-gi; Raspberry Pi OS Bullseye+, Debian 11+ or Ubuntu 22.04+ (32- or 64-bit); sudo.",
314
+ "requires": [
315
+ "A Muse account and the Muse app with Developer mode on",
316
+ "An SDK token (mgst_...) from gadgets.muse.ai",
317
+ "A Linux machine with Bluetooth LE on your network"
318
+ ],
319
+ "setup_steps": [
320
+ "curl -fsSL https://raw.githubusercontent.com/facebookincubator/muse-gadget-sdk/main/linux/install.sh -o install.sh",
321
+ "Read it first: less install.sh",
322
+ "bash install.sh --sdk-token mgst_... (installs to /opt/musegadget and starts the musegadget systemd service)",
323
+ "Pair from the Muse app within 10 minutes (device shows as MuseGadgetXXXXXX); re-pair later with sudo musegadget pair.",
324
+ "Optional: push messages to Muse from scripts with musegadget send-user-msg \"...\""
325
+ ],
326
+ "agent_quickstart": "Ask Muse (or any coding agent on the box) things like: \"Install Home Assistant on my Pi and tell me how to open it.\"",
327
+ "commands": [
328
+ "system.run",
329
+ "file.read",
330
+ "file.write",
331
+ "device.health"
332
+ ],
333
+ "extending": "Add a spec to COMMAND_SPECS in linux/src/musegadget/executor.py (description, required/optional params with type + description, optional timeout_ms), handle it in Executor.run returning ok(payload) or error(message), then restart the service.",
334
+ "tiers": [
335
+ {
336
+ "id": "linux",
337
+ "label": "Linux",
338
+ "description": "Shell, file and health commands; scripts can message you through Muse."
339
+ }
340
+ ],
341
+ "caveats": [
342
+ "Commands run as the install user with exactly that account's permissions. If it can sudo, so can Muse. Use a dedicated low-privilege user (--run-as USER) unless you need more.",
343
+ "Messages from the device are capped at 256 KB; command output is cut at 96 KB per stream.",
344
+ "Muse labels it a community device; it is not a supported Meta product."
345
+ ],
346
+ "terms": {
347
+ "url": "https://gadgets.muse.ai/sdk-terms",
348
+ "summary": "Same token terms as the ESP32 SDK: personal and non-commercial, at most 50 devices per token, no selling or public listing, revocable at any time.",
349
+ "personal_noncommercial_only": true,
350
+ "max_devices_per_token": 50,
351
+ "selling_allowed": false,
352
+ "revocable": true
353
+ },
354
+ "community_url": "https://discord.gg/3bhjCkZdd6",
355
+ "boards": [
356
+ {
357
+ "device_id": "raspberry-pi-5",
358
+ "support": "official",
359
+ "tier": "linux",
360
+ "kind": "linux",
361
+ "build": "bash install.sh --sdk-token mgst_...",
362
+ "features": {
363
+ "ble_builtin": true,
364
+ "compute": "standard"
365
+ },
366
+ "note": "Featured on gadgets.muse.ai."
367
+ },
368
+ {
369
+ "device_id": "raspberry-pi-4b",
370
+ "support": "official",
371
+ "tier": "linux",
372
+ "kind": "linux",
373
+ "build": "bash install.sh --sdk-token mgst_...",
374
+ "features": {
375
+ "ble_builtin": true,
376
+ "compute": "standard"
377
+ },
378
+ "note": "Listed in the Linux SDK README."
379
+ },
380
+ {
381
+ "device_id": "raspberry-pi-zero-2w",
382
+ "support": "official",
383
+ "tier": "linux",
384
+ "kind": "linux",
385
+ "build": "bash install.sh --sdk-token mgst_...",
386
+ "features": {
387
+ "ble_builtin": true,
388
+ "compute": "light"
389
+ },
390
+ "note": "Listed in the Linux SDK README; slow but enough for shell and file commands."
391
+ },
392
+ {
393
+ "device_id": "dell-wyse-5070",
394
+ "support": "possible",
395
+ "tier": "linux",
396
+ "kind": "linux",
397
+ "build": "bash install.sh --sdk-token mgst_...",
398
+ "features": {
399
+ "ble_builtin": false,
400
+ "compute": "desktop"
401
+ },
402
+ "note": "Not on Meta's list. Meets the stated requirements on Debian/Ubuntu if it has Bluetooth LE; most units need a USB BLE adapter."
403
+ },
404
+ {
405
+ "device_id": "hp-t620-plus",
406
+ "support": "possible",
407
+ "tier": "linux",
408
+ "kind": "linux",
409
+ "build": "bash install.sh --sdk-token mgst_...",
410
+ "features": {
411
+ "ble_builtin": false,
412
+ "compute": "desktop"
413
+ },
414
+ "note": "Not on Meta's list. Add a USB Bluetooth LE adapter."
415
+ },
416
+ {
417
+ "device_id": "intel-nuc",
418
+ "support": "possible",
419
+ "tier": "linux",
420
+ "kind": "linux",
421
+ "build": "bash install.sh --sdk-token mgst_...",
422
+ "features": {
423
+ "ble_builtin": null,
424
+ "compute": "desktop"
425
+ },
426
+ "note": "Not on Meta's list. Many NUCs ship with Bluetooth; check yours."
427
+ },
428
+ {
429
+ "device_id": "lenovo-thinkcentre-tiny",
430
+ "support": "possible",
431
+ "tier": "linux",
432
+ "kind": "linux",
433
+ "build": "bash install.sh --sdk-token mgst_...",
434
+ "features": {
435
+ "ble_builtin": null,
436
+ "compute": "desktop"
437
+ },
438
+ "note": "Not on Meta's list. Bluetooth depends on the Wi-Fi card fitted; add a USB BLE adapter if missing."
439
+ }
440
+ ],
441
+ "sources": [
442
+ "https://github.com/facebookincubator/muse-gadget-sdk/blob/main/linux/README.md",
443
+ "https://github.com/facebookincubator/muse-gadget-sdk/blob/main/linux/AGENTS.md",
444
+ "https://gadgets.muse.ai/sdk-terms"
445
+ ],
446
+ "last_verified": "2026-10-02"
447
+ }
448
+ ]
package/tags.md CHANGED
@@ -29,6 +29,7 @@ These are the only tags valid for `idea_fit_tags` in `catalog.json`. Adding a ne
29
29
  - `low-power` — battery-friendly, sub-1W ideal
30
30
 
31
31
  ## Form / Use
32
+ - `agent-gadget` — officially supported as a body for an AI agent (e.g. Muse Gadgets SDK); see platforms.json
32
33
  - `retrogaming` — handheld / console for emulation
33
34
  - `handheld` — battery, portable
34
35
  - `network` — router/switch repurposing