Skip to main content

🌀 strands-nicla

Arduino Nicla (Vision / Sense / Voice) control as a single @tool for Strands Agents.

from strands import Agent
from strands_nicla import nicla

agent = Agent(tools=[nicla])
agent("take a photo with the nicla vision and tell me what you see")

What it does

Nicla Vision runs MicroPython / OpenMV firmware and exposes a USB CDC serial REPL. strands-nicla wraps that REPL into Strands-friendly actions:

Nicla Voice does not. A factory Voice enumerates as a CMSIS-DAP debug probe with a silent CDC port — no REPL, so exec/ls/put time out by design. It is a BLE-gateway device, not a REPL device. See NICLA_VOICE.md.

category actions
devices list_devices, select_device, info, reset(hard), stop
repl exec, eval
fs ls, cat, put, get, rm, mkdir, run_file
vision snapshot (JPEG → Converse image block, quality ladder for low light)
sensors imu (built-in SPI module first), env, distance, mic_level
tiny provision — write tiny.technology identity/WiFi to /flash/tiny.json over USB
firmware boot_mode, flash (DFU)

The tiny necklace (firmware/ + hardware/)

This repo also carries the tiny.technology wearable built on Nicla Vision:

  • firmware/ — MicroPython device firmware: first-boot WiFi-AP portal, BLE GATT provisioning (pairs with the tiny iOS/Android apps' Nearby → 💎 "Set up" flow), and the device-node loop (heartbeat + relay poll + commands: photo, detect person, faces FOMO, distance, imu, info — vision models run on-device from the QSPI romfs, ~48ms/inference).
  • hardware/ — flash map, measured board geometry, official docs/CAD, and the parametric pendant case (tiny_necklace_case.scad, USB-powered or battery=true LiPo variant), sliced plates for Bambu Lab X2D.
  • tests/ — the firmware's pure logic runs under CPython with hardware stubs.

See hardware/README.md for the full device state, provisioning paths, and MicroPython/OpenMV gotchas learned the hard way. Ops rule: reset(hard=True) launches main.py; a soft reset with a terminal attached drops to the REPL. Keep the OpenMV USB volume ejected (diskutil unmount "/Volumes/NO NAME") or macOS will corrupt /flash.

Install

pip install strands-nicla

# or inject into devduck:
pipx inject devduck strands-nicla

Supported boards

  • Arduino Nicla Vision — STM32H747 + 2MP cam + mic + IMU + ToF
  • Arduino Nicla Sense ME — nRF52832 + BHI260AP + BMM150 + BMP390 + BME688
  • Arduino Nicla Voice — nRF52832 + NDP120 + IM69D130 mic + BMI270

All three expose a USB CDC port, but only Nicla Vision answers on it out of the box. Nicla Voice ships as a CMSIS-DAP debug probe (2341:0065) whose CDC port returns nothing — verified on hardware at 9600/115200/921600 with both \r\n and Ctrl-C. It has no WiFi either (nRF52832), so it cannot run the Vision's heartbeat/relay node loop; a phone acts as its BLE gateway. Nicla Sense ME runs MbedOS and can also speak MicroPython via mpremote.

Principles

  • Mirror strands-adb / strands-ios action vocabulary where sensible.
  • Honest errors — if the board doesn't support an action, say so.
  • Vision-first — snapshot returns Converse API image blocks.
  • No extra daemons — pure pyserial + MicroPython raw REPL protocol.

Status

v0.1 — alpha. See GOAL.md.

Metadata

Release files for strands-nicla 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for strands-nicla 0.1.0
File Size Uploaded Provenance
strands_nicla-0.1.0.tar.gz 42.6 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for strands-nicla 0.1.0
File Interpreter ABI Platform
strands_nicla-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 56.3 kB

Release files / strands_nicla-0.1.0.tar.gz

Download URL strands_nicla-0.1.0.tar.gz
Size 42.6 kB
Tags Source
SHA-256 checksum
How to use checksums
925dc4116c5f997e8d36d5d02d495fe72df8a749274d2d7b207d8b2225922119
BLAKE2b-256 checksum
How to use checksums
8d0e8b7d810268a7773f3d4f33eebdfba6d22ddcf1a8aba55c6076e0e956bc9a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.7

Release files / strands_nicla-0.1.0-py3-none-any.whl

Download URL strands_nicla-0.1.0-py3-none-any.whl
Size 13.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9cad3bcc2302b83f6b1fd8ca8ffdf34176087a1889f5955f9d51e45f5341e00a
BLAKE2b-256 checksum
How to use checksums
1eb439728c46f1bb4964d29d52aa85209d4eb73304be75bf7f667cff9ba3c43c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.7

Security for strands-nicla 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page