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/mpsuesser/pi-effect-harness/effect-pattern-matchingnpx skills add mpsuesser/pi-effect-harness --skill effect-pattern-matchinggit clone --depth 1 https://github.com/mpsuesser/pi-effect-harnessWrote 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/mpsuesser/pi-effect-harness/effect-pattern-matching)<a href="https://agentmods.dev/skills/mpsuesser/pi-effect-harness/effect-pattern-matching"><img src="https://agentmods.dev/badge/skills/mpsuesser/pi-effect-harness/effect-pattern-matching.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.00060 | $0.05568 |
| Opus 5 | $0.00030 | $0.02784 |
| Sonnet 5 | $0.00012 | $0.01114 |
| Haiku 4.5 | $0.00006 | $0.00557 |
Grade A, and why
effect-pattern-matching 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 5d 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 — 882 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Effect Pattern Matching Skill
Use this skill when working with discriminated unions, ADTs, conditional logic, or any type that uses _tag discrimination. Pattern matching provides exhaustive, type-safe alternatives to imperative conditionals.
Effect Source Reference
The Effect v4 source is available at ~/.cache/effect-v4/.
Browse and read files there directly to look up APIs, types, and implementations.
Reference this for:
- Match source:
packages/effect/src/Match.ts - Data source:
packages/effect/src/Data.ts - Full Schema API:
packages/effect/SCHEMA.md - Effect source:
packages/effect/src/
Core Philosophy
Pattern matching over imperative conditionals:
- Exhaustive by default (compiler enforces all cases)
- Type-safe refinement in each branch
- Declarative, not imperative
- Pipeline-friendly composition
Pattern 1: Data.TaggedEnum for ADTs
Use Data.TaggedEnum instead of manual tagged unions.
The Problem: Manual Tagged Unions
// ❌ WRONG - Manual tagged union
type WalletState =
| { readonly _tag: 'Disconnected' }
| { readonly _tag: 'Connecting' }
| { readonly _tag: 'Connected'; readonly address: string }
| { readonly _tag: 'Error'; readonly message: string };
// Manual constructors - verbose and error-prone
const disconnected = (): WalletState => ({ _tag: 'Disconnected' });
const connecting = (): WalletState => ({ _tag: 'Connecting' });
const connected = (address: string): WalletState => ({
_tag: 'Connected',
address
});
const error = (message: string): WalletState => ({ _tag: 'Error', message });
// No built-in pattern matching
// No type guards
// No exhaustiveness checking
The Solution: Data.TaggedEnum
// ✅ CORRECT - TaggedEnum with constructors + $match + $is
import { Data } from 'effect';
type WalletState = Data.TaggedEnum<{
Disconnected: {};
Connecting: {};
Connected: { readonly address: string };
Error: { readonly message: string };
}>;
const WalletState = Data.taggedEnum<WalletState>();
/**
* WalletState now provides:
* - WalletState.Disconnected() - Constructor
* - WalletState.Connecting() - Constructor
* - WalletState.Connected({ address }) - Constructor
* - WalletState.Error({ message }) - Constructor
* - WalletState.$match(state, { ... }) - Pattern matching
* - WalletState.$is("Connected")(state) - Type guard (`_tag` check only)
*/
// Usage
const state = WalletState.Connected({ address: '0x123' });
// Pattern match
const display = WalletState.$match(state, {
Disconnected: () => 'Please connect wallet',
Connecting: () => 'Connecting...',
Connected: ({ address }) => `Connected: ${address}`,
Error: ({ message }) => `Error: ${message}`
});
// Type guard
if (WalletState.$is('Connected')(state)) {
console.log(state.address); // Type-safe access
}
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.
- 5d ago First seen · 882 lines · 60 tokens per session scan A 55e6de70ba0f
effect-pattern-matching is a skill published in the GitHub repository mpsuesser/pi-effect-harness (24 stars, last pushed 2mo ago), licensed MIT. It adds 60 tokens to every session and 5,568 once invoked, about $0.0003 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-patterns-building-apis
Effect-TS patterns for Building Apis. Use when working with building apis in Effect-TS applications.
effect-patterns-concurrency
Effect-TS patterns for Concurrency. Use when working with concurrency in Effect-TS applications.
effect-patterns-building-data-pipelines
Effect-TS patterns for Building Data Pipelines. Use when working with building data pipelines in Effect-TS applications.
effect-patterns-streams
Effect-TS patterns for Streams. Use when working with streams in Effect-TS applications.
effect-patterns-error-management
Effect-TS patterns for Error Management. Use when working with error management in Effect-TS applications.
effect-patterns-making-http-requests
Effect-TS patterns for Making Http Requests. Use when working with making http requests in Effect-TS applications.