The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the IoT Mentor listing page.
A skill for Claude that acts as an experienced embedded-systems mentor: it picks the microcontroller, board, and toolchain for your project, estimates what it will cost and how long it will take, and hands you a build plan that stops at a working breadboard instead of a production line you didn't ask for.
Most embedded advice fails in one of two directions — a parts list with no plan, or a production roadmap for someone who hasn't blinked an LED yet. This skill asks what you've actually built before, then answers at that level.
| Where | One click |
|---|---|
| Claude | Download embedded-iot-mentor.skill and open it |
| VS Code (Copilot Chat) | Copy vscode-copilot/'s prompt in — nothing to install |
| Your own code | |
| Any other AI chat | Copy universal-prompt.md into the first message — no install, works in ChatGPT, Gemini, Copilot, and others |
Prefer a page over a chat? docs/index.html is a static overview with the
same "Try it" links and demo — live at
mh-mansouri.github.io/embedded-iot-mentor,
or open the file locally, no server needed.
Everything below is the longer way round: build it yourself, change it, or read why it answers the way it does.

A sheep farmer in Devon, with no coding experience, requests six sensing points, and the furthest sensing point is around 400 m away from the house. All of those are below the minimum cost for such a project. Worth watching for what the skill doesn't suggest: It opens by refusing half the request - no cheap probe measures soil nitrogen honestly - then lets three constraints do the choosing. The 400 meters away from home picks radio over Wi-Fi, "I don't write code" picks ready-made firmware over a toolchain, and a wet meadow picks the enclosure. The board is the last thing decided, not the first. The full transcript is Scenario D.
The failure modes it's built to catch:
Option A — one file. Download embedded-iot-mentor.skill from the
latest release (or
straight from the repository), then in claude.ai:
Click your name in the bottom-left corner, choose Settings, then open the Skills page under Customize:

Click Add, then Upload a skill:

Drag the downloaded embedded-iot-mentor.skill file onto the upload box (or click it to browse):

(Skill saving must be enabled for your account or organization.)
Option B — Claude Code. Unpack it into your skills directory:
Or install a bundle you already have, with no copy of this repo:
Or by hand — a .skill is just a zip:
Claude Code picks it up on the next session — /skills lists it, and Claude also loads it on
its own when a conversation matches the description.
Just describe the project. For example:
I want to log soil moisture in a greenhouse and see it on my phone. I've done a couple of Arduino sketches. Budget maybe €100, and I'd like it running in a month.
or
Which board for a battery sensor that has to last a year on a coin cell? I've shipped firmware before, so don't dumb it down.
or
I have an ESP32 and a BME280 sitting in a drawer. What's worth building with them?
or, the one in the demo above:
I am a farmer and want to measure soil moisture and nitrogen in different parts of my meadow to make sure my sheep are well fed.
It will ask a couple of short questions if the goal, experience level, power source, environment, or timeline are still unclear — then answer in tables rather than essays. A whole project plan is meant to fit on one screen; if you want the reasoning behind a pick, ask for it.
The mentor is judgement written down, not a Claude feature, so it ports. Every port keeps the behaviour that matters — MVP first, hardware and firmware kept apart, ready-made firmware ahead of code to be written, the reject bar, and the hand-off on safety-critical, vehicle, and privacy questions.
| Route | What you do | Worth it when |
|---|---|---|
vscode-copilot/ | Copy one file to .github/copilot-instructions.md, or paste it into Copilot Chat | Always start here in VS Code — nothing to install |
api/ | Deploy the REST API — one click on Render — and call it from your own code | The caller is a script or a service, not a person in a chat window |
What the two carry differs. The Copilot port is judgement only — no reference files, no scripts, so a real battery runtime or a BOM total is still the skill's job. The REST API reads both straight out of the skill folder, so it can never fall behind a change made here.
The skill itself lives in embedded-iot-mentor/. Everything at the repository root is
packaging and project metadata that the skill never reads.
| Path | What it is |
|---|---|
embedded-iot-mentor/SKILL.md | The instructions Claude follows. Most changes go here. |
embedded-iot-mentor/references/ | Detail read on a trigger: MCU selection, connectivity, where the data is seen, cost estimation, PCB checklist, power/battery, field deployment, OTA, EMC, safety boundary, learning resources. |
embedded-iot-mentor/scripts/ | Small deterministic helpers, run only when a concrete number is asked for. |
embedded-iot-mentor/examples/ | Worked scenarios showing the shape a reply should take when a request doesn't fit the standard mould. |
embedded-iot-mentor.skill | Generated. A zip of the folder above — don't edit by hand. |
package_skill.py | Builds, verifies, and installs the bundle. |
embedded-iot-mentor-demo.gif | The recording shown at the top. Not bundled — the packer only takes the skill folder. |
universal-prompt.md | The same mentor as a copy-paste prompt, for any AI chat that isn't Claude. |
assets/install-steps/ | Screenshots for the Claude Skill upload walkthrough in Install, above. |
docs/index.html | Static landing page for GitHub Pages — the "Try it" links and the demo, no chat needed. |
create_skill_demo_gif.py | Generates a mock-up demo GIF (assets/skill-demo-mockup.gif) from a scripted scenario, for when a real recording isn't available. |
scripts/check_links.py | Checks that every README, landing-page, CONTRIBUTING.md, and distribution link still resolves. Run by check-links.yml on push, PR, and weekly. |
vscode-copilot/ | The Copilot port — the paste-in prompt and example queries. |
api/ | The REST API — reads the reference library from the skill folder and shells out to its scripts. |
api/instructions.md | The mentor's rules condensed to a self-contained prompt, for POST /chat and GET /instructions. Mirror a behaviour change here if you make one in SKILL.md. |
render.yaml | Blueprint behind the one-click deploy of the API. Has to sit at the root for Render to find it. |
.github/DISTRIBUTION.md | Where the project is listed and how to list it — the steps that need a login rather than a workflow. |
Keeping the skill in its own folder matters: the spec requires a skill's name to match its
folder name, so building it straight from the repository root would break the moment someone
downloaded the repo as a ZIP and got embedded-iot-mentor-main/.
A .skill file is a zip archive holding the skill folder — the format is defined by the
Agent Skills specification. The packer bundles
everything under embedded-iot-mentor/, so a new reference file is picked up automatically
with no build-script edit. Text files are stored with LF and zip timestamps are pinned, so
the bundle is byte-identical whoever builds it.
--check is the gate, and CI runs it on every push and pull request. It fails when:
name pattern/length, folder match, description length);SKILL.md points at a references/… or scripts/… file that doesn't exist;.skill doesn't match the source folder.That last one matters because the bundle is committed: edit the skill, forget to rebuild, and the download would ship a different version than the source folder.
sleep_budget.py takes duty-cycle inputs rather than an average current, because the
average is the number nobody knows up front. Same firmware, same battery, sleep current
changed from 15 µA to a dev board's 8 mA regulator: 3.8 years becomes 8.3 days.
Improvements are welcome — especially hands-on knowledge about parts, suppliers, and what actually goes wrong on a bench. See CONTRIBUTING.md.
Released under the MIT License — free to use, share, and build on.