brainstorming
Structured design dialogue that validates ideas before implementation begins.
harness-runner
Run WaveCap-SDR test harness with automated parameter sweeps and validation. Use when regression testing, validating audio quality across configurations, testing SDR hardware, or benchmarking demodulation performance.
Full skill instructions
This skill helps run the WaveCap-SDR test harness with automated parameter sweeps, result collection, and regression testing.
Use this skill when:
The WaveCap-SDR harness (backend/wavecapsdr/harness.py) is a production-ready test tool that:
This skill wraps the harness for automated testing scenarios.
Test with Fake Driver (Offline Testing):
cd backend
PYTHONPATH=. .venv/bin/python -m wavecapsdr.harness \
--start-server \
--driver fake \
--preset kexp \
--duration 3
Test with Real SDR (RTL-SDR):
cd backend
PYTHONPATH=. .venv/bin/python -m wavecapsdr.harness \
--start-server \
--driver soapy \
--device-args "driver=rtlsdr" \
--preset kexp \
--duration 5 \
--out harness_out
Test with SDRplay:
cd backend
PYTHONPATH=. .venv/bin/python -m wavecapsdr.harness \
--start-server \
--driver soapy \
--device-args "driver=sdrplay,serial=240309F070" \
--preset marine \
--duration 5
Use the included script to run parameter sweeps:
PYTHONPATH=backend backend/.venv/bin/python .claude/skills/harness-runner/run_harness.py \
--preset kexp \
--duration 3 \
--driver fake \
--sweep gain --gain-values 10 20 30 40
Parameters:
--preset: Preset name (kexp, marine, aviation, tone, etc.)--duration: Seconds to capture per test (default: 3)--driver: Driver to use (fake, soapy, rtl)--device-args: Device selector string--output-dir: Directory for results (default: harness_results)--sweep: Parameter to sweep (gain, bandwidth, frequency)--gain-values: List of gain values to test (for gain sweep)--bandwidth-values: List of bandwidth values (for bandwidth sweep)--frequency-offsets: List of frequency offsets (for frequency sweep)--parallel: Run tests in parallel (default: sequential)--report: Generate HTML/JSON report1. Regression Testing After Code Changes:
# Run quick smoke test with fake driver
PYTHONPATH=backend backend/.venv/bin/python .claude/skills/harness-runner/run_harness.py \
--preset kexp \
--duration 2 \
--driver fake \
--output-dir regression_test_$(date +%Y%m%d_%H%M%S) \
--report
Expected: All channels should have audio RMS > -40 dB (validates demodulation works)
2. Find Optimal Gain for SDR Device:
# Sweep gain from 0 to 50 dB in 10 dB steps
PYTHONPATH=backend backend/.venv/bin/python .claude/skills/harness-runner/run_harness.py \
--preset kexp \
--duration 5 \
--driver soapy \
--device-args "driver=rtlsdr" \
--sweep gain \
--gain-values 0 10 20 30 40 50 \
--output-dir gain_sweep_kexp \
--report
Review report to find gain with best audio level (typically -20 to -10 dB RMS)
3. Test All Presets with Fake Driver:
# Test each preset to ensure they work
for preset in kexp marine aviation noaa tone; do
echo "Testing preset: $preset"
PYTHONPATH=backend backend/.venv/bin/python -m wavecapsdr.harness \
--start-server \
--driver fake \
--preset $preset \
--duration 3 \
--out harness_out_$preset
done
4. Compare FM Demodulation Quality:
# Test FM demodulation with different configurations
# (Requires modifying harness to support demod parameter sweep)
PYTHONPATH=backend backend/.venv/bin/python .claude/skills/harness-runner/run_harness.py \
--preset kexp \
--driver fake \
--duration 5 \
--output-dir fm_demod_test \
--report
5. Hardware Stress Test:
# Long-duration test to check for memory leaks or crashes
PYTHONPATH=backend backend/.venv/bin/python -m wavecapsdr.harness \
--start-server \
--driver soapy \
--device-args "driver=rtlsdr" \
--preset kexp \
--duration 300 \
--out stress_test
Monitor server logs and system resources during test.
The harness outputs JSON reports with channel statistics:
{
"captureId": "cap_abc123",
"channels": [
{
"channelId": "ch1",
"label": "KEXP 90.3 FM",
"offsetHz": -600000,
"rmsDb": -18.5,
"peakDb": -6.2,
"status": "PASS"
},
{
"channelId": "ch2",
"label": "KNHC 89.5 FM",
"offsetHz": 800000,
"rmsDb": -65.2,
"peakDb": -58.1,
"status": "FAIL"
}
]
}
Pass/Fail Criteria:
Typical Good Audio Levels:
KEXP (FM Broadcast):
Marine VHF:
Aviation:
NOAA Weather:
Tone (Test Signal):
--start-server Start embedded server (required for offline testing)
--driver Driver: fake, soapy, rtl (default: soapy)
--device-args Device selector (e.g., "driver=rtlsdr")
--preset Preset name (kexp, marine, aviation, etc.)
--center-hz Override center frequency
--sample-rate Override sample rate
--offset Channel offset Hz (repeatable)
--duration Seconds to capture (default: 10)
--gain RF gain in dB
--bandwidth RF bandwidth in Hz
--out Output directory for WAV files
--auto-gain Auto-select optimal gain
--probe-seconds Seconds for auto-gain probing (default: 2)
GitHub Actions Example:
name: Test Harness
on: [push, pull_request]
jobs:
harness:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.11'
- name: Install dependencies
run: |
cd backend
python -m venv .venv
.venv/bin/pip install -e .
- name: Run harness tests
run: |
cd backend
PYTHONPATH=. .venv/bin/python -m wavecapsdr.harness \
--start-server \
--driver fake \
--preset kexp \
--duration 3
- name: Check exit code
run: |
if [ $? -eq 0 ]; then
echo "Harness tests PASSED"
else
echo "Harness tests FAILED"
exit 1
fi
Issue: Harness fails with "No audio detected"
cat backend/config/wavecapsdr.yaml | grep -A 10 "preset-name"SoapySDRUtil --find--driver fakeIssue: RMS levels very low (< -60 dB)
--gain 30--auto-gainIssue: Clipping (peak > -0.5 dB)
--gain 10Issue: Server port already in use
--port 8088pkill -f wavecapsdrSKILL.md: This file - instructions for using the skillrun_harness.py: Parameter sweep automation script--duration 3 for quick tests, --duration 10+ for reliable results--out for manual inspectionStructured design dialogue that validates ideas before implementation begins.
Comprehensive design intelligence for web and mobile UI/UX across 10 technology stacks.
Comprehensive implementation plans for multi-step tasks, breaking down specs into bite-sized, testable steps.
Introduction to the obra skills system with mandatory skill invocation rules and best practices.
Execute a written implementation plan with critical review and task checkpoints.
Delegate independent tasks to specialized agents working concurrently with isolated context.
Isolated git worktrees with smart directory selection and safety verification.
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
Plan searchable and shareable content that drives traffic, builds authority, and generates leads.
README-first repository scanner that extracts commands and classifies reproduction candidates without executing them.
Brainstorm and prioritize marketing strategies tailored to your SaaS stage, budget, and goals.
Plan and optimize your website's page hierarchy, navigation, URL structure, and internal linking.
The world's fastest calendar for remote work
Capture, organize, and utilize your knowledge effortlessly.
Instant Summaries of Audio & Video Interviews with AnySummary
Transform PDFs into engaging mind maps.
Chat with any PDF instantly
Create an optimal daily plan using your voice
A productivity platform to centralize organizational knowledge and workflows with contextual AI assistance.
AskYourPDF Pricing Plans: Tailored to Your Needs