What problem does it solve? Rust callback signatures fail with confusing diagnostics like "lifetime may not live long enough", "one type is more general than the other", or E0521 when a closure returns a borrow of its argument, and the wrong fix (hoisting the lifetime or widening for<'a>) silently weakens the API. This Skill routes each symptom to the correct bound shape and prevents dead-end repairs. ## Core Features & Use Cases - Bound selection by return type: A decision table maps what the callback returns (owned value, borrow of the argument, composite over 'a, async result) to the exact bound to write, including for<'a> FnMut(&'a T) -> &'a K with K: ?Sized and AsyncFn versus boxed Send futures. - Diagnostic triage: Worked, compile-checked examples for E0521, E0308, E0282, E0747, E0562, E0277, and the monomorphization recursion-limit failure, with the full rustc 1.98.1 output to match against. - Stored callable guidance: Compares generic F, Box<dyn Fn>, fn pointers, and custom callable traits by size, allocation, and nameability, with measurable size_of and counting-allocator probes. - Use Case: Your sort_by_key(orders, |o| &o.country) fails with "lifetime may not live long enough". The Skill shows the bound is wrong, not the closure, and gives the higher-ranked signature that accepts the bare closure. ## Quick Start Ask the agent to fix the closure lifetime error in my sort_by_key call using the rust-callback-bounds skill.