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 skills add PaulJPhilp/EffectPatterns --skill effect-patterns-streamsgit 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/skills/pauljphilp/effectpatterns/effect-patterns-streams)<a href="https://agentmods.dev/skills/pauljphilp/effectpatterns/effect-patterns-streams"><img src="https://agentmods.dev/badge/skills/pauljphilp/effectpatterns/effect-patterns-streams/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/skills/pauljphilp/effectpatterns/effect-patterns-streams"><img src="https://agentmods.dev/badge/skills/pauljphilp/effectpatterns/effect-patterns-streams.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to high
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- high Memory Poisoning · line 872 Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.Fix: Protect agent memory and state from modification by untrusted content. Use read-only memory for critical instructions and validate all state changes.
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.00024 | $0.13962 |
| Opus 5.5 | $0.00010 | $0.05585 |
| Sonnet 5.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 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 — 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.
- 1mo 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 (807 stars, last pushed 4mo ago), licensed MIT. It adds 24 tokens to every session and 13,962 once invoked, about $0.0001 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-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-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-client
Make outgoing HTTP requests with Effect's HttpClient — HttpClientRequest builders, schema-decoded HttpClientResponse bodies, the HttpClientError taxonomy, retryTransient/rate limiting/cookies/redirects, streaming uploads and downloads, and FetchHttpClient/NodeHttpClient transport layers. Use when calling external…
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-ai-tool
Define and implement AI tools using Effect AI's Tool and Toolkit APIs. Use when building LLM integrations with type-safe tool definitions, parameter validation, and handler implementations. Covers user-defined tools, provider-defined tools, and toolkit composition.