Agent skill

RuView Hardware Setup

by ruvnet in ruvnet/RuView

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.

MITAuto-check: notesDevelopment

Install RuView Hardware Setup

skills CLI
$ npx skills add ruvnet/RuView --skill ruview-hardware-setup -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ruvnet/RuView ruview-hardware-setup --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
ruview-hardware-setup
GitHub stars
97k
Token cost
~1.8k tokens
SKILL.md length
554 words
Files
1
Skills in repo
24
Repo updated
First seen
Licence
MIT

At a glance

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.

  • Works in 4 steps: Build firmware (Windows — Python… → Flash to the device → Provision WiFi + sink address → …
  • Flashing firmware onto a new ESP32-S3 sensing node
  • SKILL.md covers Supported devices, 1. Build firmware (Windows —…, 2. Flash to the device and 3. Provision WiFi + sink address, plus 4 more sections
  • Calls python, git and cargo

What it does

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.

When your agent uses it

  • 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

Example prompts

  • “Build the CSI node firmware for my ESP32-S3 SuperMini and flash it on COM8.”
  • “My RuView node is not sending CSI. Check the serial monitor and tell me why.”
  • “Provision WiFi on the node I just flashed.”

Requirements

  • ESP-IDF v5.4 toolchain
  • An ESP32-S3 or ESP32-C6 board connected over a serial port
  • Python with esptool
  • Pre-approved tools (allowed-tools): Bash, Read, Write, Edit, Glob, Grep

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Build firmware (Windows — Python subprocess, NOT bash directly)
  2. Flash to the device
  3. Provision WiFi + sink address
  4. Confirm CSI stream

What it can do on your machine

Read from SKILL.md and the folder at commit 0ef6b96. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Bash
    • Read
    • Write
    • Edit
    • Glob
    • Grep

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • python
    • git
    • cargo
    • cmake
    • gh

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    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.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~60
When it runs · the whole SKILL.md, loaded when a task matches
~1.8k

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.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Bash, Read, Write, Edit, Glob, Grep

Automated 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.

SKILL.md

The full file from ruvnet/RuView at commit 0ef6b96, republished under its MIT licence (© ruvnet). 554 words, ~1,782 tokens.

Download SKILL.mdSave it as .claude/skills/ruview-hardware-setup/SKILL.md (or your agent's skills folder).
name
ruview-hardware-setup
description
ESP32-S3 / ESP32-C6 firmware build, flash, WiFi provisioning, and serial monitoring for RuView CSI sensing nodes. Use when setting up physical hardware, reflashing a node, or debugging a device that isn't streaming CSI.
allowed-tools
Bash, Read, Write, Edit, Glob, Grep

RuView Hardware Setup

Bring a RuView sensing node online: build firmware → flash → provision WiFi → confirm CSI stream.

Supported devices

DeviceFlashChipRole
ESP32-S3 (8MB)8 MBXtensa dual-coreWiFi CSI sensing node (default)
ESP32-S3 SuperMini4 MBXtensa dual-coreCompact CSI node — use sdkconfig.defaults.4mb
ESP32-C6 + Seeed MR60BHA2—RISC-V + 60 GHz FMCWmmWave 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.

1. Build firmware (Windows — Python subprocess, NOT bash directly)

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:

bash
/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)
"
  • 8MB build: uses sdkconfig.defaults.template (no mock — real WiFi CSI).
  • 4MB build: cp firmware/esp32-csi-node/sdkconfig.defaults.4mb firmware/esp32-csi-node/sdkconfig.defaults first, then build.
  • Build outputs: firmware/esp32-csi-node/build/{bootloader/bootloader.bin, partition_table/partition-table.bin, esp32-csi-node.bin, ota_data_initial.bin}.

2. Flash to the device

Same subprocess pattern, swap [python, idf_py, 'build'] → [python, idf_py, '-p', 'COM8', 'flash']. Or with esptool directly:

bash
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.)

3. Provision WiFi + sink address

Runs directly — no ESP-IDF env needed:

bash
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).

Show full SKILL.md (199 more words)Show less

4. Confirm CSI stream

bash
# 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:

bash
cd v2 && cargo run -p wifi-densepose-sensing-server   # listens for ESP32 UDP CSI

Common issues

SymptomCauseFix
MSys/Mingw is no longer supportedESP-IDF detected Git BashUse the Python-subprocess command above with MSYSTEM* stripped
cmd.exe /C hangsInteractive prompt from Git BashDon't use cmd.exe /C — use the Python subprocess
cmake not foundWrong pathIt's cmake\3.30.2\cmake-3.30.2-windows-x86_64\bin, not cmake\3.30.2\bin
python_env not foundMissing env varSet IDF_PYTHON_ENV_PATH=C:\Espressif\tools\python\v5.4\venv
No CSI frames at the sinkWiFi not provisioned, wrong channel, or MAC filter too tightRe-run provision.py; try --channel matching your AP; drop --filter-mac
False fall alertsOld fall_thresh defaultIssue #263 raised it to 15.0 rad/s² + debounce — reflash latest firmware

