/zephyr
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,
$ npx -y skills add mohitmishra786/low-level-dev-skills --skill zephyr --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/zephyr
Context preview
The summary Claude sees to decide when to auto-load this skill.
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,
SKILL.md
zephyr.SKILL.mdname: 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
# 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# 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
# 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
/* 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";
};// 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
#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
# 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
# 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
Read more
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
# 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# 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
# 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
/* 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";
};// 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
#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
# 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
# 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
A curated suite of AI agent skills for systems and low-level programming — C/C++, Rust, Zig, GPU, bare-metal firmware, Linux kernel/driver development, computer architecture, compiler internals, HPC, and more.
Repo: mohitmishra786/low-level-dev-skills
Other skills on low-level-dev-skills.
- /custom-allocators
Custom allocator skill for memory allocation strategies. Use when implementing pool/slab/arena allocators, tuning jemalloc/mimalloc, writing Rust GlobalAlloc, or benchmarking allocator performance. Activates on queries about jemalloc, mimalloc, tcmalloc, arena allocator,
Open skill - /numa-programming
NUMA programming skill for multi-socket memory locality. Use when detecting NUMA topology, binding processes with numactl, using libnuma API, building NUMA-aware data structures, or measuring remote access penalties. Activates on queries about numactl, libnuma, NUMA topology,
Open skill - /af-xdp
AF_XDP skill for high-performance XDP sockets. Use when creating AF_XDP sockets, configuring UMEM and XSK rings, XDP_REDIRECT programs, copy vs zero-copy mode, or comparing with DPDK. Activates on queries about AF_XDP, xsk_umem, XDP_REDIRECT, libbpf xsk, or zero-copy XDP.
Open skill - /dpdk
DPDK skill for userspace packet I/O. Use when initializing EAL, configuring PMD drivers, using mbuf pools and rte_ring, setting up huge pages, RSS, or testpmd validation. Activates on queries about DPDK, EAL, rte_eth_rx_burst, hugepages, PMD, or testpmd.
Open skill - /io-uring
io_uring skill for Linux async I/O. Use when building high-performance servers with liburing, multi-shot operations, provided buffers, fixed files, zero-copy send, or tokio-uring. Activates on queries about io_uring, SQE/CQE, liburing, IORING_OP_PROVIDE_BUFFERS, or io_uring vs
Open skill - /adc-dac-baremetal
Bare-metal ADC and DAC skill. Use when configuring analog sampling, DMA-driven ADC, calibration, or DAC output on MCUs. Activates on queries about ADC bare-metal, sampling time, DMA ADC, or DAC channel setup.
Open skill

