effect-kit
[Evidence hook - measured via ax: a repo on the @effect/language-service plugin + raw tsc produced a recurring ~70-turn "is this advisory an error?" agent loop over 60 days; a sibling repo on tsgo + a central-filter gate (quera) had 0 such turns. Patterns adapted from Makisuo/skills (MIT); observability pairs with Maple (also Makisuo).]
Pillars
- Setup → references/setup.md (tsgo + gate + severity table; one opinionated full setup)
- Write → references/patterns.md (Makisuo's patterns + namespace imports) · large-codebase architecture → references/guide-effect-at-scale.md (schema packages, LayerNode, shared memoMap, HttpApi, SQL, transport-agnostic errors)
- Verify → references/verify.md (diagnostics CLI + recipe pack; trust the exit code) · maintainer-pattern catalog → references/guide-maintainer-patterns.md (oxlint → grep → review)
- Observe → references/observe.md (v4 Otlp.layerJson → Maple; Agent-Observe via devkit)
Install - run this checklist top to bottom (one todo per item)
-
- Detect package manager + Effect version (bun/pnpm/npm; effect@4 RC -
effect@rcon npm)
- Detect package manager + Effect version (bun/pnpm/npm; effect@4 RC -
-
- tsgo toolchain:
npx @effect/tsgo setup(resolves current versions); merge assets/package.deps.json; pin in-repo
- tsgo toolchain:
-
- tsconfig: merge assets/tsconfig.snippet.json (plugin + ignoreEffectWarningsInTscExitCode + diagnosticSeverity table)
-
- Gate: copy assets/effect-lint-staged.sh (chmod +x) + assets/lefthook.yml;
lefthook install
- Gate: copy assets/effect-lint-staged.sh (chmod +x) + assets/lefthook.yml;
-
- Verify wiring:
effect-language-service diagnostics --project ./tsconfig.json --severity error(expect exit 0)
- Verify wiring:
-
- CLAUDE.md: write the managed
<!-- effect-kit:start -->block (verify rules + pillar pointers)
- CLAUDE.md: write the managed
-
- (optional) Observe: "wire local tracing with Maple?" → brew install Makisuo/tap/maple · maple start · copy assets/otel-maple.layer.ts · add effect (v4) · set MAPLE_TRACING=true
-
- Smoke check:
tsc --noEmit; echo $?is 0 on advisory-only; stage a file and confirm the gate fires on an error
- Smoke check: