> ## Documentation Index
> Fetch the complete documentation index at: https://docs.veecle.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Test firmware before the board arrives

> See what the firmware prints on a virtual board before the hardware is on your desk.

You can see what the firmware does on a virtual board before the hardware is on your desk.

## What you'll do

**1. Connect an agent**

Connect an agent once. A client that can add a remote HTTP MCP server signs in through the browser. Setup for each client is on [Connect an agent](/agents/overview).

**2. Build the ELF**

Build the ELF. You can compile it on your side, and Chiplab runs that binary as-is.

**3. Run it on the target board model**

Your agent uploads the ELF and runs it on the target board model, with the UARTs to capture. Only the UARTs you list are captured. The STM32F4 Discovery model is `stm32f4_discovery`, and its examples write `usart2`.

**4. Read the UART output**

The run returns a `run_id` immediately. Your agent waits for the job, then downloads `uart`, the captured UART output. A run lasts up to 5 seconds of virtual time.

## Ask your agent

```text theme={null}
Run this ELF on the STM32F4 Discovery, capture usart2, and tell me what it printed.
```

## What you get back

You get a status (`running`, `succeeded`, or `failed`) and `uart` for the UARTs you captured. A crashing firmware still returns `succeeded`, so check the `uart` output. See [Core concepts](/concepts). On the STM32F4 Discovery examples, `usart2` prints `Hello world!`.

## Next

> **[run](/tools/run)**
>
> Execute an ELF on a virtual board and read the UART.

> **[test](/tools/test)**
>
> Get a pass or fail for each test.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.