Firmware release process (for maintainers)

  1. Build 8MB from sdkconfig.defaults.template (no mock)
  2. Build 4MB from sdkconfig.defaults.4mb (no mock)
  3. Save 6 binaries: esp32-csi-node.bin, bootloader.bin, partition-table.bin, ota_data_initial.bin, esp32-csi-node-4mb.bin, partition-table-4mb.bin
  4. git tag v0.X.Y-esp32 && git push origin v0.X.Y-esp32
  5. gh release create v0.X.Y-esp32 <binaries> --title "..." --notes-file ...
  6. Verify on real hardware (COM8) before publishing — always test with real WiFi CSI, not mock mode (mock missed the Kconfig threshold bug)

Reference

  • CLAUDE.local.md — exact ESP-IDF build env, paths, QEMU CI notes
  • firmware/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

Files

Just SKILL.md in plugins/ruview/skills/ruview-hardware-setup of ruvnet/RuView.

Open the folder on GitHubat commit 0ef6b96

Compare with similar skills

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.

RuView Hardware Setup compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
RuView Hardware Setup this skillruvnet/RuView97k—~1.8kAutomated safety check: NotesMIT
Esp32 Firmware Engineeralxv2016/folloup-sticky1151 repos~3.8kAutomated safety check: PassGPL-3.0
Embedded DebugFastLED/FastLED7.5k—~1.4kAutomated safety check: PassMIT
Openscad MechanicalBlueAndi/Pixelix443—~1.8kAutomated safety check: PassMIT
Auto EmbeddedDunCanYounG-1/MICU-auto-embedded253—~1.6kAutomated safety check: PassCC-BY-NC-4.0
Esp32 Log TriageFastLED/FastLED7.5k—~1.9kAutomated safety check: PassMIT

Similar skills

  • Esp32 Firmware Engineer

    alxv2016/folloup-sticky

    ESP32 firmware engineering for ESP-IDF projects. An agent skill from alxv2016/folloup-sticky.

    115 GitHub starsUsed in 1 repo~3.8k tokens
    DevelopmentAuto-check passed
  • Embedded Debug

    FastLED/FastLED

    Firmware crash analysis, stack trace decoder, and register dump interpreter for ESP32/ARM/AVR platforms.

    7.5k GitHub stars~1.4k tokensUpdated today
    DevelopmentAuto-check passed
  • Openscad Mechanical

    BlueAndi/Pixelix

    Create and edit OpenSCAD (.scad) files for 3D-printable mechanical parts and housings.

    443 GitHub stars~1.8k tokensUpdated today
    DevelopmentAuto-check passed
  • Auto Embedded

    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…

    253 GitHub stars~1.6k tokensUpdated today
    DevelopmentAuto-check passed
  • Esp32 Log Triage

    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.

    7.5k GitHub stars~1.9k tokensUpdated today
    DevelopmentAuto-check passed
  • Flash Esp32s3

    RomanLut/hx_espnow_rc

    Build, flash, recover, and verify the ESP32-S3 Super Mini MAVLink/ESP-NOW USB receiver in examples/rxesp32s3mavlinkrcusb.

    129 GitHub stars~794 tokensUpdated 1 mo ago
    DevelopmentAuto-check passed

More from ruvnet/RuView

All 24 skills in this repo
  • Reference for RuView's research-grade WiFi sensing features: multistatic fusion, cross-viewpoint geometry, persistent field models, RF tomography, intention signals and mesh security.

    97k GitHub stars~1.2k tokensUpdated today
    Auto-check: notes
  • Runs RuView's WiFi sensing applications: presence, vital signs, activity and fall detection, pose estimation, sleep monitoring and environment mapping.

    97k GitHub stars~1.1k tokensUpdated today
    Auto-check: notes
  • 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.

    97k GitHub stars~1.2k tokensUpdated today
    Auto-check: notes
  • 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.

    97k GitHub stars~1.7k tokensUpdated today
    Auto-check: notes
  • 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.

    97k GitHub starsUsed in 4 repos~1.3k tokens
    Auto-check passed
  • Sets up and runs 60 GHz and 24 GHz mmWave radar sensing on ESP32 boards in RuView, alone or fused with WiFi CSI.

    97k GitHub stars~907 tokensUpdated today
    Auto-check: notes

Works with

Categories

Questions about RuView Hardware Setup

What does RuView Hardware Setup do?

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.

When should I use RuView Hardware Setup?

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.

How do I install RuView Hardware Setup in Claude Code?

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.

How do I install RuView Hardware Setup in Codex?

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.

Can I use RuView Hardware Setup in Cursor, Gemini CLI or GitHub Copilot?

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.

What does RuView Hardware Setup need to run?

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.

Does RuView Hardware Setup access the network?

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.

Is RuView Hardware Setup safe to install?

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.

What licence does RuView Hardware Setup use?

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.

How many tokens does RuView Hardware Setup use?

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.

What are the alternatives to RuView Hardware Setup?

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.

Who maintains RuView Hardware Setup?

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.