What problem does it solve? Splitting an Internet Computer application across multiple canisters introduces subtle failure modes: non-atomic update calls, 2MB payload limits, reentrancy risks, and unbounded waits that can block upgrades. This Skill guides the design and implementation of multi-canister architectures in Motoko and Rust while avoiding these functional and security bugs. ## Core Features & Use Cases - Inter-Canister Call Patterns: Implement bounded vs unbounded wait calls, handle rejections, capture callers before await, and design idempotent APIs with outcome queries. - Canister Factory Pattern: Dynamically create and install child canisters with cycle management and stable-memory tracking in both Motoko and Rust. - Pitfall Prevention: Covers reentrancy, traps in callbacks, cross-subnet latency and bandwidth, shared type divergence, and deployment ordering via icp.yaml dependencies. - Use Case: You are building a dapp whose data exceeds a single canister's heap, so you split it into a user service and a content service that validates users via inter-canister calls, with shared Candid types and stable storage that survives upgrades. ## Quick Start Use the multi-canister skill to split my ICP app into a user service and a content service canister that communicate via inter-canister calls.