Esp32 Firmware Engineer
alxv2016/folloup-sticky
ESP32 firmware engineering for ESP-IDF projects. An agent skill from alxv2016/folloup-sticky.
Brings a RuView CSI sensing node online by building ESP32-S3 or ESP32-C6 firmware, flashing the board, provisioning WiFi and checking the serial output.
$ npx skills add ruvnet/RuView --skill ruview-hardware-setup -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install ruvnet/RuView ruview-hardware-setup --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/ruvnet/RuView.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/ruview/skills/ruview-hardware-setup .claude/skills/ruview-hardware-setup && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "ruview-hardware-setup" agent skill from https://github.com/ruvnet/RuView/tree/main/plugins/ruview/skills/ruview-hardware-setup into .claude/skills/ruview-hardware-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ruview-hardware-setup", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/ruvnet/RuView/tree/main/plugins/ruview/skills/ruview-hardware-setupType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add ruvnet/RuView --skill ruview-hardware-setup -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install ruvnet/RuView ruview-hardware-setup --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruvnet/RuView.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/ruview/skills/ruview-hardware-setup .agents/skills/ruview-hardware-setup && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "ruview-hardware-setup" agent skill from https://github.com/ruvnet/RuView/tree/main/plugins/ruview/skills/ruview-hardware-setup into .agents/skills/ruview-hardware-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ruview-hardware-setup", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ruvnet/RuView --skill ruview-hardware-setup -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install ruvnet/RuView ruview-hardware-setup --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruvnet/RuView.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/ruview/skills/ruview-hardware-setup .cursor/skills/ruview-hardware-setup && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "ruview-hardware-setup" agent skill from https://github.com/ruvnet/RuView/tree/main/plugins/ruview/skills/ruview-hardware-setup into .cursor/skills/ruview-hardware-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ruview-hardware-setup", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/ruvnet/RuView.git --path plugins/ruview/skills/ruview-hardware-setup--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add ruvnet/RuView --skill ruview-hardware-setup -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install ruvnet/RuView ruview-hardware-setup --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruvnet/RuView.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/ruview/skills/ruview-hardware-setup .gemini/skills/ruview-hardware-setup && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "ruview-hardware-setup" agent skill from https://github.com/ruvnet/RuView/tree/main/plugins/ruview/skills/ruview-hardware-setup into .gemini/skills/ruview-hardware-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ruview-hardware-setup", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install ruvnet/RuView ruview-hardware-setupInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add ruvnet/RuView --skill ruview-hardware-setup -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/ruvnet/RuView.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/ruview/skills/ruview-hardware-setup .github/skills/ruview-hardware-setup && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "ruview-hardware-setup" agent skill from https://github.com/ruvnet/RuView/tree/main/plugins/ruview/skills/ruview-hardware-setup into .github/skills/ruview-hardware-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ruview-hardware-setup", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add ruvnet/RuView --skill ruview-hardware-setup -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install ruvnet/RuView ruview-hardware-setup --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/ruvnet/RuView.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/ruview/skills/ruview-hardware-setup .opencode/skills/ruview-hardware-setup && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "ruview-hardware-setup" agent skill from https://github.com/ruvnet/RuView/tree/main/plugins/ruview/skills/ruview-hardware-setup into .opencode/skills/ruview-hardware-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "ruview-hardware-setup", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
ruview-hardware-setupBrings a RuView CSI sensing node online by building ESP32-S3 or ESP32-C6 firmware, flashing the board, provisioning WiFi and checking the serial output.
The skill follows four steps to get a RuView sensing node running: build the firmware, flash it, provision WiFi and confirm the CSI stream. It lists the supported boards, namely the ESP32-S3 with 8 MB of flash as the default, the 4 MB ESP32-S3 SuperMini that needs sdkconfig.defaults.4mb, and the ESP32-C6 paired with a Seeed MR60BHA2 mmWave module. The original ESP32 and the single-core ESP32-C3 are not supported.
On Windows the build runs through the Espressif Python virtual environment as a subprocess, because ESP-IDF v5.4 does not work from Git Bash or MSYS2. Flashing uses idf.py or esptool with the build outputs. The agent is told to ask about the board's form factor first and to warn owners of coin-sized clone boards that the firmware keeps the radio on and runs a full signal-processing pipeline, which has made some boards run hot.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 0ef6b96. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
BashReadWriteEditGlobGrepFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pythongitcargocmakeghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
RuView Hardware Setup loads about 1.8k tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 554 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
allowed-tools: Bash, Read, Write, Edit, Glob, GrepAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from ruvnet/RuView at commit 0ef6b96, republished under its MIT licence (© ruvnet). 554 words, ~1,782 tokens.
.claude/skills/ruview-hardware-setup/SKILL.md (or your agent's skills folder).Bring a RuView sensing node online: build firmware → flash → provision WiFi → confirm CSI stream.
| Device | Flash | Chip | Role |
|---|---|---|---|
| ESP32-S3 (8MB) | 8 MB | Xtensa dual-core | WiFi CSI sensing node (default) |
| ESP32-S3 SuperMini | 4 MB | Xtensa dual-core | Compact CSI node — use sdkconfig.defaults.4mb |
| ESP32-C6 + Seeed MR60BHA2 | — | RISC-V + 60 GHz FMCW | mmWave HR/BR/presence |
Not supported: original ESP32, ESP32-C3 (single-core).
⚠️ Ask about board form factor before flashing. If the user's board is a coin-sized clone (ESP32-S3-Zero, SuperMini, or similar — not a full DevKitC/XIAO-style board with a real USB connector and visible regulator), warn them before they walk away from it: this firmware runs the WiFi radio continuously (WIFI_PS_NONE) plus a full DSP pipeline (edge_tier=2), which is sustained high current draw that full-size dev boards handle fine but tiny clones with minimal copper/budget regulators may not. At least one field report: boards ran hot during a normal session and failed to power on again afterward (regulator damage suspected). Tell them to give the board airflow (don't stack/enclose it) and check it by touch during the first several minutes of any new deployment.
ESP-IDF v5.4 does not support MSYS2/Git Bash. Use the Espressif Python venv as a subprocess with MSYSTEM* env vars stripped. The proven command lives in CLAUDE.local.md — reproduce it:
/c/Espressif/tools/python/v5.4/venv/Scripts/python.exe -c "
import subprocess, os
env = os.environ.copy()
for k in ['MSYSTEM','MSYSTEM_CHOST','MSYSTEM_PREFIX','MINGW_PREFIX','CHERE_INVOKING']:
env.pop(k, None)
env['IDF_PATH'] = r'C:\Users\ruv\esp\v5.4\esp-idf'
env['IDF_PYTHON_ENV_PATH'] = r'C:\Espressif\tools\python\v5.4\venv'
env['IDF_TOOLS_PATH'] = r'C:\Espressif'
env['PATH'] = (
r'C:\Espressif\tools\xtensa-esp-elf\esp-14.2.0_20241119\xtensa-esp-elf\bin;'
r'C:\Espressif\tools\cmake\3.30.2\cmake-3.30.2-windows-x86_64\bin;'
r'C:\Espressif\tools\ninja\1.12.1;'
r'C:\Espressif\tools\idf-exe\1.0.3;'
r'C:\Espressif\tools\ccache\4.10.2\ccache-4.10.2-windows-x86_64;'
r'C:\Espressif\tools\python\v5.4\venv\Scripts;'
+ env['PATH']
)
python = r'C:\Espressif\tools\python\v5.4\venv\Scripts\python.exe'
idf_py = os.path.join(env['IDF_PATH'], 'tools', 'idf.py')
r = subprocess.run([python, idf_py, 'build'], # flash: [python, idf_py, '-p', 'COM8', 'flash']
cwd=r'C:\Users\ruv\Projects\wifi-densepose\firmware\esp32-csi-node',
env=env, capture_output=True, text=True, timeout=300)
print(r.stdout[-3000:]); print(r.stderr[-2000:]); print('RC:', r.returncode)
"sdkconfig.defaults.template (no mock — real WiFi CSI).cp firmware/esp32-csi-node/sdkconfig.defaults.4mb firmware/esp32-csi-node/sdkconfig.defaults first, then build.firmware/esp32-csi-node/build/{bootloader/bootloader.bin, partition_table/partition-table.bin, esp32-csi-node.bin, ota_data_initial.bin}.Same subprocess pattern, swap [python, idf_py, 'build'] → [python, idf_py, '-p', 'COM8', 'flash']. Or with esptool directly:
python -m esptool --chip esp32s3 --port COM8 --baud 460800 \
write_flash 0x0 firmware/esp32-csi-node/build/bootloader/bootloader.bin \
0x8000 firmware/esp32-csi-node/build/partition_table/partition-table.bin \
0xf000 firmware/esp32-csi-node/build/ota_data_initial.bin \
0x20000 firmware/esp32-csi-node/build/esp32-csi-node.bin(The default device port in this workspace is COM8. Some docs reference COM9 — confirm with the user.)
Runs directly — no ESP-IDF env needed:
python firmware/esp32-csi-node/provision.py --port COM8 \
--ssid "YourWiFi" --password "secret" --target-ip 192.168.1.20 --target-port 5005 --node-id 1
# Optional ADR-060 overrides:
python firmware/esp32-csi-node/provision.py --port COM8 --channel 6 --filter-mac AA:BB:CC:DD:EE:FF--help lists the full flag set (TDM mesh slotting, edge tier, detection thresholds, vitals window, hop channels, Cognitum Seed, swarm intervals) — see the ruview-configure skill for the table. Gotcha (issue #391): flashing replaces the entire csi_cfg NVS namespace — any key not on the CLI is erased; pass the full set you want. On Windows, provision.py --help needs PYTHONUTF8=1 to print (non-ASCII in the help text).
# Serial monitor (use pyserial — idf.py monitor hangs in a subprocess)
/c/Espressif/tools/python/v5.4/venv/Scripts/python.exe -c "
import serial, time
ser = serial.Serial('COM8', 115200, timeout=1); start = time.time()
while time.time() - start < 15:
line = ser.readline()
if line: print(line.decode('utf-8', errors='replace').strip())
ser.close()
"Then start the sink and watch frames arrive:
cd v2 && cargo run -p wifi-densepose-sensing-server # listens for ESP32 UDP CSI| Symptom | Cause | Fix |
|---|---|---|
MSys/Mingw is no longer supported | ESP-IDF detected Git Bash | Use the Python-subprocess command above with MSYSTEM* stripped |
cmd.exe /C hangs | Interactive prompt from Git Bash | Don't use cmd.exe /C — use the Python subprocess |
cmake not found | Wrong path | It's cmake\3.30.2\cmake-3.30.2-windows-x86_64\bin, not cmake\3.30.2\bin |
python_env not found | Missing env var | Set IDF_PYTHON_ENV_PATH=C:\Espressif\tools\python\v5.4\venv |
| No CSI frames at the sink | WiFi not provisioned, wrong channel, or MAC filter too tight | Re-run provision.py; try --channel matching your AP; drop --filter-mac |
| False fall alerts | Old fall_thresh default | Issue #263 raised it to 15.0 rad/s² + debounce — reflash latest firmware |
sdkconfig.defaults.template (no mock)sdkconfig.defaults.4mb (no mock)esp32-csi-node.bin, bootloader.bin, partition-table.bin, ota_data_initial.bin, esp32-csi-node-4mb.bin, partition-table-4mb.bingit tag v0.X.Y-esp32 && git push origin v0.X.Y-esp32gh release create v0.X.Y-esp32 <binaries> --title "..." --notes-file ...CLAUDE.local.md — exact ESP-IDF build env, paths, QEMU CI notesfirmware/esp32-csi-node/ — C firmware (channel hopping, NVS config, TDM protocol)docs/adr/ADR-028-esp32-capability-audit.md, docs/build-guide.md, docs/TROUBLESHOOTING.md© ruvnet, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in plugins/ruview/skills/ruview-hardware-setup of ruvnet/RuView.
Open the folder on GitHubat commit 0ef6b96
RuView Hardware Setup next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| RuView Hardware Setup this skillruvnet/RuView | 97k | — | ~1.8k | Automated safety check: Notes | MIT | |
| Esp32 Firmware Engineeralxv2016/folloup-sticky | 115 | 1 repos | ~3.8k | Automated safety check: Pass | GPL-3.0 | |
| Embedded DebugFastLED/FastLED | 7.5k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Openscad MechanicalBlueAndi/Pixelix | 443 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Auto EmbeddedDunCanYounG-1/MICU-auto-embedded | 253 | — | ~1.6k | Automated safety check: Pass | CC-BY-NC-4.0 | |
| Esp32 Log TriageFastLED/FastLED | 7.5k | — | ~1.9k | Automated safety check: Pass | MIT |
alxv2016/folloup-sticky
ESP32 firmware engineering for ESP-IDF projects. An agent skill from alxv2016/folloup-sticky.
FastLED/FastLED
Firmware crash analysis, stack trace decoder, and register dump interpreter for ESP32/ARM/AVR platforms.
BlueAndi/Pixelix
Create and edit OpenSCAD (.scad) files for 3D-printable mechanical parts and housings.
DunCanYounG-1/MICU-auto-embedded
全平台嵌入式 AI 开发框架(对标 Trellis):把 RIPER-5 五阶段协议 + 四文件记忆 + 分层架构门禁 + Scout/Builder/Verifier 多 Agent + 24 个工具调用技能(build/flash/debug/serial/can/modbus/visa/static/memory/rtos/scons),做成『装进工程、项目级 hook…
FastLED/FastLED
Parse and classify ESP32 serial log output to identify FastLED-related errors, RMT/I2S/SPI driver faults, timing violations, RTOS issues, and crash signatures.
RomanLut/hx_espnow_rc
Build, flash, recover, and verify the ESP32-S3 Super Mini MAVLink/ESP-NOW USB receiver in examples/rxesp32s3mavlinkrcusb.
ruvnet/RuView
Reference for RuView's research-grade WiFi sensing features: multistatic fusion, cross-viewpoint geometry, persistent field models, RF tomography, intention signals and mesh security.
ruvnet/RuView
Runs RuView's WiFi sensing applications: presence, vital signs, activity and fall detection, pose estimation, sleep monitoring and environment mapping.
ruvnet/RuView
Covers the RuView `wifi-densepose` command line binary, its Axum REST API and the WebAssembly builds for browsers and ESP32, for embedding or scripting RuView.
ruvnet/RuView
Tunes a deployed RuView WiFi-sensing system without changing code: firmware sdkconfig variants, NVS provisioning over serial, channel and MAC filtering, edge processing tiers and mesh slotting.
ruvnet/RuView
Drives a web browser through the agent-browser CLI, using compact accessibility snapshots with element refs in place of the full DOM to keep context small.
ruvnet/RuView
Sets up and runs 60 GHz and 24 GHz mmWave radar sensing on ESP32 boards in RuView, alone or fused with WiFi CSI.
Works with
Categories
Brings a RuView CSI sensing node online by building ESP32-S3 or ESP32-C6 firmware, flashing the board, provisioning WiFi and checking the serial output. The skill follows four steps to get a RuView sensing node running: build the firmware, flash it, provision WiFi and confirm the CSI stream.4mb, and the ESP32-C6 paired with a Seeed MR60BHA2 mmWave module.
RuView Hardware Setup fits situations like: flashing firmware onto a new ESP32-S3 sensing node; reflashing a node after a firmware change; debugging a device that is not streaming CSI data; setting WiFi credentials on a node.
Run `npx skills add ruvnet/RuView --skill ruview-hardware-setup -a claude-code`. Or copy the skill folder (plugins/ruview/skills/ruview-hardware-setup in ruvnet/RuView) into .claude/skills/ruview-hardware-setup in your project. Claude Code loads it when a task matches its description.
Run `npx skills add ruvnet/RuView --skill ruview-hardware-setup -a codex`. Or copy the skill folder (plugins/ruview/skills/ruview-hardware-setup in ruvnet/RuView) into .agents/skills/ruview-hardware-setup in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ruvnet/RuView --skill ruview-hardware-setup -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ruview-hardware-setup, .gemini/skills/ruview-hardware-setup, .github/skills/ruview-hardware-setup and .opencode/skills/ruview-hardware-setup in your project.
Going by SKILL.md and its folder, RuView Hardware Setup needs the command-line tools its instructions call (python, git, cargo, cmake and gh). Our summary lists: ESP-IDF v5.4 toolchain; An ESP32-S3 or ESP32-C6 board connected over a serial port; Python with esptool. Its frontmatter pre-approves these tools: Bash, Read, Write, Edit, Glob, Grep.
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
RuView Hardware Setup is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with RuView Hardware Setup: Esp32 Firmware Engineer (alxv2016/folloup-sticky, 115 stars), Embedded Debug (FastLED/FastLED, 7.5k stars), Openscad Mechanical (BlueAndi/Pixelix, 443 stars) and Auto Embedded (DunCanYounG-1/MICU-auto-embedded, 253 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
ruvnet (a GitHub user) maintains it in ruvnet/RuView, which has 96,741 GitHub stars. The repository holds 24 skills in this directory. The repository was last updated on October 7, 2026.
Source: ruvnet/RuView on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.