zephyr — Claude Code skill: what it does, how to install
Guides coding agents through Zephyr RTOS development. It covers the west build tool, Kconfig options, devicetree overlays, native_sim testing, and debugging.
npx skills add mohitmishra786/low-level-dev-skills --skill zephyr -a claude-codeWhat zephyr does
The skill provides workflow rules for developing firmware on Zephyr RTOS. It explains project layouts using CMakeLists.txt and prj.conf, hardware mapping with devicetree overlays in app.overlay, and configuring log levels. Preconfigured board targets include nRF52840 DK, STM32 Nucleo, ESP32, Raspberry Pi Pico, and QEMU.
For testing without physical microcontrollers, it explains how to compile applications for the native_sim target. Zephyr executes as a native host binary, which lets you inspect logic locally and attach GDB. Without the Zephyr SDK and valid ZEPHYR_BASE and ZEPHYR_SDK_INSTALL_DIR environment variables, west build will fail to locate the toolchain. The documentation also covers hardware programming with west flash and thread-aware debugging through OpenOCD.
What it helps with
- configure board peripherals through devicetree overlays
- run and test firmware on the host machine using
native_sim - set log levels and output backends in
prj.conf - debug RTOS threads using GDB and OpenOCD
Example prompts for the agent
- Show me how to enable UART logging in
prj.conf. - Create a devicetree overlay in
app.overlayfor a GPIO LED. - How do I build and execute the application using the
native_simtarget?
How to install zephyr
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill zephyr -a claude-code2Manually: put the files in place
~/.claude/skills/zephyr/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/zephyr/
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill zephyr -a codex2Manually: put the files in place
.agents/skills/zephyr/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill zephyr -a cursor2Manually: put the files in place
.cursor/skills/zephyr/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install mohitmishra786/low-level-dev-skills zephyr2Manually: put the files in place
.github/skills/zephyr/SKILL.md1Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill zephyr -a gemini-cli2Platform CLI
gemini skills install https://github.com/mohitmishra786/low-level-dev-skills --path skills/embedded/zephyrManually: put the files in place
.devin/skills/zephyr/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add mohitmishra786/low-level-dev-skills --skill zephyr -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about zephyr
How do I install zephyr in Claude Code?
Run npx skills add mohitmishra786/low-level-dev-skills --skill zephyr -a claude-code in your terminal.
What does the zephyr skill do?
It gives your assistant context on Zephyr RTOS, including west build commands, Kconfig options, devicetree rules, and GDB setup.
Can I run Zephyr code without hardware?
Yes, building for the native_sim target produces a host binary that executes directly on Linux for testing and debugging.
Source text
SKILL.md · MIT
---
name: zephyr
description: Zephyr RTOS skill for embedded development. Use when building Zephyr applications with west, configuring boards and targets, working with Kconfig and devicetree, using the Zephyr shell and logging subsystem, or running on the native_sim target. Activates on queries about Zephyr, west build, Kconfig, devicetree, Zephyr logging, west flash, board targets, or native POSIX simulation.
---
# Zephyr RTOS
## Purpose
Guide agents through Zephyr application development: west build workflow, board configuration, Kconfig and devicetree, Zephyr shell and logging, native_sim target for host testing, and debugging with GDB.
## Triggers
- "How do I build a Zephyr application with west?"
- "How do I configure Zephyr with Kconfig?"
- "How do I use devicetree overlays in Zephyr?"
- "How do I add logging to my Zephyr application?"
- "How do I run Zephyr on my host machine for testing?"
- "How do I debug a Zephyr application?"
## Workflow
### 1. Workspace setup and first build
```bash
# Install west
pip install west
# Initialize workspace from Zephyr manifest
west init ~/zephyrproject
cd ~/zephyrproject
west update # fetches Zephyr + all modules
# Install Python dependencies
pip install -r ~/zephyrproject/zephyr/scripts/requirements.txt
# Install Zephyr SDK (toolchains for all targets)
# Download from: https://github.com/zephyrproject-rtos/sdk-ng/releases
export ZEPHYR_SDK_INSTALL_DIR=~/zephyr-sdk-0.17.0
export ZEPHYR_BASE=~/zephyrproject/zephyr
# Build hello_world for a target board
west build -b nrf52840dk/nrf52840 samples/hello_world
# Flash to hardware
west flash
# Open serial monitor
west espressif monitor # or: screen /dev/ttyACM0 115200
```
Common board targets:
| Board | Target name |
|-------|------------|
| nRF52840 DK | `nrf52840dk/nrf52840` |
| STM32 Nucleo-F446RE | `nucleo_f446re` |
| Raspberry Pi Pico | `rpi_pico/rp2040` |
| ESP32 | `esp32_devkitc_wroom/esp32/procpu` |
| QEMU Cortex-M3 | `qemu_cortex_m3` |
| Native POSIX | `native_sim` |
### 2. Application structure
```
my_app/
├── CMakeLists.txt
├── prj.conf # Kconfig fragment
├── app.overlay # devicetree overlay (optional)
└── src/
└── main.c
```
```cmake
# CMakeLists.txt
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(my_app)
target_sources(app PRIVATE src/main.c)
```
### 3. Kconfig — feature configuration
```
# prj.conf — Kconfig fragment (key=value)
CONFIG_GPIO=y
CONFIG_UART_CONSOLE=y
CONFIG_LOG=y
CONFIG_LOG_DEFAULT_LEVEL=3 # 0=off 1=err 2=warn 3=info 4=debug
CONFIG_PRINTK=y
CONFIG_HEAP_MEM_POOL_SIZE=4096
CONFIG_MAIN_STACK_SIZE=2048
```
```bash
# Interactive Kconfig menu
west build -t menuconfig
# Search for a config option
west build -t guiconfig
# Show all enabled options
west build -t config -- -n | grep "^CONFIG_"
```
### 4. Devicetree overlays
```dts
/* app.overlay — board-specific hardware additions */
/ {
leds {
compatible = "gpio-leds";
my_led: led_0 {
gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
label = "My LED";
};
};
};
/* Override a node property */
&uart0 {
current-speed = <115200>;
};
/* Disable an existing node */
&spi1 {
status = "disabled";
};
```
```c
// Access devicetree nodes in C
#include <zephyr/devicetree.h>
#include <zephyr/drivers/gpio.h>
#define LED_NODE DT_ALIAS(led0)
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED_NODE, gpios);
// Initialize and toggle
gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
gpio_pin_toggle_dt(&led);
```
### 5. Logging subsystem
```c
#include <zephyr/logging/log.h>
LOG_MODULE_REGISTER(my_module, LOG_LEVEL_DBG);
void my_function(void) {
LOG_INF("Sensor value: %d", 42);
LOG_WRN("Low battery: %d%%", battery_pct);
LOG_ERR("SPI transfer failed: %d", ret);
LOG_DBG("Debug detail: ptr=%p", ptr);
LOG_HEXDUMP_DBG(buf, len, "raw buffer");
}
```
Backend configuration in `prj.conf`:
```
CONFIG_LOG=y
CONFIG_LOG_BACKEND_UART=y # UART output
CONFIG_LOG_BACKEND_RTT=y # Segger RTT output
CONFIG_LOG_TIMESTAMP_DEFAULT=y # add timestamps
CONFIG_LOG_PROCESS_THREAD_STACK_SIZE=512
```
### 6. native_sim — host testing
```bash
# Build for host (no hardware needed)
west build -b native_sim samples/hello_world
# Run directly on host
./build/zephyr/zephyr.exe
# Run with GDB
gdb ./build/zephyr/zephyr.exe
(gdb) run
# Simulated UART appears on a PTY
./build/zephyr/zephyr.exe &
screen $(ls /tmp/zephyr-uart-*)
# native_sim extras
./build/zephyr/zephyr.exe --help
./build/zephyr/zephyr.exe --stop-at=5 # stop after 5 simulated seconds
```
`native_sim` runs Zephyr as a Linux process. Supports most Zephyr APIs, ideal for unit testing and CI.
### 7. Debugging on hardware
```bash
# West debug (launches OpenOCD + GDB automatically)
west debug
# Or manually with OpenOCD
west build -t run &
arm-zephyr-eabi-gdb build/zephyr/zephyr.elf
(gdb) target remote :3333
(gdb) monitor reset halt
(gdb) load
(gdb) continue
# Zephyr's thread-aware GDB (via OpenOCD RTOS plugin)
(gdb) info threads # lists Zephyr threads
(gdb) thread 2 # switch to thread
```
For west manifest details, see [references/west-manifest.md](references/west-manifest.md).
## Related skills
- Use `skills/embedded/openocd-jtag` for hardware debugging details
- Use `skills/embedded/freertos` for FreeRTOS as an alternative RTOS
- Use `skills/embedded/linker-scripts` for memory region configuration
- Use `skills/debuggers/gdb` for GDB session management
© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills