Agent skill

Rust

by ericrisco in ericrisco/rsc-harness

A skill your agent uses when writing, reviewing, testing, or shipping Rust — ownership and the borrow checker (move/borrow/clone, Arc/RefCell, lifetimes), errors with Result/?/thiserror/anyhow…

MITAuto-check passed

Install Rust

skills CLI
$ npx skills add ericrisco/rsc-harness --skill rust -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ericrisco/rsc-harness rust --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/rust .claude/skills/rust && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
rust
GitHub stars
167
Token cost
~3.6k tokens
SKILL.md length
1,066 words
Files
8 (incl. scripts, references)
Skills in repo
227
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when writing, reviewing, testing, or shipping Rust — ownership and the borrow checker (move/borrow/clone, Arc/RefCell, lifetimes), errors with Result/?/thiserror/anyhow…

  • Shipping Rust — ownership and the borrow checker (move/borrow/clone
  • SKILL.md covers Ownership & borrowing…, Errors, Async (tokio, essentials) and Service (axum, essentials), plus 7 more sections
  • Runs Shell scripts from its folder; calls cargo
  • Errors with Result/?/thiserror/anyhow

What it does

Rust is an agent skill from ericrisco/rsc-harness. Use when writing, reviewing, testing, or shipping Rust — ownership and the borrow checker (move/borrow/clone, Arc/RefCell, lifetimes), errors with Result/?/thiserror/anyhow, async on tokio, axum 0.8 services, cargo test, and sqlx + cargo-audit hardening. NOT the same service in Go (that is go), NOT a desktop webview shell (that is tauri).

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/async-tokio.md`).

It works with Rust and Tauri. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.

When your agent uses it

  • Shipping Rust — ownership and the borrow checker (move/borrow/clone
  • Errors with Result/?/thiserror/anyhow
  • Axum 0.8 services
  • Sqlx + cargo-audit hardening

Example prompts

  • “/rust”

Requirements

  • A Bash shell
  • Docker

What it can do on your machine

Read from SKILL.md and the folder at commit e3d5b33. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • cargo

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Rust loads about 3.6k tokens when it runs, and up to ~7.8k if it reads all its reference files. Until then it costs about 88 tokens; SKILL.md has 1,066 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~88
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~7.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from ericrisco/rsc-harness at commit e3d5b33, republished under its MIT licence (© ericrisco). 1,066 words, ~3,647 tokens.

Download SKILL.mdSave it as .claude/skills/rust/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
rust
description
Use when writing, reviewing, testing, or shipping Rust — ownership and the borrow checker (move/borrow/clone, Arc/RefCell, lifetimes), errors with Result/`?`/thiserror/anyhow, async on tokio, axum 0.8 services, cargo test, and sqlx + cargo-audit hardening. NOT the same service in Go (that is `go`), NOT a desktop webview shell (that is `tauri`).
tags
rust, tokio, axum, async, backend, service
recommends
go, postgresdb, secure-coding, deployment
origin
risco

Idiomatic Rust services

Write, review, test, and ship idiomatic async Rust services with the ownership model working for you, not against you.

Targets Rust 1.85+ / edition 2024 as the floor: native async fn in traits (no reflexive #[async_trait]), tokio 1.x as the runtime, axum 0.8 for the HTTP surface ({id} path-capture syntax, async-trait-free extractors), thiserror 2 for library error enums and anyhow at the application edge, sqlx for compile-time-checked SQL, and tracing for structured observability.

The thing an agent gets wrong in Rust is almost never syntax — it is ownership. Most "bugs" are compile errors about moves, borrows, and Send + Sync across .await. Front-load that mental model; the rest follows.

Ownership & borrowing (essentials)

This is the skill's center of gravity. Three moves: move (transfer ownership), borrow (&/&mut, no transfer), clone (a real copy, real cost) — and prefer them in that order, borrow first. Take &str/&[T] in function params, return owned String/Vec<T>: borrow on the way in, own on the way out is both the most flexible and the cheapest.

rust
fn print_name(name: &str) { println!("{name}"); }   // borrows; caller keeps ownership

let s = String::from("ada");
print_name(&s);                                       // Good: lend a reference
println!("{s}");                                      // still usable

// Bad: takes by value, moves it, then the caller can't use `s` anymore.
fn consume(name: String) { /* ... */ }
consume(s);
// println!("{s}");  // error[E0382]: borrow of moved value: `s`

The four borrow-checker errors you will actually hit, with the fix:

rust
// 1. "value moved here" (E0382): you used a value after moving it.
//    Fix: borrow instead of move, or .clone() only if you genuinely need two owners.
let v = vec![1, 2, 3];
let first = &v[0];           // Good: borrow
// let taken = v; let _ = first;  // Bad: moves v while `first` borrows it.

// 2. "cannot borrow as mutable more than once" (E0499): two &mut alive at once.
//    Fix: scope the first borrow so it ends before the second begins.
let mut data = vec![1, 2, 3];
{ let a = &mut data; a.push(4); }   // borrow ends here
let b = &mut data; b.push(5);       // Good: non-overlapping

// 3. "cannot borrow as mutable, already borrowed as immutable" (E0502).
//    Fix: don't hold a shared ref across a mutation; collect indices first, mutate after.

// 4. "does not live long enough" (E0597): a reference outlives the value it points to.
//    Fix: return an owned value, or restructure so the owner outlives the borrow.

Shared state: pick the smallest tool that fits. Decision table —

NeedUseWhy
One owner, sized valuethe value, or Box<T>Box only when heap/indirection/dyn is required
Shared ownership, single threadRc<T>cheap refcount, not thread-safe
Shared ownership, across threads/awaitArc<T>atomic refcount; the default for async app state
Interior mutability, single threadRefCell<T>runtime borrow check; panics on violation
Shared mutable state, asyncArc<Mutex<T>> (tokio's)but prefer a channel if it is really message passing
Read-heavy shared stateArc<RwLock<T>>many readers, rare writer

Shared async state is Arc<AppState> injected through axum State — never a global static mut. Lifetimes, 'static, Cow, and the full smart-pointer tree -> references/ownership.md.

Errors

Error modeling is owned here, in Rust terms — it is not a separate skill. The model: Result<T, E> + ?, typed enums for libraries, anyhow at the edge, one mapping from a domain enum to an HTTP status.

rust
use thiserror::Error;

// Library / domain layer: a typed enum callers can match on. #[from] gives free `?` conversion.
#[derive(Debug, Error)]
pub enum UserError {
    #[error("user {0} not found")]
    NotFound(i64),
    #[error("database error")]
    Db(#[from] sqlx::Error),   // any sqlx::Error becomes UserError::Db via `?`
}
rust
// Application edge: anyhow when you just need context, not a match.
use anyhow::Context;
let config = std::fs::read_to_string(path)
    .with_context(|| format!("reading config at {path}"))?;   // adds a human breadcrumb

The 3-layer flow (twin of go's). Repository returns the typed domain error; service propagates with ?; the handler maps the enum to a status once, via IntoResponse — pattern-match the variant, never string-match the message, and log only the unexpected one (no internal leak to the client).

rust
use axum::{http::StatusCode, response::{IntoResponse, Response}, Json};
use serde_json::json;

impl IntoResponse for UserError {
    fn into_response(self) -> Response {
        let status = match self {
            UserError::NotFound(_) => StatusCode::NOT_FOUND,            // 404
            UserError::Db(ref e) => {                                  // 500
                tracing::error!(error = %e, "unexpected db error");    // log here, not to the client
                StatusCode::INTERNAL_SERVER_ERROR
            }
        };
        (status, Json(json!({ "error": self.to_string() }))).into_response()
    }
}

Full repo->service->handler skeleton -> references/axum-service.md.

Async (tokio, essentials)

#[tokio::main] boots the multi-thread runtime; futures do nothing until .await. Bound your fan-out:

rust
use tokio::task::JoinSet;

let mut set = JoinSet::new();
for id in ids {                                  // Good: a JoinSet you can drain and cap
    set.spawn(async move { fetch(id).await });
}
let mut out = Vec::new();
while let Some(res) = set.join_next().await {
    out.push(res??);                             // join error, then task error
}

The two pitfalls that bite agents, with the fix:

rust
// Bad: std Mutex guard held across .await -> "future cannot be sent between threads safely".
let guard = state.lock().unwrap();
do_io().await;                  // guard is still alive here -> not Send
guard.update();

// Good: drop the lock before awaiting, or use tokio::sync::Mutex if the lock must span the await.
{
    let mut g = state.lock().unwrap();
    g.update();
}                               // guard dropped here
do_io().await;                  // nothing non-Send is held across the await
rust
// Bad: a CPU-bound parse on the async worker thread starves every other task.
let parsed = heavy_parse(&blob);          // blocks the executor
// Good: move blocking/CPU work off the runtime.
let parsed = tokio::task::spawn_blocking(move || heavy_parse(&blob)).await?;

select! races futures (handle a cancellation token in one arm); tokio::sync::mpsc for message passing — prefer a channel over Arc<Mutex<T>> when the data flows one way. Cancellation, a bounded-concurrency + jittered-retry helper (ctx-aware, never retries a 4xx), and the full Send + Sync rules -> references/async-tokio.md.

Service (axum, essentials)

axum 0.8: {id} capture in the path, Path/State/Json extractors, your error enum as the return:

rust
use axum::{extract::{Path, State}, routing::get, Router, Json};
use std::sync::Arc;

async fn get_user(
    State(app): State<Arc<AppState>>,            // shared state, not a global
    Path(id): Path<i64>,                         // {id} parsed and typed
) -> Result<Json<User>, UserError> {             // UserError: IntoResponse maps it
    let user = app.users.find(id).await?;        // `?` propagates the typed error
    Ok(Json(user))
}

let app = Router::new()
    .route("/users/{id}", get(get_user))         // 0.8 syntax: {id}, not :id
    .with_state(state);

Validate at the boundary and parse into a typed domain model — "parse, don't validate" makes illegal states unrepresentable, so the handler body never re-checks. Full skeleton — tower middleware (TraceLayer, timeout, request-id), graceful shutdown via axum::serve(...).with_graceful_shutdown(...), and JSON helpers -> references/axum-service.md.

Project layout

Keep the binary thin; put logic in the library so tests and integration tests can reach it.

text
my-service/
  Cargo.toml          # [dependencies], [profile.release], optional [workspace]
  src/
    main.rs           # entrypoint: parse config, build state, axum::serve — wiring only
    lib.rs            # pub mod error; pub mod app; pub mod users; — the testable surface
    error.rs          # the thiserror enum + IntoResponse
    users/
      mod.rs          # handlers + the domain model
      repo.rs         # sqlx queries
  tests/
    users_api.rs      # integration tests that spin up the Router

A larger system becomes a Cargo workspace ([workspace] members = [...]) with one crate per bounded context. Gate optional deps behind [features]. The lib.rs carries #![forbid(unsafe_code)].

Testing (essentials)

#[test] for sync, #[tokio::test] for async; integration tests under tests/ exercise the real Router; doctests keep examples honest.

rust
#[tokio::test]
async fn get_user_404_when_missing() {
    let app = build_router(test_state());            // the same Router main builds
    let res = app
        .oneshot(Request::get("/users/999").body(Body::empty()).unwrap())
        .await
        .unwrap();
    assert_eq!(res.status(), StatusCode::NOT_FOUND);
}

Use cargo nextest run for faster, cleaner parallel runs; cargo test --doc for doctests. Trait-based fakes (a UserRepo trait the handler depends on, a fake impl in tests) keep the DB out of unit tests. Integration matrices, insta snapshots, and the full tests/ HTTP setup -> references/testing.md.

Show full SKILL.md (460 more words)Show less

Security (embedded)

Parametrize SQL, forbid unsafe, audit dependencies, read secrets from the environment:

rust
// Good: bound parameters; sqlx checks the query at compile time against the DB schema.
sqlx::query_as!(User, "SELECT id, name FROM users WHERE id = $1", id).fetch_one(&pool).await?;

// Bad: format! into SQL is injection, full stop.
// sqlx::query(&format!("SELECT * FROM users WHERE id = {id}")).fetch_one(&pool).await?;

#![forbid(unsafe_code)] at the crate root; run cargo audit (RustSec advisories) and cargo deny (license

  • ban + advisory policy) in CI; never .unwrap() on untrusted input — a malicious request becomes a panic. Read secrets from env or a secret manager, never hardcode or log them. Deeper authz / threat modeling -> secure-coding. Pure SQL schema/index/plan tuning -> postgresdb; this skill covers only the Rust-side sqlx query.

Production

Structured logs and a lean release binary:

rust
// JSON tracing subscriber, level from RUST_LOG; do this once in main before serving.
tracing_subscriber::fmt().json().with_env_filter(tracing_subscriber::EnvFilter::from_default_env()).init();
toml
[profile.release]
lto = true              # link-time optimization: smaller, faster binary
codegen-units = 1       # better optimization at the cost of compile time
panic = "abort"         # no unwinding in prod; smaller binary, fail fast
strip = true            # strip symbols

Expose /healthz (static 200 liveness) and /readyz (pings the DB pool, 503 on failure). Docker: multi-stage build, cargo build --release, copy the binary onto a distroless/slim base. Full Containerfile + CI -> deployment.

Anti-patterns

Anti-patternReality / Do instead
.clone() to make the borrow checker happyIt hides the real ownership question; borrow, or restructure who owns what.
.unwrap() / .expect() off the test pathA panic on the request path is a 500 or a crashed worker; use ? + a typed error.
Matching an error by its message stringMessages are prose and they change; match the enum variant.
Box<dyn Error> everywhere because it is simplerNothing can branch on the failure; use a thiserror enum the caller can match.
#[async_trait] on every async traitEdition 2024 has native async fn in traits; drop the macro for most cases.
block_on inside an async fnNesting a runtime panics or deadlocks; restructure to .await.
A bare tokio::spawn per loop iterationUnbounded fan-out exhausts the runtime; bound it with JoinSet/semaphore.
Arc<Mutex<T>> for everything sharedIf data flows one way it is a channel; reach for mpsc first.
unsafe to get past the borrow checkerunsafe turns a compile error into UB; the checker was right — restructure.
Skipping clippy as "just style"clippy catches correctness (.unwrap() on Option, await-holds-lock); gate on -D warnings.

Gates & commands

TaskCommand
Format checkcargo fmt --all -- --check
Lint (gate)cargo clippy --all-targets -- -D warnings
Testcargo test / cargo nextest run
Doctestscargo test --doc
Audit depscargo audit / cargo deny check
Local gate./scripts/verify.sh (run in your crate root)

Format and lint are build gates, not suggestions.

Project grounding (02-DOCS)

In a project with a 02-DOCS/ layer (the harness wiki), the service decisions live in 02-DOCS/wiki/stack/rust.md, indexed from 02-DOCS/wiki/index.md. Read it first and stay consistent; if it is missing or stale, write the project's real choices there — crate/workspace layout, runtime (tokio), HTTP framework (axum 0.8), error strategy (thiserror enum + IntoResponse mapping), DB layer (sqlx + pool), tracing and concurrency defaults — bump its Updated date, and index it. No 02-DOCS/? Skip silently. Conventions are recorded, not gated — never block the task on this.

go is the structural twin: same write/review/test/ship service shape, GC + goroutines + multi-return errors instead of ownership + futures + Result. A desktop shell around a webview is tauri, not this.

© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 7 other files (scripts, references) in skills/rust of ericrisco/rsc-harness.

  • SKILL.md
  • evals/README.md
  • evals/cases.yaml
  • references/async-tokio.md
  • references/axum-service.md
  • references/ownership.md
  • references/testing.md
  • scripts/verify.sh

Open the folder on GitHubat commit e3d5b33

Compare with similar skills

Rust next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Rust compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Rust this skillericrisco/rsc-harness167—~3.6kAutomated safety check: PassMIT
Manage Skills Hubqufei1993/skills-hub1.7k—~3.2kAutomated safety check: PassMIT
Rgsm Gui Acceptancemcthesw/game-save-manager1.1k—~1.1kAutomated safety check: PassAGPL-3.0
Cut Releasedelexw/claude-code-trace3771 repos~1.4kAutomated safety check: PassMIT
Update TranslationsRaicuparta/rai-pal732—~839Automated safety check: PassGPL-3.0
Papr Rssl0ng-ai/papr539—~1.1kAutomated safety check: PassMIT

Similar skills

  • Manage Skills Hub

    qufei1993/skills-hub

    A skill your agent uses whenever an Agent needs to query, find, install, deploy, update, tag, adopt, diagnose, or safely remove Skills Hub content, including natural-language requests to manage…

    1.7k GitHub stars~3.2k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Rgsm Gui Acceptance

    mcthesw/game-save-manager

    Prepare change-specific RGSM GUI acceptance environments and short manual scenarios when the user wants to try a change locally.

    1.1k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Cut Release

    delexw/claude-code-trace

    Cuts a new versioned release of claude-code-trace end-to-end without asking any questions.

    377 GitHub starsUsed in 1 repo~1.4k tokens
    DevelopmentAuto-check passed
  • Update Translations

    Raicuparta/rai-pal

    A skill your agent uses when asked to update translations, localize strings, add new languages, fix missing translation keys, or sync language files in this project.

    732 GitHub stars~839 tokensUpdated yesterday
    Writing & ContentAuto-check passed
  • Papr Rss

    l0ng-ai/papr

    Read, search and triage the user's Papr RSS subscriptions from the shell via the papr CLI.

    539 GitHub stars~1.1k tokensUpdated 15 days ago
    Knowledge ManagementAuto-check passed
  • Desktop Release Sync Landing

    Eynzof/Hermes-CN-Desktop

    Use only for stable/public Hermes Agent CN Desktop releases that should be visible to all users.

    1.7k GitHub stars~1.3k tokensUpdated 17 days ago
    DevOps & CloudAuto-check passed

More from ericrisco/rsc-harness

All 227 skills in this repo
  • Ab Testing

    ericrisco/rsc-harness

    A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…

    167 GitHub stars~2.4k tokensUpdated today
    Auto-check passed
  • Accessibility

    ericrisco/rsc-harness

    A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…

    167 GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Ads

    ericrisco/rsc-harness

    A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…

    167 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Agent Eval

    ericrisco/rsc-harness

    A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…

    167 GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • AI Media

    ericrisco/rsc-harness

    A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…

    167 GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Analytics

    ericrisco/rsc-harness

    A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.

    167 GitHub stars~2.8k tokensUpdated today
    Auto-check passed

Works with

Questions about Rust

What does Rust do?

A skill your agent uses when writing, reviewing, testing, or shipping Rust — ownership and the borrow checker (move/borrow/clone, Arc/RefCell, lifetimes), errors with Result/?/thiserror/anyhow…. Rust is an agent skill from ericrisco/rsc-harness.8 services, cargo test, and sqlx + cargo-audit hardening.

When should I use Rust?

Rust fits situations like: shipping Rust — ownership and the borrow checker (move/borrow/clone; errors with Result/?/thiserror/anyhow; axum 0.8 services; sqlx + cargo-audit hardening.

How do I install Rust in Claude Code?

Run `npx skills add ericrisco/rsc-harness --skill rust -a claude-code`. Or copy the skill folder (skills/rust in ericrisco/rsc-harness) into .claude/skills/rust in your project. Claude Code loads it when a task matches its description.

How do I install Rust in Codex?

Run `npx skills add ericrisco/rsc-harness --skill rust -a codex`. Or copy the skill folder (skills/rust in ericrisco/rsc-harness) into .agents/skills/rust in your project. Codex loads it when a task matches its description.

Can I use Rust in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill rust -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/rust, .gemini/skills/rust, .github/skills/rust and .opencode/skills/rust in your project.

What does Rust need to run?

Going by SKILL.md and its folder, Rust needs a shell for the scripts in its folder and the command-line tools its instructions call (cargo). Our summary lists: A Bash shell; Docker.

Does Rust access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Rust safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Rust use?

Rust is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Rust use?

About 3.6k tokens (SKILL.md is roughly 15k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 4.1k tokens, read only when the agent opens those files.

What are the alternatives to Rust?

Skills that share tags, products or a category with Rust: Manage Skills Hub (qufei1993/skills-hub, 1.7k stars), Rgsm Gui Acceptance (mcthesw/game-save-manager, 1.1k stars), Cut Release (delexw/claude-code-trace, 377 stars) and Update Translations (Raicuparta/rai-pal, 732 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Rust?

ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 167 GitHub stars. The repository holds 227 skills in this directory. The repository was last updated on October 7, 2026.

Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.