rust-skills
Health Uyari
- License — License: BSD-3-Clause
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Gecti
- Code scan — Scanned 12 files during light audit, no dangerous patterns found
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
agent skills for production Rust — unsafe, atomics, FFI/JNI/UniFFI, sanitizers, profiling, supply chain, etc
rust-skills
Forty-six agent skills for production Rust:
ownership semantics · unsafe review · async · mobile delivery · FFI · native linking · releases · supply chain
Each skill is a reference sheet for a coding agent, not a tutorial. Each one carries concrete
commands, flags, thresholds, and triage tables instead of general advice.
Every ```rust block in the catalog declares what CI must do with it, and CI does it on the
toolchain that checks/rust-toolchain.toml pins. An untagged block is extracted and
type-checked; a rust,run block must also execute successfully; a rust,compile_fail block has
to fail and can name the required error code; rust,ignore is the only way a block leaves the
gate, and checks/ignored.txt must list each such block with the reason. Nothing is skipped in
silence.
What the skills change
Measured with evals/outcome/ on Claude Code (claude-opus-5-5) and Codex CLI
0.166.0, through their subscription logins, three runs per arm, graded by a blind judge
(November 2026):
| Task | Without the catalog | With it |
|---|---|---|
Release a crate whose feat commit adds a variant to an exhaustive enum: name cargo semver-checks |
Claude 0 of 3 runs, Codex 0 of 3 | Claude 3 of 3, Codex 0 of 3 |
| Port a Python module to Rust with its tests (Codex) | 10 of 18 graders | 18 of 18 graders |
| Six planted-defect cases, all graders | Claude 79/84, Codex 75/84 | Claude 80/84, Codex 76/84 |
| Review a library module and write a report (Codex) | 8 of 18 graders | 18 of 18 graders |
Both models already fix most planted defects on their own, so the overall gain is about one
grader in 84. On Claude, the evals/plugin suite scored 1.00 with and without the plugin on all
six cases, and Claude loaded the owning skill in 10 of 18 outcome runs; the planted-defect row
was measured on a 44-skill snapshot. Read the rows above as the cases where the catalog changed
the result, not as an average effect. The skills matter most where a model does not know the verifier or the process:
the API diff of a release, a port that keeps its tests and records the original's output. The
method, the per-grader tables, and the caveats are in
research/outcome-baseline-2026-11.md and
research/rust-port-2026-11.md, and
research/review-and-routing-2026-11.md.
Install
Install one bundle, not the whole catalog. A bundle is one subject group of the catalog below.
The full catalog costs about 9,300 tokens of always-on skill listing (as claude plugin details
projects it), and a client with a 200K-token window keeps about 2,000: Claude Code then drops
whole descriptions, and those skills stop loading. Five bundles fit that budget. language
(about 2,700 tokens) does not; on a 200K window, add the router snippet below with it. The
bundles are defined in bundles.toml.
| Bundle | Subject | Skills | Plugin |
|---|---|---|---|
language |
Language, interfaces, and code discipline | 13 | rust-skills-language |
build |
Build, dependencies, and supply chain | 9 | rust-skills-build |
testing |
Correctness and testing | 6 | rust-skills-testing |
concurrency |
Concurrency and unsafe code | 6 | rust-skills-concurrency |
production |
Networking, database, performance, debugging, and observability | 7 | rust-skills-production |
ffi |
FFI and platform boundaries | 5 | rust-skills-ffi |
Each path below pins something different. Pick the first one your client supports.
1. gh skill, pinned to a release tag (reproducible). GitHub CLI 2.90.0 or later installs
one skill per command at the exact tag or commit you name, and gh skill update skips a pinned
skill. It pins the content; it does not pin which skills a bundle contains, so copy the list for
your bundle from bundles.toml.
gh skill install po4yka/rust-skills rust-unsafe --pin v0.3.0
gh skill command for each bundle
# language
for s in rust-compiler-errors rust-borrow-semantics rust-pattern-semantics rust-discipline rust-code-style rust-crate-architecture rust-lints rust-macros rust-iterator-impl rust-variance rust-callback-bounds rust-type-erasure rust-cli; do
gh skill install po4yka/rust-skills "$s" --pin v0.3.0
done
# build
for s in cargo-workflows rust-crate-release rust-native-linking rust-serde rust-security rust-android-build rust-ios-build rust-wasm rust-embedded-no-std; do
gh skill install po4yka/rust-skills "$s" --pin v0.3.0
done
# testing
for s in rust-tdd rust-test-tools rust-sanitizers-miri rust-panic-safety rust-port rust-review; do
gh skill install po4yka/rust-skills "$s" --pin v0.3.0
done
# concurrency
for s in memory-model rust-async-internals rust-unsafe rust-pin-projection rust-send-sync rust-event-loop-state; do
gh skill install po4yka/rust-skills "$s" --pin v0.3.0
done
# production
for s in rust-performance rust-hot-path rust-copy-on-write rust-debugging rust-observability rust-networking rust-database; do
gh skill install po4yka/rust-skills "$s" --pin v0.3.0
done
# ffi
for s in rust-jni rust-swift-ffi uniffi-boundary uniffi-packaging-versioning ffi-error-progress-cancel; do
gh skill install po4yka/rust-skills "$s" --pin v0.3.0
done
2. Claude Code plugin marketplace, pinned by the marketplace ref. Add the marketplace at a
release tag, then install a bundle plugin. The installed plugin records the commit SHA of that
tag as its version, and it changes only when you add the marketplace at a newer tag. Without the#v0.3.0 suffix the marketplace tracks main.
/plugin marketplace add po4yka/rust-skills#v0.3.0
/plugin install rust-skills-language@rust-skills
The plugin names are in the table above; rust-skills@rust-skills is the full catalog.
2a. Codex plugin marketplace, pinned by --ref. Codex reads the same marketplace file. Add
it at a release tag, install a bundle plugin, and start a new session. Without --ref the
marketplace tracks main.
codex plugin marketplace add po4yka/rust-skills --ref v0.3.0
codex plugin add rust-skills-language@rust-skills
Codex copies the whole repository (about 7 MB) into its cache for each plugin, with the versionlocal. A marketplace added with --ref stays on that ref. To move to a newer tag, runcodex plugin marketplace remove rust-skills, then the add commands again with the new--ref.
Keep the plugins up to date. A marketplace added at a tag never changes. To receive each
change that lands on main, add the marketplace with no ref, and let the client refresh it. Every
commit on main passed the required CI gates; the evaluations run only before a tag
(docs/releasing.md).
Claude Code. Add the marketplace with no
#suffix and install a bundle. Then run/plugin, open Marketplaces, selectrust-skills, and select Enable auto-update:
auto-update is off by default for a marketplace that Anthropic does not publish. After the first
message of a session, Claude Code refreshes the marketplace within about ten minutes, updates
the plugin on disk, and printsPlugin updated: <name> · Run /reload-plugins to apply; the next
session loads the new version./plugin marketplace update rust-skillsupdates at once.DISABLE_AUTOUPDATER=1,DISABLE_UPDATES=1, orCLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
turns the background update off unlessFORCE_AUTOUPDATE_PLUGINS=1is also set./plugin marketplace add po4yka/rust-skills /plugin install rust-skills-language@rust-skillsTo move from a tag to
main, runclaude plugin marketplace remove rust-skills, then the two
commands above. The removal also uninstalls the plugins of that marketplace.Codex. Codex 0.166.0 documents no background update for a plugin marketplace. Run
codex plugin marketplace upgrade rust-skills, then start a new session. For a Git
marketplace, that command fetchesmainand updates the installed plugins in the cache. Run it
from a scheduled job to stay current.A whole team. Commit the client settings to the consuming repository. Each client applies
them only in a folder that the user trusts. For Claude Code, this.claude/settings.json
registers the marketplace, turns on auto-update, and enables the bundle:{ "extraKnownMarketplaces": { "rust-skills": { "source": { "source": "github", "repo": "po4yka/rust-skills" }, "autoUpdate": true } }, "enabledPlugins": { "rust-skills-language@rust-skills": true } }For Codex, this
.codex/config.tomlregisters the marketplace and enables the bundle. The
firstcodex plugin marketplace upgradein that repository installs it. Addref = "v0.3.0"
under[marketplaces.rust-skills]to pin a tag.[marketplaces.rust-skills] source_type = "git" source = "https://github.com/po4yka/rust-skills.git" [plugins."rust-skills-language@rust-skills"] enabled = true
3. npx skills add, unpinned (convenience). The skills CLI installs the default branch as
it is at that moment. Its lockfile stores content hashes, not a commit or a tag, so a git tag of
this repository pins nothing for it. npx skills update moves every installed skill to main
HEAD, and npx skills check is an alias of update: neither one reports drift without applying
it.
npx skills add command for each bundle
# language
npx skills add po4yka/rust-skills --skill rust-compiler-errors rust-borrow-semantics rust-pattern-semantics rust-discipline rust-code-style rust-crate-architecture rust-lints rust-macros rust-iterator-impl rust-variance rust-callback-bounds rust-type-erasure rust-cli
# build
npx skills add po4yka/rust-skills --skill cargo-workflows rust-crate-release rust-native-linking rust-serde rust-security rust-android-build rust-ios-build rust-wasm rust-embedded-no-std
# testing
npx skills add po4yka/rust-skills --skill rust-tdd rust-test-tools rust-sanitizers-miri rust-panic-safety rust-port rust-review
# concurrency
npx skills add po4yka/rust-skills --skill memory-model rust-async-internals rust-unsafe rust-pin-projection rust-send-sync rust-event-loop-state
# production
npx skills add po4yka/rust-skills --skill rust-performance rust-hot-path rust-copy-on-write rust-debugging rust-observability rust-networking rust-database
# ffi
npx skills add po4yka/rust-skills --skill rust-jni rust-swift-ffi uniffi-boundary uniffi-packaging-versioning ffi-error-progress-cancel
--skill takes space-separated names; a comma-separated list matches no skill (checked on[email protected] and 1.7.4).
All[!TIP]
With more than about 15 skills installed, or on any client with a 200K-token window, also paste
AGENTS.snippet.md into the consuming repository'sAGENTS.mdorCLAUDE.md. It is a 60-line symptom-to-skill table that stays in context when the client
truncates or drops descriptions from its skill listing, so the agent still knows which skill to
load by name.
npx skills options
| Goal | Command |
|---|---|
| List the catalog without installing | npx skills add po4yka/rust-skills --list |
| Install one skill | npx skills add po4yka/rust-skills --skill rust-unsafe |
| Read one skill as a prompt | npx skills use po4yka/rust-skills@rust-unsafe |
| Install for every project, not just this one | npx skills add po4yka/rust-skills --global |
| Target one agent | npx skills add po4yka/rust-skills --agent claude-code |
| Every skill into every agent, no prompts | npx skills add po4yka/rust-skills --all |
| Copy files instead of symlinking | npx skills add po4yka/rust-skills --copy |
Update installed skills to main HEAD |
npx skills update |
| Remove one skill | npx skills remove --skill rust-unsafe |
The skills CLI installs into Claude Code, Codex, Cursor, OpenCode, and other supported agents.
Run npx skills --help for the current flag list. The CLI is open source at
vercel-labs/skills; its README lists the supported agents.
Checkout data-loss warning: Never run
skills removefrom this
repository's checkout. The CLI can treat the sourceskills/directory as
an install location and delete the selected source directory. An uncommitted
skill cannot be recovered from Git. Run removal from the project that owns
the installation or from a scratch directory outside this checkout.
A single skill installs on its own, but it names sibling skills for work it does not own. A
sibling in the same bundle is present when you install the bundle. A reference into another
bundle should carry a one-sentence fallback that states the rule, so a partial install degrades
instead of dead-ending; python3 scripts/validate-skills.py --report cross-refs lists the
references that do not have one yet.
Which skill do I need?
Enter by the symptom, not by the skill name.
| What you are looking at | Skill |
|---|---|
E0382, E0499, E0282/E0283/E0284, or does not live long enough |
rust-compiler-errors |
| A temporary lifetime, drop scope, two-phase borrow, or method autoref depends on syntax | rust-borrow-semantics |
| A match guard, partial move, binding mode, or match ergonomics change is surprising | rust-pattern-semantics |
A lock guard or RefCell borrow held across .await, or a Send bound on an async closure or an async fn in a trait |
rust-async-internals |
A disabled tokio::select! branch has side effects, a JoinHandle detached, or shutdown hangs |
rust-async-internals |
Ordering::Relaxed versus SeqCst, a fence you cannot justify |
memory-model |
A global: static mut, OnceLock, LazyLock, thread_local! |
memory-model |
A macro to write or debug: macro_rules!, a derive, cargo expand |
rust-macros |
A hand-written Iterator or IntoIterator for your own type |
rust-iterator-impl |
Where a module file goes (mod.rs or name.rs), unreachable_pub, or a lib.rs re-export |
rust-code-style |
A red clippy, cargo fmt, or cargo doc gate, or unfulfilled_lint_expectations |
rust-lints |
A SAFETY comment, MaybeUninit, Strict Provenance, repr(packed), or mem::zeroed |
rust-unsafe |
| Miri, ThreadSanitizer, HWASan, or MTE reports something | rust-sanitizers-miri |
You need the profile first: flamegraph, simpleperf, cargo-bloat |
rust-performance |
| The profile already named the hot spot: allocations, type size, hasher | rust-hot-path |
Borrow or clone at an API boundary: Cow<str>, to_mut, clone cost |
rust-copy-on-write |
A tombstone, a stripped backtrace, addr2line symbolication |
rust-debugging |
SetLoggerError, or a tracing subscriber in a cdylib that emits nothing |
rust-observability |
UnsatisfiedLinkError, AttachCurrentThread, FindClass, or an Android ClassLoader failure |
rust-jni |
Swift calls Rust through a C ABI, an opaque handle, or an @MainActor callback |
rust-swift-ffi |
A uniffi::export macro error, UnexpectedUniFFICallbackError, or a Record-versus-Object choice |
uniffi-boundary |
A UniFFI checksum mismatch, a RustBuffer error, binding version skew, a mobile support matrix, or a release proof from the shipped artifacts |
uniffi-packaging-versioning |
Activity lifecycle, ViewModel.onCleared, process death, or a callback release race |
ffi-error-progress-cancel |
A RUSTSEC advisory, or a new dependency nobody vetted |
rust-security |
DeserializeOwned, a JSON map key, a large integer, or rename_all broke the wire format |
rust-serde |
| Method ambiguity, autoderef, UFCS, E0034, or blanket-impl overlap | rust-discipline |
| A caught panic aborts while its payload is dropped | rust-panic-safety |
| A bug to reproduce as a failing test, or a refactor that must keep its behavior | rust-tdd |
| Hand-rolled atomics for loom, a parser for proptest or cargo-fuzz, or a survived mutant | rust-test-tools |
| A C, Python, Go, or JavaScript module to move to Rust without a change in its output | rust-port |
| A pull request, a file, or a crate to review, with a report of what to fix first | rust-review |
A lifetime coercion is refused: is invariant over the parameter, borrowed for 'static |
rust-variance |
A callback bound rejects |o| &o.field, or a struct field holds a closure |
rust-callback-bounds |
self: Pin<&mut Self>, PhantomPinned, or a #[pin] projection |
rust-pin-projection |
cannot be sent between threads safely, MutexGuard is not Send |
rust-send-sync |
A HashMap<TypeId, _> whose values borrow, dyn Any, downcast_ref |
rust-type-erasure |
Every handler in an event loop needs &mut to one shared state |
rust-event-loop-state |
| 16 KiB page alignment, native debug symbols, or an Android AAR or Prefab package | rust-android-build |
Rust for iOS, IPHONEOS_DEPLOYMENT_TARGET, XCFramework and SwiftPM packaging, UniFFI builds included |
rust-ios-build |
because --locked was passed to prevent this, or a feature that another crate turned on |
cargo-workflows |
A SemVer bump, cargo package, cargo publish, crates.io trusted publishing, or a yank |
rust-crate-release |
build.rs, pkg-config, an undefined symbol, or a packaged DLL failure |
rust-native-linking |
| A new workspace crate, a layering violation, or a dependency cycle between crates | rust-crate-architecture |
| HTTP timeout, safe retries, TLS verification, body limits, or graceful shutdown | rust-networking |
| Pool exhaustion, transaction rollback, migration ordering, or serialization failure | rust-database |
wasm32-unknown-unknown, WASI, wasm-bindgen, or a WebAssembly size regression |
rust-wasm |
no_std, memory.x, an interrupt race, Embassy, RTIC, probe-rs, or defmt |
rust-embedded-no-std |
clap arguments, stdout or exit-code compatibility, Ctrl-C, atomic output, or shell completions |
rust-cli |
The full phrase-to-skill list lives in tests/routing-cases.md, and CI
checks every row against the skill descriptions.
flowchart LR
Q(["Where does it hurt?"])
Q --> A["It does not<br/>compile or lint"]
Q --> B["It is not<br/>provably correct"]
Q --> C["It is too slow<br/>or too big"]
Q --> D["It fails in<br/>the field"]
Q --> E["It crosses a<br/>language boundary"]
Q --> F["It is not built<br/>or shipped yet"]
Q --> G["It is a command-line<br/>interface"]
A --> A1[rust-compiler-errors]
A --> A2[rust-discipline]
A --> A3[rust-code-style]
A --> A4[rust-crate-architecture]
A --> A5[rust-lints]
A --> A6[rust-macros]
A --> A7[rust-iterator-impl]
A --> A8[rust-variance]
A --> A9[rust-callback-bounds]
A --> A10[rust-type-erasure]
A --> A11[rust-event-loop-state]
A --> A12[rust-borrow-semantics]
A --> A13[rust-pattern-semantics]
B --> B1[memory-model]
B --> B2[rust-unsafe]
B --> B3[rust-sanitizers-miri]
B --> B4[rust-tdd]
B --> B10[rust-review]
B --> B5[rust-test-tools]
B --> B6[rust-panic-safety]
B --> B7[rust-pin-projection]
B --> B8[rust-send-sync]
B --> B9[rust-async-internals]
C --> C1[rust-performance]
C --> C2[rust-hot-path]
C --> C3[rust-copy-on-write]
D --> D1[rust-debugging]
D --> D2[rust-observability]
D --> D3[rust-networking]
D --> D4[rust-database]
D --> D5[rust-serde]
E --> E1[rust-jni]
E --> E2[rust-swift-ffi]
E --> E3[uniffi-boundary]
E --> E4[ffi-error-progress-cancel]
E --> E5[rust-port]
F --> F1[cargo-workflows]
F --> F2[rust-android-build]
F --> F3[rust-ios-build]
F --> F4[rust-security]
F --> F5[uniffi-packaging-versioning]
F --> F6[rust-crate-release]
F --> F7[rust-native-linking]
F --> F8[rust-wasm]
F --> F9[rust-embedded-no-std]
G --> G1[rust-cli]
Catalog
Forty-four skills in six groups. Deep material sits in references/*.md next to the skill that
owns it.
| Skill | What it covers |
|---|---|
| rust-compiler-errors | Diagnostic triage, fixes that compile and hide the bug, E0432/E0433 unresolved imports, E0282/E0283/E0284 and never-type anchors, borrow and Drop fixes, E0716 routing, and E0038. |
| rust-borrow-semantics | Syntax-sensitive temporary lifetimes, drop scopes, place and value expressions, method autoref, reservation versus activation in two-phase borrows, and edition 2024 temporary-scope changes. |
| rust-pattern-semantics | Binding modes, partial moves, match-guard repetition, if let guards and let chains with their version gates, scrutinee ownership, or-patterns, exhaustiveness policy, and edition 2024 match ergonomics. |
| rust-discipline | API shape review: pub signatures, trait bounds, blanket and sealed impls, newtypes, Drop guards, and SemVer hazards; method lookup, autoderef, UFCS, and coherence (E0034, E0119, E0117). |
| rust-code-style | Module file layout, lib.rs re-export policy, visibility levels, item order, import groups, the thiserror versus anyhow choice, and rustdoc # Errors and # Panics sections. |
| rust-crate-architecture | Workspace layering, dependency direction rules, the crate-versus-module decision, and crate split, merge, and delete procedures. |
| rust-lints | workspace.lints, clippy.toml, and rustfmt.toml policy, rustc, clippy, and rustdoc lint levels, safe lint tightening, suppression justification, and red-gate triage. |
| rust-macros | macro_rules! textual scope and hygiene, fragment follow sets, the recursion limit, proc-macro crate rules, and the facade-and-derive crate split. |
| rust-iterator-impl | The producing side of iteration: a hand-written Iterator, the three IntoIterator impls, FromIterator and Extend, size_hint, and the unconditional_recursion stack overflow. |
| rust-variance | Variance, subtyping, and lifetime coercion: the two probe functions that settle any case in one rustc run, the table for every constructor and PhantomData form, why a trait bound matches by equality, and why adding interior mutability is a breaking change. |
| rust-callback-bounds | Callable bounds, HRTB reference projections, positional inference, move call traits, capture precision and drop timing, plus generic fields against Box<dyn Fn>. |
| rust-type-erasure | Type-keyed storage when the values are not 'static: why Any is bound to 'static, the ladder from a lifetime-parameterized enum to a Box<dyn Any> map to the GAT owner/element bijection, and where the pattern turns unsound. |
| rust-cli | Stable command-line contracts for arguments, stdout and stderr, exit status, configuration precedence, signals, terminal behavior, atomic file output, and packaged shell completions. |
| Skill | What it covers |
|---|---|
| cargo-workflows | Workspace and lockfile discipline, resolver and MSRV lanes, feature unification and feature matrices, profiles, cross-target config and runners, cargo-nextest, pinned GitHub Actions, and staged edition migration. |
| rust-crate-release | SemVer and MSRV classification, registry publishing with crates.io trusted publishing, deterministic binary archives, checksums, SBOMs, provenance, signing, consumer verification, and release recovery. |
| rust-native-linking | Cargo native integration in one *-sys crate, deterministic build scripts, separate Rust and native compiler flags, bindings, cross-target and Windows MSVC/GNU linking, runtime loading, and link or load failure triage. |
| rust-serde | Wire compatibility, owned versus borrowed deserialization, format-specific map keys, large-number policy, boundary validation, and exact-format round trips. |
| rust-security | cargo-audit and cargo-deny policy, RUSTSEC advisory triage, vetting new or updated crates for typosquat, malicious-crate, and compromised-release risk, and untrusted-input parser hardening. |
| rust-android-build | Android cdylib builds, NDK and per-ABI flags, 16 KiB alignment, ELF and size gates, native debug symbols, installed release smoke tests, and reusable AAR or Prefab packages. |
| rust-ios-build | iOS device and simulator static libraries, C headers and modulemaps, XCFramework and SwiftPM packaging (UniFFI builds included), deployment-target and symbol verification, signing, and simulator and device release smoke tests. |
| rust-wasm | Exact WebAssembly host and target selection, JavaScript boundary ownership, panic and async behavior, WASI capabilities, runtime tests, feature compatibility, and packaged size gates. |
| rust-embedded-no-std | Bare-metal and no_std policy for runtime and memory layout, panic and allocation, interrupts and critical sections, task frameworks, finite resource budgets, and real-device diagnostics. |
| Skill | What it covers |
|---|---|
| rust-tdd | Test-first red-green-refactor, bug reproduction, refactor safety nets, hand-written fakes, a fault-injection queue, async tokio tests with paused time, and golden-bless rules. |
| rust-test-tools | loom, proptest, cargo-fuzz and differential fuzz targets, cargo-careful, cargo-mutants survived-mutant triage, and golden or snapshot tests. |
| rust-sanitizers-miri | ASan, TSan, and MSan, Miri validity and provenance checks, bounded many-seed schedules, FFI stubbing, HWASan and MTE, and report triage. |
| rust-panic-safety | Unwind versus abort, FFI panic guards, safe disposal of a panicking payload, unwrap and expect audits, privacy-safe hooks, and typed-error mapping. |
| rust-port | Ports from C, C++, Python, Go, and JavaScript that keep the original's output: a behavior inventory, tests ported first, the language traps (floor division, rounding, string length, ordered maps, strict parsing), a recorded comparison against the original, and PORTING.md. |
| rust-review | A review of a diff, a pull request, a file, or a crate: scope, tools first, the areas in order of risk with the skill that owns each rule, severity sections, and a report with a location, a rule, and a code fix for each finding. |
| Skill | What it covers |
|---|---|
| memory-model | Atomic ordering selection, happens-before reasoning, fence placement, compare-exchange and update loops, global state (static mut, OnceLock, LazyLock, thread_local!), and verification with Miri and loom. |
| rust-async-internals | tokio::select! and timeout cancel safety, task ownership and shutdown trees, blocking-work routing, runtime setup, manual polling with Waker::noop, Send bounds on async closures and async fn in traits, and stall triage. |
| rust-unsafe | #![forbid(unsafe_code)] governance, the unsafe lint floor, SAFETY comments, validity and Strict Provenance, MaybeUninit and transmute, unaligned reads, syscall wrappers, zero-copy buffers, and manual unsafe impl Send. |
| rust-pin-projection | Pin, Unpin and PhantomPinned: why a Pin on an Unpin type enforces nothing, std::pin::pin! against Box::pin and Pin::new_unchecked, the four structural pinning obligations, and pin-project against pin-project-lite. |
| rust-send-sync | The auto traits as a subject: &T: Send exactly when T: Sync, the reference and smart-pointer table, Mutex against RwLock payload bounds, MutexGuard as !Send but Sync, PhantomData markers that remove exactly one trait, and auto-trait leakage through impl Trait and async fn. |
| rust-event-loop-state | Who owns the handler set and who owns the state in a tick loop, state as a trait parameter with capability bounds, when an ECS-shaped world earns its runtime conflict panic, and why async fn(&mut State) cannot suspend over shared state. |
| Skill | What it covers |
|---|---|
| rust-performance | A profiling build profile, flamegraphs and samply, simpleperf and Instruments, cargo-bloat and cargo-llvm-lines, Criterion baselines and benchmark regression gates, LTO and PGO profiles, and build-time tuning. |
| rust-hot-path | What to change once a profile names the hot spot: allocation rate, type size, hasher choice, bounds checks, inline attributes, and buffered I/O. |
| rust-copy-on-write | The decision before the profile: Cow in return and argument position, the to_mut allocation trap, the lifetime a Cow field forces on callers, and measured persistent-collection costs. |
| rust-debugging | Host-first reproduction, logcat and tombstones, symbolication with addr2line and atos, JNI and UniFFI panic signatures, and a panic-to-cause triage table. |
| rust-observability | tracing, production metric contracts, histogram and cardinality budgets, OpenTelemetry context propagation, redaction, bounded exporters, host sinks, and telemetry snapshots. |
| rust-networking | Production client and server policy for deadline budgets, safe retries, TLS, proxy and DNS, connection pools, streaming limits, overload, cancellation, and graceful shutdown. |
| rust-database | Production database policy for pool budgets, transaction ownership, cancellation, isolation and bounded retries, compatible migrations, and real-schema integration tests. |
| Skill | What it covers |
|---|---|
| rust-jni | JNI symbols and panic containment, thread attachment, local references, Android ClassLoader-safe caches, R8 lookup tests, and native crash triage. |
| rust-swift-ffi | A hand-written Rust C ABI for Swift with opaque handles, allocator symmetry, callback lifetime, Swift concurrency isolation, cancellation, and real consumer tests. |
| uniffi-boundary | Record-versus-Object shape, Arc ownership, foreign callbacks, custom types, async exports, macro and bindgen error triage, and mobile engine ownership across Kotlin and Swift. |
| uniffi-packaging-versioning | jniLibs packaging, the UniFFI header and modulemap for an XCFramework, binding/runtime pinning, additive-versus-breaking FFI changes, checksum-mismatch triage, mobile support matrices, and release proof from the shipped artifacts. |
| ffi-error-progress-cancel | Versioned errors, progress and cooperative cancellation, plus mobile owner teardown, UI delivery, process restart, memory pressure, and callback-release races. |
How the skills activate
Each SKILL.md carries a description that says when to load the skill and what it covers.
An agent reads only the descriptions until a task matches one, then loads that body. The body
keeps the triage tables, gotchas, and verifier commands, and it links each references/*.md
file with the condition under which to read it, so deep material costs context only when the
task needs it.
Each description starts with the task and its strongest trigger terms, such as an error code, a
lint, a tool, or an API name: E0034, large_enum_variant, transmute, RUSTSEC, cargo-deny,tokio::select!, UnsatisfiedLinkError. Some runtimes keep only the start of each description
when many skills are installed, so the first sentence carries the routing.
You can also read any skill directly. Every SKILL.md is plain Markdown.
The Agent Skills specification requires name anddescription, and allows license, compatibility, metadata, and allowed-tools. This
repository uses three of them — name, description, and license — and requires all three;
that is a rule of this catalog, not of the specification. The name always equals the directory
name. Every value stays a plain YAML scalar, because the skills CLI and the agent runtimes read
the file with a real YAML parser.
Repository layout
skills/<skill-name>/
├── SKILL.md # frontmatter plus instructions, at most 500 lines
└── references/*.md # optional deep material, linked from SKILL.md
AGENTS.md # the SKILL.md contract and the authoring rules
AGENTS.snippet.md # the always-on router to paste into a consuming repository
bundles.toml # install bundles: bundle -> ordered skill names
.claude-plugin/ # plugin marketplace for Claude Code and Codex, one plugin per bundle
CHANGELOG.md # one section per tagged catalog actualization
SECURITY.md # what a security report covers and where to send it
docs/releasing.md # tagging, plugin versioning, evaluations, repository settings
scripts/validate-skills.py # frontmatter, size, link, routing, bundle, budget, README checks
scripts/catalog-ceilings.toml # accepted values over a limit; they may only shrink
scripts/drift-report.py # toolchain and crate drift report for the weekly workflows
scripts/test_*.py # tests for the catalog rules and the drift report
tests/routing-cases.md # phrase -> skill, checked against every description
evals/routing/ # prompts, negative cases, and the runner for routing accuracy
evals/plugin/ # one plugin-eval case per bundle
.github/workflows/ # CI, skills-CLI and client compatibility, drift reports, plugin eval
checks/check.sh # one command that runs every CI gate
checks/rust-toolchain.toml # the pinned toolchain and compile target
checks/Cargo.toml # the crates that examples may use
checks/gen.py # Rust fence extraction
checks/analyze.py # compile-result classifier and gates
checks/with_lock.py # one gate run per checkout at a time
checks/test_*.py # tests for extraction, the classifier, and the lock
research/ # primary-source findings and catalog decisions
Only skills/ is published. The rest is tooling: npx skills add and gh skill see onlyskills/, and the plugin loads only the skill directories its entry names.
Scope
The catalog covers Rust. Android and iOS material appears only where it belongs to a Rust
concern, such as an NDK cross-compilation profile, a JNI boundary, or an XCFramework that wraps
a Rust staticlib. The skills assume you already know Rust; they encode review rules, tool
invocations, and failure triage that a codebase learns the hard way.
Caveats
[!WARNING]
CI type-checks every Rust example that is not taggedrust,ignore, and runs explicitly tagged
portable probes. It does not prove every prose claim, command line, flag, or version number.
Verify those against the consuming workspace and toolchain.
- Every
```rustblock without therust,ignoretag is extracted and type-checked in CI
against the toolchainchecks/rust-toolchain.tomlpins, currently Rust 1.99.1 on edition 2024.
A name that the surrounding prose defines comes from a per-block prelude inchecks/preludes/,
so the block is type-checked in full; any compile error fails the gate. Portablerust,runblocks are also compiled and executed on the native
CI host. - Pinned versions age. Where a skill names a crate or tool version, treat it as the version the
rule was written against, and confirm it against yourCargo.lock. Weekly workflows open an
issue when Rust stable or a crate inchecks/Cargo.tomlmoves past the pin. - The always-on skill listing is small. Claude Code keeps it within 1% of the context window
(about 2,000 tokens on a 200K window) and drops whole descriptions when it overflows; Codex
keeps only a prefix of each. In October 2026, all 44 descriptions cost about 9,300 tokens, so on a 200K window
install one bundle, and paste AGENTS.snippet.md into the consuming
repository so the agent can still name the skill it needs. - Codex shortens every description to share one skill-list budget among all listed skills. In a
fresh install each bundle shows every routing phrase of its skills, and CI fails when one is cut
off. Other installed skills share the same budget. One measurement (Codex 0.166.0, 2026-11-02):
the full catalog alone showed 252 of 316 routing phrases, andlanguagebeside about 50 other
skills from~/.agents/skillsshowed 55 of 82. The Codex
skills documentation sets the default budget at
2% of the model's context window and letsskills.max_context_tokensinconfig.tomlraise it
to 10,000 tokens. - After context compaction, Claude Code re-injects an invoked skill body with at most 5,000
tokens per skill. Most bodies are larger, so the tail of a long skill can drop out of a long
session. Each body keeps its triage tables and verifier commands first for this reason, and
the validator holds every body at or below its current size until it reaches 4,800 estimated
tokens. - A few thresholds are defaults rather than measured limits, for example the Android
.so
size-growth budget and the minimum age of a new crate in supply-chain vetting. The skills say
so at the point of use. - The routing check is static: it proves that each description still contains the phrases in
tests/routing-cases.md, not that an agent routes correctly. The blind routing evaluation of
the 2026-09 revision is in
research/catalog-actualization-2026-09.md; its
method is now reproducible from evals/. Report a misroute with the
misroute issue form.
Contributing
Read AGENTS.md. It states the SKILL.md contract, the authoring conventions, how to
add a skill, and how to verify a change locally before you open a pull request. Propose a rule
with the "Propose a rule" issue form: it asks for a primary source and a check. Report a wrongrust-review finding with the "Review false positive" form, and a wrong skill with the misroute
form.
License
BSD-3-Clause. See LICENSE.
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi