Answers from the documentation; checking which model is on duty
Hi - I answer from the OpenSmartRoute documentation: routing, the API, plans and quotas, self-hosting. Ask away, or open a support ticket if you need a person.
Grounded in the docs - follow a source before acting on it.
coding-guidelines - Skill - OpenSmartRoute
Skillv1.0.0
coding-guidelines
Use when asking about Rust code style or best practices. Keywords: naming, formatting, comment, clippy, rustfmt, lint, code style, best practice, P.NAM, G.FMT, code review, naming convention…
Imported from actionbook/rust-skills (skills/coding-guidelines/SKILL.md) via skills.sh. Install upstream with npx skills add actionbook/rust-skills --skill coding-guidelines. Copyright stays with the author.
Rust Coding Guidelines (50 Core Rules)
Naming (Rust-Specific)
Rule
Guideline
No get_ prefix
fn name() not fn get_name()
Iterator convention
iter() / iter_mut() / into_iter()
Conversion naming
as_ (cheap &), to_ (expensive), into_ (ownership)
Static var prefix
G_CONFIG for static, no prefix for const
Data Types
Rule
Guideline
Use newtypes
struct Email(String) for domain semantics
Prefer slice patterns
if let [first, .., last] = slice
Pre-allocate
Vec::with_capacity(), String::with_capacity()
Avoid Vec abuse
Use arrays for fixed sizes
Strings
Rule
Guideline
Prefer bytes
s.bytes() over s.chars() when ASCII
Use Cow<str>
When might modify borrowed data
Use format!
Over string concatenation with +
Avoid nested iteration
contains() on string is O(n*m)
Error Handling
Rule
Guideline
Use ? propagation
Not try!() macro
expect() over unwrap()
When value guaranteed
Assertions for invariants
assert! at function entry
Memory
Rule
Guideline
Meaningful lifetimes
'src, 'ctx not just 'a
try_borrow() for RefCell
Avoid panic
Shadowing for transformation
let x = x.parse()?
Concurrency
Rule
Guideline
Identify lock ordering
Prevent deadlocks
Atomics for primitives
Not Mutex for bool/usize
Choose memory order carefully
Relaxed/Acquire/Release/SeqCst
Async
Rule
Guideline
Sync for CPU-bound
Async is for I/O
Don't hold locks across await
Use scoped guards
Macros
Rule
Guideline
Avoid unless necessary
Prefer functions/generics
Follow Rust syntax
Macro input should look like Rust
Deprecated → Better
Deprecated
Better
Since
lazy_static!
std::sync::OnceLock
1.70
once_cell::Lazy
std::sync::LazyLock
1.80
std::sync::mpsc
crossbeam::channel
-
std::sync::Mutex
parking_lot::Mutex
-
failure/error-chain
thiserror/anyhow
-
try!()
? operator
2018
Quick Reference
Naming: snake_case (fn/var), CamelCase (type), SCREAMING_CASE (const)
Format: rustfmt (just use it)
Docs: /// for public items, //! for module docs
Lint: #![warn(clippy::all)]
Claude knows Rust conventions well. These are the non-obvious Rust-specific rules.
Installed into a catalogue, chosen by a router
Install coding-guidelines and it becomes one more candidate the router can pick - when it fits.
A listing is a routing target with a manifest: what it does, which domains it covers, what it costs and who publishes it. Once installed it sits beside your own models and tools, is scored like any other candidate for each request, and shows up in the trace when it wins. Ratings come from workspaces that installed it, one per account.
When a provider is down or over quota the request moves on; the trace says it did.
Use it
Copy one of these into your project. Installing also returns the manifest and these snippets.
# after Install: the listing is in your workspace's routing pool - a plan picks it for its slotcurl-s-X POST https://osr-api.kindrock-caaab1a2.centralindia.azurecontainerapps.io/api/v1/route -H 'Authorization: Bearer $OSR_API_KEY' -H 'Content-Type: application/json' -d '{"text": "...", "plan": true}'
Manifest
An Open Capability Manifest: the router reads it to know what this does, what it costs and when to pick it.