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.
git clone --depth 1 https://github.com/PaulJPhilp/EffectPatternsWrote 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/pauljphilp/effectpatterns/concurrency-pattern-6-race-and-timeout-competing-effects)<a href="https://agentmods.dev/rules/pauljphilp/effectpatterns/concurrency-pattern-6-race-and-timeout-competing-effects"><img src="https://agentmods.dev/badge/rules/pauljphilp/effectpatterns/concurrency-pattern-6-race-and-timeout-competing-effects/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/rules/pauljphilp/effectpatterns/concurrency-pattern-6-race-and-timeout-competing-effects"><img src="https://agentmods.dev/badge/rules/pauljphilp/effectpatterns/concurrency-pattern-6-race-and-timeout-competing-effects.svg" alt="Reviewed on agentmods" width="80" 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.00953 | $0.00953 |
| Opus 5.5 | $0.00381 | $0.00381 |
| Sonnet 5.5 | $0.00191 | $0.00191 |
| Haiku 4.5 | $0.00095 | $0.00095 |
Grade A, and why
concurrency-pattern-6-race-and-timeout-competing-effects 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 1mo 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 — 139 lines — stays where its author put it; the contents beside it link to each section on GitHub.
description: Use race to compete effects and timeout to enforce deadlines, enabling cancellation when operations exceed time limits or complete. globs: "**/*.ts" alwaysApply: true
Concurrency Pattern 6: Race and Timeout Competing Effects
Rule: Use race to compete effects and timeout to enforce deadlines, enabling cancellation when operations exceed time limits or complete.
Example
This example demonstrates racing competing effects and handling timeouts.
import { Effect, Fiber } from "effect";
interface DataSource {
readonly name: string;
readonly latencyMs: number;
}
// Simulate fetching from different sources
const fetchFromSource = (source: DataSource): Effect.Effect<string> =>
Effect.gen(function* () {
yield* Effect.log(
`[${source.name}] Starting fetch (latency: ${source.latencyMs}ms)`
);
yield* Effect.sleep(`${source.latencyMs} millis`);
const result = `Data from ${source.name}`;
yield* Effect.log(`[${source.name}] ✓ Completed`);
return result;
});
// Main: demonstrate race patterns
const program = Effect.gen(function* () {
console.log(`\n[RACE] Competing effects with race and timeout\n`);
// Example 1: Simple race (fastest wins)
console.log(`[1] Racing 3 data sources:\n`);
const sources: DataSource[] = [
{ name: "Primary DC", latencyMs: 200 },
{ name: "Backup DC", latencyMs: 150 },
{ name: "Cache", latencyMs: 50 },
];
const raceResult = yield* Effect.race(
fetchFromSource(sources[0]),
Effect.race(fetchFromSource(sources[1]), fetchFromSource(sources[2]))
);
console.log(`\nWinner: ${raceResult}\n`);
// Example 2: Timeout - succeed within deadline
console.log(`[2] Timeout with fast operation:\n`);
const fastOp = fetchFromSource({ name: "Fast Op", latencyMs: 100 }).pipe(
Effect.timeout("500 millis")
);
const fastResult = yield* fastOp;
console.log(`✓ Completed within timeout: ${fastResult}\n`);
// Example 3: Timeout - exceed deadline
console.log(`[3] Timeout with slow operation:\n`);
const slowOp = fetchFromSource({ name: "Slow Op", latencyMs: 2000 }).pipe(
Effect.timeout("500 millis"),
Effect.either
);
const timeoutResult = yield* slowOp;
if (timeoutResult._tag === "Left") {
console.log(`✗ Operation timed out after 500ms\n`);
}
// Example 4: Race with timeout fallback
console.log(`[4] Race with fallback on timeout:\n`);
const primary = fetchFromSource({ name: "Primary", latencyMs: 300 });
const fallback = fetchFromSource({ name: "Fallback", latencyMs: 100 });
const raceWithFallback = primary.pipe(
Effect.timeout("150 millis"),
Effect.catchAll(() => {
yield* Effect.log(`[PRIMARY] Timed out, using fallback`);
return fallback;
})
);
const fallbackResult = yield* raceWithFallback;
console.log(`Result: ${fallbackResult}\n`);
// Example 5: Race all (collect all winners)
console.log(`[5] Race all - multiple sources:\n`);
const raceAllResult = yield* Effect.raceAll(
sources.map((s) =>
fetchFromSource(s).pipe(
Effect.map((data) => ({ source: s.name, data }))
)
)
);
console.log(`First to complete: ${raceAllResult.source}\n`);
});
Effect.runPromise(program);
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.
- 1mo ago First seen · 139 lines · 953 tokens per session scan A cb0c200bc266
concurrency-pattern-6-race-and-timeout-competing-effects is a cursor rule published in the GitHub repository PaulJPhilp/EffectPatterns (807 stars, last pushed 4mo ago), licensed MIT. It adds 953 tokens to every session, about $0.0038 per session on Opus 5.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
django-python
Rules for writing Python services at PostHog (Python servers powered by the Django framework).
python--typescript-guide-cursorrules-prompt-file
Cursor rules for Python development with TypeScript guide integration.
standard-nestjs-module-hierarchy
Establish a consistent NestJS module structure in the API application where each resource is encapsulated in its own module with proper hierarchical organization to enhance maintainability, scalabilit... .
nestjs-best-practices
../../.claude/rules/nestjs-best-practices.md.
nestjs
This guide provides opinionated, actionable best practices for building robust, scalable, and maintainable NestJS applications using TypeScript, emphasizing modern patterns and common pitfalls.
nestjs
ContextOS rules for nestjs.