{"id":"cc668a48-61d4-4257-ad68-e0640b1792ca","shortId":"mkqW2A","kind":"skill","title":"rust-systems","tagline":">-","description":"# Rust Systems & Services\n\nCovers modern application-layer Rust (edition 2024): CLIs, web services, libraries. Not `no_std`/embedded.\n\n## Tooling\n\n| Tool | Purpose |\n|------|---------|\n| `cargo` | Build, dep management, script runner |\n| `clippy` | Lint (`cargo clippy --workspace --all-targets -- -D warnings`) |\n| `rustfmt` | Formatter (`cargo fmt --all`) |\n| `cargo-nextest` | Test runner, noticeably faster than `cargo test`, better isolation |\n| `cargo-deny` | License + advisory + duplicate-dep checks |\n| `cargo-machete` | Find unused dependencies |\n\n- Pin `rust-toolchain.toml` per repo so every contributor and CI uses the same compiler.\n- `cargo update -p <crate>` for single-package upgrades. `cargo update` rewrites everything — avoid in PR diffs.\n- `Cargo.lock` goes in version control for binaries *and* libraries (modern guidance; reproducibility wins).\n\n## Workspaces\n\nMulti-crate projects use a workspace with layered crates. Dependencies point inward only.\n\n```\nCargo.toml                  # [workspace] members + [workspace.dependencies]\ncrates/\n  protocol/    # Shared types, no deps on other workspace crates\n  storage/     # Persistence, depends on protocol\n  service/    # Business logic, depends on protocol + storage\n  cli/        # Binary, depends on everything\n```\n\n- Centralize versions in `[workspace.dependencies]`, reference as `foo = { workspace = true }` in members.\n- Keep the leaf-most crate (`protocol` / types) dependency-free so every other crate can depend on it without cycles.\n- Feature flags belong on the crate that introduces the dependency, not re-exported through the workspace root.\n- **Library crates expose one stable facade**: a thin `lib.rs` with a `//!` module doc comment stating purpose, followed by `pub use` re-exports of the public surface. Consumers learn one import path per concept; internal module layout can be reorganized without breaking callers.\n- **Feature gates must error, never silently degrade.** If runtime config requests a capability the binary wasn't compiled with (e.g. `device = \"gpu\"` on a non-CUDA build), fail at startup with a clear error. Silent fallback produces different behavior from what the operator configured, often without anyone noticing.\n- **Centralize lints at the workspace root** with `[workspace.lints.*]`. Every member crate inherits the same ruleset — no drift between crates, no per-crate `#![deny(...)]` stacks. Example:\n\n  ```toml\n  [workspace.lints.rust]\n  unsafe_code = \"warn\"\n  missing_docs = \"warn\"\n\n  [workspace.lints.clippy]\n  all = { level = \"warn\", priority = -1 }\n  pedantic = { level = \"warn\", priority = -1 }\n  nursery = { level = \"warn\", priority = -1 }\n  module_name_repetitions = \"allow\"\n  must_use_candidate = \"allow\"\n  ```\n\n  Each member crate opts in with `[lints] workspace = true` in its own `Cargo.toml`. Changing a lint in one place updates every crate.\n\n## Build Profiles\n\nWhen tuning Cargo build profiles (release LTO, release-dbg symbols, release-min for distributable binaries) or adding dev-machine speedups (mold linker, `target-cpu=native`, share-generics), load [build-profiles.md](./references/build-profiles.md).\n\n## Error Handling\n\nSplit by crate role:\n\n- **Libraries / lower crates**: define typed errors with `thiserror`. Consumers can pattern-match.\n- **Binaries / top-level crates**: use `anyhow::Result` with `.context(\"what was being attempted\")`. Human-readable error chains.\n- Never return `Box<dyn Error>` from library APIs — it erases variant information.\n- Use `?` liberally. Never `.unwrap()` or `.expect()` outside tests and `main`. An `expect(\"...\")` is acceptable only when the invariant is provably upheld and the message explains why.\n- Convert at boundaries: `#[from]` on thiserror variants for auto-conversion; `.map_err(MyError::from)` when explicit.\n- `bail!(\"...\")` / `ensure!(cond, \"...\")` in application code for early exits.\n- Prefer `Result<T, E>` over panics for any recoverable error. Panics are for programmer bugs (broken invariants), not runtime failures.\n- **`#[must_use]` on fallible APIs**: annotate functions returning `Result` or newtype-wrapped results that callers frequently ignore. Catches `let _ = validate(x);` at compile time instead of shipping a silently-dropped error.\n\n## Ownership Discipline\n\n- Take `&str` over `&String`, `&[T]` over `&Vec<T>` in function signatures — accepts more call sites for free.\n- Return owned (`String`, `Vec<T>`) from constructors and public APIs. Borrow in hot paths where lifetimes are obvious.\n- Reach for `Arc<T>` only when sharing across threads. Single-threaded sharing uses `Rc<T>` or references.\n- `Cow<'_, str>` when a function sometimes allocates and sometimes borrows (e.g. normalization).\n- Lifetime elision handles 90% of cases. If you're writing `'a` in more than one signature, reconsider whether that type should own its data instead.\n- **`bytes::Bytes` for zero-copy slicing** of shared immutable buffers — network parsers, frame decoders, protocol handlers. `BytesMut` for building buffers that `split_to` / `split_off` into `Bytes` without reallocation. Prefer `Bytes` over `Arc<Vec<u8>>` when slicing is the dominant access pattern.\n- **Reduce hot-path heap allocations** with stack-or-inline collections when the typical size is small and known:\n  - `smallvec::SmallVec<[T; N]>` — inline for ≤N items, spills to heap beyond. Good for \"usually 1-8 items\" cases like parsed tag lists, lookup keys, small event batches.\n  - `arrayvec::ArrayVec<T, CAP>` — fixed capacity, never heap-allocates. Returns an error when full. Good for bounded message buffers or per-request scratch space.\n  - String interning for repeatedly-seen strings (enum-like values parsed from config, tenant IDs, route keys): `dashmap::DashMap<String, &'static str>` with `Box::leak` on miss gives `&'static str` comparisons without per-call allocations.\n  \n  These are optimizations — profile first. `Vec`/`String` on a cold path isn't the bottleneck.\n\n## Async with Tokio\n\n- Default runtime: `#[tokio::main]` with `features = [\"full\"]` for apps; `features = [\"rt\", \"macros\", \"sync\"]` for libraries that need to stay slim.\n- `tokio::spawn` for independent tasks. `JoinSet` for a dynamic group you'll await together with cancellation.\n- `tokio::select!` for racing futures (timeouts, cancellation, first-wins).\n- Never block the runtime: `tokio::task::spawn_blocking` for sync CPU work or blocking I/O libs.\n- `tokio::sync::Mutex` only when the guard must be held across `.await`. Otherwise `std::sync::Mutex` is faster.\n- **`tokio::sync::RwLock` when reads dominate writes** (config snapshots, route tables, hot caches). Many readers proceed in parallel; `Mutex` serializes them. For snapshot-swap semantics (rarely-updated config), `arc-swap::ArcSwap` is faster still — no lock on the read path.\n- Cancellation: `CancellationToken` (from `tokio-util`) propagates shutdown. Long-running tasks must check it.\n- Backpressure via bounded `mpsc` channels — unbounded channels hide memory growth until OOM.\n- **`Semaphore` for hard concurrency limits** on spawn paths that don't fit a channel model (e.g. \"at most 50 concurrent outbound HTTP calls\"). `let _permit = sem.acquire().await?;` inside the task; dropping the permit releases the slot. Pair with `Arc<Semaphore>` shared across spawners.\n- Don't mix async runtimes. Pick `tokio` and stick with it; `async-std` and `smol` don't interop cleanly.\n\n## CLI Tools (clap)\n\n- Use the derive API: `#[derive(Parser)]` + `#[derive(Subcommand)]`. Less boilerplate, types drive the help text.\n- One `enum Commands` variant per subcommand; flatten shared flags into a `#[command(flatten)] struct CommonArgs`.\n- `--json` flag on query commands for agent/pipe consumption. Emit via `serde_json::to_string(&value)?`.\n- Exit codes: 0 success, 1 for errors `main` returned, 2 for argparse (clap handles this), reserve 3+ for domain meanings documented in `--help`.\n- Provide `--version` automatically via `#[command(version)]`.\n\nSee [cli-tools.md](./references/cli-tools.md) for config layering, logging setup, progress reporting, and shell completions.\n\n## HTTP Services (axum)\n\n- Framework default: **axum** (tokio-native, tower middleware, extractor-based handlers). Pick `actix-web` only if an existing codebase uses it.\n- Handlers return `Result<impl IntoResponse, AppError>`. Implement `IntoResponse` for `AppError` to centralize error → status mapping.\n- Validate input at the boundary: `axum::extract::Json<T>` where `T: Deserialize + Validate` (use `validator` crate). Internal services trust input was validated.\n- Share state via `State<Arc<AppState>>` — not globals, not `lazy_static`.\n- Middleware via `tower::ServiceBuilder`: tracing → timeout → auth → CORS → handler. Order matters.\n- **Resilience layer stack** (outbound HTTP clients and shared services): `ServiceBuilder::new().layer(TimeoutLayer).layer(RateLimitLayer).layer(ConcurrencyLimitLayer).layer(LoadShedLayer).layer(RetryLayer).service(client)`. Name each layer explicitly — `LoadShedLayer` sheds excess load, `ConcurrencyLimitLayer` caps in-flight requests, `RateLimitLayer` bounds request rate, `RetryLayer` retries classified transient errors. Combining `LoadShedLayer` + `ConcurrencyLimitLayer` produces proper backpressure instead of unbounded queueing.\n\nSee [axum-service.md](./references/axum-service.md) for project layout, extractors, error types, graceful shutdown, and OpenAPI generation.\n\n## Concurrency\n\n| Workload | Approach |\n|----------|----------|\n| Independent async I/O | `tokio::spawn` + `JoinSet` or `futures::join!` |\n| Data-parallel CPU work | `rayon` with `par_iter` |\n| Shared mutable state across threads | `Arc<Mutex<T>>` or `Arc<RwLock<T>>`, smallest scope possible |\n| Single-producer pipelines | `tokio::sync::mpsc` (async) or `std::sync::mpsc` (sync) |\n| Broadcast / fan-out | `tokio::sync::broadcast` |\n\n`rayon` and `tokio` coexist — use `tokio::task::spawn_blocking` to call a rayon pool from async code. Never call `.block_on()` from inside a tokio task; it deadlocks the runtime.\n\n## Testing\n\n- Built-in `#[test]`. Prefer `cargo nextest run --workspace` over `cargo test` — it runs tests in parallel processes with proper isolation.\n- Unit tests live in `mod tests { ... }` at the bottom of the file (access to private items).\n- Integration tests in `tests/` directory. One file per public surface area.\n- `#[tokio::test]` for async tests. Add `flavor = \"multi_thread\"` when the code under test spawns tasks.\n- `rstest` for parametrized tests and fixtures. `proptest` / `quickcheck` for property-based tests on pure logic.\n- `insta` for snapshot testing CLI output, serialization, large structs. Review diffs with `cargo insta review`.\n- `assert_cmd` + `predicates` for CLI integration tests (invokes the binary, asserts on stdout/stderr/exit code).\n- **Assert on error variants with `matches!`**: `assert!(matches!(result.unwrap_err(), MyError::Validation(_)))`. Cleaner than `match` arms when the test only cares whether the error is the right kind, and doesn't force updates when unrelated variants are added.\n- Coverage: `cargo llvm-cov --workspace --html`. Target 70%+ on application code, higher on library crates.\n- **Fuzzing for parsers**: `cargo fuzz` + `libfuzzer-sys` on any code that parses untrusted input (file formats, protocols, query languages). A short nightly fuzz run surfaces the panics and UB that unit tests miss.\n\nFor generic test discipline (anti-patterns, mock rules, rationalization resistance), see the `ia-writing-tests` skill.\n\n## Unsafe Discipline\n\n- Default: no `unsafe`. If clippy flags it, don't `#[allow]` it — refactor.\n- Every `unsafe` block gets a `// SAFETY:` comment above it explaining why each invariant holds. No comment = reviewer rejects.\n- Keep `unsafe` blocks minimal — wrap in a safe abstraction at module boundary, mark the module `pub(crate)`.\n- Use `miri` (`cargo +nightly miri test`) on any crate containing `unsafe` or raw pointer arithmetic — catches UB that optimizers mask.\n- Prefer `bytemuck`, `zerocopy`, `bytes` over hand-rolled transmutes for zero-copy patterns.\n- **`std::env::set_var` and `remove_var` are `unsafe` under edition 2024.** Concurrent `getenv` from another thread is UB at the libc level; the unsafety can't be wrapped away by `OnceLock::call_once` or `std::sync::Once` — they ensure the closure runs once, not that it runs while no other thread is reading the environment. Pin every env-var write to single-threaded startup, before `tokio::main` or any `std::thread::spawn`. Common offender: native-library discovery paths (`LD_LIBRARY_PATH`, `ORT_DYLIB_PATH`, `LIBTORCH`, plugin loader paths) set lazily on first use — compute and set them in `main` (or a `static` initializer that runs before the runtime) so they're written before any concurrent reader exists.\n\n## Production Resilience\n\nWhen productionizing a service (config validation, `/health` + `/ready` endpoints, graceful shutdown, retries/timeouts/jitter, connection pools, diagnostic secret redaction), load [production-resilience.md](./references/production-resilience.md).\n\n## Observability\n\nFor logging (`tracing` + `tracing-subscriber` with init recipe), `#[instrument]` spans, correlation IDs, metrics, and distributed tracing patterns, load [observability.md](./references/observability.md). Never use `println!` or `log::` in new code.\n\n## CI\n\nGeneral CI design lives with the `ia-infrastructure-engineer` agent. For Rust-specific callouts (`rustsec/audit-check`, `cargo-llvm-cov`, `Swatinem/rust-cache`, `taiki-e/install-action`, matrix coverage guidance, doc-test step), load [ci-pipeline.md](./references/ci-pipeline.md).\n\n## Discipline\n\n- Simplicity first — every change as simple as possible, impact minimal code.\n- Only touch what's necessary — avoid unrelated changes in a PR.\n- No `#[allow(clippy::...)]` as a shortcut — fix the underlying issue. Document exceptions with a rationale.\n- Before adding a trait or generic, verify it's used in 3+ places. Otherwise a concrete type is clearer.\n- Verify: see Verify section — pass all checks with zero warnings before declaring done.\n\n## Verify\n\n- `cargo fmt --all -- --check` passes with zero diffs\n- `cargo clippy --workspace --all-targets --all-features -- -D warnings` passes\n- `cargo nextest run --workspace` (or `cargo test --workspace`) passes with zero failures\n- `cargo deny check` passes (licenses, advisories, duplicates) for any crate going to production\n- No new `unsafe` without `// SAFETY:` comment\n\n## References\n\n- [cli-tools.md](./references/cli-tools.md) — clap patterns, config layering, tracing setup, progress, shell completions\n- [axum-service.md](./references/axum-service.md) — project layout, extractors, error types, graceful shutdown, testing\n- [build-profiles.md](./references/build-profiles.md) — release/release-dbg/release-min profiles, mold linker, dev compile speedups\n- [ci-pipeline.md](./references/ci-pipeline.md) — Rust-specific CI steps (cargo audit, llvm-cov, rust-cache, matrix strategy, doc tests)\n- [production-resilience.md](./references/production-resilience.md) — fail-fast config, health/ready endpoints, graceful shutdown, retries, timeouts, connection pools\n- [observability.md](./references/observability.md) — tracing init recipe, span instrumentation, correlation IDs, metrics, distributed tracing","tags":["rust","systems","skills","iliaal","agent-skills","ai-coding-assistant","ai-tools","claude-code"],"capabilities":["skill","source-iliaal","skill-rust-systems","topic-agent-skills","topic-ai-coding-assistant","topic-ai-tools","topic-claude-code","topic-skills"],"categories":["ai-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/iliaal/ai-skills/rust-systems","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add iliaal/ai-skills","source_repo":"https://github.com/iliaal/ai-skills","install_from":"skills.sh"}},"qualityScore":"0.456","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 13 github stars · SKILL.md body (15,291 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:07:03.817Z","embedding":null,"createdAt":"2026-05-09T01:05:36.832Z","updatedAt":"2026-05-18T19:07:03.817Z","lastSeenAt":"2026-05-18T19:07:03.817Z","tsv":"'-1':343,348,353 '-8':740 '/embedded':22 '/health':1800 '/install-action':1870 '/ready':1801 '/references/axum-service.md':1276,2016 '/references/build-profiles.md':420,2026 '/references/ci-pipeline.md':1880,2035 '/references/cli-tools.md':1124,2005 '/references/observability.md':1835,2068 '/references/production-resilience.md':1813,2054 '0':1095 '1':739,1097 '2':1102 '2024':14,1682 '3':1109,1930 '50':1001 '70':1528 '90':640 'abstract':1628 'accept':482,586 'access':702,1406 'across':615,905,1023,1312 'actix':1152 'actix-web':1151 'ad':404,1519,1920 'add':1426 'advisori':63,1989 'agent':1855 'agent/pipe':1084 'all-featur':1966 'all-target':37,1963 'alloc':631,709,761,814 'allow':357,361,1599,1905 'annot':546 'anoth':1686 'anti':1575 'anti-pattern':1574 'anyhow':446 'anyon':302 'api':464,545,600,1051 'app':841 'apperror':1166,1170 'applic':10,516,1530 'application-lay':9 'approach':1290 'arc':611,695,944,1021,1201,1314,1317 'arc-swap':943 'arcswap':946 'area':1420 'argpars':1104 'arithmet':1651 'arm':1497 'arrayvec':752,753 'assert':1468,1478,1482,1488 'async':830,1028,1037,1292,1329,1357,1424 'async-std':1036 'attempt':453 'audit':2042 'auth':1213 'auto':504 'auto-convers':503 'automat':1118 'avoid':99,1898 'await':865,906,1009 'away':1700 'axum':1137,1140,1181 'axum-service.md':1275,2015 'backpressur':971,1269 'bail':512 'base':1148,1448 'batch':751 'behavior':294 'belong':196 'better':57 'beyond':735 'binari':109,158,269,402,440,1477 'block':880,886,892,1350,1361,1604,1622 'boilerpl':1057 'borrow':601,634 'bottleneck':829 'bottom':1402 'bound':769,973,1256 'boundari':497,1180,1631 'box':461,802 'break':253 'broadcast':1335,1341 'broken':536 'buffer':672,682,771 'bug':535 'build':27,282,384,389,681 'build-profiles.md':419,2025 'built':1374 'built-in':1373 'busi':151 'byte':662,663,689,693,1660 'bytemuck':1658 'bytesmut':679 'cach':925,2048 'call':588,813,1005,1352,1360,1703 'caller':254,556 'callout':1860 'cancel':868,875,956 'cancellationtoken':957 'candid':360 'cap':755,1250 'capabl':267 'capac':757 'care':1502 'cargo':26,34,44,48,55,60,69,87,95,388,1378,1383,1465,1521,1539,1639,1863,1952,1960,1972,1977,1984,2041 'cargo-deni':59 'cargo-llvm-cov':1862 'cargo-machet':68 'cargo-nextest':47 'cargo.lock':103 'cargo.toml':131,374 'case':642,742 'catch':559,1652 'central':162,304,1172 'chain':458 'chang':375,1885,1900 'channel':975,977,996 'check':67,969,1944,1955,1986 'ci':82,1844,1846,2039 'ci-pipeline.md':1879,2034 'clap':1047,1105,2006 'classifi':1261 'clean':1044 'cleaner':1494 'clear':288 'clearer':1937 'cli':157,1045,1457,1472 'cli-tools.md':1123,2004 'client':1223,1240 'clippi':32,35,1594,1906,1961 'clis':15 'closur':1712 'cmd':1469 'code':333,517,1094,1358,1432,1481,1531,1546,1843,1892 'codebas':1158 'coexist':1345 'cold':824 'collect':715 'combin':1264 'command':1065,1074,1082,1120 'comment':225,1608,1617,2002 'common':1746 'commonarg':1077 'comparison':809 'compil':86,272,564,2032 'complet':1134,2014 'comput':1768 'concept':245 'concret':1934 'concurr':986,1002,1288,1683,1789 'concurrencylimitlay':1234,1249,1266 'cond':514 'config':264,791,920,942,1126,1798,2008,2058 'configur':299 'connect':1806,2065 'constructor':597 'consum':239,435 'consumpt':1085 'contain':1646 'context':449 'contributor':80 'control':107 'convers':505 'convert':495 'copi':667,1669 'cor':1214 'correl':1826,2074 'cov':1524,1865,2045 'cover':7 'coverag':1520,1872 'cow':625 'cpu':413,889,1303 'crate':119,126,135,144,178,187,199,213,314,322,326,364,383,425,429,444,1190,1535,1636,1645,1993 'cuda':281 'cycl':193 'd':40,1969 'dashmap':796,797 'data':660,1301 'data-parallel':1300 'dbg':395 'deadlock':1369 'declar':1949 'decod':676 'default':833,1139,1590 'defin':430 'degrad':261 'deni':61,327,1985 'dep':28,66,140 'depend':73,127,147,153,159,182,189,203 'dependency-fre':181 'deriv':1050,1052,1054 'deseri':1186 'design':1847 'dev':406,2031 'dev-machin':405 'devic':275 'diagnost':1808 'diff':102,1463,1959 'differ':293 'directori':1414 'disciplin':575,1573,1589,1881 'discoveri':1751 'distribut':401,1830,2077 'doc':224,336,1875,2051 'doc-test':1874 'document':1113,1914 'doesn':1511 'domain':1111 'domin':701,918 'done':1950 'drift':320 'drive':1059 'drop':572,1013 'duplic':65,1990 'duplicate-dep':64 'dylib':1757 'dynam':861 'e':524,1869 'e.g':274,635,998 'earli':519 'edit':13,1681 'elis':638 'emit':1086 'endpoint':1802,2060 'engin':1854 'ensur':513,1710 'enum':786,1064 'enum-lik':785 'env':1672,1730 'env-var':1729 'environ':1726 'eras':466 'err':507,1491 'error':258,289,421,432,457,530,573,764,1099,1173,1263,1281,1484,1505,2020 'event':750 'everi':79,185,312,382,1602,1728,1884 'everyth':98,161 'exampl':329 'except':1915 'excess':1247 'exist':1157,1791 'exit':520,1093 'expect':474,480 'explain':493,1611 'explicit':511,1244 'export':207,234 'expos':214 'extract':1182 'extractor':1147,1280,2019 'extractor-bas':1146 'facad':217 'fail':283,2056 'fail-fast':2055 'failur':540,1983 'fallback':291 'fallibl':544 'fan':1337 'fan-out':1336 'fast':2057 'faster':53,912,948 'featur':194,255,838,842,1968 'file':1405,1416,1551 'find':71 'first':819,877,1766,1883 'first-win':876 'fit':994 'fix':756,1910 'fixtur':1442 'flag':195,1071,1079,1595 'flatten':1069,1075 'flavor':1427 'flight':1253 'fmt':45,1953 'follow':228 'foo':168 'forc':1513 'format':1552 'formatt':43 'frame':675 'framework':1138 'free':183,591 'frequent':557 'full':766,839 'function':547,584,629 'futur':873,1298 'fuzz':1536,1540,1559 'gate':256 'general':1845 'generat':1287 'generic':417,1571,1924 'get':1605 'getenv':1684 'give':806 'global':1203 'go':1994 'goe':104 'good':736,767 'gpu':276 'grace':1283,1803,2022,2061 'group':862 'growth':980 'guard':901 'guidanc':113,1873 'hand':1663 'hand-rol':1662 'handl':422,639,1106 'handler':678,1149,1161,1215 'hard':985 'health/ready':2059 'heap':708,734,760 'heap-alloc':759 'held':904 'help':1061,1115 'hide':978 'higher':1532 'hold':1615 'hot':603,706,924 'hot-path':705 'html':1526 'http':1004,1135,1222 'human':455 'human-read':454 'i/o':893,1293 'ia':1584,1852 'ia-infrastructure-engin':1851 'ia-writing-test':1583 'id':793,1827,2075 'ignor':558 'immut':671 'impact':1890 'impl':1164 'implement':1167 'import':242 'in-flight':1251 'independ':856,1291 'inform':468 'infrastructur':1853 'inherit':315 'init':1822,2070 'initi':1777 'inlin':714,728 'input':1177,1194,1550 'insid':1010,1364 'insta':1453,1466 'instead':566,661,1270 'instrument':1824,2073 'integr':1410,1473 'intern':246,779,1191 'interop':1043 'intorespons':1165,1168 'introduc':201 'invari':486,537,1614 'invok':1475 'inward':129 'isn':826 'isol':58,1393 'issu':1913 'item':731,741,1409 'iter':1308 'join':1299 'joinset':858,1296 'json':1078,1089,1183 'keep':173,1620 'key':748,795 'kind':1509 'known':723 'languag':1555 'larg':1460 'layer':11,125,1127,1219,1229,1231,1233,1235,1237,1243,2009 'layout':248,1279,2018 'lazi':1205 'lazili':1764 'ld':1753 'leaf':176 'leaf-most':175 'leak':803 'learn':240 'less':1056 'let':560,1006 'level':340,345,350,443,1693 'lib':894 'lib.rs':220 'libc':1692 'liber':470 'libfuzz':1542 'libfuzzer-si':1541 'librari':18,111,212,427,463,847,1534,1750,1754 'libtorch':1759 'licens':62,1988 'lifetim':606,637 'like':743,787 'limit':987 'linker':410,2030 'lint':33,305,368,377 'list':746 'live':1396,1848 'll':864 'llvm':1523,1864,2044 'llvm-cov':1522,2043 'load':418,1248,1811,1833,1878 'loader':1761 'loadshedlay':1236,1245,1265 'lock':951 'log':1128,1816,1840 'logic':152,1452 'long':965 'long-run':964 'lookup':747 'lower':428 'lto':392 'machet':70 'machin':407 'macro':844 'main':478,836,1100,1740,1773 'manag':29 'mani':926 'map':506,1175 'mark':1632 'mask':1656 'match':439,1487,1489,1496 'matrix':1871,2049 'matter':1217 'mean':1112 'member':133,172,313,363 'memori':979 'messag':492,770 'metric':1828,2076 'middlewar':1145,1207 'min':399 'minim':1623,1891 'miri':1638,1641 'miss':335,805,1569 'mix':1027 'mock':1577 'mod':1398 'model':997 'modern':8,112 'modul':223,247,354,1630,1634 'mold':409,2029 'mpsc':974,1328,1333 'multi':118,1428 'multi-cr':117 'must':257,358,541,902,968 'mutabl':1310 'mutex':897,910,931,1315 'myerror':508,1492 'n':727,730 'name':355,1241 'nativ':414,1143,1749 'native-librari':1748 'necessari':1897 'need':849 'network':673 'never':259,459,471,758,879,1359,1836 'new':1228,1842,1998 'newtyp':552 'newtype-wrap':551 'nextest':49,1379,1973 'night':1558,1640 'non':280 'non-cuda':279 'normal':636 'notic':52,303 'nurseri':349 'observ':1814 'observability.md':1834,2067 'obvious':608 'offend':1747 'often':300 'oncelock':1702 'one':215,241,379,651,1063,1415 'oom':982 'openapi':1286 'oper':298 'opt':365 'optim':817,1655 'order':1216 'ort':1756 'otherwis':907,1932 'outbound':1003,1221 'output':1458 'outsid':475 'own':593 'ownership':574 'p':89 'packag':93 'pair':1019 'panic':526,531,1563 'par':1307 'parallel':930,1302,1389 'parametr':1439 'pars':744,789,1548 'parser':674,1053,1538 'pass':1942,1956,1971,1980,1987 'path':243,604,707,825,955,990,1752,1755,1758,1762 'pattern':438,703,1576,1670,1832,2007 'pattern-match':437 'pedant':344 'per':76,244,325,774,812,1067,1417 'per-cal':811 'per-crat':324 'per-request':773 'permit':1007,1015 'persist':146 'pick':1030,1150 'pin':74,1727 'pipelin':1325 'place':380,1931 'plugin':1760 'point':128 'pointer':1650 'pool':1355,1807,2066 'possibl':1321,1889 'pr':101,1903 'predic':1470 'prefer':521,692,1377,1657 'println':1838 'prioriti':342,347,352 'privat':1408 'proceed':928 'process':1390 'produc':292,1267,1324 'product':1792,1996 'production':1795 'production-resilience.md':1812,2053 'profil':385,390,818,2028 'programm':534 'progress':1130,2012 'project':120,1278,2017 'propag':962 'proper':1268,1392 'properti':1447 'property-bas':1446 'proptest':1443 'protocol':136,149,155,179,677,1553 'provabl':488 'provid':1116 'pub':230,1635 'public':237,599,1418 'pure':1451 'purpos':25,227 'queri':1081,1554 'queue':1273 'quickcheck':1444 'race':872 'rare':940 'rarely-upd':939 'rate':1258 'ratelimitlay':1232,1255 'ration':1579 'rational':1918 'raw':1649 'rayon':1305,1342,1354 'rc':622 're':206,233,645,1785 're-export':205,232 'reach':609 'read':917,954,1724 'readabl':456 'reader':927,1790 'realloc':691 'recip':1823,2071 'reconsid':653 'recover':529 'redact':1810 'reduc':704 'refactor':1601 'refer':166,624,2003 'reject':1619 'releas':391,394,398,1016 'release-dbg':393 'release-min':397 'release/release-dbg/release-min':2027 'remov':1676 'reorgan':251 'repeat':782 'repeatedly-seen':781 'repetit':356 'repo':77 'report':1131 'reproduc':114 'request':265,775,1254,1257 'reserv':1108 'resili':1218,1793 'resist':1580 'result':447,522,549,554,1163 'result.unwrap':1490 'retri':1260,2063 'retries/timeouts/jitter':1805 'retrylay':1238,1259 'return':460,548,592,762,1101,1162 'review':1462,1467,1618 'rewrit':97 'right':1508 'role':426 'roll':1664 'root':211,309 'rout':794,922 'rstest':1437 'rt':843 'rule':1578 'ruleset':318 'run':966,1380,1386,1560,1713,1718,1779,1974 'runner':31,51 'runtim':263,539,834,882,1029,1371,1782 'rust':2,4,12,1858,2037,2047 'rust-cach':2046 'rust-specif':1857,2036 'rust-system':1 'rust-toolchain.toml':75 'rustfmt':42 'rustsec/audit-check':1861 'rwlock':915,1318 'safe':1627 'safeti':1607,2001 'scope':1320 'scratch':776 'script':30 'secret':1809 'section':1941 'see':1122,1274,1581,1939 'seen':783 'select':870 'sem.acquire':1008 'semant':938 'semaphor':983 'serd':1088 'serial':932,1459 'servic':6,17,150,1136,1192,1226,1239,1797 'servicebuild':1210,1227 'set':1673,1763,1770 'setup':1129,2011 'share':137,416,614,620,670,1022,1070,1197,1225,1309 'share-gener':415 'shed':1246 'shell':1133,2013 'ship':568 'short':1557 'shortcut':1909 'shutdown':963,1284,1804,2023,2062 'signatur':585,652 'silent':260,290,571 'silently-drop':570 'simpl':1887 'simplic':1882 'singl':92,618,1323,1735 'single-packag':91 'single-produc':1322 'single-thread':617,1734 'site':589 'size':719 'skill':1587 'skill-rust-systems' 'slice':668,698 'slim':852 'slot':1018 'small':721,749 'smallest':1319 'smallvec':724,725 'smol':1040 'snapshot':921,936,1455 'snapshot-swap':935 'sometim':630,633 'source-iliaal' 'space':777 'span':1825,2072 'spawn':854,885,989,1295,1349,1435,1745 'spawner':1024 'specif':1859,2038 'speedup':408,2033 'spill':732 'split':423,684,686 'stabl':216 'stack':328,712,1220 'stack-or-inlin':711 'startup':285,1737 'state':226,1198,1200,1311 'static':799,807,1206,1776 'status':1174 'stay':851 'std':21,908,1038,1331,1671,1706,1743 'stdout/stderr/exit':1480 'step':1877,2040 'stick':1033 'still':949 'storag':145,156 'str':577,626,800,808 'strategi':2050 'string':579,594,778,784,798,821,1091 'struct':1076,1461 'subcommand':1055,1068 'subscrib':1820 'success':1096 'surfac':238,1419,1561 'swap':937,945 'swatinem/rust-cache':1866 'symbol':396 'sync':845,888,896,909,914,1327,1332,1334,1340,1707 'sys':1543 'system':3,5 'tabl':923 'tag':745 'taiki':1868 'taiki-':1867 'take':576 'target':39,412,1527,1965 'target-cpu':411 'task':857,884,967,1012,1348,1367,1436 'tenant':792 'test':50,56,476,1372,1376,1384,1387,1395,1399,1411,1413,1422,1425,1434,1440,1449,1456,1474,1500,1568,1572,1586,1642,1876,1978,2024,2052 'text':1062 'thin':219 'thiserror':434,500 'thread':616,619,1313,1429,1687,1722,1736,1744 'time':565 'timeout':874,1212,2064 'timeoutlay':1230 'togeth':866 'tokio':832,835,853,869,883,895,913,960,1031,1142,1294,1326,1339,1344,1347,1366,1421,1739 'tokio-n':1141 'tokio-util':959 'toml':330 'tool':23,24,1046 'top':442 'top-level':441 'topic-agent-skills' 'topic-ai-coding-assistant' 'topic-ai-tools' 'topic-claude-code' 'topic-skills' 'touch':1894 'tower':1144,1209 'trace':1211,1817,1819,1831,2010,2069,2078 'tracing-subscrib':1818 'trait':1922 'transient':1262 'transmut':1665 'true':170,370 'trust':1193 'tune':387 'type':138,180,431,656,1058,1282,1935,2021 'typic':718 'ub':1565,1653,1689 'unbound':976,1272 'under':1912 'unit':1394,1567 'unrel':1516,1899 'unsaf':332,1588,1592,1603,1621,1647,1679,1999 'unsafeti':1695 'untrust':1549 'unus':72 'unwrap':472 'updat':88,96,381,941,1514 'upgrad':94 'upheld':489 'use':83,121,231,359,445,469,542,621,1048,1159,1188,1346,1637,1767,1837,1928 'usual':738 'util':961 'valid':561,1176,1187,1189,1196,1493,1799 'valu':788,1092 'var':1674,1677,1731 'variant':467,501,1066,1485,1517 'vec':582,595,696,820 'verifi':1925,1938,1940,1951 'version':106,163,1117,1121 'via':972,1087,1119,1199,1208 'warn':41,334,337,341,346,351,1947,1970 'wasn':270 'web':16,1153 'whether':654,1503 'win':115,878 'without':192,252,301,690,810,2000 'work':890,1304 'workload':1289 'workspac':36,116,123,132,143,169,210,308,369,1381,1525,1962,1975,1979 'workspace.dependencies':134,165 'workspace.lints':311 'workspace.lints.clippy':338 'workspace.lints.rust':331 'wrap':553,1624,1699 'write':646,919,1585,1732 'written':1786 'x':562 'zero':666,1668,1946,1958,1982 'zero-copi':665,1667 'zerocopi':1659","prices":[{"id":"7b65f85b-a8a7-4210-998e-562822c9b585","listingId":"cc668a48-61d4-4257-ad68-e0640b1792ca","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"iliaal","category":"ai-skills","install_from":"skills.sh"},"createdAt":"2026-05-09T01:05:36.832Z"}],"sources":[{"listingId":"cc668a48-61d4-4257-ad68-e0640b1792ca","source":"github","sourceId":"iliaal/ai-skills/rust-systems","sourceUrl":"https://github.com/iliaal/ai-skills/tree/master/skills/rust-systems","isPrimary":false,"firstSeenAt":"2026-05-09T01:05:36.832Z","lastSeenAt":"2026-05-18T19:07:03.817Z"}],"details":{"listingId":"cc668a48-61d4-4257-ad68-e0640b1792ca","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"iliaal","slug":"rust-systems","github":{"repo":"iliaal/ai-skills","stars":13,"topics":["agent-skills","ai-coding-assistant","ai-tools","claude-code","skills"],"license":"mit","html_url":"https://github.com/iliaal/ai-skills","pushed_at":"2026-05-16T13:15:17Z","description":"Curated collection of agent skills for AI coding assistants.","skill_md_sha":"d9d8c42b441bb63bad4339986d4d08a342992f01","skill_md_path":"skills/rust-systems/SKILL.md","default_branch":"master","skill_tree_url":"https://github.com/iliaal/ai-skills/tree/master/skills/rust-systems"},"layout":"multi","source":"github","category":"ai-skills","frontmatter":{"name":"rust-systems","description":">-"},"skills_sh_url":"https://skills.sh/iliaal/ai-skills/rust-systems"},"updatedAt":"2026-05-18T19:07:03.817Z"}}