I'm Xand Reed. I'm building efferent — an open-source coding agent that lives in the terminal — on Effect.ts, in public.

Notes on Effect, agents, and evals. Artifacts first, opinions later. No React.

2026 Updating one cell should cost one cell: the architecture of an agent TUI How efferent's terminal UI works: OpenTUI over FFI, Solid signals, one Effect queue, and a pure presentation core. The model will find the fourth shape: property-based testing with fast-check Effect in practice Property-based testing for mapping code: fast-check via Effect, with generators derived from your schemas. The model never reads your handler Building a coding agent A tool schema is prompt surface — the descriptions and annotations are the only docs a model reads before it acts. Make the compiler tell your ids apart: a guide to branded types Effect in practice To the type checker, every id and path in your domain is the same primitive — and that is a bug it should have caught. Branded types in Effect give them distinct identities that erase on encode: no migration, just compile errors at the call sites that were always wrong. Sub-agent transcripts are capital, not exhaust How an agent remembers Most frameworks throw away a sub-agent's context. Keep every one as a node in a persistent, resumable tree instead. Evals are unit tests for behavior, and they belong in the repo Cases, tasks, and scorers as Effect programs — and why an agent's evals belong in the same repo as its prompts. Most approval prompts should never render Building a coding agent How a fast-tier LLM judge waves ordinary shell work through silently — and why the worst it can do is show a dialog. Your LLM provider is state, not architecture Building a coding agent Provider choice is request-scoped state — one LanguageModel that re-resolves model, credential, and client per call. Where exceptions are allowed to exist Effect in practice Failures are values everywhere inside; exceptions survive only at the adapter boundary, under Effect.try. An audit of my own codebase, with the diffs. AI applications are Effect-shaped Effect, from zero Flaky IO, string boundaries, provider churn, fan-out, cancellation that stops billing — the defining problems of LLM apps are the ones effect systems were built for. Effect, in full: services, layers, errors, and the concurrency toolkit Effect, from zero What Effect.ts actually buys you — dependencies, failures, and concurrency as ordinary values. A long tour of the semantics, every claim backed by real code. Effect from zero: the beginner's guide I wanted Effect, from zero Programs as values, errors you can see, and batteries included — Effect.ts from nothing, with standalone examples and a map of what to ignore at first.