What problem does it solve? Writing async Rust with the smol runtime involves subtle rules—dropping a Task cancels it, the global executor defaults to one worker thread, and tokio-based libraries panic without a runtime context. This Skill encodes those conventions so generated or reviewed smol code avoids deadlocks, silent task cancellation, and reactor conflicts. ## Core Features & Use Cases - Core API guidance: Covers block_on, spawn, Task detach semantics, Executor/LocalExecutor, Timer, Async<T> I/O adapters, and unblock/Unblock for offloading blocking work. - Ecosystem interop: Explains how to run tokio-based crates like reqwest or tonic under smol using async-compat, and when to prefer futures-lite over the full futures crate. - Antipattern detection: Flags common mistakes such as calling block_on inside a task, holding std::sync::Mutex across .await, or expecting multi-core throughput without setting SMOL_THREADS. - Use Case: When building a small CLI that fetches HTTP resources with reqwest, the Skill directs you to wrap the reqwest future in async_compat::Compat and drive it with smol::block_on instead of pulling in the full tokio runtime. ## Quick Start Ask the agent to write a smol-based async TCP client in Rust that connects to a server, sends a request, and prints the response to stdout.