Effect v4
SkillDev toolsWrite, review, or upgrade Effect v4 code in the Composio CLI, cli-keyring, and json-schema-to-effect-schema packages, all pinned exactly to effect@4.0.0-rc.112, Context.Service and explicit layers, Schema.TaggedError and typed recovery, the effect/unstable/cli command surface, and the vendored effect source oracle. Use when writing or reviewing Effect v4 code, answering a v4 API question, working in effect/unstable/cli, defining a Context.Service service, modeling an error with Schema.TaggedError, bumping the Effect prerelease pins, or verifying an unfamiliar API against ts/vendor/effect. Do not use for CLI command UX/wiring design (use cli-command) or CLI E2E tests (use cli-e2e).
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Effect v4 skill
What this skill tells your AI
The instructions your AI receives, as published by composiohq/composio in .agents/skills/effect-v4/SKILL.md and read by ahel’s review.
The CLI, @composio/cli-keyring, and @composio/json-schema-to-effect-schema run on
Effect v4 (release candidate). Every claim below is grounded in the migrated source, not memory of v3.
Exact version matrix
effect, @effect/platform-bun, and @effect/vitest
are pinned to the same exact 4.0.0-rc.112 — never ^, @next, or a mismatched
prerelease across packages. @effect/cli and @effect/platform no longer exist as
dependencies; their surfaces are consolidated into effect and effect/unstable/*.
See versions.json for the full matrix (also typescript, vitest).
Read next
- references/core-patterns.md — services, layers, typed
errors, Schema, choosing between
Effect.genandEffect.fn, and the v3→v4 rename table (labeled historical, for recognizing stale patterns). - references/cli-surface.md —
effect/unstable/cli:Command,Flag,Argument,GlobalFlag,CliConfig, the customCliOutput.Formatter, and the runner's double-print rule. - references/upgrade-workflow.md — procedure for bumping to a newer prerelease.
Code excerpts in those references are short quotes from real, currently-compiling repo files (path cited at each excerpt) — not standalone examples. The compile-checked source of truth is always the cited file itself; when it and a reference disagree, trust the file and fix the reference.
Non-negotiables
Effect.gen(function* () {...})for effect values — the dominant form, including named module consts — and(params) => Effect.gen(...)for parameterized helpers.Effect.fn(...)is the function form whose effects carry stack-frame annotations (its optional name string adds a per-call tracing span), worth it for service members and combinator callbacks that should be attributable in error reports. All forms re-run their body per execution. See "Effect.genvsEffect.fn" in core-patterns.- Define services with
Context.Serviceand an explicitstatic readonly Default/layerlayer built withLayer.succeed/Layer.effect/Layer.provide. V4 does not generate a layer for you. - Model expected failures with
Schema.TaggedError(or a plainData.TaggedErrorwhen no Schema fields are needed) and recover withEffect.catchTag/catchTags/Match, never manual_tagstring comparisons. - Wrap fallible Promises with
Effect.tryPromise({ try, catch });Effect.promiseturns rejection into a defect. Noasync/awaitortry/catchinside Effect workflows — ESLint bans them ints/packages/cli/src. - Treat every remembered v3 package name and API as wrong until verified against
ts/vendor/effect(read-only source oracle — never edit or import from it) and the installedeffect@4.0.0-rc.112typings. Source may be ahead of the published package; the compiler is the compatibility gate.
Verification
pnpm typecheck
pnpm --filter @composio/cli test
Run pnpm validate:agent-skills and pnpm validate:skill-routing after editing this
skill or its descriptions, and compile the TypeScript blocks in this skill and in
typescript-testing/references/effect-v4-cli.md against the pinned packages with:
node .agents/skills/effect-v4/scripts/check-examples.mjs
Blocks that quote repo files with unresolvable imports carry a no-check fence info string.
Signals
- GitHub stars
- 30k
- Forks
- 5k
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
effect-v4- Source
- github.com/composiohq/composio