An OpenSkills agent skill for SpinalHDL development with correctness-first guidance from official docs and VexRiscv.
SaferSkills independently audited spinal-pro (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Target SpinalHDL version: 1.10+ (rules and APIs validated against the master branch of SpinalDoc-RTD).
Load this skill when the task involves:
structure, or maintainability issues
:=, \=, <>, when, switch,ClockDomain, Stream, Flow, Bundle, Vec, StateMachine, Mem)
WIDTH MISMATCH, `LATCHDETECTED, CLOCK CROSSING VIOLATION`, …)
components, or CPU/SoC structure
SimConfig / doSim, focusedsimulation, or repo-native tests
Do not load this skill for tasks that are purely about general Scala, vendor EDA flows, RTL in non-SpinalHDL languages, or unrelated hardware topics — unless SpinalHDL semantics or SpinalHDL code is central to the task.
retrieve, or design.
target file(s), build entry points, tests, generators, simulation hooks, and nearby conventions. Skip this step for pure explanation/retrieval tasks.
language rules, project-local conventions for style, VexRiscv-style examples for architecture and engineering patterns.
the task.
regression).
next verification step.
Open the most relevant file first. If the task crosses categories, open all that apply.
| Task type | Open first | Open also |
|---|---|---|
| Explain a DSL construct or rule | references/language-semantics.md | references/errors-cheatsheet.md for related errors |
| Decode an elaboration error message | references/errors-cheatsheet.md | references/language-semantics.md for the rule citation |
| Write a new module or peripheral | references/rtl-recipes.md | references/language-semantics.md for tricky rules |
| Add a register bank or memory-mapped block | references/rtl-recipes.md (BusSlaveFactory + Mem) | references/architecture-patterns.md (SoC integration) |
| Build or modify a pipeline | references/architecture-patterns.md (Pipeline library) | references/vexriscv-casebook.md only if studying VexRiscv |
| Add or restructure a plugin / service | references/architecture-patterns.md (Plugin composition) | references/vexriscv-casebook.md for stage interactions |
| Code review, bug triage | references/review-checklist.md | references/errors-cheatsheet.md, references/language-semantics.md |
| Write or extend a testbench | references/simulation-validation.md | references/rtl-recipes.md for the DUT pattern |
| Study mature CPU/SoC patterns | references/vexriscv-casebook.md | references/architecture-patterns.md |
If a referenced local corpus (SpinalDoc-RTD/, VexRiscv/) is not present in the environment, fall back to the URL listed next to each anchor (https://spinalhdl.github.io/SpinalDoc-RTD/master/... for docs, https://github.com/SpinalHDL/... for VexRiscv). If both the local path and the URL are unreachable, say so in the response — do not paraphrase from memory.
Treat the following as high-risk and require explicit evidence plus tighter validation:
Stream / Flow / bus handshake correctnessDetection triggers — when any of these appear in the diff or question, escalate to high-risk mode:
.resized, .resize(...) across module boundaries.asUInt / .asSInt / assignFromBits(...)allowOverride, allowUnsetRegToAvoidLatch, comb-loop suppressionsetAsReg(), randBoot()ClockDomain(...) or ClockingArea(...)BufferCC, PulseCCByToggle, StreamCCByToggle, FlowCCUnsafeByToggleMem(...) with readUnderWrite = writeFirst\= on anything that might be a registerFor high-risk tasks:
behavior, and service dependencies
Annotate every load-bearing claim with one of these source tags so a reviewer can audit at a glance:
[Doc] — pinned by an official SpinalDoc rule (cite the anchor or URL)[Repo] — derived from the current repository's code or conventions[VexRiscv-pattern] — derived from a mature SpinalHDL codebase[Inference] — your interpretation; flag remaining uncertaintyDepth heuristic — pick one of three modes based on what the user demonstrates:
and one citation; skip background.
+ one citation.
:= is, what Bundlemeans, etc.) → answer + minimal example + the rule citation, but stop short of unrelated background.
End any non-trivial output with:
reviewer to flag) when certainty is incomplete
references/
├── language-semantics.md # DSL rules, operators, width, registers, when/switch, Bundle/Vec
├── rtl-recipes.md # Module skeletons, Stream toolkit, Mem, BusSlaveFactory, FSM, CDC, SpinalConfig
├── architecture-patterns.md # Decomposition, Pipeline library, plugin composition, SoC patterns
├── review-checklist.md # Review order, detection signals, output pattern
├── errors-cheatsheet.md # One-screen error → cause → fix lookups
├── simulation-validation.md # SpinalSim API, testbench templates, validation ladder
└── vexriscv-casebook.md # VexRiscv patterns with preconditions and anti-patterns| Source | URL |
|---|---|
| SpinalHDL documentation (master) | https://spinalhdl.github.io/SpinalDoc-RTD/master/index.html |
| SpinalHDL source | https://github.com/SpinalHDL/SpinalHDL |
| SpinalHDL documentation source | https://github.com/SpinalHDL/SpinalDoc-RTD |
| VexRiscv | https://github.com/SpinalHDL/VexRiscv |
| NaxRiscv (newer plugin/fiber style) | https://github.com/SpinalHDL/NaxRiscv |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.