Write, 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).
72
89%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
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.
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).
Effect.gen and Effect.fn, and the v3→v4 rename table
(labeled historical, for recognizing stale patterns).effect/unstable/cli:
Command, Flag, Argument, GlobalFlag, CliConfig, the custom
CliOutput.Formatter, and the runner's double-print rule.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.
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.gen vs Effect.fn" in core-patterns.Context.Service and an explicit static readonly Default/layer
layer built with Layer.succeed/Layer.effect/Layer.provide. V4 does not generate a
layer for you.Schema.TaggedError (or a plain Data.TaggedError
when no Schema fields are needed) and recover with Effect.catchTag/catchTags/Match,
never manual _tag string comparisons.Effect.tryPromise({ try, catch }); Effect.promise turns
rejection into a defect. No async/await or try/catch inside Effect workflows —
ESLint bans them in ts/packages/cli/src.ts/vendor/effect (read-only source oracle — never edit or import from it) and the
installed effect@4.0.0-rc.112 typings. Source may be ahead of the published package;
the compiler is the compatibility gate.pnpm typecheck
pnpm --filter @composio/cli testRun 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.mjsBlocks that quote repo files with unresolvable imports carry a no-check fence info string.
7a63e5a
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.