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 skills/pauljphilp/effectpatterns/effect-patterns-streamsnpx skills add PaulJPhilp/EffectPatterns --skill effect-patterns-streamsgit clone --depth 1 https://github.com/PaulJPhilp/EffectPatternsWhat 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 | $0.00024 | $0.13962 |
| Opus 5 | $0.00012 | $0.06981 |
| Sonnet 5 | $0.00005 | $0.02792 |
| Haiku 4.5 | $0.00002 | $0.01396 |
Grade A, and why
effect-patterns-streams 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 — 2,053 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Effect-TS Patterns: Streams
This skill provides 8 curated Effect-TS patterns for streams. Use this skill when working on tasks related to:
- streams
- Best practices in Effect-TS applications
- Real-world patterns and solutions
🟢 Beginner Patterns
Stream Pattern 1: Transform Streams with Map and Filter
Rule: Use map and filter combinators to transform stream elements declaratively, creating pipelines that reshape data without materializing intermediate results.
Good Example:
This example demonstrates transforming a stream of raw data through multiple stages.
import { Stream, Effect, Chunk } from "effect";
interface RawLogEntry {
readonly timestamp: string;
readonly level: string;
readonly message: string;
}
interface ProcessedLog {
readonly date: Date;
readonly severity: "low" | "medium" | "high";
readonly normalizedMessage: string;
}
// Create a stream of raw log entries
const createLogStream = (): Stream.Stream<RawLogEntry> =>
Stream.fromIterable([
{ timestamp: "2025-12-17T09:00:00Z", level: "DEBUG", message: "App starting" },
{ timestamp: "2025-12-17T09:01:00Z", level: "INFO", message: "Connected to DB" },
{ timestamp: "2025-12-17T09:02:00Z", level: "ERROR", message: "Query timeout" },
{ timestamp: "2025-12-17T09:03:00Z", level: "DEBUG", message: "Retry initiated" },
{ timestamp: "2025-12-17T09:04:00Z", level: "WARN", message: "Connection degraded" },
{ timestamp: "2025-12-17T09:05:00Z", level: "INFO", message: "Recovered" },
]);
// Transform: Parse timestamp
const parseTimestamp = (entry: RawLogEntry): RawLogEntry => ({
...entry,
timestamp: entry.timestamp, // Already ISO, but could parse here
});
// Transform: Map log level to severity
const mapSeverity = (level: string): "low" | "medium" | "high" => {
if (level === "DEBUG" || level === "INFO") return "low";
if (level === "WARN") return "medium";
return "high";
};
// Transform: Normalize message
const normalizeMessage = (message: string): string =>
message.toLowerCase().trim();
// Filter: Keep only important logs
const isImportant = (entry: RawLogEntry): boolean => {
return entry.level !== "DEBUG";
};
// Main pipeline
const program = Effect.gen(function* () {
console.log(`\n[STREAM] Processing log stream with map/filter\n`);
// Create and transform stream
const transformedStream = createLogStream().pipe(
// Filter: Keep only non-debug logs
Stream.filter((entry) => {
const important = isImportant(entry);
console.log(
`[FILTER] ${entry.level} → ${important ? "✓ kept" : "✗ filtered out"}`
);
return important;
}),
// Map: Extract date
Stream.map((entry) => {
const date = new Date(entry.timestamp);
console.log(`[MAP-1] Parsed date: ${date.toISOString()}`);
return { ...entry, parsedDate: date };
}),
// Map: Normalize and map severity
Stream.map((entry) => {
const processed: ProcessedLog = {
date: entry.parsedDate,
severity: mapSeverity(entry.level),
normalizedMessage: normalizeMessage(entry.message),
};
console.log(
`[MAP-2] Transformed: ${entry.level} → ${processed.severity}`
);
return processed;
})
);
// Collect all transformed logs
const results = yield* transformedStream.pipe(
Stream.runCollect
);
console.log(`\n[RESULTS]`);
console.log(` Total logs: ${results.length}`);
Chunk.forEach(results, (log) => {
console.log(
` - [${log.severity.toUpperCase()}] ${log.date.toISOString()}: ${log.normalizedMessage}`
);
});
});
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.
- 2d ago First seen · 2,053 lines · 24 tokens per session scan A 95e71484571a
effect-patterns-streams is a skill published in the GitHub repository PaulJPhilp/EffectPatterns (795 stars, last pushed 2mo ago), licensed MIT. It adds 24 tokens to every session and 13,962 once invoked, about $0.0001 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-08-30.
Other skills, from other repositories
effect-best-practices
Enforces Effect-TS patterns for services, errors, layers, and atoms. Use when writing code with Effect.Service, Schema.TaggedError, Layer composition, or effect-atom React components.
effect-http-api
Build typed HTTP APIs with Effect's HttpApi — endpoints with schemas, handlers, security middleware, OpenAPI docs, derived clients, and handler unit tests. Use when building HTTP servers, REST APIs, or typed HTTP clients with Effect v4.
effect-rpc-cluster
Build typed RPC endpoints and cluster-distributed entities, singletons, cron jobs, and durable workflows with Effect's RPC and Cluster modules (Rpc/RpcGroup/RpcServer/RpcClient, Entity/Sharding/Singleton, Node/Bun bundles). Use when building RPC services or distributed/clustered Effect systems.
effect-error-handling
Implement typed error handling in Effect v4 using Schema.TaggedErrorClass, catchTag/catchTags, catchReason/catchReasons, Cause, ErrorReporter, and recovery patterns. Use this skill when working with Effect error channels, handling expected failures, or designing error recovery strategies.
effect-http-server
Build HTTP servers with effect/unstable/http — HttpRouter routes and middleware, HttpServerRequest schema decoding, HttpServerResponse constructors, multipart uploads, websocket upgrades, static files, NodeHttpServer/BunHttpServer layers, and in-memory web handlers. Use when serving raw HTTP routes, reading request…
effect-fiber
Fork, supervise, and interrupt Effect fibers with Effect.forkChild/forkScoped/forkIn/forkDetach, Fiber join/await/interrupt, uninterruptible regions, and the FiberHandle/FiberMap/FiberSet supervision collections. Use when running background work, cancelling or restarting tasks, implementing latest-wins or keyed…