SDR Project Design
Use this skill when the user wants to get an SDR project built in OpenClaw.
Treat this as an OpenClaw builder skill first and an SDR comparison skill second.
That means your job is not only to know the SDR ecosystem, but to turn that ecosystem into an OpenClaw-friendly plan:
- - what upstream project(s) to borrow from
- what should run as mode-specific services
- what should live in a dashboard or web UI
- what should store files/events/metrics
- what to build first so the user gets working value quickly
What this skill is for
This skill helps with:
- - comparing SDR projects and picking the right stack
- designing end-to-end SDR architectures
- deciding between desktop, headless, web, and ingest-first designs
- choosing where decoding should happen
- structuring storage, APIs, event streams, maps, dashboards, and playback
- avoiding common SDR project mistakes like coupling hardware, DSP, and UI too tightly
Workflow
- 1. Run intake quickly
If the user’s requirements are fuzzy, read
references/project-intake.md and fill in the missing shape of the project.
- 2. Classify the project
Put the request into one or more buckets:
-
scanner / dispatch / public safety
-
web receiver / remote tuning
-
satellite / weather / pass-based capture
-
unknown signal / reverse engineering
-
general desktop receiver / live exploration
-
data collection / observability / RF lakehouse
- 3. Pick the dominant upstream inspiration
Use the matching family reference first, not the whole landscape blob.
- 4. Translate it into OpenClaw shape
Default to these OpenClaw-native layers:
- SDR-attached host or node that owns hardware
- mode-specific ingest/decoder services
- shared files/events/status outputs
- dashboard / browser UI / automations above that
Do not assume Docker, Unraid, or Linux unless the user does. If platform/runtime choice matters, read references/platform-deployment.md.
- 5. Separate the stack into layers
Always reason in layers:
- hardware + driver layer
- source / ingest layer
- decoder / classifier layer
- event / storage layer
- API / stream layer
- UI / workflow layer
- 6. Prefer loose coupling
Recommend architectures where the SDR hardware can be swapped, the decoder can be changed, and the UI can keep working.
Favor:
- SoapySDR or clean source abstraction
- filesystem or queue-based handoff where practical
- simple HTTP/JSON APIs for dashboards
- containers for services, native install only where hardware bindings are fragile
- 7. Check failure modes before sounding confident
If the plan touches vendor drivers, SoapySDR, USB passthrough, or hardware sharing, read
references/common-failure-modes.md.
- 8. Recommend one build path, not ten
Give one primary OpenClaw build path, then brief alternates only if they materially matter.
- 9. Use an example build when it helps
If the request matches a common shape, read
references/example-builds.md and borrow the closest pattern.
What to read
Read only the most relevant reference(s):
- - broad SDR research, beginner orientation, or "help me understand the SDR landscape" → INLINECODE4
- project still fuzzy / missing requirements → INLINECODE5
- scanner / dispatch / public safety → INLINECODE6
- browser receiver / remote tuning → INLINECODE7
- satellite / weather / pass-based capture → INLINECODE8
- unknown signal / reverse engineering → INLINECODE9
- desktop live exploration, ADS-B, APRS, packet, or utility modes → INLINECODE10
- architecture, system decomposition, and implementation planning → INLINECODE11
- how to actually assemble the stack → INLINECODE12
- how SDR ideas map onto OpenClaw host/node/service/dashboard structure → INLINECODE13
- cross-platform deployment choices (Linux/Windows/macOS/Pi/native vs container) → INLINECODE14
- hardware/runtime pain and common breakage → INLINECODE15
- SDR hardware/driver integration (RTL-SDR, SDRplay, HackRF, USRP, SoapySDR bindings, USB passthrough) → INLINECODE16
- worked example OpenClaw builds → INLINECODE17
- dashboard / UI design patterns for SDR observatories → INLINECODE18
Heuristics
- - Trunked/public-safety ingest: start with
trunk-recorder or sdrtrunk; add rdio-scanner or scanner-map above them. - Call mapping / AI summaries / geocoding / dispatcher UX:
scanner-map is the strongest inspiration. - Browser-based tuning and multi-user receiving: prefer
openwebrx+; treat vanilla OpenWebRX mainly as lineage/background unless there is a specific compatibility reason not to. - Desktop live tuning and general exploration:
SDR++, GQRX, CubicSDR. - Satellite capture/processing:
SatDump first. - ADS-B / aircraft observability:
readsb / dump1090 class decoders plus tar1090 for map/UI are the default reference stack unless the user wants something stranger. - APRS / packet / igate ideas:
Dire Wolf is the default practical reference. Note: SDRplay/RSP1B requires SoapySDR + FM demod → FIFO pipeline, not rtl_fm directly. - Unknown 315/433/868/915 protocol work:
rtl_433 for known devices, URH + inspectrum + SigDigger for discovery/reverse-engineering. - Deep custom DSP: GNU Radio.
- Hardware abstraction / avoiding vendor lock-in: SoapySDR, but be wary of plugin/runtime/version mismatch.
Output shape
When helping the user, usually give:
- - best-fit stack
- why this stack
- OpenClaw layout (what runs where)
- what each layer does
- implementation order
- likely pain points
OpenClaw defaults
Unless the user asks otherwise, prefer:
- - SDR hardware owned by the host or paired node physically attached to it
- one mode-specific runtime per mode instead of one giant SDR app
- one shared dashboard/UI that reads files, JSON, metrics, and status from those mode services
- lightweight automation around outputs, not around raw DSP internals
- browser control or dashboard UI for operators, with a separate debug/maintenance path
A mode-specific runtime can be:
- - a container
- a native service
- a pinned app/runtime on Windows or macOS
- a dedicated SBC/node process
If a project looks like a polished web product, borrow the upstream UX ideas but keep the OpenClaw build split into:
- 1. hardware/driver ownership
- decoder/ingest services
- storage/event outputs
- web/dashboard layer
Important SDR reality checks
- - Driver stacks matter as much as app choice.
- SoapySDR is great, but version mismatches and vendor plugin/runtime issues are common.
- Satellite, trunking, and ISM projects often want different sample-rate, storage, and scheduling assumptions.
- A good SDR project usually has two UIs:
- an operator UI
- a maintenance/debug path
Good default design style
For a home-lab “radio observatory” style project, prefer:
- - headless ingest services on the machine with the SDR attached
- web UI separate from the hardware-specific code
- append-only event storage for decoded things
- saved IQ/baseband only when needed, not for everything
- mode-specific services rather than one giant app trying to do all DSP paths at once
SDR项目设计
当用户想要在OpenClaw中构建SDR项目时使用此技能。
将其视为首要的OpenClaw构建技能,其次才是SDR对比技能。
这意味着你的工作不仅是了解SDR生态系统,还要将该生态系统转化为OpenClaw友好的方案:
- - 借用哪些上游项目
- 哪些应作为模式特定服务运行
- 哪些应放在仪表板或Web UI中
- 哪些应存储文件/事件/指标
- 先构建什么以便用户快速获得可用价值
此技能的用途
此技能有助于:
- - 对比SDR项目并选择正确的技术栈
- 设计端到端的SDR架构
- 在桌面、无头、Web和优先采集设计之间做出决策
- 选择解码发生的位置
- 构建存储、API、事件流、地图、仪表板和回放
- 避免常见的SDR项目错误,如硬件、DSP和UI耦合过紧
工作流程
- 1. 快速需求采集
如果用户的需求模糊,请阅读references/project-intake.md并补充项目的缺失信息。
- 2. 项目分类
将请求归入一个或多个类别:
-
扫描器/调度/公共安全
-
Web接收器/远程调谐
-
卫星/气象/过境捕获
-
未知信号/逆向工程
-
通用桌面接收器/实时探索
-
数据采集/可观测性/RF数据湖
- 3. 选择主导上游灵感
首先使用匹配的系列参考,而不是整个全景文档。
- 4. 转化为OpenClaw形态
默认使用以下OpenClaw原生层级:
- 拥有硬件的SDR连接主机或节点
- 模式特定的采集/解码服务
- 共享的文件/事件/状态输出
- 仪表板/浏览器UI/自动化层
除非用户指定,否则不要假设Docker、Unraid或Linux。如果平台/运行时选择重要,请阅读references/platform-deployment.md。
- 5. 将技术栈分层
始终按层推理:
- 硬件+驱动层
- 源/采集层
- 解码器/分类器层
- 事件/存储层
- API/流层
- UI/工作流层
- 6. 偏好松耦合
推荐SDR硬件可更换、解码器可更换、UI可继续工作的架构。
优先选择:
- SoapySDR或干净的源抽象
- 实际可行的文件系统或基于队列的交接
- 用于仪表板的简单HTTP/JSON API
- 服务使用容器,仅在硬件绑定脆弱时使用原生安装
- 7. 在自信之前检查故障模式
如果方案涉及供应商驱动、SoapySDR、USB直通或硬件共享,请阅读references/common-failure-modes.md。
- 8. 推荐一条构建路径,而非十条
给出一个主要的OpenClaw构建路径,仅在确实重要时提供简短的备选方案。
- 9. 在有用时使用示例构建
如果请求匹配常见形态,请阅读references/example-builds.md并借用最接近的模式。
需要阅读的内容
仅阅读最相关的参考文档:
- - 广泛的SDR研究、初学者指导或帮我理解SDR全景 → references/sdr-research-deep-dive.md
- 项目仍模糊/缺少需求 → references/project-intake.md
- 扫描器/调度/公共安全 → references/scanner-public-safety.md
- 浏览器接收器/远程调谐 → references/browser-receiver.md
- 卫星/气象/过境捕获 → references/satellite-weather.md
- 未知信号/逆向工程 → references/reverse-engineering.md
- 桌面实时探索、ADS-B、APRS、数据包或实用模式 → references/general-desktop-and-utility.md
- 架构、系统分解和实现规划 → references/architecture-patterns.md
- 如何实际组装技术栈 → references/implementation-recipes.md
- SDR概念如何映射到OpenClaw主机/节点/服务/仪表板结构 → references/openclaw-build-patterns.md
- 跨平台部署选择(Linux/Windows/macOS/Pi/原生vs容器) → references/platform-deployment.md
- 硬件/运行时痛点及常见故障 → references/common-failure-modes.md
- SDR硬件/驱动集成(RTL-SDR、SDRplay、HackRF、USRP、SoapySDR绑定、USB直通) → references/hardware-driver-integration.md
- 已实现的OpenClaw构建示例 → references/example-builds.md
- SDR观测站的仪表板/UI设计模式 → references/dashboard-ui-patterns.md
启发式规则
- - 集群/公共安全采集:从trunk-recorder或sdrtrunk开始;在其上添加rdio-scanner或scanner-map。
- 呼叫映射/AI摘要/地理编码/调度员UX:scanner-map是最强的灵感来源。
- 基于浏览器的调谐和多用户接收:优先选择openwebrx+;除非有特定的兼容性原因,否则将普通OpenWebRX主要视为谱系/背景。
- 桌面实时调谐和通用探索:SDR++、GQRX、CubicSDR。
- 卫星捕获/处理:首选SatDump。
- ADS-B/飞机可观测性:readsb/dump1090类解码器加上tar1090用于地图/UI是默认参考技术栈,除非用户想要更特殊的东西。
- APRS/数据包/iGate概念:Dire Wolf是默认的实用参考。注意:SDRplay/RSP1B需要SoapySDR + FM解调 → FIFO管道,而非直接使用rtlfm。
- 未知315/433/868/915协议工作:已知设备使用rtl433,发现/逆向工程使用URH + inspectrum + SigDigger。
- 深度自定义DSP:GNU Radio。
- 硬件抽象/避免供应商锁定:SoapySDR,但需注意插件/运行时/版本不匹配问题。
输出形态
在帮助用户时,通常提供:
- - 最佳匹配技术栈
- 选择此技术栈的原因
- OpenClaw布局(各部分运行位置)
- 每层的作用
- 实现顺序
- 可能的痛点
OpenClaw默认设置
除非用户另有要求,否则优先选择:
- - SDR硬件由物理连接的主机或配对节点拥有
- 每个模式使用一个模式特定运行时,而非一个庞大的SDR应用
- 一个共享的仪表板/UI,从这些模式服务读取文件、JSON、指标和状态
- 围绕输出的轻量级自动化,而非围绕原始DSP内部
- 操作员使用浏览器控制或仪表板UI,配有独立的调试/维护路径
模式特定运行时可以是:
- - 容器
- 原生服务
- Windows或macOS上的固定应用/运行时
- 专用的SBC/节点进程
如果项目看起来像一个精致的Web产品,请借用上游UX理念,但保持OpenClaw构建分为:
- 1. 硬件/驱动所有权
- 解码器/采集服务
- 存储/事件输出
- Web/仪表板层
重要的SDR现实检查
- - 驱动技术栈与应用选择同样重要。
- SoapySDR很好,但版本不匹配和供应商插件/运行时问题很常见。
- 卫星、集群和ISM项目通常需要不同的采样率、存储和调度假设。
- 一个好的SDR项目通常有两个UI:
- 操作员UI
- 维护/调试路径
良好的默认设计风格
对于家庭实验室无线电观测站风格的项目,优先选择:
- - 在连接SDR的机器上运行无头采集服务
- Web UI与硬件特定代码分离
- 解码内容使用仅追加的事件存储
- 仅在需要时保存IQ/基带,而非全部保存
- 模式特定服务,而非试图同时处理所有DSP路径的单一庞大应用