Problem
When building a Motoko + React hello-world project using the ICP skills, Claude hallucinated an invalid recipe type in icp.yaml:
# What was generated (wrong)
recipe:
type: "motoko"
# What it should have been
recipe:
type: "@dfinity/motoko@v4.1.0"
This happened because the icp-cli skill mentions recipe categories in prose ("Rust, Motoko, asset-canister, prebuilt") but never lists the actual @scope/name@version strings. The only concrete recipe type shown is @dfinity/asset-canister@v2.1.0 in the asset-canister skill. Without an explicit reference, the LLM guessed a plausible-looking bare name.
A second issue followed from the first: the candid: configuration field was omitted from the Motoko recipe, which meant the .did file wasn't at a stable path. The frontend's bindgen plugin then failed at build time because it couldn't find it. The binding-generation skill does warn about this, but the connection to the recipe config isn't obvious when the recipe itself isn't documented.
Proposed fix
Add a recipe reference table to the icp-cli skill listing each recipe's exact type string and its key configuration fields. For example:
| Recipe |
Type string |
Key config fields |
| Motoko |
@dfinity/motoko@v4.1.0 |
main, candid |
| Rust |
@dfinity/rust@v... |
cargo_toml, candid |
| Asset |
@dfinity/asset-canister@v2.1.0 |
dir, build |
| Prebuilt |
@dfinity/prebuilt@v... |
wasm, candid |
This single addition would have prevented both issues — the correct type string would be used directly, and seeing candid as a config field makes it clear the .did file needs to exist.
What's NOT needed
- A full end-to-end tutorial in the skill (too much maintenance burden)
- Duplicating
.did file guidance across multiple skills (binding-generation already covers it)
- Moving the
.did warning to a "critical pitfalls" section (unnecessary if the recipe table shows candid as a field)
The goal is minimal, high-signal additions — just the exact strings an LLM (or human) needs to write a correct icp.yaml.
Problem
When building a Motoko + React hello-world project using the ICP skills, Claude hallucinated an invalid recipe
typeinicp.yaml:This happened because the icp-cli skill mentions recipe categories in prose ("Rust, Motoko, asset-canister, prebuilt") but never lists the actual
@scope/name@versionstrings. The only concrete recipe type shown is@dfinity/asset-canister@v2.1.0in the asset-canister skill. Without an explicit reference, the LLM guessed a plausible-looking bare name.A second issue followed from the first: the
candid:configuration field was omitted from the Motoko recipe, which meant the.didfile wasn't at a stable path. The frontend's bindgen plugin then failed at build time because it couldn't find it. The binding-generation skill does warn about this, but the connection to the recipe config isn't obvious when the recipe itself isn't documented.Proposed fix
Add a recipe reference table to the icp-cli skill listing each recipe's exact
typestring and its key configuration fields. For example:@dfinity/motoko@v4.1.0main,candid@dfinity/rust@v...cargo_toml,candid@dfinity/asset-canister@v2.1.0dir,build@dfinity/prebuilt@v...wasm,candidThis single addition would have prevented both issues — the correct type string would be used directly, and seeing
candidas a config field makes it clear the.didfile needs to exist.What's NOT needed
.didfile guidance across multiple skills (binding-generation already covers it).didwarning to a "critical pitfalls" section (unnecessary if the recipe table showscandidas a field)The goal is minimal, high-signal additions — just the exact strings an LLM (or human) needs to write a correct
icp.yaml.