Firmware development mentor skill for Claude Code — teaches bare-metal embedded firmware by doing
Project description
⚡ EmbeddedGuru
Firmware development mentor for Claude Code — adaptive, project-driven, no hand-holding.
What is this?
EmbeddedGuru is a Claude Code skill that teaches bare-metal embedded firmware like a senior engineer would — by making you build things, not by explaining things.
It doesn't write your code. It asks what the peripheral status register says. It assigns real hardware tasks with specific exit criteria. It remembers where you left off, tracks your progress across sessions, and pushes back when you try to copy-paste your way through a concept.
It knows about registers, not libraries. It knows about datasheets, not tutorials.
Four Domain Tracks
| Track | Hardware | Protocols | Standards |
|---|---|---|---|
| IoT | ESP32 · STM32 | UART · I2C · SPI · MQTT | — |
| Automotive / CAN | STM32 · CAN transceiver | CAN · OBD-II · UDS · ISO-TP | ISO 11898 · ISO 14229 |
| Medical | STM32 · ADC frontend | I2C · SPI · ADC · IWDG | IEC 62304 · IEC 60601-1 |
| Industrial / RTOS | STM32 · RS-485 | FreeRTOS · Modbus RTU · DMA | IEC 61508 · MISRA-C |
Every track shares a common foundation: GPIO → UART → I2C → SPI → DMA — from registers, not libraries.
How it works
pipx install embedded-guru # install the CLI
embeddedguru install # seeds Claude Code with skill + curriculum graph
/guru # start your first session
Behind the scenes, the installer:
- Copies the SKILL.md mentor brain into
~/.claude/skills/embedded-guru/ - Copies the curriculum knowledge base (protocols, registers, boards, standards) into
~/.claude/embedded_guru/curriculum/ - Builds a knowledge graph with Graphify — every protocol fact and register value becomes a graph node the mentor queries instead of hallucinating
- Registers the
/gurutrigger in~/.claude/CLAUDE.md
Every session end, your student graph (profile, assignments, milestones, progress) is updated — so the mentor always knows exactly where you are.
Knowledge Graph Architecture
~/.claude/embedded_guru/
├── curriculum/
│ ├── concepts/ UART · SPI · I2C · CAN · DMA · FreeRTOS · watchdog
│ ├── hardware/ boards, peripherals, capabilities
│ ├── milestones/ IoT · Automotive · Medical · Industrial roadmaps
│ ├── mistakes/ 10 common hardware + firmware mistakes
│ ├── standards/ MISRA-C · ISO 26262 · IEC 62304 · Modbus
│ └── graphify-out/
│ └── graph.json ← curriculum facts (read-only, seeded at install)
│
└── <your-name>/
└── graphify-out/
└── graph.json ← your profile, progress, assignments (updated each session)
Before generating any output, the mentor queries the graph:
graphify query "I2C pull-up resistor value" --graph ~/.claude/embedded_guru/curriculum/graphify-out/graph.json
# → returns verified fact from curriculum, not a hallucinated value
Prerequisites
- Claude Code installed
- Python 3.9+
- pipx
Install pipx:
brew install pipx # macOS
sudo apt install pipx # Linux
pip install pipx # Windows
Install
pipx install embedded-guru
embeddedguru install
Note: Run
embeddedguru installfrom Claude Code's built-in terminal — it has yourANTHROPIC_API_KEYavailable for the one-time curriculum graph build.
Then open Claude Code and type /guru.
Upgrade
pipx upgrade embedded-guru
embeddedguru install
Session Commands
| Command | What happens |
|---|---|
/guru |
Start or resume your session |
/guru debug |
Jump straight into a debugging session |
/guru roadmap |
See your current roadmap and next milestone |
/guru assignment |
Check your open assignments |
/guru goal |
Review or update your end goal |
/guru profile |
See your full student profile |
Install Options
embeddedguru install --dry-run # preview without making changes
embeddedguru install --skip-graphify # skip graph build (offline / CI)
Uninstall
embeddedguru uninstall # keeps student data
embeddedguru uninstall --all # removes everything including progress
pipx uninstall embedded-guru
What the mentor will and won't do
Will do
- Assess your real level (L0–L3) from how you answer questions, not what you claim
- Build a custom roadmap for your domain and board
- Assign real hardware tasks with specific exit criteria
- Tell you which register to read when you're stuck
- Push back on code dumps — "I could. You'd fix this bug and forget how."
- Acknowledge frustration before redirecting
- Track everything across sessions — no re-explaining your background each time
Won't do
- Write your firmware for you
- Accept "it works" as a milestone exit — working code + test output required
- Let you skip Milestone 0 (datasheet literacy) regardless of claimed experience
- Pretend a Raspberry Pi 4 is suitable for bare-metal embedded development
- Teach I2C without first asking what pull-up resistor value you used
Supported Boards
| Board | Domain | Level | Notes |
|---|---|---|---|
| STM32 Nucleo-F446RE | All | L1–L3 | Recommended for most tracks |
| STM32 Nucleo-F411RE | IoT · Medical | L1–L2 | Budget option |
| ESP32-DevKitC | IoT | L1–L2 | WiFi/BT built-in |
| Raspberry Pi Pico | IoT | L1 | Good starter board |
| STM32F103 Blue Pill | All | L2–L3 | Cheap, widely available |
| Arduino Uno | IoT | L0 → L1 only | HAL-only, no bare-metal CAN |
| Raspberry Pi 4 | — | — | ⚠ Not suitable for bare-metal embedded |
Contributing
PRs welcome for curriculum files, new board entries, and regression tests that expose wrong advice.
git clone https://github.com/nikhil-robinson/embedded_guru
cd embedded_guru
pip install -e .
embeddedguru install --dry-run
Open issues at github.com/nikhil-robinson/embedded_guru/issues
License
MIT — see LICENSE
Built by Nikhil Robinson
If this helped you understand why your I2C bus was stuck at 3am, consider buying a coffee.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file embedded_guru-0.2.0.tar.gz.
File metadata
- Download URL: embedded_guru-0.2.0.tar.gz
- Upload date:
- Size: 71.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cddcebc25338102313eb10f5a0817bd0590f477d03803771ebb7954274409f72
|
|
| MD5 |
6fa538e16057d7e4ef6484f10b6e86fd
|
|
| BLAKE2b-256 |
722a74c29964cf8cd5e9b866a208d4171ecba981f7e35bbb93ebf54af10f6817
|
Provenance
The following attestation bundles were made for embedded_guru-0.2.0.tar.gz:
Publisher:
publish.yml on nikhil-robinson/embedded_guru
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
embedded_guru-0.2.0.tar.gz -
Subject digest:
cddcebc25338102313eb10f5a0817bd0590f477d03803771ebb7954274409f72 - Sigstore transparency entry: 2009030655
- Sigstore integration time:
-
Permalink:
nikhil-robinson/embedded_guru@46a2daf4bc656f8971ee603d3314b175064cd63a -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/nikhil-robinson
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@46a2daf4bc656f8971ee603d3314b175064cd63a -
Trigger Event:
push
-
Statement type:
File details
Details for the file embedded_guru-0.2.0-py3-none-any.whl.
File metadata
- Download URL: embedded_guru-0.2.0-py3-none-any.whl
- Upload date:
- Size: 67.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b84ef49c017400c6416b951ccd12594cfdf4afc273155d8b3bac142b71229f2
|
|
| MD5 |
fb10ef01521c8bbb21fe8a17d428e08b
|
|
| BLAKE2b-256 |
99c5f8353203891f92747821bfd36054b91daeff51dd0de5d854035cc8fb8413
|
Provenance
The following attestation bundles were made for embedded_guru-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on nikhil-robinson/embedded_guru
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
embedded_guru-0.2.0-py3-none-any.whl -
Subject digest:
1b84ef49c017400c6416b951ccd12594cfdf4afc273155d8b3bac142b71229f2 - Sigstore transparency entry: 2009030778
- Sigstore integration time:
-
Permalink:
nikhil-robinson/embedded_guru@46a2daf4bc656f8971ee603d3314b175064cd63a -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/nikhil-robinson
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@46a2daf4bc656f8971ee603d3314b175064cd63a -
Trigger Event:
push
-
Statement type: