Name the ETM build and the HIL contract for the hw-debug skills (#3932)
diff --git a/.claude/skills/build/SKILL.md b/.claude/skills/build/SKILL.md
index fb16dff..b62601d 100644
--- a/.claude/skills/build/SKILL.md
+++ b/.claude/skills/build/SKILL.md
@@ -31,5 +31,5 @@
 - **Dependencies.** The family's entries in `tools/get_deps.py` must exist. In a worktree, symlink them from the primary checkout (`CLAUDE.md`, Working Rules); `--fetch-deps` is for a fresh clone. The script never fetches on its own.
 - **Code no example enables.** A branch behind a `CFG_*` option no board sets is not compiled by any sweep, so a change there is unverified until you build it with the option on: `--cflag=-D<OPTION>=<value>` (repeatable), narrowed with `-e` to one example that reaches the code. `-D` passes a build-system define (`LOG=2`) the same way, except on Espressif boards, where `tools/build.py` hands defines to cmake only, so the run is refused rather than built without them. Never hand-roll a cmake line for this.
 - **Espressif** boards go through `tools/build.py`'s ESP-IDF path; `. "$IDF_PATH/export.sh"` must be in the environment first, and only ESP-IDF examples build for them.
-- **Debug builds**: `-DCMAKE_BUILD_TYPE=Debug -DLOG=2 -DLOGGER=rtt` via `tools/build.py -D` directly; this script builds MinSizeRel.
+- **Debug builds**: `-DCMAKE_BUILD_TYPE=Debug -DLOG=2 -DLOGGER=rtt` via `tools/build.py -D` directly; this script builds MinSizeRel. ETM trace builds add `-DTRACE_ETM=1` the same way. `python3 tools/build_utils.py board-info <board>` prints the board's J-Link device name and its reference Ozone project. With several J-Links attached, `-DJLINK_OPTION="-USB <serial>"` pins the `<example>-jlink` flash target. rp2350 at a non-default core clock: pass `SYS_CLK_KHZ` together with `PLL_SYS_VCO_FREQ_HZ`/`PLL_SYS_POSTDIV1`/`PLL_SYS_POSTDIV2` from the SDK's `scripts/vcocalc.py` as compile definitions; 240 MHz also needs `SYS_CLK_VREG_VOLTAGE_AUTO_ADJUST=1` and `SYS_CLK_VREG_VOLTAGE_MIN=VREG_VOLTAGE_1_15`.
 - **Printing a command is not verification.** A verdict is the JSON of a run that happened; an agent that cannot run the script reports the build as not run.
diff --git a/CLAUDE.md b/CLAUDE.md
index 92a0c92..4969be8 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -25,6 +25,7 @@
 ## Build and Validate
 
 - Build contract: `.claude/skills/build/SKILL.md`. Its script resolves a change to boards and builds them; `--shared` writes `cmake-build/cmake-build-<board>`, the dir HIL flashes from, so preserve it. Flash with `ninja -C cmake-build/cmake-build-<board> <example>-jlink` or `-openocd`.
+- HIL contract: `.claude/skills/hil/SKILL.md`. It owns taking and releasing a rig board and names the HIL config json for the host you are on.
 - ESP-IDF: `. "$IDF_PATH/export.sh"` before anything Espressif; verification still goes through the build contract, with `idf.py -DBOARD=<board> flash monitor` in the example reserved for interactive flash and monitor.
 - Before submitting: `pre-commit run --all-files` (includes unit tests).
 - For code changes: build the full example set for boards that exercise the changed modules. Add fuzz/HIL coverage for parsers or protocol state machines.