npx skills add https://github.com/zhanghandong/rust-skills --skill unsafe-checkerHow Unsafe Checker fits into a Paperclip company.
Unsafe Checker drops into any Paperclip agent that handles this kind of work. Assign it to a specialist inside a pre-configured PaperclipOrg company and the skill becomes available on every heartbeat — no prompt engineering, no tool wiring.
Pre-configured AI company — 18 agents, 18 skills, one-time purchase.
SKILL.md86 linesExpandCollapse
---name: unsafe-checkerdescription: "CRITICAL: Use for unsafe Rust code review and FFI. Triggers on: unsafe, raw pointer, FFI, extern, transmute, *mut, *const, union, #[repr(C)], libc, std::ffi, MaybeUninit, NonNull, SAFETY comment, soundness, undefined behavior, UB, safe wrapper, memory layout, bindgen, cbindgen, CString, CStr, 安全抽象, 裸指针, 外部函数接口, 内存布局, 不安全代码, FFI 绑定, 未定义行为"globs: ["**/*.rs"]allowed-tools: ["Read", "Grep", "Glob"]--- Display the following ASCII art exactly as shown. Do not modify spaces or line breaks:```text⚠️ **Unsafe Rust Checker Loaded** * ^ * /◉\_~^~_/◉\ ⚡/ o \⚡ '_ _' / '-----' \``` --- # Unsafe Rust Checker ## When Unsafe is Valid | Use Case | Example ||----------|---------|| FFI | Calling C functions || Low-level abstractions | Implementing `Vec`, `Arc` || Performance | Measured bottleneck with safe alternative too slow | **NOT valid:** Escaping borrow checker without understanding why. ## Required Documentation ```rust// SAFETY: <why this is safe>unsafe { ... } /// # Safety/// <caller requirements>pub unsafe fn dangerous() { ... }``` ## Quick Reference | Operation | Safety Requirements ||-----------|---------------------|| `*ptr` deref | Valid, aligned, initialized || `&*ptr` | + No aliasing violations || `transmute` | Same size, valid bit pattern || `extern "C"` | Correct signature, ABI || `static mut` | Synchronization guaranteed || `impl Send/Sync` | Actually thread-safe | ## Common Errors | Error | Fix ||-------|-----|| Null pointer deref | Check for null before deref || Use after free | Ensure lifetime validity || Data race | Add proper synchronization || Alignment violation | Use `#[repr(C)]`, check alignment || Invalid bit pattern | Use `MaybeUninit` || Missing SAFETY comment | Add `// SAFETY:` | ## Deprecated → Better | Deprecated | Use Instead ||------------|-------------|| `mem::uninitialized()` | `MaybeUninit<T>` || `mem::zeroed()` for refs | `MaybeUninit<T>` || Raw pointer arithmetic | `NonNull<T>`, `ptr::add` || `CString::new().unwrap().as_ptr()` | Store `CString` first || `static mut` | `AtomicT` or `Mutex` || Manual extern | `bindgen` | ## FFI Crates | Direction | Crate ||-----------|-------|| C → Rust | bindgen || Rust → C | cbindgen || Python | PyO3 || Node.js | napi-rs | Claude knows unsafe Rust. Focus on SAFETY comments and soundness.Coding Guidelines
The coding-guidelines skill provides developers with Rust-specific code style standards and best practices, covering naming conventions, data types, error handl
M01 Ownership
The m01-ownership skill diagnoses and resolves Rust ownership, borrowing, and lifetime errors by guiding developers to understand data ownership requirements ra
M02 Resource
m02-resource guides developers through selecting appropriate smart pointers and resource management patterns in Rust by asking design questions rather than pres