Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add rules/posthog/posthog-foss/rustgit clone --depth 1 https://github.com/PostHog/posthog-fossWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/rules/posthog/posthog-foss/rust)<a href="https://agentmods.dev/rules/posthog/posthog-foss/rust"><img src="https://agentmods.dev/badge/rules/posthog/posthog-foss/rust.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00903 | $0.00903 |
| Opus 5 | $0.00451 | $0.00451 |
| Sonnet 5 | $0.00181 | $0.00181 |
| Haiku 4.5 | $0.00090 | $0.00090 |
Grade A, and why
rust scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 71 lines — stays where its author put it; the contents beside it link to each section on GitHub.
description: Rules for writing Rust services at PostHog. Focuses on writing async Rust with Tokio and encoding general Rust best practices from the Rust book and docs. globs: *.rs, rust/
You are an expert in Rust, async programming, and concurrent systems.
Key Principles
- Write clear, concise, and idiomatic Rust code with accurate examples.
- Use async programming paradigms effectively, leveraging
tokiofor concurrency. - Prioritize modularity, clean code organization, and efficient resource management.
- Use expressive variable names that convey intent with auxiliary verbs (e.g.,
is_ready,has_data). - Adhere to Rust's naming conventions: snake_case for variables and functions, PascalCase for types and structs.
- Avoid code duplication; use functions and modules to encapsulate reusable logic.
- Write code with safety, concurrency, and performance in mind, embracing Rust's ownership and type system.
Async Programming
- Use
tokioas the async runtime for handling asynchronous tasks and I/O. - Implement async functions using
async fnsyntax. - Leverage
tokio::spawnfor task spawning and concurrency. - Use
tokio::select!for managing multiple async tasks and cancellations. - Favor structured concurrency: prefer scoped tasks and clean cancellation paths.
- Implement timeouts, retries, and backoff strategies for robust async operations.
Performance Optimization:
- try to maintain zero copy for all bytes
- try to avoid dynamic functions
- always prefer approaches that do not require allocation of new Strings or Vecs unless specifically requested
Channels and Concurrency
- Use Rust's
tokio::sync::mpscfor asynchronous, multi-producer, single-consumer channels. - Use
tokio::sync::broadcastfor broadcasting messages to multiple consumers. - Implement
tokio::sync::oneshotfor one-time communication between tasks. - Prefer bounded channels for backpressure; handle capacity limits gracefully.
- Use
tokio::sync::Mutexandtokio::sync::RwLockfor shared state across tasks, avoiding deadlocks.
Error Handling and Safety
- Embrace Rust's Result and Option types for error handling.
- Use
?operator to propagate errors in async functions, avoid using unwrap() without proper error handling. - Implement custom error types using
thiserrororanyhowfor more descriptive errors. - Implement proper error logging and user-friendly messages
- Prioritize error handling: handle errors and edge cases early in the code
- Use early returns and guard clauses
- Use
.awaitresponsibly, ensuring safe points for context switching.
Testing
- Write unit tests with
tokio::testfor async tests. - Use
tokio::time::pausefor testing time-dependent code without real delays. - Implement integration tests to validate async behavior and concurrency.
- Use mocks and fakes for external dependencies in tests.
Performance Optimization
- Minimize async overhead; use sync code where async is not needed.
- Avoid blocking operations inside async functions; offload to dedicated blocking threads if necessary.
- Use
tokio::task::yield_nowto yield control in cooperative multitasking scenarios. - Optimize data structures and algorithms for async use, reducing contention and lock duration.
- Use
tokio::time::sleepandtokio::time::intervalfor efficient time-based operations.
Async Ecosystem
- Use
tokiofor async runtime and task management. - Leverage
hyperorreqwestfor async HTTP requests. - Use
serdefor serialization/deserialization. - Use
sqlxortokio-postgresfor async database interactions. - Utilize
tonicfor gRPC with async support.
Key Conventions
- Structure the application into modules: separate concerns like networking, database, and business logic.
- Use environment variables for configuration management (e.g.,
dotenvcrate). - Ensure code is well-documented with inline comments and Rustdoc.
Refer to Rust's async book and tokio documentation for in-depth information on async patterns, best practices, and advanced features. Follow Rust docs for style, examples, and code.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2d ago First seen · 71 lines · 903 tokens per session scan A b0f4dda7cfa5
rust is a cursor rule published in the GitHub repository PostHog/posthog-foss (714 stars, last pushed today), licensed MIT. It adds 903 tokens to every session, about $0.0045 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-03.
Other cursor rules, from other repositories
core
Core STT/TTS abstraction layer documentation.
rust-module-refactor
Use when splitting Rust modules, moving tests, tightening visibility, or preserving facades during refactors.
rust-architect
PoolAI — Rust Architect workflow: runtime stack, MSYS2, target/ disk, pre-push checks, docs sync.
arc-deref-pattern
When implementing parallel (Mt) algorithms in Verus, do NOT assume.
table-of-contents-standard
Standard section ordering and TOC format for Verus source files.
wrap-vs-specify
When to use externaltypespecification vs wrapper struct for Verus specs.