Skip to main content

Teach AI coding agents to compile, flash, and validate firmware on real hardware. One command to bridge any agent and any board.

Project description

edesto-dev

Join our Discord

Teach AI coding agents how to compile, flash, and validate firmware on your hardware.

AI coding agents stop at the terminal. edesto init gives them the full embedded development loop: compile, flash, on-device debugging, iterate. Now they can autonomously develop and debug firmware on real hardware. Works with Claude Code, Cursor, Codex, and OpenClaw.

https://github.com/user-attachments/assets/f1d4719d-ed60-406e-a274-0b0f2b06ac21

Install

pip install edesto-dev

Quick Start

# 1. Plug in your board and run:
edesto init

# 2. Open your AI coding agent in the same directory
claude

# 3. Tell it what to do:
# "The sensor readings are wrong. Find and fix the bug."

That's it. edesto init auto-detects your board, serial port, and toolchain. It generates a SKILLS.md that teaches your agent the write/compile/flash/validate loop, with board-specific pin references, pitfalls, and serial conventions.

You can also specify everything manually:

edesto init --board esp32 --port /dev/cu.usbserial-0001
edesto init --board esp32 --port /dev/ttyUSB0 --toolchain arduino

JTAG/SWD Flashing

If your board is connected through a JTAG debugger (ST-Link, J-Link, CMSIS-DAP) instead of USB serial:

edesto init --board stm32-nucleo --upload jtag

This walks you through selecting your debug probe and target chip, generates an OpenOCD-based flash command, and optionally configures a serial port for monitoring. If you run edesto init with no USB boards detected and OpenOCD installed, it will offer JTAG setup automatically.

How It Works

edesto init detects your project and generates a SKILLS.md (plus copies as CLAUDE.md, .cursorrules, and AGENTS.md) that gives your AI agent:

  1. Compile and flash commands for your specific toolchain
  2. A debugging toolkit — serial output reading, plus auto-detected support for logic analyzers, JTAG/SWD, and oscilloscopes
  3. Board-specific pin references, capabilities, and common pitfalls
  4. Datasheet intelligence — guidance on finding, reading, and citing datasheets and reference manuals, with board-family-specific tips for STM32, ESP32, and Nordic nRF documentation
  5. RTOS guidance — context-aware FreeRTOS or Zephyr RTOS sections with task creation, synchronization primitives, ISR rules, and common concurrency pitfalls (appears automatically for ESP-IDF, Zephyr, and Arduino+ESP32 projects)
  6. Troubleshooting guidance for common failures (port busy, baud mismatch, upload timeout)

The debugging step is what makes this work. For example, your firmware prints structured serial output ([READY], [ERROR], [SENSOR] key=value) and the agent reads it to verify its own changes on real hardware. When you have additional debug tools installed, the agent can also drive them programmatically.

Supported Toolchains

