Claude Agent Skill · by Zhanghandong

Unsafe Checker

Install Unsafe Checker skill for Claude Code from zhanghandong/rust-skills.

Install
Terminal · npx
$npx skills add https://github.com/zhanghandong/rust-skills --skill unsafe-checker
Works with Paperclip

How 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.

S
SaaS FactoryPaired

Pre-configured AI company — 18 agents, 18 skills, one-time purchase.

$27$59
Explore pack
Source file
SKILL.md86 lines
Expand
---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.