QFM114: Elixir Reading List - May 2026
Source: Photo by Fotis Fotopoulos on Unsplash
Coding agents came home to the BEAM this month. matteing/opal is a small, sharp coding agent written in Elixir, and BeamAgent and MonkeyClaw argue that an agent runtime built on OTP supervision and message-passing gets for free much of what the Python frameworks bolt on later.
Cinderella-Man/credence is a semantic linter that reasons about intent rather than AST shape; ex_slop hunts the AI-generated slop now seeping into Elixir code; and CodeMySpec pitches spec-first generation at engineers who still want to own what ships.
The rest is the good stuff that makes Elixir feel like Elixir. GenericJam/mob runs the BEAM on-device as a mobile framework; dannote/folio renders print-quality PDF, SVG and PNG from Markdown through Typst; and mcass19/kino_ex_ratatui drops ExRatatui terminal UIs into a Livebook cell. For a satisfying build-from-the-RFC read, the Google Authenticator computation in Elixir reconstructs TOTP from first principles.
As always, the Quantum Fax Machine Propellor Hat Key will guide your browsing. Enjoy!

Links
A from-scratch walk through Google Authenticator's TOTP scheme in Elixir: decode the Base32 80-bit secret, turn Unix time into a 30-second counter, and take the HMAC-SHA1 of it. Pattern matching pulls the last 4 bits of the 20-byte hash as an offset, selects four bytes, drops the top bit, and the remaining 31-bit value becomes the six-digit code. Bitstrings and Erlang's built-in crypto make this a tidy fit for Elixir.
A semantic linter for Elixir aimed squarely at LLM-generated code: it runs three passes -- syntax (parser fixes), semantic (compiler-warning fixes) and pattern (~76 AST-level rules) -- and auto-fixes what it finds. The rules catch code that compiles and passes tests but isn't idiomatic, like rewriting Enum.sort |> Enum.reverse to Enum.sort(:desc) or swapping list-append patterns for cons. Every fixable rule applies its correction outright (no warn-only mode), and rules that would need non-local restructuring are archived rather than half-applied.
A set of Credo checks that flag the tells of AI-generated Elixir -- the 'slop' patterns that slip past the compiler but read as machine-written. It is on Hex (currently 0.4.2) and plugs straight into an existing Credo run.
BEAM-on-device: mob bundles Elixir/OTP straight into iOS and Android apps, so you write screens as GenServers that emit component trees while native Compose and SwiftUI handle rendering. Those trees serialise to JSON and cross to the native side through NIFs, and because it is the BEAM you get hot code reload and live state inspection over Erlang distribution from your dev machine. Early days -- the simulators work, but it isn't production-ready yet.
Print-quality PDF, SVG and PNG straight from Markdown, rendered through Typst's layout engine via a Rustler NIF -- and, unlike Typst's file-based workflow, folio builds documents from live Elixir data with no intermediate files. Document fragments are first-class Elixir values you assemble from database queries and API responses; folio skips Typst's own parser and evaluator for the sake of security and speed. It uses Elixir's concurrency to batch out thousands of documents at once, sharing fonts and layout across compilations on dirty schedulers.
Wraps AI coding agents in a full-lifecycle harness for Phoenix apps -- requirements, specs, tests, generation and browser-based verification tied together in one dependency graph instead of a drawer of disconnected tools. The pitch leans on the numbers behind AI-assisted code (60% more refactoring, 48% more duplication) and answers them with enforced architecture checks, a TDD workflow, and QA agents that drive a real browser to confirm a feature works before it ships.
A Kino widget that runs ExRatatui terminal UIs inside a Livebook cell, piping ANSI output through xterm.js and routing keyboard and resize events back to the app. It handles responsive sizing, inline images over Sixel and iTerm2, xterm.js theming, and telemetry on transport and render. Any existing ExRatatui.App runs unchanged, and you also get static frame rendering for docs, screen-reader-friendly stopped states, and no leftover browser state between cell runs.
beardedeagle's BeamAgent is a canonical BEAM SDK for agentic coding runtimes in Erlang and Elixir — one capability-oriented API over Claude Code, Codex, Gemini, OpenCode and Copilot, with shared sessions, threads, MCP, hooks, telemetry and backend-native escape hatches, so callers choose the backend at runtime. Built on top of it, MonkeyClaw is a secure-by-default, OTP-native personal AI assistant its author frames as 'a cautionary tale proving that technical adherence to the letter of a request is the most effective way to subvert its intended restrictions.' Two pieces of the same move: subscription-backed coding agents wired into Elixir/OTP rather than bolted on beside it.
A small coding agent in Elixir that edits files, runs shell commands, debugs, and fans work out across OTP processes. Running on the BEAM buys it live introspection, responsive concurrency without thread pools, and easy embedding inside an Elixir app over message passing or JSON-RPC. It currently uses GitHub Copilot as its model backend and ships as either a CLI or a library dependency.
Regards,
M@
[ED: If you'd like to sign up for this content as an email, click here to join the mailing list.]
Originally published on quantumfaxmachine.com and cross-posted on Medium.
hello@matthewsinclair.com | matthewsinclair.com | bsky.app/@matthewsinclair.com | masto.ai/@matthewsinclair | medium.com/@matthewsinclair | xitter/@matthewsinclair
Was this useful?