Install
$ agentstack add skill-yigitkonur-skills-by-yigitkonur-build-effect-ts-v3 ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ● Environment & secrets Used
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README — it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming — see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps — measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Build Effect-TS v3
Build production-grade TypeScript applications with Effect-TS v3. Effect is a lazy, typed, immutable description of work; services and layers carry dependencies; Schema validates boundaries; fibers run structured concurrency; Stream carries pull-based async data. Ecosystem: @effect/platform, @effect/sql (+ 11 driver packages), @effect/rpc, @effect/cli, @effect/vitest, @effect/opentelemetry, plus @effect-atom/atom-react for React.
For the structured index of every reference file, read [references/00-reference-map.md](references/00-reference-map.md).
When to use
- Building, refactoring, debugging, or testing Effect-TS v3 code (
effect@3.x) - Implementing typed tagged errors, services and layers, fibers, streams, caching, scheduling, observability with the
effectpackage - Working with
import { Effect, Layer, Schema, Stream } from "effect",Effect.gen(function*() { yield* … }),class X extends Effect.Service()(...),class E extends Schema.TaggedError("Tag")(...),Layer.provideMerge,Effect.fn("Service.method") - Building HTTP servers/clients with
@effect/platform, CLIs with@effect/cli, RPC with@effect/rpc, SQL with@effect/sql, tests with@effect/vitest, OTel with@effect/opentelemetry - Building React frontends with
@effect-atom/atom-react - Migrating Promise /
fp-ts/neverthrow/ RxJS code to Effect, or operating in gradual-adoption / portable-utility mode
Do NOT use this skill for:
- Effect-TS v4 / v4 beta — strictly v3 only; v4 syntax (
ServiceMap.Service,Schema.TaggedErrorClass, bareEffect.catch,Effect.forkChild,Effect.forkDetach,Schema.makeUnsafe,Resultmodule) is forbidden, see [references/anti-patterns/19-v4-syntax-do-not-use.md](references/anti-patterns/19-v4-syntax-do-not-use.md) fp-ts,neverthrow, or RxJS codebases that do not plan to adopt Effect — only the migration/ docs apply- Plain TypeScript without Effect, or other functional ecosystems (cats, ZIO)
Hard Rules (load-bearing — read before coding)
| Rule | Recovery | |---|---| | Do not import from @effect/schema — deprecated since 3.10. Use import { Schema } from "effect" | [references/schema/20-deprecated-effect-schema.md](references/schema/20-deprecated-effect-schema.md) | | Do not use v4 syntax: ServiceMap.Service, Schema.TaggedErrorClass, bare Effect.catch, Effect.forkChild, Effect.forkDetach, Schema.makeUnsafe, Result module | [references/anti-patterns/19-v4-syntax-do-not-use.md](references/anti-patterns/19-v4-syntax-do-not-use.md) | | Do not throw inside Effect.gen — it becomes a defect. Use return yield* new TaggedError({...}) or Effect.fail(...) | [references/anti-patterns/03-throw-in-gen.md](references/anti-patterns/03-throw-in-gen.md) | | Do not write yield fx (no *) inside Effect.gen — yields the Effect object, not its value. Always yield* fx | [references/anti-patterns/02-yield-without-star.md](references/anti-patterns/02-yield-without-star.md) | | Do not call Effect.runPromise / Effect.runSync inside library, service, or middleware code — only at program edges | [references/anti-patterns/04-runpromise-mid-code.md](references/anti-patterns/04-runpromise-mid-code.md), [references/anti-patterns/12-runsync-in-services.md](references/anti-patterns/12-runsync-in-services.md) | | Do not call Effect.all([...]) / Effect.forEach(...) / Stream.mapEffect without { concurrency: N } on lists > 5 items | [references/anti-patterns/05-unbounded-parallelism.md](references/anti-patterns/05-unbounded-parallelism.md), [references/concurrency/07-bounded-parallelism.md](references/concurrency/07-bounded-parallelism.md) | | Do not use try / finally for cleanup — bypasses interruption. Use Effect.acquireRelease or Effect.ensuring | [references/anti-patterns/15-manual-cleanup.md](references/anti-patterns/15-manual-cleanup.md) | | Do not put null / undefined in domain types — use Option | [references/anti-patterns/10-null-undefined-domain.md](references/anti-patterns/10-null-undefined-domain.md) | | Do not use console.log — use Effect.log / logInfo / logError | [references/anti-patterns/08-console-log.md](references/anti-patterns/08-console-log.md) | | Do not read process.env directly — use Config.string("X") / Config.redacted("X") | [references/anti-patterns/09-process-env.md](references/anti-patterns/09-process-env.md) | | Do not use Option.getOrThrow — use Option.match | [references/anti-patterns/11-option-getorthrow.md](references/anti-patterns/11-option-getorthrow.md) | | Do not use as never / as any / as unknown to silence Effect type errors — find the real cause | [references/anti-patterns/17-type-assertions.md](references/anti-patterns/17-type-assertions.md) | | Do not catch with catchAll when catchTag / catchTags would preserve narrowing | [references/anti-patterns/06-catchall-vs-catchtag.md](references/anti-patterns/06-catchall-vs-catchtag.md) | | Do not invent generic error names (NotFoundError, Error) — use specific tagged errors (UserNotFoundError) so catchTag dispatches precisely | [references/anti-patterns/07-generic-error-types.md](references/anti-patterns/07-generic-error-types.md) | | Do not call parameterized layer constructors inline at provide-sites — store layers in module-level constants for memoization | [references/anti-patterns/14-inline-layer-construction.md](references/anti-patterns/14-inline-layer-construction.md) |
For the full anti-pattern catalog, read [references/anti-patterns/01-overview.md](references/anti-patterns/01-overview.md).
Default Stance (load-bearing)
- Default to
Effect.ServiceoverContext.Tagfor business services. UseContext.Tagfor libraries with multiple implementations and for infrastructure with runtime injection (worker bindings, KV). - Default to
Schema.TaggedErroroverData.TaggedError. The Schema form is serializable across RPC / HTTP and integrates withHttpApiSchema.annotations({ status: 404 }). - Default to
import { Schema } from "effect". The@effect/schemapackage is deprecated since 3.10. The migration is import-only. - Default to
Effect.fn("Service.method")for named functions to gain automatic span tracing and stack traces. - Default to
Effect.genfor sequential / branching logic; default topipefor linear transformations. - Default to
{ concurrency: N }on everyEffect.all/Effect.forEach/Stream.mapEffectover a list of more than five items. - Default to
Layer.provideMergeoverLayer.providefor incremental composition (consumers can also use the merged service). UseLayer.mergeAllfor flat composition of independent layers. - Default to
NodeRuntime.runMainfor entry points (handles SIGINT / SIGTERM gracefully). UseManagedRuntimefor non-Effect framework integration (Hono, Express, Next.js route handlers). - Default to
acquireReleasefor resource lifecycles, nevertry / finally(which bypasses interruption). - Default to
return yield*when raising tagged errors insideEffect.genso TypeScript narrows the control flow.
Recovery Moves (symptom → fix)
| Symptom | Cause / fix | |---|---| | Missing 'X' in the expected Effect context / Effect not assignable to Effect | confused Layer.provide for Layer.provideMerge — see [references/services-layers/12-layer-composition-gotchas.md](references/services-layers/12-layer-composition-gotchas.md), [references/anti-patterns/13-layer-provide-confusion.md](references/anti-patterns/13-layer-provide-confusion.md) | | Effect.cachedWithTTL is not a function / unexpected double-yield | API returns Effect>; you yield twice — see [references/caching/04-effect-cached.md](references/caching/04-effect-cached.md) | | SubscriptionRef.unsafeMake is not a function | never call unsafeMake; use SubscriptionRef.make(initial) — see [references/state/04-subscription-ref.md](references/state/04-subscription-ref.md) | | AI hallucinated an API that doesn't exist | cross-check [references/anti-patterns/18-ai-hallucinations.md](references/anti-patterns/18-ai-hallucinations.md) and [references/anti-patterns/19-v4-syntax-do-not-use.md](references/anti-patterns/19-v4-syntax-do-not-use.md) | | Effect resolved with null unexpectedly | Effect.promise swallowed the error as a defect — switch to Effect.tryPromise({ try, catch }), see [references/anti-patterns/16-effect-promise-confusion.md](references/anti-patterns/16-effect-promise-confusion.md) | | Tests pass with mocks but fail in prod | mocks were vi.mock. Replace with Layer.succeed(Service, mockImpl) — see [references/testing/08-test-layers.md](references/testing/08-test-layers.md) | | Hanging Stream / never-ending program | infinite stream without take(N) / runHead — see [references/streams/18-infinite-streams.md](references/streams/18-infinite-streams.md) | | OOM on large Effect.all | unbounded parallelism — add { concurrency: 10 }, see [references/concurrency/07-bounded-parallelism.md](references/concurrency/07-bounded-parallelism.md) | | Finalizers not running on Ctrl-C | using try / finally instead of acquireRelease, or Effect.runPromise instead of NodeRuntime.runMain — see [references/resource-management/03-acquire-release.md](references/resource-management/03-acquire-release.md), [references/platform/12-node-runtime.md](references/platform/12-node-runtime.md) | | Stale logs / no traces in OTel | forgot NodeSdk.layer and OtlpTracer.layer — see [references/observability/11-opentelemetry-setup.md](references/observability/11-opentelemetry-setup.md) | | Header keys returned 404 | header keys must be lowercase in HttpApiEndpoint.setHeaders — see [references/http-server/05-headers.md](references/http-server/05-headers.md) | | Cannot find module '@effect/schema' | deprecated package; switch to import { Schema } from "effect" — see [references/schema/20-deprecated-effect-schema.md](references/schema/20-deprecated-effect-schema.md) |
Workflow / Routing
Load only the reference files needed for the current task.
1. Core: the Effect type, creation, running, combinators
Read [references/core/01-effect-type.md](references/core/01-effect-type.md), [references/core/02-creating-effects.md](references/core/02-creating-effects.md), [references/core/03-running-effects.md](references/core/03-running-effects.md), [references/core/04-pipelines.md](references/core/04-pipelines.md), [references/core/05-generators.md](references/core/05-generators.md), [references/core/06-gen-vs-pipe.md](references/core/06-gen-vs-pipe.md). For named service methods read [references/core/07-effect-fn.md](references/core/07-effect-fn.md). For combinators read [references/core/08-effect-all.md](references/core/08-effect-all.md), [references/core/09-effect-foreach.md](references/core/09-effect-foreach.md), [references/core/10-zip-and-tap.md](references/core/10-zip-and-tap.md), [references/core/11-short-circuiting.md](references/core/11-short-circuiting.md), [references/core/12-effect-match.md](references/core/12-effect-match.md).
2. Errors: typed tagged errors
Read [references/error-handling/01-overview.md](references/error-handling/01-overview.md), [references/error-handling/02-data-tagged-error.md](references/error-handling/02-data-tagged-error.md), [references/error-handling/03-schema-tagged-error.md](references/error-handling/03-schema-tagged-error.md), [references/error-handling/04-catch-tag.md](references/error-handling/04-catch-tag.md), [references/error-handling/05-catch-tags.md](references/error-handling/05-catch-tags.md), [references/error-handling/06-catch-all.md](references/error-handling/06-catch-all.md), [references/error-handling/07-cause-and-exit.md](references/error-handling/07-cause-and-exit.md), [references/error-handling/08-defects.md](references/error-handling/08-defects.md), [references/error-handling/09-recovery-patterns.md](references/error-handling/09-recovery-patterns.md), [references/error-handling/10-error-accumulation.md](references/error-handling/10-error-accumulation.md), [references/error-handling/11-yield-fail-pattern.md](references/error-handling/11-yield-fail-pattern.md), [references/error-handling/12-error-taxonomy.md](references/error-handling/12-error-taxonomy.md), [references/error-handling/13-error-remapping.md](references/error-handling/13-error-remapping.md), [references/error-handling/14-sandboxing.md](references/error-handling/14-sandboxing.md).
3. Services and Layers: dependencies
Read [references/services-layers/01-overview.md](references/services-layers/01-overview.md), [references/services-layers/02-context-tag.md](references/services-layers/02-context-tag.md), [references/services-layers/03-effect-service.md](references/services-layers/03-effect-service.md), [references/services-layers/04-context-vs-effect-service.md](references/services-layers/04-context-vs-effect-service.md), [references/services-layers/05-context-reference.md](references/services-layers/05-context-reference.md), [references/services-layers/06-layer-succeed.md](references/services-layers/06-layer-succeed.md), [references/services-layers/07-layer-effect.md](references/services-layers/07-layer-effect.md), [references/services-layers/08-layer-scoped.md](references/services-layers/08-layer-scoped.md), [references/services-layers/09-layer-merge.md](references/services-layers/09-layer-merge.md), [references/services-layers/10-layer-provide.md](references/services-layers/10-layer-provide.md), [references/services-layers/11-layer-providemerge.md](references/services-layers/11-layer-providemerge.md), and the critical [references/services-layers/12-layer-composition-gotchas.md](references/services-layers/12-layer-composition-gotchas.md). Runtime: [references/services-layers/13-layer-memoization.md](references/services-layers/13-layer-memoization.md), [references/services-layers/14-managed-runtime.md](references/services-layers/14-managed-runtime.md), [references/services-layers/15-effect-provide.md](references/services-layers/15-effect-provide.md), [references/services-layers/16-layer-tap-debug.md](references/services-layers/16-layer-tap-debug.md), [references/services-layers/17-fresh-vs-memoize.md](references/services-layers/17-fresh-vs-memoize.md).
4. Schema: validate boundaries (built into effect)
Read [references/schema/01-overview.md](references/schema/01-overview.md), [references/schema/02-schema-struct.md](references/schema/02-schema-struct.md), [references/schema/03-schema-class.md](references/schema/03-schema-class.md), [references/schema/04-schema-tagged-class.md](references/schema/04-schema-tagged-class.md), [references/schema/05-schema-tagged-error.md](references/schema/05-schema-tagged-error.md), [references/schema/06-branded-types.md](references/schema/06-branded-types.md), [references/schema/07-primitives.md](references/schema/07-primitives.md), [references/schema/08-collections.md](references/schema/08-collections.md), [references/schema/09-unions-and-literals.md](references/schema/09-unions-and-literals.md), [references/schema/10-decoding.md](references/schema/10-decoding.md), [references/schema/11-encoding.md](references/schema/11-encoding.md), [references/schema/12-transforms.md](references/schema/12-transforms.md), [references/schema/13-filters.md](references/schema/13-filters.md), [references/schema/14-annotations.md](references/schema/14-annotations.md), [references/schema/15-json-schema.md](references/schema/15-json-schema.md), [references/schema/16-arbitrary.md](references/schema/16-arbitrary.md), [references/schema/17-equivalence-and-order.md](references/schema/17-equivalence-and-order.md), [references/schema/18-recursive-schemas.md](references/schema/18-recursive-schemas.md), [references/schema/19-error-formatter.md](references/schema/19-error-formatter.md), and the migration banner [references/schema/20-deprecate
…
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: yigitkonur
- Source: yigitkonur/skills-by-yigitkonur
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.