doc · 001thetossproject.com
an OS for your agent

The Toss Project

Giving AI agents real-world awareness and the ability to act.

est. mmxxvi
node-1 · live
fig. 01
TOSSbmp280sht31relayoled
bmp280·reading temperature
00 — At a glance

An OS for ESP32 that turns a pile of sensors into one device your LLM can drive.

Free, open-source firmware. Optional plug-and-play kits, no cloud, no app — just a USB cable from your LLM to a single node.

  1. 01 · flash

    Get a board running TOSS.

    Run one script to flash any ESP32 / S3 / C3 — or buy a pre-flashed kit and skip ahead.

    OPEN SOURCE · MIT
  2. 02 · plug

    Plug sensors in. They just work.

    TOSS scans I²C, 1-Wire, UART every 30 s. Unknown chip? It downloads a signed driver and caches it forever.

    ANY I²C / 1-WIRE / UART
  3. 03 · drive

    Hand your LLM a USB cable OR an MCP endpoint.

    Nodes auto-mesh over ESP-NOW. Drive them over UART serial, or hit the on-board MCP server when the gateway's on WiFi. Claude, GPT, Ollama — anything that speaks either runs the whole mesh.

    MCP · UART · JSON-RPC
What it is
An IoT operating system
very light firmware
What you do
Plug sensors. Talk to LLM.
No code · no rebuild · no re-flash
Where it runs
On the device itself
No cloud · no app
What you pay
$0 for the firmware
Pre-flashed kits coming soon
01 — Plug-and-play drivers

Plug a sensor in & It just works.

Bus scanner sweeps I²C, 1-Wire, and UART. Unknown chip?
TOSS fetches a signed driver from the online registry, verifies its ed25519 signature, and caches it forever in on-chip SPIFFS.
No firmware rebuild. No re-flash

bus_scanner active
i2c · 1-wire · uart
5 peripherals · 5 streams
all signed · all cached
02 — Mesh networking

Every-one knows each other.

ESP-NOW radio. Peer-to-peer. Up to 16 neighbors per node. the entire frame fits in a single 250-byte ESP-NOW packet.

TWP v2 // ESP-NOW
origin-dedup · ttl=3 · crc-16
heartbeat
capability
command
03 — Streaming

Sensor to the cloud, in under 5 ms.

Each TWP frame carries up to 52 samples. The gateway fans out to UDP, MQTT, and HTTP in parallel — HTTP runs on a dedicated low-priority task so the mesh RX hot path never blocks.

BMP280I²C read · 4 B/sampleNode Astream_tx_task · ring bufNode Bttl-1 · origin dedupGatewaywifi sta · mcpOutudp · mqtt · http
samples0/s
frames sent0/s
dropped0/s
ack rtt0.00ms
UDP
udp://10.0.0.42:9000
latency
0.5 ms
delivery
fire & forget
MQTT
mqtt://broker.local/toss/sensors
latency
1–3 ms
delivery
QoS 0 / 1 / 2
HTTP
https://api.example.com/ingest
latency
50–500 ms
delivery
POST · queued
04 — LLM-ready

Hand any LLM an MCP endpoint OR a USB cable. That's the SDK.

TOSS speaks two languages: a UART shell and an MCP server.
Claude, GPT, Ollama — anything that talks JSON-RPC or types into a serial port — drives the entire mesh as one device.

mcp client
LLM · agent
UART · 115200
toss> · node-1
05 — Get started

How To Get Started.

Bring your own ESP32 and flash it, or grab a board with TOSS already on it. Either way, you end up with the same shell, same mesh, same LLM hookup.

path A
Flash your own board
esp32 · s3 · c3 · 4mb+ flash
install · zsh
$wget https://github.com/opentoss-io/toss/releases/latest/download/toss-installer.sh
$chmod +x toss-installer.sh && ./toss-installer.sh
• detect board ……… esp32-s3 · /dev/cu.usbmodem01
• erase flash ……… ok (4 MB)
• write partitions … nvs · ota · drvcache
• flash firmware … ok (1.2 MB)
• verify ……… ok (sha256)
✓ TOSS v0.1.0 ready
toss>sys_info
requires python 3 + usbsource ↗
path B
Get a pre-flashed kit
dev kit · sensors · cable
included
Node board
ESP32-S3 · TOSS pre-installed
included
Sensor pack
bmp280 · sht31 · pir · relay
included
USB-C cable
UART · the only wire your LLM needs
included
Quick start
3 commands to your first agent
  • nothing to flash · plug in & talk
  • same firmware as path a
  • signed driver registry pre-cached
kits launching soonjoin waitlist ↗
1
flash
run the script, or open the kit
2
plug
attach any I²C / 1-Wire sensor
3
link
USB cable from your computer
4
drive
On-board MCP server support -OR- point Claude / GPT / Ollama at /dev/ttyUSB0