Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add commands/captainluzik/oh-my-embedded/bomgit clone --depth 1 https://github.com/captainluzik/oh-my-embeddedWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/commands/captainluzik/oh-my-embedded/bom)<a href="https://agentmods.dev/commands/captainluzik/oh-my-embedded/bom"><img src="https://agentmods.dev/badge/commands/captainluzik/oh-my-embedded/bom.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00010 | $0.00907 |
| Opus 5 | $0.00005 | $0.00453 |
| Sonnet 5 | $0.00002 | $0.00181 |
| Haiku 4.5 | $0.00001 | $0.00091 |
Grade A, and why
bom scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 4d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 99 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Extract a Bill of Materials from the KiCad schematic in the current project and output it in a structured format.
Arguments
$ARGUMENTS may contain:
- An output format:
csv(default),json, ormarkdown. - An output file path (e.g.
bom.csv,hardware/bom.json). - The keyword
jlcpcbto format the CSV specifically for JLCPCB SMT assembly.
Step 1: Find the schematic
Search the project directory for KiCad schematic files:
*.kicad_sch
If multiple .kicad_sch files exist, prefer the top-level one (usually matches the project directory name or contains the most component references). List all found files and state which one you're using.
Step 2: Parse components
Read the .kicad_sch file. It's a text-based S-expression format. Extract every (symbol ...) block that has a reference starting with a letter (R, C, U, J, Q, L, D, etc.) and is not a power symbol or graphical annotation.
For each component, collect:
- Reference (e.g.
R1,C4,U2) - Value (e.g.
10k,100nF,STM32F103C8T6) - Footprint (e.g.
Resistor_SMD:R_0402) - LCSC part number if present in the
LCSCorlcscproperty field. - Manufacturer part number if present in
MPNorManufacturer_Part_Numberfields. - Datasheet URL if present.
Step 3: Group and deduplicate
Group components by identical (Value + Footprint). Within each group:
- List all references together (e.g.
R1, R3, R7). - Count the quantity.
- Show the LCSC/MPN if available.
Sort groups by reference prefix, then by value.
Step 4: Output the BOM
Standard CSV (default)
Reference,Value,Footprint,Quantity,LCSC,MPN,Datasheet
"R1, R3, R7",10k,Resistor_SMD:R_0402,3,C25804,,
"C1, C2",100nF,Capacitor_SMD:C_0402,2,C307331,,
"U1",STM32F103C8T6,Package_QFP:LQFP-48_7x7mm,1,,STM32F103C8T6,https://...
JLCPCB CSV format
JLCPCB requires specific column names for their SMT assembly service:
Comment,Designator,Footprint,LCSC Part #
10k,"R1, R3, R7",Resistor_SMD:R_0402,C25804
100nF,"C1, C2",Capacitor_SMD:C_0402,C307331
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 4d ago First seen · 99 lines · 10 tokens per session scan A 51e8ff6c4a2c
bom is a command published in the GitHub repository captainluzik/oh-my-embedded (23 stars, last pushed 6mo ago), licensed MIT. It adds 10 tokens to every session and 907 once invoked, about $0.0001 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other commands, from other repositories
hardware-specs
Read this before writing any code that touches peripherals, memory, Wi-Fi, camera, or audio. All GPIO and address numbers below are verified against the vendor BSP (ref/demo/ESP32-S3-CAM-OVxxxx/examples/ESP-IDF-v5.5.1/04dvpcameradisplay/components/waveshareesp32s3camovxxxx/include/bsp/esp32s3camovxxxx.h) and this…
monitor
Command "monitor" from chayuto/ws-ESP32-S3-CAM, covering read serial output from the board, fix 1 — stty -hupcl + dd (works reliably), fix 2 — pyserial but set dtr/rts before open, optional: pulse rts only to reset without touching dtr and healthy read (once the dtr trap is avoided).
peripherals
Use the vendor BSP waveshare/esp32s3camovxxxx for anything nontrivial. It hides the CH32V003 IO-expander quirks, I²C bus init, camera pin config, and codec addresses. Header: ref/demo/ESP32-S3-CAM-OVxxxx/examples/ESP-IDF-v5.5.1/04dvpcameradisplay/components/waveshareesp32s3camovxxxx/include/bsp/esp32s3camovxxxx.h.
safe-dev
Use this flow when adding a new subsystem (new task, new driver, new Kconfig symbol). Every crash we've had in this project came from skipping one of these checks. Usage: /safe-dev .
build
Activate ESP-IDF v5.5.3+ and build out-of-tree. Usage: /build.
flash
Usage: /flash (same path used with /build).