
Agents on the BEAM: Mike Hostetler on Jido
Shownotes
In the first version of Jido, every agent was a DynamicSupervisor. Each GenServer also kept a private queue in its own state so an action could push follow-up work to the front of the line instead of waiting in the mailbox. Mike Hostetler calls both decisions things he still cringes at, and he rebuilt the framework for 2.0 to get rid of them.
Jido began as bot infrastructure before there was a model to call, and the LLM is still kept out of the core on purpose. In Jido an agent is a validated struct. The process that runs it is a separate concern, and side effects are returned as directives for the runtime to carry out. Mike's estimate is that an agent is about 20% LLM and 80% patterns the BEAM community has relied on for decades.
Allen and Francesco take one support-desk scenario through the whole episode: a customer asks where their order is, and the shipping provider times out halfway through. The scenario covers retries, crashes eight tool calls into a reasoning loop, models that are confidently wrong, and 10,000 customer agents of which only 200 are in memory at any moment. Mike also covers ReqLLM, the weekend side project that now handles 11 providers and 665 models, and how Jido and Ash ended up working together instead of competing.
- How Jido defines an agent: data enters a stateful process, changes it, and emits a result
- Signals (CloudEvents envelopes), actions, instructions and directives
- The scars from 1.0: a mailbox-bypassing queue in GenServer state and agents as DynamicSupervisors
- Defining the agent turn, and why one GenServer was doing too much
- The OTP 28 priority messages experiment and where reentrancy is heading in Jido 3
- Why the core supports behaviour trees and FSMs alongside ReAct and tree of thoughts
- Hibernate and thaw: idle agents written to a persistent store after 30–60 seconds
- What happens when an LLM call times out (async task, three retries by default) and when the orchestrating process crashes
- Hallucinations: evals, DSPy/GEPA prompt-level guardrails, and tool-level guardrails written in code
- ReqLLM and LLMDB: normalising inference across OpenAI, Anthropic, Gemini, Bedrock, Azure and OpenRouter
- Ash Jido: Ash resource actions exposed as agent tools with authorization policies intact
- Hosting agents in Python and TypeScript: one agent per Docker container, or per 256 MB sandbox
- Maintaining dozens of packages with agents, GitHub Actions and optional dependencies
Recorded 9 November 2026.
Resources mentioned:
Jido and documentation https://jido.run/
Jido AI https://jido-ai.hexdocs.pm/
ReqLLM https://reqllm.hexdocs.pm/
LLMDB https://llmcatalog.dev/
Zoi https://github.com/ash-project/zoi
Jido Discord https://jido.run/discord
Moatless https://moatless.store/