Prescriptive style rules for .zen code. These apply to all modules, reference designs, and board files.
Works with
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionidiomatic-zenerExecute the skills CLI command in your project's root directory to begin installation:
Fetches idiomatic-zener from diodeinc/pcb and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate idiomatic-zener. Access via /idiomatic-zener in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Create detailed user stories, acceptance criteria, and feature specs
Example
Generate user stories for 'password reset feature' with acceptance criteria, edge cases, and test scenarios
Reduce spec writing time by 50%, ensure comprehensive coverage
Research competitors, compare features, identify gaps
Example
Analyze 5 competitor products, create feature comparison matrix, suggest differentiation opportunities
Complete competitive research in 2 hours instead of 2 days
Evaluate features using frameworks (RICE, ICE, Kano) and create prioritized backlogs
Example
Score 20 feature ideas using RICE framework, generate prioritized roadmap with rationale
0
total installs
0
this week
204
GitHub stars
0
upvotes
Run in your terminal
0
installs
0
this week
204
stars
Prescriptive style rules for .zen code. These apply to all modules, reference designs, and board files.
Never use if to create or remove components. Always instantiate every component. Use dnp= to control whether it is populated. This applies to modules, boards, and reference designs, including optional feature blocks.
# BAD
if add_decoupling:
Capacitor(name="C_VDD", value="100nF", package="0402", P1=VCC, P2=GND)
# GOOD
Capacitor(name="C_VDD", value="100nF", package="0402", P1=VCC, P2=GND)
For optional subcircuits controlled by a config, use a record to pair values with DNP state. A zero/disabled config value means dnp=True with placeholder values.
Passive = record(value=typing.Any, dnp=bool)
input_filter = config("input_filter", Frequency, default="0Hz", optional=True,
help="Input lowpass cutoff. 0Hz disables the filter.")
def input_rc(f):
dnp = f <= Frequency("0Hz")
r = e96(Resistance("100ohm") if not dnp else Resistance("0ohm"))
c = e24(1 / (2 * PI * r * f) if not dnp else Capacitance("100pF"))
return Passive(value=r, dnp=False), Passive(value=c, dnp=dnp)
input_r, input_c = input_rc(input_filter)
Resistor(name="R_IN", value=input_r.value, dnp=input_r.dnp, package="0402", P1=A, P2=B)
Capacitor(name="C_IN", value=input_c.value, dnp=input_c.dnp, package="0402", P1=B, P2=GND)
Fewer parts = simpler BOM, easier assembly, lower cost.
Prefer value-switching over duplicate components. When a config selects between discrete options, use a single component with a computed value — don't instantiate multiple components with opposing DNP conditions.
# BAD: two resistors, one always DNP
Resistor(name="R_STRAP_HI", value="10kohm", P1=STRAP, P2=VCC, dnp=mode != "HIGH")
Resistor(name="R_STRAP_LO", value="100kohm", P1=STRAP, P2=VCC, dnp=mode != "LOW")
# GOOD: one resistor, value changes with config
_strap_value = { Mode("HIGH"): "10kohm", Mode("LOW"): "100kohm", Mode("FLOAT"): "10kohm" }[mode]
Resistor(name="R_STRAP", value=_strap_value, P1=STRAP, P2=VCC, dnp=mode == Mode("FLOAT"))
Leverage internal pull-ups/pull-downs. Many ICs have internal bias on strap pins. If the default state uses the internal pull, don't add an external resistor — just DNP the single resistor for that case.
Use physical types from @stdlib/units.zen for configs. Expose one meaningful parameter (e.g. cutoff frequency), not raw R/C values. Use enum() only for discrete design choices.
# BAD
config("filter_r", str, default="10ohms")
# GOOD
input_filter = config("input_filter", Frequency, default="0Hz", optional=True,
help="Input lowpass cutoff. 0Hz disables the filter.")
Put calculations in named functions with datasheet references. Snap to E-series with e96() / e24().
def load_r(v_out, v_sense):
"""Datasheet §8.1.1 / Eq 4: V_OUT = V_SENSE × gm × R_L"""
GM = Current("200uA") / Voltage("1V")
return e96(v_out / (v_sense * GM))
Every Power io gets voltage_within matching the datasheet's absolute maximum or recommended operating range.
VCC = io("VCC", Power, checks=voltage_within("2.7V to 36V"))
Use help= when it adds integrator-visible meaning that is not already obvious from the name, type, checks, or default. Omit it when it would just restate those fields.
VDD = io("VDD", Power, checks=voltage_within("3.0V to 5.5V"))
GND = io("GND", Ground)
EN = io("EN", Net, help="High to enable the regulator")
input_filter = config("input_filter", Frequency, default="0Hz", optional=True,
help="Input lowpass cutoff. 0Hz disables the filter.")
.NET AccessorUse Power/Ground ios directly as pin connections. Never use .NET.
# BAD
Capacitor(name="C_VDD", value="100nF", P1=VCC.NET, P2=GND.NET)
# GOOD
Capacitor(name="C_VDD", value="100nF", P1=VCC, P2=GND)
Beyond the standard conventions (UPPERCASE io, lowercase config):
| Element | Convention | Example |
|---|---|---|
| Internal nets | _ prefix |
_VREF, _XI, _RBIAS |
| Component names | Uppercase functional prefix | R_LOAD, C_VDD, U_LDO |
| Differential pairs | _P / _N suffixes |
IN_P, IN_N (not _PLUS / _MINUS) |
Don't expose configs for implementation details integrators shouldn't tune: decoupling cap values, passive package sizes, test point style.
Do expose configs for things integrators legitimately need to change: filter cutoffs, output voltage, gain settings, enable/disable optional subcircuits.
if guards on instantiation — always instantiate, use dnp=.NET accessor — use ios directlystr configs for physical values — use typed unitse96() / e24()voltage_within on all Power ioshelp= only when it clarifies non-obvious integrator-facing meaning_P / _N, not _PLUS / _MINUS_# pcb:sch comments in syncMake data-driven prioritization decisions faster
Draft PRDs, status updates, and stakeholder presentations
Example
Create executive summary of Q3 roadmap, monthly progress report, feature launch announcement
Save 3-5 hours/week on communication overhead
Prerequisites
Time Estimate
30-60 minutes to see productivity improvements
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use for user story writing, competitive research, roadmap prioritization, stakeholder communication, and PRD drafting. Best for reducing repetitive documentation and research work.
✗ Avoid when
Avoid for strategic product vision (requires deep customer empathy), pricing decisions (needs market and financial expertise), or when face-to-face customer discovery is more valuable than speed.
mattpocock/skills
parcadei/continuous-claude-v3
cursor/plugins
ailabs-393/ai-labs-claude-skills
pproenca/dot-skills
mattpocock/skills
I recommend idiomatic-zener for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
idiomatic-zener fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
Useful defaults in idiomatic-zener — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
Keeps context tight: idiomatic-zener is the kind of skill you can hand to a new teammate without a long onboarding doc.
Registry listing for idiomatic-zener matched our evaluation — installs cleanly and behaves as described in the markdown.
idiomatic-zener is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
idiomatic-zener reduced setup friction for our internal harness; good balance of opinion and flexibility.
Keeps context tight: idiomatic-zener is the kind of skill you can hand to a new teammate without a long onboarding doc.
idiomatic-zener is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
We added idiomatic-zener from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
showing 1-10 of 28