
Rust Router
- 958 installs
- 1.4k repo stars
- Updated May 24, 2026
- actionbook/rust-skills
rust-router is a Claude Code skill that routes every Rust question, error, or design decision through a structured cognitive framework instead of answering directly for developers who need systematic analysis of ownershi
About
rust-router is an actionbook/rust-skills Claude Code skill marked as highest priority for all Rust work including errors, design, and coding comparisons. The skill triggers on cargo, rustc, Cargo.toml, async/await, tokio, Send, Sync, and common compiler errors such as E0382, E0597, E0277, E0308, E0499, E0502, and E0596 covering borrow, lifetime, ownership, trait, and type failures. Developers reach for rust-router when generic LLM answers miss Rust-specific reasoning about value moves, cannot borrow, or does not live long enough diagnostics. The framework supports intent analysis and best-practice comparisons such as tokio versus async-std before producing actionable guidance.
- Triggers on all Rust, Cargo, rustc, lifetime, borrow checker, and async questions
- Meta-cognition framework with 3 cognitive layers (Domain Constraints, Design Choices, Implementation Tactics)
- Highest priority routing for comparison, best-practice, versus, and error-code queries (E0382, E0597, E0277, etc.)
- Context-optimized v2.0 with examples moved to sub-files for cleaner agent context
- Always starts with intent analysis before any code or explanation
Rust Router by the numbers
- 958 all-time installs (skills.sh)
- +94 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #409 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/actionbook/rust-skills --skill rust-routerAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 958 |
|---|---|
| repo stars | ★ 1.4k |
| Last updated | May 24, 2026 |
| Repository | actionbook/rust-skills ↗ |
How do you debug Rust borrow and lifetime errors?
Route every Rust question, error, or design decision through a structured cognitive framework instead of answering directly.
Who is it for?
Rust developers hitting borrow checker, lifetime, async, or trait errors who want framework-guided analysis before accepting a quick patch.
Skip if: Teams working exclusively in non-Rust languages or seeking generic language-agnostic debugging without cargo or rustc context.
When should I use this skill?
Any Rust, cargo, rustc, or E0xxx compile error appears, or a tokio versus async-std design comparison is requested.
What you get
Structured Rust analysis covering intent, error classification, framework-guided fix path, and design recommendation.
- Structured error analysis
- Framework-guided fix recommendation
By the numbers
- Documents 7 named Rust compiler error codes: E0382, E0597, E0277, E0308, E0499, E0502, E0596
Files
---
Rust Question Router
Version: 2.0.0 | Last Updated: 2025-01-22
>
v2.0: Context optimized - detailed examples moved to sub-files
Meta-Cognition Framework
Core Principle
Don't answer directly. Trace through the cognitive layers first.
Layer 3: Domain Constraints (WHY)
├── Business rules, regulatory requirements
├── domain-fintech, domain-web, domain-cli, etc.
└── "Why is it designed this way?"
Layer 2: Design Choices (WHAT)
├── Architecture patterns, DDD concepts
├── m09-m15 skills
└── "What pattern should I use?"
Layer 1: Language Mechanics (HOW)
├── Ownership, borrowing, lifetimes, traits
├── m01-m07 skills
└── "How do I implement this in Rust?"Routing by Entry Point
| User Signal | Entry Layer | Direction | First Skill |
|---|---|---|---|
| E0xxx error | Layer 1 | Trace UP ↑ | m01-m07 |
| Compile error | Layer 1 | Trace UP ↑ | Error table below |
| "How to design..." | Layer 2 | Check L3, then DOWN ↓ | m09-domain |
| "Building [domain] app" | Layer 3 | Trace DOWN ↓ | domain-* |
| "Best practice..." | Layer 2 | Both directions | m09-m15 |
| Performance issue | Layer 1 → 2 | UP then DOWN | m10-performance |
CRITICAL: Dual-Skill Loading
When domain keywords are present, you MUST load BOTH skills:
| Domain Keywords | L1 Skill | L3 Skill |
|---|---|---|
| Web API, HTTP, axum, handler | m07-concurrency | domain-web |
| 交易, 支付, trading, payment | m01-ownership | domain-fintech |
| CLI, terminal, clap | m07-concurrency | domain-cli |
| kubernetes, grpc, microservice | m07-concurrency | domain-cloud-native |
| embedded, no_std, MCU | m02-resource | domain-embedded |
---
INSTRUCTIONS FOR CLAUDE
CRITICAL: Negotiation Protocol Trigger
BEFORE answering, check if negotiation is required:
| Query Contains | Action |
|---|---|
| "比较", "对比", "compare", "vs", "versus" | MUST use negotiation |
| "最佳实践", "best practice" | MUST use negotiation |
| Domain + error (e.g., "交易系统 E0382") | MUST use negotiation |
| Ambiguous scope (e.g., "tokio 性能") | SHOULD use negotiation |
When negotiation is required, include:
## Negotiation Analysis
**Query Type:** [Comparative | Cross-domain | Synthesis | Ambiguous]
**Negotiation:** Enabled
### Source: [Agent/Skill Name]
**Confidence:** HIGH | MEDIUM | LOW | UNCERTAIN
**Gaps:** [What's missing]
## Synthesized Answer
[Answer]
**Overall Confidence:** [Level]
**Disclosed Gaps:** [Gaps user should know]详细协议见: patterns/negotiation.md---
Default Project Settings
When creating new Rust projects or Cargo.toml files, ALWAYS use:
[package]
edition = "2024" # ALWAYS use latest stable edition
rust-version = "1.85"
[lints.rust]
unsafe_code = "warn"
[lints.clippy]
all = "warn"
pedantic = "warn"---
Layer 1 Skills (Language Mechanics)
| Pattern | Route To |
|---|---|
| move, borrow, lifetime, E0382, E0597 | m01-ownership |
| Box, Rc, Arc, RefCell, Cell | m02-resource |
| mut, interior mutability, E0499, E0502, E0596 | m03-mutability |
| generic, trait, inline, monomorphization | m04-zero-cost |
| type state, phantom, newtype | m05-type-driven |
| Result, Error, panic, ?, anyhow, thiserror | m06-error-handling |
| Send, Sync, thread, async, channel | m07-concurrency |
| unsafe, FFI, extern, raw pointer, transmute | unsafe-checker |
Layer 2 Skills (Design Choices)
| Pattern | Route To |
|---|---|
| domain model, business logic | m09-domain |
| performance, optimization, benchmark | m10-performance |
| integration, interop, bindings | m11-ecosystem |
| resource lifecycle, RAII, Drop | m12-lifecycle |
| domain error, recovery strategy | m13-domain-error |
| mental model, how to think | m14-mental-model |
| anti-pattern, common mistake, pitfall | m15-anti-pattern |
Layer 3 Skills (Domain Constraints)
| Domain Keywords | Route To |
|---|---|
| fintech, trading, decimal, currency | domain-fintech |
| ml, tensor, model, inference | domain-ml |
| kubernetes, docker, grpc, microservice | domain-cloud-native |
| embedded, sensor, mqtt, iot | domain-iot |
| web server, HTTP, REST, axum, actix | domain-web |
| CLI, command line, clap, terminal | domain-cli |
| no_std, microcontroller, firmware | domain-embedded |
---
Error Code Routing
| Error Code | Route To | Common Cause |
|---|---|---|
| E0382 | m01-ownership | Use of moved value |
| E0597 | m01-ownership | Lifetime too short |
| E0506 | m01-ownership | Cannot assign to borrowed |
| E0507 | m01-ownership | Cannot move out of borrowed |
| E0515 | m01-ownership | Return local reference |
| E0716 | m01-ownership | Temporary value dropped |
| E0106 | m01-ownership | Missing lifetime specifier |
| E0596 | m03-mutability | Cannot borrow as mutable |
| E0499 | m03-mutability | Multiple mutable borrows |
| E0502 | m03-mutability | Borrow conflict |
| E0277 | m04/m07 | Trait bound not satisfied |
| E0308 | m04-zero-cost | Type mismatch |
| E0599 | m04-zero-cost | No method found |
| E0038 | m04-zero-cost | Trait not object-safe |
| E0433 | m11-ecosystem | Cannot find crate/module |
---
Functional Routing Table
| Pattern | Route To | Action |
|---|---|---|
| latest version, what's new | rust-learner | Use agents |
| API, docs, documentation | docs-researcher | Use agent |
| code style, naming, clippy | coding-guidelines | Read skill |
| unsafe code, FFI | unsafe-checker | Read skill |
| code review | os-checker | See integrations/os-checker.md |
---
Priority Order
1. Identify cognitive layer (L1/L2/L3) 2. Load entry skill (m0x/m1x/domain) 3. Trace through layers (UP or DOWN) 4. Cross-reference skills as indicated in "Trace" sections 5. Answer with reasoning chain
Keyword Conflict Resolution
| Keyword | Resolution |
|---|---|
unsafe | unsafe-checker (more specific than m11) |
error | m06 for general, m13 for domain-specific |
RAII | m12 for design, m01 for implementation |
crate | rust-learner for version, m11 for integration |
tokio | tokio- for API, m07* for concepts |
Priority Hierarchy:
1. Error codes (E0xxx) → Direct lookup, highest priority
2. Negotiation triggers (compare, vs, best practice) → Enable negotiation
3. Domain keywords + error → Load BOTH domain + error skills
4. Specific crate keywords → Route to crate-specific skill if exists
5. General concept keywords → Route to meta-question skill---
Sub-Files Reference
| File | Content |
|---|---|
patterns/negotiation.md | Negotiation protocol details |
examples/workflow.md | Workflow examples |
integrations/os-checker.md | OS-Checker integration |
Workflow Examples
rust-router 的工作流程示例
Example 1: Error Code with Domain Context
User: "Why am I getting E0382 in my trading system?"
Analysis:
1. Entry: Layer 1 (E0382 = ownership/move error)
2. Load: m01-ownership skill
3. Context: "trading system" → domain-fintech
Trace UP ↑:
- E0382 in trading context
- Check domain-fintech: "immutable audit records"
- Finding: Trading data should be shared, not moved
Response:
"E0382 indicates a value was moved when still needed.
In a trading system (domain-fintech), transaction records
should be immutable and shareable for audit purposes.
Instead of cloning, consider:
- Arc<TradeRecord> for shared immutable access
- This aligns with financial audit requirements
See: m01-ownership (Trace Up section),
domain-fintech (Audit Requirements)"Example 2: Design Question
User: "How should I handle user authentication?"
1. Entry: Layer 2 (design question)
2. Trace UP to Layer 3: domain-web constraints
3. Load: domain-web skill (security, stateless HTTP)
4. Trace DOWN: m06-error-handling, m07-concurrency
5. Answer: JWT with proper error types, async handlersExample 3: Comparative Query
User: "Compare tokio and async-std"
1. Detect: "compare" → Enable negotiation
2. Load both runtime knowledge sources
3. Assess confidence for each
4. Synthesize with disclosed gaps
5. Answer: Structured comparison tableExample 4: Multi-Layer Trace
User: "My web API reports Rc cannot be sent between threads"
1. Entry: Layer 1 (Send/Sync error)
2. Load: m07-concurrency
3. Detect: "web API" → domain-web
4. Dual-skill loading:
- m07: Explain Send/Sync bounds
- domain-web: Web state management patterns
5. Answer: Use Arc instead of Rc, or move to thread-localExample 5: Intent Analysis Request
User: "Analyze this question: How do I share state in actix-web?"
Analysis Steps:
1. Extract Keywords: share, state, actix-web
2. Identify Entry Layer: Layer 1 (sharing = concurrency) + Layer 3 (actix-web = web)
3. Map to Skills: m07-concurrency, domain-web
4. Report:
- Layer 1: Concurrency (state sharing mechanisms)
- Layer 3: Web domain (HTTP handler patterns)
- Suggested trace: L1 → L3
5. Invoke: m07-concurrency first, then domain-webOS-Checker Integration
代码审查和安全审计工具集成
Available Commands
| Use Case | Command | Tools |
|---|---|---|
| Daily check | /rust-review | clippy |
| Security audit | /audit security | cargo audit, geiger |
| Unsafe audit | /audit safety | miri, rudra |
| Concurrency audit | /audit concurrency | lockbud |
| Full audit | /audit full | all os-checker tools |
When to Suggest OS-Checker
| User Intent | Suggest |
|---|---|
| Code review request | /rust-review |
| Security concerns | /audit security |
| Unsafe code review | /audit safety |
| Deadlock/race concerns | /audit concurrency |
| Pre-release check | /audit full |
Tool Descriptions
clippy
Standard Rust linter for code style and common mistakes.
cargo audit
Security vulnerability scanner for dependencies.
geiger
Counts unsafe code usage in dependencies.
miri
Interprets MIR to detect undefined behavior.
rudra
Memory safety bug detector.
lockbud
Deadlock and concurrency bug detector.
Integration Flow
User: "Review my unsafe code"
│
▼
Router detects: unsafe + review
│
├── Load: unsafe-checker skill (for manual review)
│
└── Suggest: `/audit safety` (for automated check)Negotiation Protocol
比较查询和跨领域问题的处理协议
When to Enable Negotiation
For complex queries requiring structured agent responses, enable negotiation mode.
| Query Pattern | Enable Negotiation | Reason |
|---|---|---|
| Single error code lookup | No | Direct answer |
| Single crate version | No | Direct lookup |
| "Compare X and Y" | Yes | Multi-faceted |
| Domain + error | Yes | Cross-layer context |
| "Best practices for..." | Yes | Requires synthesis |
| Ambiguous scope | Yes | Needs clarification |
| Multi-crate question | Yes | Multiple sources |
Negotiation Decision Flow
Query Received
│
▼
┌─────────────────────────────┐
│ Is query single-lookup? │
│ (version, error code, def) │
└─────────────────────────────┘
│
├── Yes → Direct dispatch (no negotiation)
│
▼ No
┌─────────────────────────────┐
│ Does query require: │
│ - Comparison? │
│ - Cross-domain context? │
│ - Synthesis/aggregation? │
│ - Multiple sources? │
└─────────────────────────────┘
│
├── Yes → Dispatch with negotiation: true
│
▼ No
┌─────────────────────────────┐
│ Is scope ambiguous? │
└─────────────────────────────┘
│
├── Yes → Dispatch with negotiation: true
│
▼ No
└── Direct dispatch (no negotiation)Negotiation Dispatch
When dispatching with negotiation:
1. Set `negotiation: true`
2. Include original query context
3. Expect structured response:
- Findings
- Confidence (HIGH/MEDIUM/LOW/UNCERTAIN)
- Gaps identified
- Context questions (if any)
4. Evaluate response against original intentOrchestrator Evaluation
After receiving negotiation response:
| Confidence | Intent Coverage | Action |
|---|---|---|
| HIGH | Complete | Synthesize answer |
| HIGH | Partial | May need supplementary query |
| MEDIUM | Complete | Accept with disclosed gaps |
| MEDIUM | Partial | Refine with context |
| LOW | Any | Refine or try alternative |
| UNCERTAIN | Any | Try alternative or escalate |
Refinement Loop
If response insufficient:
Round 1: Initial query
│
▼ (LOW confidence or gaps block intent)
Round 2: Refined query with:
- Answers to agent's context questions
- Narrowed scope
│
▼ (still insufficient)
Round 3: Final attempt with:
- Alternative agent/source
- Maximum context provided
│
▼ (still insufficient)
Synthesize best-effort answer with disclosed gapsIntegration with 3-Strike Rule
Negotiation follows the 3-Strike escalation:
Strike 1: Initial query returns LOW confidence
→ Refine with more context
Strike 2: Refined query still LOW
→ Try alternative agent/source
Strike 3: Still insufficient
→ Synthesize best-effort answer
→ Report gaps to user explicitlySee _meta/error-protocol.md for full escalation rules.
Negotiation Routing Examples
Example 1: No Negotiation Needed
Query: "What is tokio's latest version?"
Analysis: Single lookup
Action: Direct dispatch to crate-researcherExample 2: Negotiation Required
Query: "Compare tokio and async-std for a web server"
Analysis: Comparative + domain context
Action: Dispatch with negotiation: true
Expected: Structured responses from both runtime lookups
Evaluation: Check if web-server specific data foundExample 3: Cross-Domain Negotiation
Query: "E0382 in my trading system"
Analysis: Error code + domain context
Action:
- Dispatch m01-ownership (standard - error is defined)
- Dispatch domain-fintech (negotiation: true - domain context)
Synthesis: Combine error explanation with domain-appropriate fixRelated Documents
_meta/negotiation-protocol.md- Full protocol specification_meta/negotiation-templates.md- Response templates_meta/error-protocol.md- 3-Strike escalationagents/_negotiation/response-format.md- Agent response format
Related skills
How it compares
Use rust-router as the first Rust skill for errors and design; use generic debugging skills only when Rust context is absent.
FAQ
Which Rust errors does rust-router handle?
rust-router handles borrow, lifetime, ownership, type, and trait errors including E0382, E0597, E0277, E0308, E0499, E0502, and E0596, plus value moved and cannot borrow diagnostics.
Should rust-router be used for design comparisons?
rust-router is marked highest priority for comparisons such as tokio versus async-std, best practices, and semantic intent analysis before recommending Rust architecture or code changes.