Toolchain Detection Commands
Arduino .ino files arduino-cli compile, arduino-cli upload
PlatformIO platformio.ini pio run, pio run --target upload
ESP-IDF CMakeLists.txt + sdkconfig idf.py build, idf.py flash
Zephyr RTOS prj.conf, west.yml, or CMake with find_package(Zephyr west build, west flash
CMake/Make (bare-metal) Makefile with cross-compiler or CMakeLists.txt with toolchain file cmake --build build, OpenOCD flash
MicroPython boot.py / main.py mpremote connect, mpremote cp
Custom edesto.toml Your commands

If edesto can't detect your toolchain, it prompts you to enter compile/upload commands and saves them to edesto.toml for next time.

Supported Boards

Slug Board Key Features
esp32 ESP32 WiFi, Bluetooth, BLE
esp32s3 ESP32-S3 WiFi, BLE, USB native
esp32c3 ESP32-C3 WiFi, BLE, RISC-V
esp32c6 ESP32-C6 WiFi 6, BLE, Zigbee/Thread
esp8266 ESP8266 WiFi
arduino-uno Arduino Uno AVR, 32KB flash
arduino-nano Arduino Nano AVR, compact
arduino-mega Arduino Mega 2560 AVR, 256KB flash, 4 serial
rp2040 Raspberry Pi Pico Dual-core, PIO, USB
teensy40 Teensy 4.0 600MHz Cortex-M7, USB
teensy41 Teensy 4.1 600MHz, Ethernet, SD card
stm32-nucleo STM32 Nucleo-64 STM32, Arduino headers
stm32f4-discovery STM32F4 Discovery STM32F407, USB OTG, accelerometer, DAC
stm32h7-nucleo STM32H7 Nucleo-144 Dual-core 480MHz, Ethernet
stm32l4-nucleo STM32L4 Nucleo-64 Ultra-low-power, DAC
nrf52840 Adafruit Feather nRF52840 BLE 5.0, USB, NFC, QSPI
nrf5340 nRF5340 DK Dual-core, BLE 5.3, TrustZone

Any board works with PlatformIO, ESP-IDF, Zephyr, MicroPython, or a custom toolchain — the table above is for auto-detection with board-specific pin references and pitfalls. Run edesto boards to see the full list.

Debug Tools (Optional)

edesto auto-detects debug tools on your machine and includes them in the generated SKILLS.md. The agent picks the right tool for the problem:

Tool What it checks Detection
Serial output Application behavior (always included) pyserial
Logic analyzer SPI/I2C/UART protocol timing and bus decoding Saleae Logic 2 + logic2-automation Python package
JTAG/SWD CPU state, crashes, HardFaults, registers, memory openocd on PATH
Oscilloscope Voltage levels, PWM frequency/duty, rise times SCPI scope + pyvisa Python package

If a tool isn't installed, its section is simply omitted — the agent won't try to use it. Run edesto doctor to see which tools are detected.

Commands

edesto init                                     # Auto-detect everything
edesto init --board esp32                       # Specify board, auto-detect port
edesto init --board esp32 --port /dev/ttyUSB0   # Fully manual
edesto init --board stm32-nucleo --upload jtag  # Flash via JTAG/SWD
edesto init --toolchain platformio              # Force a specific toolchain
edesto boards                                   # List supported boards
edesto boards --toolchain arduino               # Filter by toolchain
edesto doctor                                   # Check your environment

Examples

Three example projects in examples/, each with an intentional bug for your AI agent to find and fix:

  • sensor-debug — Temperature sensor with a unit conversion bug. Celsius values are correct but Fahrenheit readings are off.
  • wifi-endpoint — ESP32 HTTP server where /health returns JSON with the wrong Content-Type header.
  • ota-update — ESP32 with OTA support. The agent updates the version string and pushes firmware wirelessly.

Prerequisites

  • A supported board connected via USB or JTAG debugger
  • Python 3.10+
  • Your toolchain's CLI installed (e.g., arduino-cli, pio, idf.py, west, arm-none-eabi-gcc, mpremote)
  • For JTAG flashing: openocd on PATH
  • Optional: debug tools (logic2-automation, openocd, pyvisa) for advanced debugging

Run edesto doctor to check your setup.

About

Built by Edesto. We build tools for robotics and embedded teams.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

edesto_dev-0.9.0.tar.gz (57.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

edesto_dev-0.9.0-py3-none-any.whl (44.1 kB view details)

Uploaded Python 3

File details

Details for the file edesto_dev-0.9.0.tar.gz.

File metadata

  • Download URL: edesto_dev-0.9.0.tar.gz
  • Upload date:
  • Size: 57.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for edesto_dev-0.9.0.tar.gz
Algorithm Hash digest
SHA256 26e94c0789cd3b8547b7b4128a410d48d14bdd671f7a40bb9a005b8b5feb833d
MD5 609519815b68539f16ee299fbac2f530
BLAKE2b-256 6b716563d34fff9fdee54940fb87dd3a50f855b00ff5955bfd7ba553994433b8

See more details on using hashes here.

File details

Details for the file edesto_dev-0.9.0-py3-none-any.whl.

File metadata

  • Download URL: edesto_dev-0.9.0-py3-none-any.whl
  • Upload date:
  • Size: 44.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for edesto_dev-0.9.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7fc5624b910dd9000e7044c8fff83a2cb5e5df395d6674771967019f0873d0d2
MD5 4ad52d2c6db15c5e3e118155c573b6e1
BLAKE2b-256 178b5fd8a13112562c7c4efc25598e8aa00225abf1dcfe9bcc0e7659fa42565f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page